Created
June 14, 2017 03:05
-
-
Save anonymous/68d36f1b6026893bc08b22b053e2f42e to your computer and use it in GitHub Desktop.
demo of http request using elm_magic
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2017-06-14T03:00:18.475877Z", | |
"end_time": "2017-06-14T03:00:18.482149Z" | |
}, | |
"trusted": true, | |
"collapsed": true | |
}, | |
"cell_type": "code", | |
"source": "%load_ext elm_magic", | |
"execution_count": 1, | |
"outputs": [] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2017-06-14T03:02:06.163018Z", | |
"end_time": "2017-06-14T03:02:06.181518Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "%config ElmMagic.elmdir=\"/tmp/myelm/\"\n%config ElmMagic", | |
"execution_count": 9, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"text": "ElmMagic options\n--------------\nElmMagic.debug=<Bool>\n Current: False\n Display debuging output\nElmMagic.elmdir=<Unicode>\n Current: '/tmp/myelm/'\n Directory where elm-make will run. (This is where elm-stuff and elm-\n package.json will be). Uses a temporary directory if not set by user\nElmMagic.keep_sources=<Bool>\n Current: False\n Do not immediately delete the html/js generated by compilation\nElmMagic.render=<Bool>\n Current: False\n Use elm-static-html to render the cell's contents before displaying\n", | |
"name": "stdout" | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"ExecuteTime": { | |
"start_time": "2017-06-14T03:02:39.340472Z", | |
"end_time": "2017-06-14T03:02:45.430903Z" | |
}, | |
"trusted": true | |
}, | |
"cell_type": "code", | |
"source": "%%elm -i elm-lang/http elm-lang/html\nimport Html exposing (..)\nimport Html.Attributes exposing (..)\nimport Html.Events exposing (..)\nimport Http\nimport Json.Decode as Decode\n\nmain =\n Html.program\n { init = init \"cats\"\n , view = view\n , update = update\n , subscriptions = subscriptions\n }\n\n-- MODEL\n\ntype alias Model =\n { topic : String\n , gifUrl : String\n }\n\ninit : String -> (Model, Cmd Msg)\ninit topic =\n ( Model topic \"waiting.gif\"\n , getRandomGif topic\n )\n\n-- UPDATE\n\ntype Msg\n = MorePlease\n | NewGif (Result Http.Error String)\n\nupdate : Msg -> Model -> (Model, Cmd Msg)\nupdate msg model =\n case msg of\n MorePlease ->\n (model, getRandomGif model.topic)\n\n NewGif (Ok newUrl) ->\n (Model model.topic newUrl, Cmd.none)\n\n NewGif (Err _) ->\n (model, Cmd.none)\n\n-- VIEW\n\nview : Model -> Html Msg\nview model =\n div []\n [ h2 [] [text model.topic]\n , button [ onClick MorePlease ] [ text \"More Please!\" ]\n , br [] []\n , img [src model.gifUrl] []\n ]\n\n-- SUBSCRIPTIONS\n\nsubscriptions : Model -> Sub Msg\nsubscriptions model =\n Sub.none\n\n-- HTTP\n\ngetRandomGif : String -> Cmd Msg\ngetRandomGif topic =\n let\n url =\n \"https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=\" ++ topic\n in\n Http.send NewGif (Http.get url decodeGifUrl)\n\ndecodeGifUrl : Decode.Decoder String\ndecodeGifUrl =\n Decode.at [\"data\", \"image_url\"] Decode.string", | |
"execution_count": 11, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "\n <div id=\"elm-div-5\"></div>\n <script>\n var defineElm = function(cb) {\n if (this.Elm) {\n this.oldElm = this.Elm;\n }\n var define = null;\n \n(function() {\n'use strict';\n\nfunction F2(fun)\n{\n function wrapper(a) { return function(b) { return fun(a,b); }; }\n wrapper.arity = 2;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F3(fun)\n{\n function wrapper(a) {\n return function(b) { return function(c) { return fun(a, b, c); }; };\n }\n wrapper.arity = 3;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F4(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return fun(a, b, c, d); }; }; };\n }\n wrapper.arity = 4;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F5(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return fun(a, b, c, d, e); }; }; }; };\n }\n wrapper.arity = 5;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F6(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return fun(a, b, c, d, e, f); }; }; }; }; };\n }\n wrapper.arity = 6;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F7(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return function(g) { return fun(a, b, c, d, e, f, g); }; }; }; }; }; };\n }\n wrapper.arity = 7;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F8(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return function(g) { return function(h) {\n return fun(a, b, c, d, e, f, g, h); }; }; }; }; }; }; };\n }\n wrapper.arity = 8;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction F9(fun)\n{\n function wrapper(a) { return function(b) { return function(c) {\n return function(d) { return function(e) { return function(f) {\n return function(g) { return function(h) { return function(i) {\n return fun(a, b, c, d, e, f, g, h, i); }; }; }; }; }; }; }; };\n }\n wrapper.arity = 9;\n wrapper.func = fun;\n return wrapper;\n}\n\nfunction A2(fun, a, b)\n{\n return fun.arity === 2\n ? fun.func(a, b)\n : fun(a)(b);\n}\nfunction A3(fun, a, b, c)\n{\n return fun.arity === 3\n ? fun.func(a, b, c)\n : fun(a)(b)(c);\n}\nfunction A4(fun, a, b, c, d)\n{\n return fun.arity === 4\n ? fun.func(a, b, c, d)\n : fun(a)(b)(c)(d);\n}\nfunction A5(fun, a, b, c, d, e)\n{\n return fun.arity === 5\n ? fun.func(a, b, c, d, e)\n : fun(a)(b)(c)(d)(e);\n}\nfunction A6(fun, a, b, c, d, e, f)\n{\n return fun.arity === 6\n ? fun.func(a, b, c, d, e, f)\n : fun(a)(b)(c)(d)(e)(f);\n}\nfunction A7(fun, a, b, c, d, e, f, g)\n{\n return fun.arity === 7\n ? fun.func(a, b, c, d, e, f, g)\n : fun(a)(b)(c)(d)(e)(f)(g);\n}\nfunction A8(fun, a, b, c, d, e, f, g, h)\n{\n return fun.arity === 8\n ? fun.func(a, b, c, d, e, f, g, h)\n : fun(a)(b)(c)(d)(e)(f)(g)(h);\n}\nfunction A9(fun, a, b, c, d, e, f, g, h, i)\n{\n return fun.arity === 9\n ? fun.func(a, b, c, d, e, f, g, h, i)\n : fun(a)(b)(c)(d)(e)(f)(g)(h)(i);\n}\n\n//import Native.List //\n\nvar _elm_lang$core$Native_Array = function() {\n\n// A RRB-Tree has two distinct data types.\n// Leaf -> \"height\" is always 0\n// \"table\" is an array of elements\n// Node -> \"height\" is always greater than 0\n// \"table\" is an array of child nodes\n// \"lengths\" is an array of accumulated lengths of the child nodes\n\n// M is the maximal table size. 32 seems fast. E is the allowed increase\n// of search steps when concatting to find an index. Lower values will\n// decrease balancing, but will increase search steps.\nvar M = 32;\nvar E = 2;\n\n// An empty array.\nvar empty = {\n\tctor: '_Array',\n\theight: 0,\n\ttable: []\n};\n\n\nfunction get(i, array)\n{\n\tif (i < 0 || i >= length(array))\n\t{\n\t\tthrow new Error(\n\t\t\t'Index ' + i + ' is out of range. Check the length of ' +\n\t\t\t'your array first or use getMaybe or getWithDefault.');\n\t}\n\treturn unsafeGet(i, array);\n}\n\n\nfunction unsafeGet(i, array)\n{\n\tfor (var x = array.height; x > 0; x--)\n\t{\n\t\tvar slot = i >> (x * 5);\n\t\twhile (array.lengths[slot] <= i)\n\t\t{\n\t\t\tslot++;\n\t\t}\n\t\tif (slot > 0)\n\t\t{\n\t\t\ti -= array.lengths[slot - 1];\n\t\t}\n\t\tarray = array.table[slot];\n\t}\n\treturn array.table[i];\n}\n\n\n// Sets the value at the index i. Only the nodes leading to i will get\n// copied and updated.\nfunction set(i, item, array)\n{\n\tif (i < 0 || length(array) <= i)\n\t{\n\t\treturn array;\n\t}\n\treturn unsafeSet(i, item, array);\n}\n\n\nfunction unsafeSet(i, item, array)\n{\n\tarray = nodeCopy(array);\n\n\tif (array.height === 0)\n\t{\n\t\tarray.table[i] = item;\n\t}\n\telse\n\t{\n\t\tvar slot = getSlot(i, array);\n\t\tif (slot > 0)\n\t\t{\n\t\t\ti -= array.lengths[slot - 1];\n\t\t}\n\t\tarray.table[slot] = unsafeSet(i, item, array.table[slot]);\n\t}\n\treturn array;\n}\n\n\nfunction initialize(len, f)\n{\n\tif (len <= 0)\n\t{\n\t\treturn empty;\n\t}\n\tvar h = Math.floor( Math.log(len) / Math.log(M) );\n\treturn initialize_(f, h, 0, len);\n}\n\nfunction initialize_(f, h, from, to)\n{\n\tif (h === 0)\n\t{\n\t\tvar table = new Array((to - from) % (M + 1));\n\t\tfor (var i = 0; i < table.length; i++)\n\t\t{\n\t\t table[i] = f(from + i);\n\t\t}\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: table\n\t\t};\n\t}\n\n\tvar step = Math.pow(M, h);\n\tvar table = new Array(Math.ceil((to - from) / step));\n\tvar lengths = new Array(table.length);\n\tfor (var i = 0; i < table.length; i++)\n\t{\n\t\ttable[i] = initialize_(f, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i-1] : 0);\n\t}\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: table,\n\t\tlengths: lengths\n\t};\n}\n\nfunction fromList(list)\n{\n\tif (list.ctor === '[]')\n\t{\n\t\treturn empty;\n\t}\n\n\t// Allocate M sized blocks (table) and write list elements to it.\n\tvar table = new Array(M);\n\tvar nodes = [];\n\tvar i = 0;\n\n\twhile (list.ctor !== '[]')\n\t{\n\t\ttable[i] = list._0;\n\t\tlist = list._1;\n\t\ti++;\n\n\t\t// table is full, so we can push a leaf containing it into the\n\t\t// next node.\n\t\tif (i === M)\n\t\t{\n\t\t\tvar leaf = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: table\n\t\t\t};\n\t\t\tfromListPush(leaf, nodes);\n\t\t\ttable = new Array(M);\n\t\t\ti = 0;\n\t\t}\n\t}\n\n\t// Maybe there is something left on the table.\n\tif (i > 0)\n\t{\n\t\tvar leaf = {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: table.splice(0, i)\n\t\t};\n\t\tfromListPush(leaf, nodes);\n\t}\n\n\t// Go through all of the nodes and eventually push them into higher nodes.\n\tfor (var h = 0; h < nodes.length - 1; h++)\n\t{\n\t\tif (nodes[h].table.length > 0)\n\t\t{\n\t\t\tfromListPush(nodes[h], nodes);\n\t\t}\n\t}\n\n\tvar head = nodes[nodes.length - 1];\n\tif (head.height > 0 && head.table.length === 1)\n\t{\n\t\treturn head.table[0];\n\t}\n\telse\n\t{\n\t\treturn head;\n\t}\n}\n\n// Push a node into a higher node as a child.\nfunction fromListPush(toPush, nodes)\n{\n\tvar h = toPush.height;\n\n\t// Maybe the node on this height does not exist.\n\tif (nodes.length === h)\n\t{\n\t\tvar node = {\n\t\t\tctor: '_Array',\n\t\t\theight: h + 1,\n\t\t\ttable: [],\n\t\t\tlengths: []\n\t\t};\n\t\tnodes.push(node);\n\t}\n\n\tnodes[h].table.push(toPush);\n\tvar len = length(toPush);\n\tif (nodes[h].lengths.length > 0)\n\t{\n\t\tlen += nodes[h].lengths[nodes[h].lengths.length - 1];\n\t}\n\tnodes[h].lengths.push(len);\n\n\tif (nodes[h].table.length === M)\n\t{\n\t\tfromListPush(nodes[h], nodes);\n\t\tnodes[h] = {\n\t\t\tctor: '_Array',\n\t\t\theight: h + 1,\n\t\t\ttable: [],\n\t\t\tlengths: []\n\t\t};\n\t}\n}\n\n// Pushes an item via push_ to the bottom right of a tree.\nfunction push(item, a)\n{\n\tvar pushed = push_(item, a);\n\tif (pushed !== null)\n\t{\n\t\treturn pushed;\n\t}\n\n\tvar newTree = create(item, a.height);\n\treturn siblise(a, newTree);\n}\n\n// Recursively tries to push an item to the bottom-right most\n// tree possible. If there is no space left for the item,\n// null will be returned.\nfunction push_(item, a)\n{\n\t// Handle resursion stop at leaf level.\n\tif (a.height === 0)\n\t{\n\t\tif (a.table.length < M)\n\t\t{\n\t\t\tvar newA = {\n\t\t\t\tctor: '_Array',\n\t\t\t\theight: 0,\n\t\t\t\ttable: a.table.slice()\n\t\t\t};\n\t\t\tnewA.table.push(item);\n\t\t\treturn newA;\n\t\t}\n\t\telse\n\t\t{\n\t\t return null;\n\t\t}\n\t}\n\n\t// Recursively push\n\tvar pushed = push_(item, botRight(a));\n\n\t// There was space in the bottom right tree, so the slot will\n\t// be updated.\n\tif (pushed !== null)\n\t{\n\t\tvar newA = nodeCopy(a);\n\t\tnewA.table[newA.table.length - 1] = pushed;\n\t\tnewA.lengths[newA.lengths.length - 1]++;\n\t\treturn newA;\n\t}\n\n\t// When there was no space left, check if there is space left\n\t// for a new slot with a tree which contains only the item\n\t// at the bottom.\n\tif (a.table.length < M)\n\t{\n\t\tvar newSlot = create(item, a.height - 1);\n\t\tvar newA = nodeCopy(a);\n\t\tnewA.table.push(newSlot);\n\t\tnewA.lengths.push(newA.lengths[newA.lengths.length - 1] + length(newSlot));\n\t\treturn newA;\n\t}\n\telse\n\t{\n\t\treturn null;\n\t}\n}\n\n// Converts an array into a list of elements.\nfunction toList(a)\n{\n\treturn toList_(_elm_lang$core$Native_List.Nil, a);\n}\n\nfunction toList_(list, a)\n{\n\tfor (var i = a.table.length - 1; i >= 0; i--)\n\t{\n\t\tlist =\n\t\t\ta.height === 0\n\t\t\t\t? _elm_lang$core$Native_List.Cons(a.table[i], list)\n\t\t\t\t: toList_(list, a.table[i]);\n\t}\n\treturn list;\n}\n\n// Maps a function over the elements of an array.\nfunction map(f, a)\n{\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: new Array(a.table.length)\n\t};\n\tif (a.height > 0)\n\t{\n\t\tnewA.lengths = a.lengths;\n\t}\n\tfor (var i = 0; i < a.table.length; i++)\n\t{\n\t\tnewA.table[i] =\n\t\t\ta.height === 0\n\t\t\t\t? f(a.table[i])\n\t\t\t\t: map(f, a.table[i]);\n\t}\n\treturn newA;\n}\n\n// Maps a function over the elements with their index as first argument.\nfunction indexedMap(f, a)\n{\n\treturn indexedMap_(f, a, 0);\n}\n\nfunction indexedMap_(f, a, from)\n{\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: new Array(a.table.length)\n\t};\n\tif (a.height > 0)\n\t{\n\t\tnewA.lengths = a.lengths;\n\t}\n\tfor (var i = 0; i < a.table.length; i++)\n\t{\n\t\tnewA.table[i] =\n\t\t\ta.height === 0\n\t\t\t\t? A2(f, from + i, a.table[i])\n\t\t\t\t: indexedMap_(f, a.table[i], i == 0 ? from : from + a.lengths[i - 1]);\n\t}\n\treturn newA;\n}\n\nfunction foldl(f, b, a)\n{\n\tif (a.height === 0)\n\t{\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tb = A2(f, a.table[i], b);\n\t\t}\n\t}\n\telse\n\t{\n\t\tfor (var i = 0; i < a.table.length; i++)\n\t\t{\n\t\t\tb = foldl(f, b, a.table[i]);\n\t\t}\n\t}\n\treturn b;\n}\n\nfunction foldr(f, b, a)\n{\n\tif (a.height === 0)\n\t{\n\t\tfor (var i = a.table.length; i--; )\n\t\t{\n\t\t\tb = A2(f, a.table[i], b);\n\t\t}\n\t}\n\telse\n\t{\n\t\tfor (var i = a.table.length; i--; )\n\t\t{\n\t\t\tb = foldr(f, b, a.table[i]);\n\t\t}\n\t}\n\treturn b;\n}\n\n// TODO: currently, it slices the right, then the left. This can be\n// optimized.\nfunction slice(from, to, a)\n{\n\tif (from < 0)\n\t{\n\t\tfrom += length(a);\n\t}\n\tif (to < 0)\n\t{\n\t\tto += length(a);\n\t}\n\treturn sliceLeft(from, sliceRight(to, a));\n}\n\nfunction sliceRight(to, a)\n{\n\tif (to === length(a))\n\t{\n\t\treturn a;\n\t}\n\n\t// Handle leaf level.\n\tif (a.height === 0)\n\t{\n\t\tvar newA = { ctor:'_Array', height:0 };\n\t\tnewA.table = a.table.slice(0, to);\n\t\treturn newA;\n\t}\n\n\t// Slice the right recursively.\n\tvar right = getSlot(to, a);\n\tvar sliced = sliceRight(to - (right > 0 ? a.lengths[right - 1] : 0), a.table[right]);\n\n\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\tif (right === 0)\n\t{\n\t\treturn sliced;\n\t}\n\n\t// Create new node.\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: a.table.slice(0, right),\n\t\tlengths: a.lengths.slice(0, right)\n\t};\n\tif (sliced.table.length > 0)\n\t{\n\t\tnewA.table[right] = sliced;\n\t\tnewA.lengths[right] = length(sliced) + (right > 0 ? newA.lengths[right - 1] : 0);\n\t}\n\treturn newA;\n}\n\nfunction sliceLeft(from, a)\n{\n\tif (from === 0)\n\t{\n\t\treturn a;\n\t}\n\n\t// Handle leaf level.\n\tif (a.height === 0)\n\t{\n\t\tvar newA = { ctor:'_Array', height:0 };\n\t\tnewA.table = a.table.slice(from, a.table.length + 1);\n\t\treturn newA;\n\t}\n\n\t// Slice the left recursively.\n\tvar left = getSlot(from, a);\n\tvar sliced = sliceLeft(from - (left > 0 ? a.lengths[left - 1] : 0), a.table[left]);\n\n\t// Maybe the a node is not even needed, as sliced contains the whole slice.\n\tif (left === a.table.length - 1)\n\t{\n\t\treturn sliced;\n\t}\n\n\t// Create new node.\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: a.table.slice(left, a.table.length + 1),\n\t\tlengths: new Array(a.table.length - left)\n\t};\n\tnewA.table[0] = sliced;\n\tvar len = 0;\n\tfor (var i = 0; i < newA.table.length; i++)\n\t{\n\t\tlen += length(newA.table[i]);\n\t\tnewA.lengths[i] = len;\n\t}\n\n\treturn newA;\n}\n\n// Appends two trees.\nfunction append(a,b)\n{\n\tif (a.table.length === 0)\n\t{\n\t\treturn b;\n\t}\n\tif (b.table.length === 0)\n\t{\n\t\treturn a;\n\t}\n\n\tvar c = append_(a, b);\n\n\t// Check if both nodes can be crunshed together.\n\tif (c[0].table.length + c[1].table.length <= M)\n\t{\n\t\tif (c[0].table.length === 0)\n\t\t{\n\t\t\treturn c[1];\n\t\t}\n\t\tif (c[1].table.length === 0)\n\t\t{\n\t\t\treturn c[0];\n\t\t}\n\n\t\t// Adjust .table and .lengths\n\t\tc[0].table = c[0].table.concat(c[1].table);\n\t\tif (c[0].height > 0)\n\t\t{\n\t\t\tvar len = length(c[0]);\n\t\t\tfor (var i = 0; i < c[1].lengths.length; i++)\n\t\t\t{\n\t\t\t\tc[1].lengths[i] += len;\n\t\t\t}\n\t\t\tc[0].lengths = c[0].lengths.concat(c[1].lengths);\n\t\t}\n\n\t\treturn c[0];\n\t}\n\n\tif (c[0].height > 0)\n\t{\n\t\tvar toRemove = calcToRemove(a, b);\n\t\tif (toRemove > E)\n\t\t{\n\t\t\tc = shuffle(c[0], c[1], toRemove);\n\t\t}\n\t}\n\n\treturn siblise(c[0], c[1]);\n}\n\n// Returns an array of two nodes; right and left. One node _may_ be empty.\nfunction append_(a, b)\n{\n\tif (a.height === 0 && b.height === 0)\n\t{\n\t\treturn [a, b];\n\t}\n\n\tif (a.height !== 1 || b.height !== 1)\n\t{\n\t\tif (a.height === b.height)\n\t\t{\n\t\t\ta = nodeCopy(a);\n\t\t\tb = nodeCopy(b);\n\t\t\tvar appended = append_(botRight(a), botLeft(b));\n\n\t\t\tinsertRight(a, appended[1]);\n\t\t\tinsertLeft(b, appended[0]);\n\t\t}\n\t\telse if (a.height > b.height)\n\t\t{\n\t\t\ta = nodeCopy(a);\n\t\t\tvar appended = append_(botRight(a), b);\n\n\t\t\tinsertRight(a, appended[0]);\n\t\t\tb = parentise(appended[1], appended[1].height + 1);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tb = nodeCopy(b);\n\t\t\tvar appended = append_(a, botLeft(b));\n\n\t\t\tvar left = appended[0].table.length === 0 ? 0 : 1;\n\t\t\tvar right = left === 0 ? 1 : 0;\n\t\t\tinsertLeft(b, appended[left]);\n\t\t\ta = parentise(appended[right], appended[right].height + 1);\n\t\t}\n\t}\n\n\t// Check if balancing is needed and return based on that.\n\tif (a.table.length === 0 || b.table.length === 0)\n\t{\n\t\treturn [a, b];\n\t}\n\n\tvar toRemove = calcToRemove(a, b);\n\tif (toRemove <= E)\n\t{\n\t\treturn [a, b];\n\t}\n\treturn shuffle(a, b, toRemove);\n}\n\n// Helperfunctions for append_. Replaces a child node at the side of the parent.\nfunction insertRight(parent, node)\n{\n\tvar index = parent.table.length - 1;\n\tparent.table[index] = node;\n\tparent.lengths[index] = length(node);\n\tparent.lengths[index] += index > 0 ? parent.lengths[index - 1] : 0;\n}\n\nfunction insertLeft(parent, node)\n{\n\tif (node.table.length > 0)\n\t{\n\t\tparent.table[0] = node;\n\t\tparent.lengths[0] = length(node);\n\n\t\tvar len = length(parent.table[0]);\n\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t{\n\t\t\tlen += length(parent.table[i]);\n\t\t\tparent.lengths[i] = len;\n\t\t}\n\t}\n\telse\n\t{\n\t\tparent.table.shift();\n\t\tfor (var i = 1; i < parent.lengths.length; i++)\n\t\t{\n\t\t\tparent.lengths[i] = parent.lengths[i] - parent.lengths[0];\n\t\t}\n\t\tparent.lengths.shift();\n\t}\n}\n\n// Returns the extra search steps for E. Refer to the paper.\nfunction calcToRemove(a, b)\n{\n\tvar subLengths = 0;\n\tfor (var i = 0; i < a.table.length; i++)\n\t{\n\t\tsubLengths += a.table[i].table.length;\n\t}\n\tfor (var i = 0; i < b.table.length; i++)\n\t{\n\t\tsubLengths += b.table[i].table.length;\n\t}\n\n\tvar toRemove = a.table.length + b.table.length;\n\treturn toRemove - (Math.floor((subLengths - 1) / M) + 1);\n}\n\n// get2, set2 and saveSlot are helpers for accessing elements over two arrays.\nfunction get2(a, b, index)\n{\n\treturn index < a.length\n\t\t? a[index]\n\t\t: b[index - a.length];\n}\n\nfunction set2(a, b, index, value)\n{\n\tif (index < a.length)\n\t{\n\t\ta[index] = value;\n\t}\n\telse\n\t{\n\t\tb[index - a.length] = value;\n\t}\n}\n\nfunction saveSlot(a, b, index, slot)\n{\n\tset2(a.table, b.table, index, slot);\n\n\tvar l = (index === 0 || index === a.lengths.length)\n\t\t? 0\n\t\t: get2(a.lengths, a.lengths, index - 1);\n\n\tset2(a.lengths, b.lengths, index, l + length(slot));\n}\n\n// Creates a node or leaf with a given length at their arrays for perfomance.\n// Is only used by shuffle.\nfunction createNode(h, length)\n{\n\tif (length < 0)\n\t{\n\t\tlength = 0;\n\t}\n\tvar a = {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: new Array(length)\n\t};\n\tif (h > 0)\n\t{\n\t\ta.lengths = new Array(length);\n\t}\n\treturn a;\n}\n\n// Returns an array of two balanced nodes.\nfunction shuffle(a, b, toRemove)\n{\n\tvar newA = createNode(a.height, Math.min(M, a.table.length + b.table.length - toRemove));\n\tvar newB = createNode(a.height, newA.table.length - (a.table.length + b.table.length - toRemove));\n\n\t// Skip the slots with size M. More precise: copy the slot references\n\t// to the new node\n\tvar read = 0;\n\twhile (get2(a.table, b.table, read).table.length % M === 0)\n\t{\n\t\tset2(newA.table, newB.table, read, get2(a.table, b.table, read));\n\t\tset2(newA.lengths, newB.lengths, read, get2(a.lengths, b.lengths, read));\n\t\tread++;\n\t}\n\n\t// Pulling items from left to right, caching in a slot before writing\n\t// it into the new nodes.\n\tvar write = read;\n\tvar slot = new createNode(a.height - 1, 0);\n\tvar from = 0;\n\n\t// If the current slot is still containing data, then there will be at\n\t// least one more write, so we do not break this loop yet.\n\twhile (read - write - (slot.table.length > 0 ? 1 : 0) < toRemove)\n\t{\n\t\t// Find out the max possible items for copying.\n\t\tvar source = get2(a.table, b.table, read);\n\t\tvar to = Math.min(M - slot.table.length, source.table.length);\n\n\t\t// Copy and adjust size table.\n\t\tslot.table = slot.table.concat(source.table.slice(from, to));\n\t\tif (slot.height > 0)\n\t\t{\n\t\t\tvar len = slot.lengths.length;\n\t\t\tfor (var i = len; i < len + to - from; i++)\n\t\t\t{\n\t\t\t\tslot.lengths[i] = length(slot.table[i]);\n\t\t\t\tslot.lengths[i] += (i > 0 ? slot.lengths[i - 1] : 0);\n\t\t\t}\n\t\t}\n\n\t\tfrom += to;\n\n\t\t// Only proceed to next slots[i] if the current one was\n\t\t// fully copied.\n\t\tif (source.table.length <= to)\n\t\t{\n\t\t\tread++; from = 0;\n\t\t}\n\n\t\t// Only create a new slot if the current one is filled up.\n\t\tif (slot.table.length === M)\n\t\t{\n\t\t\tsaveSlot(newA, newB, write, slot);\n\t\t\tslot = createNode(a.height - 1, 0);\n\t\t\twrite++;\n\t\t}\n\t}\n\n\t// Cleanup after the loop. Copy the last slot into the new nodes.\n\tif (slot.table.length > 0)\n\t{\n\t\tsaveSlot(newA, newB, write, slot);\n\t\twrite++;\n\t}\n\n\t// Shift the untouched slots to the left\n\twhile (read < a.table.length + b.table.length )\n\t{\n\t\tsaveSlot(newA, newB, write, get2(a.table, b.table, read));\n\t\tread++;\n\t\twrite++;\n\t}\n\n\treturn [newA, newB];\n}\n\n// Navigation functions\nfunction botRight(a)\n{\n\treturn a.table[a.table.length - 1];\n}\nfunction botLeft(a)\n{\n\treturn a.table[0];\n}\n\n// Copies a node for updating. Note that you should not use this if\n// only updating only one of \"table\" or \"lengths\" for performance reasons.\nfunction nodeCopy(a)\n{\n\tvar newA = {\n\t\tctor: '_Array',\n\t\theight: a.height,\n\t\ttable: a.table.slice()\n\t};\n\tif (a.height > 0)\n\t{\n\t\tnewA.lengths = a.lengths.slice();\n\t}\n\treturn newA;\n}\n\n// Returns how many items are in the tree.\nfunction length(array)\n{\n\tif (array.height === 0)\n\t{\n\t\treturn array.table.length;\n\t}\n\telse\n\t{\n\t\treturn array.lengths[array.lengths.length - 1];\n\t}\n}\n\n// Calculates in which slot of \"table\" the item probably is, then\n// find the exact slot via forward searching in \"lengths\". Returns the index.\nfunction getSlot(i, a)\n{\n\tvar slot = i >> (5 * a.height);\n\twhile (a.lengths[slot] <= i)\n\t{\n\t\tslot++;\n\t}\n\treturn slot;\n}\n\n// Recursively creates a tree with a given height containing\n// only the given item.\nfunction create(item, h)\n{\n\tif (h === 0)\n\t{\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: [item]\n\t\t};\n\t}\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: [create(item, h - 1)],\n\t\tlengths: [1]\n\t};\n}\n\n// Recursively creates a tree that contains the given tree.\nfunction parentise(tree, h)\n{\n\tif (h === tree.height)\n\t{\n\t\treturn tree;\n\t}\n\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: [parentise(tree, h - 1)],\n\t\tlengths: [length(tree)]\n\t};\n}\n\n// Emphasizes blood brotherhood beneath two trees.\nfunction siblise(a, b)\n{\n\treturn {\n\t\tctor: '_Array',\n\t\theight: a.height + 1,\n\t\ttable: [a, b],\n\t\tlengths: [length(a), length(a) + length(b)]\n\t};\n}\n\nfunction toJSArray(a)\n{\n\tvar jsArray = new Array(length(a));\n\ttoJSArray_(jsArray, 0, a);\n\treturn jsArray;\n}\n\nfunction toJSArray_(jsArray, i, a)\n{\n\tfor (var t = 0; t < a.table.length; t++)\n\t{\n\t\tif (a.height === 0)\n\t\t{\n\t\t\tjsArray[i + t] = a.table[t];\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar inc = t === 0 ? 0 : a.lengths[t - 1];\n\t\t\ttoJSArray_(jsArray, i + inc, a.table[t]);\n\t\t}\n\t}\n}\n\nfunction fromJSArray(jsArray)\n{\n\tif (jsArray.length === 0)\n\t{\n\t\treturn empty;\n\t}\n\tvar h = Math.floor(Math.log(jsArray.length) / Math.log(M));\n\treturn fromJSArray_(jsArray, h, 0, jsArray.length);\n}\n\nfunction fromJSArray_(jsArray, h, from, to)\n{\n\tif (h === 0)\n\t{\n\t\treturn {\n\t\t\tctor: '_Array',\n\t\t\theight: 0,\n\t\t\ttable: jsArray.slice(from, to)\n\t\t};\n\t}\n\n\tvar step = Math.pow(M, h);\n\tvar table = new Array(Math.ceil((to - from) / step));\n\tvar lengths = new Array(table.length);\n\tfor (var i = 0; i < table.length; i++)\n\t{\n\t\ttable[i] = fromJSArray_(jsArray, h - 1, from + (i * step), Math.min(from + ((i + 1) * step), to));\n\t\tlengths[i] = length(table[i]) + (i > 0 ? lengths[i - 1] : 0);\n\t}\n\treturn {\n\t\tctor: '_Array',\n\t\theight: h,\n\t\ttable: table,\n\t\tlengths: lengths\n\t};\n}\n\nreturn {\n\tempty: empty,\n\tfromList: fromList,\n\ttoList: toList,\n\tinitialize: F2(initialize),\n\tappend: F2(append),\n\tpush: F2(push),\n\tslice: F3(slice),\n\tget: F2(get),\n\tset: F3(set),\n\tmap: F2(map),\n\tindexedMap: F2(indexedMap),\n\tfoldl: F3(foldl),\n\tfoldr: F3(foldr),\n\tlength: length,\n\n\ttoJSArray: toJSArray,\n\tfromJSArray: fromJSArray\n};\n\n}();\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Basics = function() {\n\nfunction div(a, b)\n{\n\treturn (a / b) | 0;\n}\nfunction rem(a, b)\n{\n\treturn a % b;\n}\nfunction mod(a, b)\n{\n\tif (b === 0)\n\t{\n\t\tthrow new Error('Cannot perform mod 0. Division by zero error.');\n\t}\n\tvar r = a % b;\n\tvar m = a === 0 ? 0 : (b > 0 ? (a >= 0 ? r : r + b) : -mod(-a, -b));\n\n\treturn m === b ? 0 : m;\n}\nfunction logBase(base, n)\n{\n\treturn Math.log(n) / Math.log(base);\n}\nfunction negate(n)\n{\n\treturn -n;\n}\nfunction abs(n)\n{\n\treturn n < 0 ? -n : n;\n}\n\nfunction min(a, b)\n{\n\treturn _elm_lang$core$Native_Utils.cmp(a, b) < 0 ? a : b;\n}\nfunction max(a, b)\n{\n\treturn _elm_lang$core$Native_Utils.cmp(a, b) > 0 ? a : b;\n}\nfunction clamp(lo, hi, n)\n{\n\treturn _elm_lang$core$Native_Utils.cmp(n, lo) < 0\n\t\t? lo\n\t\t: _elm_lang$core$Native_Utils.cmp(n, hi) > 0\n\t\t\t? hi\n\t\t\t: n;\n}\n\nvar ord = ['LT', 'EQ', 'GT'];\n\nfunction compare(x, y)\n{\n\treturn { ctor: ord[_elm_lang$core$Native_Utils.cmp(x, y) + 1] };\n}\n\nfunction xor(a, b)\n{\n\treturn a !== b;\n}\nfunction not(b)\n{\n\treturn !b;\n}\nfunction isInfinite(n)\n{\n\treturn n === Infinity || n === -Infinity;\n}\n\nfunction truncate(n)\n{\n\treturn n | 0;\n}\n\nfunction degrees(d)\n{\n\treturn d * Math.PI / 180;\n}\nfunction turns(t)\n{\n\treturn 2 * Math.PI * t;\n}\nfunction fromPolar(point)\n{\n\tvar r = point._0;\n\tvar t = point._1;\n\treturn _elm_lang$core$Native_Utils.Tuple2(r * Math.cos(t), r * Math.sin(t));\n}\nfunction toPolar(point)\n{\n\tvar x = point._0;\n\tvar y = point._1;\n\treturn _elm_lang$core$Native_Utils.Tuple2(Math.sqrt(x * x + y * y), Math.atan2(y, x));\n}\n\nreturn {\n\tdiv: F2(div),\n\trem: F2(rem),\n\tmod: F2(mod),\n\n\tpi: Math.PI,\n\te: Math.E,\n\tcos: Math.cos,\n\tsin: Math.sin,\n\ttan: Math.tan,\n\tacos: Math.acos,\n\tasin: Math.asin,\n\tatan: Math.atan,\n\tatan2: F2(Math.atan2),\n\n\tdegrees: degrees,\n\tturns: turns,\n\tfromPolar: fromPolar,\n\ttoPolar: toPolar,\n\n\tsqrt: Math.sqrt,\n\tlogBase: F2(logBase),\n\tnegate: negate,\n\tabs: abs,\n\tmin: F2(min),\n\tmax: F2(max),\n\tclamp: F3(clamp),\n\tcompare: F2(compare),\n\n\txor: F2(xor),\n\tnot: not,\n\n\ttruncate: truncate,\n\tceiling: Math.ceil,\n\tfloor: Math.floor,\n\tround: Math.round,\n\ttoFloat: function(x) { return x; },\n\tisNaN: isNaN,\n\tisInfinite: isInfinite\n};\n\n}();\n//import //\n\nvar _elm_lang$core$Native_Utils = function() {\n\n// COMPARISONS\n\nfunction eq(x, y)\n{\n\tvar stack = [];\n\tvar isEqual = eqHelp(x, y, 0, stack);\n\tvar pair;\n\twhile (isEqual && (pair = stack.pop()))\n\t{\n\t\tisEqual = eqHelp(pair.x, pair.y, 0, stack);\n\t}\n\treturn isEqual;\n}\n\n\nfunction eqHelp(x, y, depth, stack)\n{\n\tif (depth > 100)\n\t{\n\t\tstack.push({ x: x, y: y });\n\t\treturn true;\n\t}\n\n\tif (x === y)\n\t{\n\t\treturn true;\n\t}\n\n\tif (typeof x !== 'object')\n\t{\n\t\tif (typeof x === 'function')\n\t\t{\n\t\t\tthrow new Error(\n\t\t\t\t'Trying to use `(==)` on functions. There is no way to know if functions are \"the same\" in the Elm sense.'\n\t\t\t\t+ ' Read more about this at http://package.elm-lang.org/packages/elm-lang/core/latest/Basics#=='\n\t\t\t\t+ ' which describes why it is this way and what the better version will look like.'\n\t\t\t);\n\t\t}\n\t\treturn false;\n\t}\n\n\tif (x === null || y === null)\n\t{\n\t\treturn false\n\t}\n\n\tif (x instanceof Date)\n\t{\n\t\treturn x.getTime() === y.getTime();\n\t}\n\n\tif (!('ctor' in x))\n\t{\n\t\tfor (var key in x)\n\t\t{\n\t\t\tif (!eqHelp(x[key], y[key], depth + 1, stack))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\t// convert Dicts and Sets to lists\n\tif (x.ctor === 'RBNode_elm_builtin' || x.ctor === 'RBEmpty_elm_builtin')\n\t{\n\t\tx = _elm_lang$core$Dict$toList(x);\n\t\ty = _elm_lang$core$Dict$toList(y);\n\t}\n\tif (x.ctor === 'Set_elm_builtin')\n\t{\n\t\tx = _elm_lang$core$Set$toList(x);\n\t\ty = _elm_lang$core$Set$toList(y);\n\t}\n\n\t// check if lists are equal without recursion\n\tif (x.ctor === '::')\n\t{\n\t\tvar a = x;\n\t\tvar b = y;\n\t\twhile (a.ctor === '::' && b.ctor === '::')\n\t\t{\n\t\t\tif (!eqHelp(a._0, b._0, depth + 1, stack))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\ta = a._1;\n\t\t\tb = b._1;\n\t\t}\n\t\treturn a.ctor === b.ctor;\n\t}\n\n\t// check if Arrays are equal\n\tif (x.ctor === '_Array')\n\t{\n\t\tvar xs = _elm_lang$core$Native_Array.toJSArray(x);\n\t\tvar ys = _elm_lang$core$Native_Array.toJSArray(y);\n\t\tif (xs.length !== ys.length)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t\tfor (var i = 0; i < xs.length; i++)\n\t\t{\n\t\t\tif (!eqHelp(xs[i], ys[i], depth + 1, stack))\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\n\tif (!eqHelp(x.ctor, y.ctor, depth + 1, stack))\n\t{\n\t\treturn false;\n\t}\n\n\tfor (var key in x)\n\t{\n\t\tif (!eqHelp(x[key], y[key], depth + 1, stack))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n// Code in Generate/JavaScript.hs, Basics.js, and List.js depends on\n// the particular integer values assigned to LT, EQ, and GT.\n\nvar LT = -1, EQ = 0, GT = 1;\n\nfunction cmp(x, y)\n{\n\tif (typeof x !== 'object')\n\t{\n\t\treturn x === y ? EQ : x < y ? LT : GT;\n\t}\n\n\tif (x instanceof String)\n\t{\n\t\tvar a = x.valueOf();\n\t\tvar b = y.valueOf();\n\t\treturn a === b ? EQ : a < b ? LT : GT;\n\t}\n\n\tif (x.ctor === '::' || x.ctor === '[]')\n\t{\n\t\twhile (x.ctor === '::' && y.ctor === '::')\n\t\t{\n\t\t\tvar ord = cmp(x._0, y._0);\n\t\t\tif (ord !== EQ)\n\t\t\t{\n\t\t\t\treturn ord;\n\t\t\t}\n\t\t\tx = x._1;\n\t\t\ty = y._1;\n\t\t}\n\t\treturn x.ctor === y.ctor ? EQ : x.ctor === '[]' ? LT : GT;\n\t}\n\n\tif (x.ctor.slice(0, 6) === '_Tuple')\n\t{\n\t\tvar ord;\n\t\tvar n = x.ctor.slice(6) - 0;\n\t\tvar err = 'cannot compare tuples with more than 6 elements.';\n\t\tif (n === 0) return EQ;\n\t\tif (n >= 1) { ord = cmp(x._0, y._0); if (ord !== EQ) return ord;\n\t\tif (n >= 2) { ord = cmp(x._1, y._1); if (ord !== EQ) return ord;\n\t\tif (n >= 3) { ord = cmp(x._2, y._2); if (ord !== EQ) return ord;\n\t\tif (n >= 4) { ord = cmp(x._3, y._3); if (ord !== EQ) return ord;\n\t\tif (n >= 5) { ord = cmp(x._4, y._4); if (ord !== EQ) return ord;\n\t\tif (n >= 6) { ord = cmp(x._5, y._5); if (ord !== EQ) return ord;\n\t\tif (n >= 7) throw new Error('Comparison error: ' + err); } } } } } }\n\t\treturn EQ;\n\t}\n\n\tthrow new Error(\n\t\t'Comparison error: comparison is only defined on ints, '\n\t\t+ 'floats, times, chars, strings, lists of comparable values, '\n\t\t+ 'and tuples of comparable values.'\n\t);\n}\n\n\n// COMMON VALUES\n\nvar Tuple0 = {\n\tctor: '_Tuple0'\n};\n\nfunction Tuple2(x, y)\n{\n\treturn {\n\t\tctor: '_Tuple2',\n\t\t_0: x,\n\t\t_1: y\n\t};\n}\n\nfunction chr(c)\n{\n\treturn new String(c);\n}\n\n\n// GUID\n\nvar count = 0;\nfunction guid(_)\n{\n\treturn count++;\n}\n\n\n// RECORDS\n\nfunction update(oldRecord, updatedFields)\n{\n\tvar newRecord = {};\n\n\tfor (var key in oldRecord)\n\t{\n\t\tnewRecord[key] = oldRecord[key];\n\t}\n\n\tfor (var key in updatedFields)\n\t{\n\t\tnewRecord[key] = updatedFields[key];\n\t}\n\n\treturn newRecord;\n}\n\n\n//// LIST STUFF ////\n\nvar Nil = { ctor: '[]' };\n\nfunction Cons(hd, tl)\n{\n\treturn {\n\t\tctor: '::',\n\t\t_0: hd,\n\t\t_1: tl\n\t};\n}\n\nfunction append(xs, ys)\n{\n\t// append Strings\n\tif (typeof xs === 'string')\n\t{\n\t\treturn xs + ys;\n\t}\n\n\t// append Lists\n\tif (xs.ctor === '[]')\n\t{\n\t\treturn ys;\n\t}\n\tvar root = Cons(xs._0, Nil);\n\tvar curr = root;\n\txs = xs._1;\n\twhile (xs.ctor !== '[]')\n\t{\n\t\tcurr._1 = Cons(xs._0, Nil);\n\t\txs = xs._1;\n\t\tcurr = curr._1;\n\t}\n\tcurr._1 = ys;\n\treturn root;\n}\n\n\n// CRASHES\n\nfunction crash(moduleName, region)\n{\n\treturn function(message) {\n\t\tthrow new Error(\n\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '` ' + regionToString(region) + '\\n'\n\t\t\t+ 'The message provided by the code author is:\\n\\n '\n\t\t\t+ message\n\t\t);\n\t};\n}\n\nfunction crashCase(moduleName, region, value)\n{\n\treturn function(message) {\n\t\tthrow new Error(\n\t\t\t'Ran into a `Debug.crash` in module `' + moduleName + '`\\n\\n'\n\t\t\t+ 'This was caused by the `case` expression ' + regionToString(region) + '.\\n'\n\t\t\t+ 'One of the branches ended with a crash and the following value got through:\\n\\n ' + toString(value) + '\\n\\n'\n\t\t\t+ 'The message provided by the code author is:\\n\\n '\n\t\t\t+ message\n\t\t);\n\t};\n}\n\nfunction regionToString(region)\n{\n\tif (region.start.line == region.end.line)\n\t{\n\t\treturn 'on line ' + region.start.line;\n\t}\n\treturn 'between lines ' + region.start.line + ' and ' + region.end.line;\n}\n\n\n// TO STRING\n\nfunction toString(v)\n{\n\tvar type = typeof v;\n\tif (type === 'function')\n\t{\n\t\treturn '<function>';\n\t}\n\n\tif (type === 'boolean')\n\t{\n\t\treturn v ? 'True' : 'False';\n\t}\n\n\tif (type === 'number')\n\t{\n\t\treturn v + '';\n\t}\n\n\tif (v instanceof String)\n\t{\n\t\treturn '\\'' + addSlashes(v, true) + '\\'';\n\t}\n\n\tif (type === 'string')\n\t{\n\t\treturn '\"' + addSlashes(v, false) + '\"';\n\t}\n\n\tif (v === null)\n\t{\n\t\treturn 'null';\n\t}\n\n\tif (type === 'object' && 'ctor' in v)\n\t{\n\t\tvar ctorStarter = v.ctor.substring(0, 5);\n\n\t\tif (ctorStarter === '_Tupl')\n\t\t{\n\t\t\tvar output = [];\n\t\t\tfor (var k in v)\n\t\t\t{\n\t\t\t\tif (k === 'ctor') continue;\n\t\t\t\toutput.push(toString(v[k]));\n\t\t\t}\n\t\t\treturn '(' + output.join(',') + ')';\n\t\t}\n\n\t\tif (ctorStarter === '_Task')\n\t\t{\n\t\t\treturn '<task>'\n\t\t}\n\n\t\tif (v.ctor === '_Array')\n\t\t{\n\t\t\tvar list = _elm_lang$core$Array$toList(v);\n\t\t\treturn 'Array.fromList ' + toString(list);\n\t\t}\n\n\t\tif (v.ctor === '<decoder>')\n\t\t{\n\t\t\treturn '<decoder>';\n\t\t}\n\n\t\tif (v.ctor === '_Process')\n\t\t{\n\t\t\treturn '<process:' + v.id + '>';\n\t\t}\n\n\t\tif (v.ctor === '::')\n\t\t{\n\t\t\tvar output = '[' + toString(v._0);\n\t\t\tv = v._1;\n\t\t\twhile (v.ctor === '::')\n\t\t\t{\n\t\t\t\toutput += ',' + toString(v._0);\n\t\t\t\tv = v._1;\n\t\t\t}\n\t\t\treturn output + ']';\n\t\t}\n\n\t\tif (v.ctor === '[]')\n\t\t{\n\t\t\treturn '[]';\n\t\t}\n\n\t\tif (v.ctor === 'Set_elm_builtin')\n\t\t{\n\t\t\treturn 'Set.fromList ' + toString(_elm_lang$core$Set$toList(v));\n\t\t}\n\n\t\tif (v.ctor === 'RBNode_elm_builtin' || v.ctor === 'RBEmpty_elm_builtin')\n\t\t{\n\t\t\treturn 'Dict.fromList ' + toString(_elm_lang$core$Dict$toList(v));\n\t\t}\n\n\t\tvar output = '';\n\t\tfor (var i in v)\n\t\t{\n\t\t\tif (i === 'ctor') continue;\n\t\t\tvar str = toString(v[i]);\n\t\t\tvar c0 = str[0];\n\t\t\tvar parenless = c0 === '{' || c0 === '(' || c0 === '<' || c0 === '\"' || str.indexOf(' ') < 0;\n\t\t\toutput += ' ' + (parenless ? str : '(' + str + ')');\n\t\t}\n\t\treturn v.ctor + output;\n\t}\n\n\tif (type === 'object')\n\t{\n\t\tif (v instanceof Date)\n\t\t{\n\t\t\treturn '<' + v.toString() + '>';\n\t\t}\n\n\t\tif (v.elm_web_socket)\n\t\t{\n\t\t\treturn '<websocket>';\n\t\t}\n\n\t\tvar output = [];\n\t\tfor (var k in v)\n\t\t{\n\t\t\toutput.push(k + ' = ' + toString(v[k]));\n\t\t}\n\t\tif (output.length === 0)\n\t\t{\n\t\t\treturn '{}';\n\t\t}\n\t\treturn '{ ' + output.join(', ') + ' }';\n\t}\n\n\treturn '<internal structure>';\n}\n\nfunction addSlashes(str, isChar)\n{\n\tvar s = str.replace(/\\\\/g, '\\\\\\\\')\n\t\t\t .replace(/\\n/g, '\\\\n')\n\t\t\t .replace(/\\t/g, '\\\\t')\n\t\t\t .replace(/\\r/g, '\\\\r')\n\t\t\t .replace(/\\v/g, '\\\\v')\n\t\t\t .replace(/\\0/g, '\\\\0');\n\tif (isChar)\n\t{\n\t\treturn s.replace(/\\'/g, '\\\\\\'');\n\t}\n\telse\n\t{\n\t\treturn s.replace(/\\\"/g, '\\\\\"');\n\t}\n}\n\n\nreturn {\n\teq: eq,\n\tcmp: cmp,\n\tTuple0: Tuple0,\n\tTuple2: Tuple2,\n\tchr: chr,\n\tupdate: update,\n\tguid: guid,\n\n\tappend: F2(append),\n\n\tcrash: crash,\n\tcrashCase: crashCase,\n\n\ttoString: toString\n};\n\n}();\nvar _elm_lang$core$Basics$never = function (_p0) {\n\tnever:\n\twhile (true) {\n\t\tvar _p1 = _p0;\n\t\tvar _v1 = _p1._0;\n\t\t_p0 = _v1;\n\t\tcontinue never;\n\t}\n};\nvar _elm_lang$core$Basics$uncurry = F2(\n\tfunction (f, _p2) {\n\t\tvar _p3 = _p2;\n\t\treturn A2(f, _p3._0, _p3._1);\n\t});\nvar _elm_lang$core$Basics$curry = F3(\n\tfunction (f, a, b) {\n\t\treturn f(\n\t\t\t{ctor: '_Tuple2', _0: a, _1: b});\n\t});\nvar _elm_lang$core$Basics$flip = F3(\n\tfunction (f, b, a) {\n\t\treturn A2(f, a, b);\n\t});\nvar _elm_lang$core$Basics$always = F2(\n\tfunction (a, _p4) {\n\t\treturn a;\n\t});\nvar _elm_lang$core$Basics$identity = function (x) {\n\treturn x;\n};\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<|'] = F2(\n\tfunction (f, x) {\n\t\treturn f(x);\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['|>'] = F2(\n\tfunction (x, f) {\n\t\treturn f(x);\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['>>'] = F3(\n\tfunction (f, g, x) {\n\t\treturn g(\n\t\t\tf(x));\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<<'] = F3(\n\tfunction (g, f, x) {\n\t\treturn g(\n\t\t\tf(x));\n\t});\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['++'] = _elm_lang$core$Native_Utils.append;\nvar _elm_lang$core$Basics$toString = _elm_lang$core$Native_Utils.toString;\nvar _elm_lang$core$Basics$isInfinite = _elm_lang$core$Native_Basics.isInfinite;\nvar _elm_lang$core$Basics$isNaN = _elm_lang$core$Native_Basics.isNaN;\nvar _elm_lang$core$Basics$toFloat = _elm_lang$core$Native_Basics.toFloat;\nvar _elm_lang$core$Basics$ceiling = _elm_lang$core$Native_Basics.ceiling;\nvar _elm_lang$core$Basics$floor = _elm_lang$core$Native_Basics.floor;\nvar _elm_lang$core$Basics$truncate = _elm_lang$core$Native_Basics.truncate;\nvar _elm_lang$core$Basics$round = _elm_lang$core$Native_Basics.round;\nvar _elm_lang$core$Basics$not = _elm_lang$core$Native_Basics.not;\nvar _elm_lang$core$Basics$xor = _elm_lang$core$Native_Basics.xor;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['||'] = _elm_lang$core$Native_Basics.or;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['&&'] = _elm_lang$core$Native_Basics.and;\nvar _elm_lang$core$Basics$max = _elm_lang$core$Native_Basics.max;\nvar _elm_lang$core$Basics$min = _elm_lang$core$Native_Basics.min;\nvar _elm_lang$core$Basics$compare = _elm_lang$core$Native_Basics.compare;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['>='] = _elm_lang$core$Native_Basics.ge;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<='] = _elm_lang$core$Native_Basics.le;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['>'] = _elm_lang$core$Native_Basics.gt;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['<'] = _elm_lang$core$Native_Basics.lt;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['/='] = _elm_lang$core$Native_Basics.neq;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['=='] = _elm_lang$core$Native_Basics.eq;\nvar _elm_lang$core$Basics$e = _elm_lang$core$Native_Basics.e;\nvar _elm_lang$core$Basics$pi = _elm_lang$core$Native_Basics.pi;\nvar _elm_lang$core$Basics$clamp = _elm_lang$core$Native_Basics.clamp;\nvar _elm_lang$core$Basics$logBase = _elm_lang$core$Native_Basics.logBase;\nvar _elm_lang$core$Basics$abs = _elm_lang$core$Native_Basics.abs;\nvar _elm_lang$core$Basics$negate = _elm_lang$core$Native_Basics.negate;\nvar _elm_lang$core$Basics$sqrt = _elm_lang$core$Native_Basics.sqrt;\nvar _elm_lang$core$Basics$atan2 = _elm_lang$core$Native_Basics.atan2;\nvar _elm_lang$core$Basics$atan = _elm_lang$core$Native_Basics.atan;\nvar _elm_lang$core$Basics$asin = _elm_lang$core$Native_Basics.asin;\nvar _elm_lang$core$Basics$acos = _elm_lang$core$Native_Basics.acos;\nvar _elm_lang$core$Basics$tan = _elm_lang$core$Native_Basics.tan;\nvar _elm_lang$core$Basics$sin = _elm_lang$core$Native_Basics.sin;\nvar _elm_lang$core$Basics$cos = _elm_lang$core$Native_Basics.cos;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['^'] = _elm_lang$core$Native_Basics.exp;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['%'] = _elm_lang$core$Native_Basics.mod;\nvar _elm_lang$core$Basics$rem = _elm_lang$core$Native_Basics.rem;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['//'] = _elm_lang$core$Native_Basics.div;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['/'] = _elm_lang$core$Native_Basics.floatDiv;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['*'] = _elm_lang$core$Native_Basics.mul;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['-'] = _elm_lang$core$Native_Basics.sub;\nvar _elm_lang$core$Basics_ops = _elm_lang$core$Basics_ops || {};\n_elm_lang$core$Basics_ops['+'] = _elm_lang$core$Native_Basics.add;\nvar _elm_lang$core$Basics$toPolar = _elm_lang$core$Native_Basics.toPolar;\nvar _elm_lang$core$Basics$fromPolar = _elm_lang$core$Native_Basics.fromPolar;\nvar _elm_lang$core$Basics$turns = _elm_lang$core$Native_Basics.turns;\nvar _elm_lang$core$Basics$degrees = _elm_lang$core$Native_Basics.degrees;\nvar _elm_lang$core$Basics$radians = function (t) {\n\treturn t;\n};\nvar _elm_lang$core$Basics$GT = {ctor: 'GT'};\nvar _elm_lang$core$Basics$EQ = {ctor: 'EQ'};\nvar _elm_lang$core$Basics$LT = {ctor: 'LT'};\nvar _elm_lang$core$Basics$JustOneMore = function (a) {\n\treturn {ctor: 'JustOneMore', _0: a};\n};\n\nvar _elm_lang$core$Maybe$withDefault = F2(\n\tfunction ($default, maybe) {\n\t\tvar _p0 = maybe;\n\t\tif (_p0.ctor === 'Just') {\n\t\t\treturn _p0._0;\n\t\t} else {\n\t\t\treturn $default;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$Nothing = {ctor: 'Nothing'};\nvar _elm_lang$core$Maybe$andThen = F2(\n\tfunction (callback, maybeValue) {\n\t\tvar _p1 = maybeValue;\n\t\tif (_p1.ctor === 'Just') {\n\t\t\treturn callback(_p1._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$Just = function (a) {\n\treturn {ctor: 'Just', _0: a};\n};\nvar _elm_lang$core$Maybe$map = F2(\n\tfunction (f, maybe) {\n\t\tvar _p2 = maybe;\n\t\tif (_p2.ctor === 'Just') {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tf(_p2._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map2 = F3(\n\tfunction (func, ma, mb) {\n\t\tvar _p3 = {ctor: '_Tuple2', _0: ma, _1: mb};\n\t\tif (((_p3.ctor === '_Tuple2') && (_p3._0.ctor === 'Just')) && (_p3._1.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA2(func, _p3._0._0, _p3._1._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map3 = F4(\n\tfunction (func, ma, mb, mc) {\n\t\tvar _p4 = {ctor: '_Tuple3', _0: ma, _1: mb, _2: mc};\n\t\tif ((((_p4.ctor === '_Tuple3') && (_p4._0.ctor === 'Just')) && (_p4._1.ctor === 'Just')) && (_p4._2.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA3(func, _p4._0._0, _p4._1._0, _p4._2._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map4 = F5(\n\tfunction (func, ma, mb, mc, md) {\n\t\tvar _p5 = {ctor: '_Tuple4', _0: ma, _1: mb, _2: mc, _3: md};\n\t\tif (((((_p5.ctor === '_Tuple4') && (_p5._0.ctor === 'Just')) && (_p5._1.ctor === 'Just')) && (_p5._2.ctor === 'Just')) && (_p5._3.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA4(func, _p5._0._0, _p5._1._0, _p5._2._0, _p5._3._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\nvar _elm_lang$core$Maybe$map5 = F6(\n\tfunction (func, ma, mb, mc, md, me) {\n\t\tvar _p6 = {ctor: '_Tuple5', _0: ma, _1: mb, _2: mc, _3: md, _4: me};\n\t\tif ((((((_p6.ctor === '_Tuple5') && (_p6._0.ctor === 'Just')) && (_p6._1.ctor === 'Just')) && (_p6._2.ctor === 'Just')) && (_p6._3.ctor === 'Just')) && (_p6._4.ctor === 'Just')) {\n\t\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\t\tA5(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0, _p6._4._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t}\n\t});\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_List = function() {\n\nvar Nil = { ctor: '[]' };\n\nfunction Cons(hd, tl)\n{\n\treturn { ctor: '::', _0: hd, _1: tl };\n}\n\nfunction fromArray(arr)\n{\n\tvar out = Nil;\n\tfor (var i = arr.length; i--; )\n\t{\n\t\tout = Cons(arr[i], out);\n\t}\n\treturn out;\n}\n\nfunction toArray(xs)\n{\n\tvar out = [];\n\twhile (xs.ctor !== '[]')\n\t{\n\t\tout.push(xs._0);\n\t\txs = xs._1;\n\t}\n\treturn out;\n}\n\nfunction foldr(f, b, xs)\n{\n\tvar arr = toArray(xs);\n\tvar acc = b;\n\tfor (var i = arr.length; i--; )\n\t{\n\t\tacc = A2(f, arr[i], acc);\n\t}\n\treturn acc;\n}\n\nfunction map2(f, xs, ys)\n{\n\tvar arr = [];\n\twhile (xs.ctor !== '[]' && ys.ctor !== '[]')\n\t{\n\t\tarr.push(A2(f, xs._0, ys._0));\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction map3(f, xs, ys, zs)\n{\n\tvar arr = [];\n\twhile (xs.ctor !== '[]' && ys.ctor !== '[]' && zs.ctor !== '[]')\n\t{\n\t\tarr.push(A3(f, xs._0, ys._0, zs._0));\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t\tzs = zs._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction map4(f, ws, xs, ys, zs)\n{\n\tvar arr = [];\n\twhile ( ws.ctor !== '[]'\n\t\t && xs.ctor !== '[]'\n\t\t && ys.ctor !== '[]'\n\t\t && zs.ctor !== '[]')\n\t{\n\t\tarr.push(A4(f, ws._0, xs._0, ys._0, zs._0));\n\t\tws = ws._1;\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t\tzs = zs._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction map5(f, vs, ws, xs, ys, zs)\n{\n\tvar arr = [];\n\twhile ( vs.ctor !== '[]'\n\t\t && ws.ctor !== '[]'\n\t\t && xs.ctor !== '[]'\n\t\t && ys.ctor !== '[]'\n\t\t && zs.ctor !== '[]')\n\t{\n\t\tarr.push(A5(f, vs._0, ws._0, xs._0, ys._0, zs._0));\n\t\tvs = vs._1;\n\t\tws = ws._1;\n\t\txs = xs._1;\n\t\tys = ys._1;\n\t\tzs = zs._1;\n\t}\n\treturn fromArray(arr);\n}\n\nfunction sortBy(f, xs)\n{\n\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\treturn _elm_lang$core$Native_Utils.cmp(f(a), f(b));\n\t}));\n}\n\nfunction sortWith(f, xs)\n{\n\treturn fromArray(toArray(xs).sort(function(a, b) {\n\t\tvar ord = f(a)(b).ctor;\n\t\treturn ord === 'EQ' ? 0 : ord === 'LT' ? -1 : 1;\n\t}));\n}\n\nreturn {\n\tNil: Nil,\n\tCons: Cons,\n\tcons: F2(Cons),\n\ttoArray: toArray,\n\tfromArray: fromArray,\n\n\tfoldr: F3(foldr),\n\n\tmap2: F3(map2),\n\tmap3: F4(map3),\n\tmap4: F5(map4),\n\tmap5: F6(map5),\n\tsortBy: F2(sortBy),\n\tsortWith: F2(sortWith)\n};\n\n}();\nvar _elm_lang$core$List$sortWith = _elm_lang$core$Native_List.sortWith;\nvar _elm_lang$core$List$sortBy = _elm_lang$core$Native_List.sortBy;\nvar _elm_lang$core$List$sort = function (xs) {\n\treturn A2(_elm_lang$core$List$sortBy, _elm_lang$core$Basics$identity, xs);\n};\nvar _elm_lang$core$List$singleton = function (value) {\n\treturn {\n\t\tctor: '::',\n\t\t_0: value,\n\t\t_1: {ctor: '[]'}\n\t};\n};\nvar _elm_lang$core$List$drop = F2(\n\tfunction (n, list) {\n\t\tdrop:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\t\treturn list;\n\t\t\t} else {\n\t\t\t\tvar _p0 = list;\n\t\t\t\tif (_p0.ctor === '[]') {\n\t\t\t\t\treturn list;\n\t\t\t\t} else {\n\t\t\t\t\tvar _v1 = n - 1,\n\t\t\t\t\t\t_v2 = _p0._1;\n\t\t\t\t\tn = _v1;\n\t\t\t\t\tlist = _v2;\n\t\t\t\t\tcontinue drop;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$map5 = _elm_lang$core$Native_List.map5;\nvar _elm_lang$core$List$map4 = _elm_lang$core$Native_List.map4;\nvar _elm_lang$core$List$map3 = _elm_lang$core$Native_List.map3;\nvar _elm_lang$core$List$map2 = _elm_lang$core$Native_List.map2;\nvar _elm_lang$core$List$any = F2(\n\tfunction (isOkay, list) {\n\t\tany:\n\t\twhile (true) {\n\t\t\tvar _p1 = list;\n\t\t\tif (_p1.ctor === '[]') {\n\t\t\t\treturn false;\n\t\t\t} else {\n\t\t\t\tif (isOkay(_p1._0)) {\n\t\t\t\t\treturn true;\n\t\t\t\t} else {\n\t\t\t\t\tvar _v4 = isOkay,\n\t\t\t\t\t\t_v5 = _p1._1;\n\t\t\t\t\tisOkay = _v4;\n\t\t\t\t\tlist = _v5;\n\t\t\t\t\tcontinue any;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$all = F2(\n\tfunction (isOkay, list) {\n\t\treturn !A2(\n\t\t\t_elm_lang$core$List$any,\n\t\t\tfunction (_p2) {\n\t\t\t\treturn !isOkay(_p2);\n\t\t\t},\n\t\t\tlist);\n\t});\nvar _elm_lang$core$List$foldr = _elm_lang$core$Native_List.foldr;\nvar _elm_lang$core$List$foldl = F3(\n\tfunction (func, acc, list) {\n\t\tfoldl:\n\t\twhile (true) {\n\t\t\tvar _p3 = list;\n\t\t\tif (_p3.ctor === '[]') {\n\t\t\t\treturn acc;\n\t\t\t} else {\n\t\t\t\tvar _v7 = func,\n\t\t\t\t\t_v8 = A2(func, _p3._0, acc),\n\t\t\t\t\t_v9 = _p3._1;\n\t\t\t\tfunc = _v7;\n\t\t\t\tacc = _v8;\n\t\t\t\tlist = _v9;\n\t\t\t\tcontinue foldl;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$length = function (xs) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (_p4, i) {\n\t\t\t\treturn i + 1;\n\t\t\t}),\n\t\t0,\n\t\txs);\n};\nvar _elm_lang$core$List$sum = function (numbers) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (x, y) {\n\t\t\t\treturn x + y;\n\t\t\t}),\n\t\t0,\n\t\tnumbers);\n};\nvar _elm_lang$core$List$product = function (numbers) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (x, y) {\n\t\t\t\treturn x * y;\n\t\t\t}),\n\t\t1,\n\t\tnumbers);\n};\nvar _elm_lang$core$List$maximum = function (list) {\n\tvar _p5 = list;\n\tif (_p5.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\tA3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$max, _p5._0, _p5._1));\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List$minimum = function (list) {\n\tvar _p6 = list;\n\tif (_p6.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(\n\t\t\tA3(_elm_lang$core$List$foldl, _elm_lang$core$Basics$min, _p6._0, _p6._1));\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List$member = F2(\n\tfunction (x, xs) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$List$any,\n\t\t\tfunction (a) {\n\t\t\t\treturn _elm_lang$core$Native_Utils.eq(a, x);\n\t\t\t},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$isEmpty = function (xs) {\n\tvar _p7 = xs;\n\tif (_p7.ctor === '[]') {\n\t\treturn true;\n\t} else {\n\t\treturn false;\n\t}\n};\nvar _elm_lang$core$List$tail = function (list) {\n\tvar _p8 = list;\n\tif (_p8.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(_p8._1);\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List$head = function (list) {\n\tvar _p9 = list;\n\tif (_p9.ctor === '::') {\n\t\treturn _elm_lang$core$Maybe$Just(_p9._0);\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$List_ops = _elm_lang$core$List_ops || {};\n_elm_lang$core$List_ops['::'] = _elm_lang$core$Native_List.cons;\nvar _elm_lang$core$List$map = F2(\n\tfunction (f, xs) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\tF2(\n\t\t\t\tfunction (x, acc) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: f(x),\n\t\t\t\t\t\t_1: acc\n\t\t\t\t\t};\n\t\t\t\t}),\n\t\t\t{ctor: '[]'},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$filter = F2(\n\tfunction (pred, xs) {\n\t\tvar conditionalCons = F2(\n\t\t\tfunction (front, back) {\n\t\t\t\treturn pred(front) ? {ctor: '::', _0: front, _1: back} : back;\n\t\t\t});\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\tconditionalCons,\n\t\t\t{ctor: '[]'},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$maybeCons = F3(\n\tfunction (f, mx, xs) {\n\t\tvar _p10 = f(mx);\n\t\tif (_p10.ctor === 'Just') {\n\t\t\treturn {ctor: '::', _0: _p10._0, _1: xs};\n\t\t} else {\n\t\t\treturn xs;\n\t\t}\n\t});\nvar _elm_lang$core$List$filterMap = F2(\n\tfunction (f, xs) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\t_elm_lang$core$List$maybeCons(f),\n\t\t\t{ctor: '[]'},\n\t\t\txs);\n\t});\nvar _elm_lang$core$List$reverse = function (list) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (x, y) {\n\t\t\t\treturn {ctor: '::', _0: x, _1: y};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tlist);\n};\nvar _elm_lang$core$List$scanl = F3(\n\tfunction (f, b, xs) {\n\t\tvar scan1 = F2(\n\t\t\tfunction (x, accAcc) {\n\t\t\t\tvar _p11 = accAcc;\n\t\t\t\tif (_p11.ctor === '::') {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: A2(f, x, _p11._0),\n\t\t\t\t\t\t_1: accAcc\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn {ctor: '[]'};\n\t\t\t\t}\n\t\t\t});\n\t\treturn _elm_lang$core$List$reverse(\n\t\t\tA3(\n\t\t\t\t_elm_lang$core$List$foldl,\n\t\t\t\tscan1,\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: b,\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t},\n\t\t\t\txs));\n\t});\nvar _elm_lang$core$List$append = F2(\n\tfunction (xs, ys) {\n\t\tvar _p12 = ys;\n\t\tif (_p12.ctor === '[]') {\n\t\t\treturn xs;\n\t\t} else {\n\t\t\treturn A3(\n\t\t\t\t_elm_lang$core$List$foldr,\n\t\t\t\tF2(\n\t\t\t\t\tfunction (x, y) {\n\t\t\t\t\t\treturn {ctor: '::', _0: x, _1: y};\n\t\t\t\t\t}),\n\t\t\t\tys,\n\t\t\t\txs);\n\t\t}\n\t});\nvar _elm_lang$core$List$concat = function (lists) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldr,\n\t\t_elm_lang$core$List$append,\n\t\t{ctor: '[]'},\n\t\tlists);\n};\nvar _elm_lang$core$List$concatMap = F2(\n\tfunction (f, list) {\n\t\treturn _elm_lang$core$List$concat(\n\t\t\tA2(_elm_lang$core$List$map, f, list));\n\t});\nvar _elm_lang$core$List$partition = F2(\n\tfunction (pred, list) {\n\t\tvar step = F2(\n\t\t\tfunction (x, _p13) {\n\t\t\t\tvar _p14 = _p13;\n\t\t\t\tvar _p16 = _p14._0;\n\t\t\t\tvar _p15 = _p14._1;\n\t\t\t\treturn pred(x) ? {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: {ctor: '::', _0: x, _1: _p16},\n\t\t\t\t\t_1: _p15\n\t\t\t\t} : {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: _p16,\n\t\t\t\t\t_1: {ctor: '::', _0: x, _1: _p15}\n\t\t\t\t};\n\t\t\t});\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldr,\n\t\t\tstep,\n\t\t\t{\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: {ctor: '[]'},\n\t\t\t\t_1: {ctor: '[]'}\n\t\t\t},\n\t\t\tlist);\n\t});\nvar _elm_lang$core$List$unzip = function (pairs) {\n\tvar step = F2(\n\t\tfunction (_p18, _p17) {\n\t\t\tvar _p19 = _p18;\n\t\t\tvar _p20 = _p17;\n\t\t\treturn {\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: {ctor: '::', _0: _p19._0, _1: _p20._0},\n\t\t\t\t_1: {ctor: '::', _0: _p19._1, _1: _p20._1}\n\t\t\t};\n\t\t});\n\treturn A3(\n\t\t_elm_lang$core$List$foldr,\n\t\tstep,\n\t\t{\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: {ctor: '[]'},\n\t\t\t_1: {ctor: '[]'}\n\t\t},\n\t\tpairs);\n};\nvar _elm_lang$core$List$intersperse = F2(\n\tfunction (sep, xs) {\n\t\tvar _p21 = xs;\n\t\tif (_p21.ctor === '[]') {\n\t\t\treturn {ctor: '[]'};\n\t\t} else {\n\t\t\tvar step = F2(\n\t\t\t\tfunction (x, rest) {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: sep,\n\t\t\t\t\t\t_1: {ctor: '::', _0: x, _1: rest}\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\tvar spersed = A3(\n\t\t\t\t_elm_lang$core$List$foldr,\n\t\t\t\tstep,\n\t\t\t\t{ctor: '[]'},\n\t\t\t\t_p21._1);\n\t\t\treturn {ctor: '::', _0: _p21._0, _1: spersed};\n\t\t}\n\t});\nvar _elm_lang$core$List$takeReverse = F3(\n\tfunction (n, list, taken) {\n\t\ttakeReverse:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\t\treturn taken;\n\t\t\t} else {\n\t\t\t\tvar _p22 = list;\n\t\t\t\tif (_p22.ctor === '[]') {\n\t\t\t\t\treturn taken;\n\t\t\t\t} else {\n\t\t\t\t\tvar _v23 = n - 1,\n\t\t\t\t\t\t_v24 = _p22._1,\n\t\t\t\t\t\t_v25 = {ctor: '::', _0: _p22._0, _1: taken};\n\t\t\t\t\tn = _v23;\n\t\t\t\t\tlist = _v24;\n\t\t\t\t\ttaken = _v25;\n\t\t\t\t\tcontinue takeReverse;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$takeTailRec = F2(\n\tfunction (n, list) {\n\t\treturn _elm_lang$core$List$reverse(\n\t\t\tA3(\n\t\t\t\t_elm_lang$core$List$takeReverse,\n\t\t\t\tn,\n\t\t\t\tlist,\n\t\t\t\t{ctor: '[]'}));\n\t});\nvar _elm_lang$core$List$takeFast = F3(\n\tfunction (ctr, n, list) {\n\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\treturn {ctor: '[]'};\n\t\t} else {\n\t\t\tvar _p23 = {ctor: '_Tuple2', _0: n, _1: list};\n\t\t\t_v26_5:\n\t\t\tdo {\n\t\t\t\t_v26_1:\n\t\t\t\tdo {\n\t\t\t\t\tif (_p23.ctor === '_Tuple2') {\n\t\t\t\t\t\tif (_p23._1.ctor === '[]') {\n\t\t\t\t\t\t\treturn list;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_p23._1._1.ctor === '::') {\n\t\t\t\t\t\t\t\tswitch (_p23._0) {\n\t\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\t\tbreak _v26_1;\n\t\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._0,\n\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\t\tif (_p23._1._1._1.ctor === '::') {\n\t\t\t\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p23._1._1._1._0,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\tif ((_p23._1._1._1.ctor === '::') && (_p23._1._1._1._1.ctor === '::')) {\n\t\t\t\t\t\t\t\t\t\t\tvar _p28 = _p23._1._1._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p27 = _p23._1._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p26 = _p23._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p25 = _p23._1._1._1._1._0;\n\t\t\t\t\t\t\t\t\t\t\tvar _p24 = _p23._1._1._1._1._1;\n\t\t\t\t\t\t\t\t\t\t\treturn (_elm_lang$core$Native_Utils.cmp(ctr, 1000) > 0) ? {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p26,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p27,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p25,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: A2(_elm_lang$core$List$takeTailRec, n - 4, _p24)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} : {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: _p26,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p27,\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p28,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_0: _p25,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t_1: A3(_elm_lang$core$List$takeFast, ctr + 1, n - 4, _p24)\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (_p23._0 === 1) {\n\t\t\t\t\t\t\t\t\tbreak _v26_1;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak _v26_5;\n\t\t\t\t\t}\n\t\t\t\t} while(false);\n\t\t\t\treturn {\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: _p23._1._0,\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t};\n\t\t\t} while(false);\n\t\t\treturn list;\n\t\t}\n\t});\nvar _elm_lang$core$List$take = F2(\n\tfunction (n, list) {\n\t\treturn A3(_elm_lang$core$List$takeFast, 0, n, list);\n\t});\nvar _elm_lang$core$List$repeatHelp = F3(\n\tfunction (result, n, value) {\n\t\trepeatHelp:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(n, 0) < 1) {\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tvar _v27 = {ctor: '::', _0: value, _1: result},\n\t\t\t\t\t_v28 = n - 1,\n\t\t\t\t\t_v29 = value;\n\t\t\t\tresult = _v27;\n\t\t\t\tn = _v28;\n\t\t\t\tvalue = _v29;\n\t\t\t\tcontinue repeatHelp;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$repeat = F2(\n\tfunction (n, value) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$repeatHelp,\n\t\t\t{ctor: '[]'},\n\t\t\tn,\n\t\t\tvalue);\n\t});\nvar _elm_lang$core$List$rangeHelp = F3(\n\tfunction (lo, hi, list) {\n\t\trangeHelp:\n\t\twhile (true) {\n\t\t\tif (_elm_lang$core$Native_Utils.cmp(lo, hi) < 1) {\n\t\t\t\tvar _v30 = lo,\n\t\t\t\t\t_v31 = hi - 1,\n\t\t\t\t\t_v32 = {ctor: '::', _0: hi, _1: list};\n\t\t\t\tlo = _v30;\n\t\t\t\thi = _v31;\n\t\t\t\tlist = _v32;\n\t\t\t\tcontinue rangeHelp;\n\t\t\t} else {\n\t\t\t\treturn list;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$List$range = F2(\n\tfunction (lo, hi) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$rangeHelp,\n\t\t\tlo,\n\t\t\thi,\n\t\t\t{ctor: '[]'});\n\t});\nvar _elm_lang$core$List$indexedMap = F2(\n\tfunction (f, xs) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$map2,\n\t\t\tf,\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$List$range,\n\t\t\t\t0,\n\t\t\t\t_elm_lang$core$List$length(xs) - 1),\n\t\t\txs);\n\t});\n\nvar _elm_lang$core$Array$append = _elm_lang$core$Native_Array.append;\nvar _elm_lang$core$Array$length = _elm_lang$core$Native_Array.length;\nvar _elm_lang$core$Array$isEmpty = function (array) {\n\treturn _elm_lang$core$Native_Utils.eq(\n\t\t_elm_lang$core$Array$length(array),\n\t\t0);\n};\nvar _elm_lang$core$Array$slice = _elm_lang$core$Native_Array.slice;\nvar _elm_lang$core$Array$set = _elm_lang$core$Native_Array.set;\nvar _elm_lang$core$Array$get = F2(\n\tfunction (i, array) {\n\t\treturn ((_elm_lang$core$Native_Utils.cmp(0, i) < 1) && (_elm_lang$core$Native_Utils.cmp(\n\t\t\ti,\n\t\t\t_elm_lang$core$Native_Array.length(array)) < 0)) ? _elm_lang$core$Maybe$Just(\n\t\t\tA2(_elm_lang$core$Native_Array.get, i, array)) : _elm_lang$core$Maybe$Nothing;\n\t});\nvar _elm_lang$core$Array$push = _elm_lang$core$Native_Array.push;\nvar _elm_lang$core$Array$empty = _elm_lang$core$Native_Array.empty;\nvar _elm_lang$core$Array$filter = F2(\n\tfunction (isOkay, arr) {\n\t\tvar update = F2(\n\t\t\tfunction (x, xs) {\n\t\t\t\treturn isOkay(x) ? A2(_elm_lang$core$Native_Array.push, x, xs) : xs;\n\t\t\t});\n\t\treturn A3(_elm_lang$core$Native_Array.foldl, update, _elm_lang$core$Native_Array.empty, arr);\n\t});\nvar _elm_lang$core$Array$foldr = _elm_lang$core$Native_Array.foldr;\nvar _elm_lang$core$Array$foldl = _elm_lang$core$Native_Array.foldl;\nvar _elm_lang$core$Array$indexedMap = _elm_lang$core$Native_Array.indexedMap;\nvar _elm_lang$core$Array$map = _elm_lang$core$Native_Array.map;\nvar _elm_lang$core$Array$toIndexedList = function (array) {\n\treturn A3(\n\t\t_elm_lang$core$List$map2,\n\t\tF2(\n\t\t\tfunction (v0, v1) {\n\t\t\t\treturn {ctor: '_Tuple2', _0: v0, _1: v1};\n\t\t\t}),\n\t\tA2(\n\t\t\t_elm_lang$core$List$range,\n\t\t\t0,\n\t\t\t_elm_lang$core$Native_Array.length(array) - 1),\n\t\t_elm_lang$core$Native_Array.toList(array));\n};\nvar _elm_lang$core$Array$toList = _elm_lang$core$Native_Array.toList;\nvar _elm_lang$core$Array$fromList = _elm_lang$core$Native_Array.fromList;\nvar _elm_lang$core$Array$initialize = _elm_lang$core$Native_Array.initialize;\nvar _elm_lang$core$Array$repeat = F2(\n\tfunction (n, e) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Array$initialize,\n\t\t\tn,\n\t\t\t_elm_lang$core$Basics$always(e));\n\t});\nvar _elm_lang$core$Array$Array = {ctor: 'Array'};\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Char = function() {\n\nreturn {\n\tfromCode: function(c) { return _elm_lang$core$Native_Utils.chr(String.fromCharCode(c)); },\n\ttoCode: function(c) { return c.charCodeAt(0); },\n\ttoUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toUpperCase()); },\n\ttoLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLowerCase()); },\n\ttoLocaleUpper: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleUpperCase()); },\n\ttoLocaleLower: function(c) { return _elm_lang$core$Native_Utils.chr(c.toLocaleLowerCase()); }\n};\n\n}();\nvar _elm_lang$core$Char$fromCode = _elm_lang$core$Native_Char.fromCode;\nvar _elm_lang$core$Char$toCode = _elm_lang$core$Native_Char.toCode;\nvar _elm_lang$core$Char$toLocaleLower = _elm_lang$core$Native_Char.toLocaleLower;\nvar _elm_lang$core$Char$toLocaleUpper = _elm_lang$core$Native_Char.toLocaleUpper;\nvar _elm_lang$core$Char$toLower = _elm_lang$core$Native_Char.toLower;\nvar _elm_lang$core$Char$toUpper = _elm_lang$core$Native_Char.toUpper;\nvar _elm_lang$core$Char$isBetween = F3(\n\tfunction (low, high, $char) {\n\t\tvar code = _elm_lang$core$Char$toCode($char);\n\t\treturn (_elm_lang$core$Native_Utils.cmp(\n\t\t\tcode,\n\t\t\t_elm_lang$core$Char$toCode(low)) > -1) && (_elm_lang$core$Native_Utils.cmp(\n\t\t\tcode,\n\t\t\t_elm_lang$core$Char$toCode(high)) < 1);\n\t});\nvar _elm_lang$core$Char$isUpper = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('A'),\n\t_elm_lang$core$Native_Utils.chr('Z'));\nvar _elm_lang$core$Char$isLower = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('a'),\n\t_elm_lang$core$Native_Utils.chr('z'));\nvar _elm_lang$core$Char$isDigit = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('0'),\n\t_elm_lang$core$Native_Utils.chr('9'));\nvar _elm_lang$core$Char$isOctDigit = A2(\n\t_elm_lang$core$Char$isBetween,\n\t_elm_lang$core$Native_Utils.chr('0'),\n\t_elm_lang$core$Native_Utils.chr('7'));\nvar _elm_lang$core$Char$isHexDigit = function ($char) {\n\treturn _elm_lang$core$Char$isDigit($char) || (A3(\n\t\t_elm_lang$core$Char$isBetween,\n\t\t_elm_lang$core$Native_Utils.chr('a'),\n\t\t_elm_lang$core$Native_Utils.chr('f'),\n\t\t$char) || A3(\n\t\t_elm_lang$core$Char$isBetween,\n\t\t_elm_lang$core$Native_Utils.chr('A'),\n\t\t_elm_lang$core$Native_Utils.chr('F'),\n\t\t$char));\n};\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Scheduler = function() {\n\nvar MAX_STEPS = 10000;\n\n\n// TASKS\n\nfunction succeed(value)\n{\n\treturn {\n\t\tctor: '_Task_succeed',\n\t\tvalue: value\n\t};\n}\n\nfunction fail(error)\n{\n\treturn {\n\t\tctor: '_Task_fail',\n\t\tvalue: error\n\t};\n}\n\nfunction nativeBinding(callback)\n{\n\treturn {\n\t\tctor: '_Task_nativeBinding',\n\t\tcallback: callback,\n\t\tcancel: null\n\t};\n}\n\nfunction andThen(callback, task)\n{\n\treturn {\n\t\tctor: '_Task_andThen',\n\t\tcallback: callback,\n\t\ttask: task\n\t};\n}\n\nfunction onError(callback, task)\n{\n\treturn {\n\t\tctor: '_Task_onError',\n\t\tcallback: callback,\n\t\ttask: task\n\t};\n}\n\nfunction receive(callback)\n{\n\treturn {\n\t\tctor: '_Task_receive',\n\t\tcallback: callback\n\t};\n}\n\n\n// PROCESSES\n\nfunction rawSpawn(task)\n{\n\tvar process = {\n\t\tctor: '_Process',\n\t\tid: _elm_lang$core$Native_Utils.guid(),\n\t\troot: task,\n\t\tstack: null,\n\t\tmailbox: []\n\t};\n\n\tenqueue(process);\n\n\treturn process;\n}\n\nfunction spawn(task)\n{\n\treturn nativeBinding(function(callback) {\n\t\tvar process = rawSpawn(task);\n\t\tcallback(succeed(process));\n\t});\n}\n\nfunction rawSend(process, msg)\n{\n\tprocess.mailbox.push(msg);\n\tenqueue(process);\n}\n\nfunction send(process, msg)\n{\n\treturn nativeBinding(function(callback) {\n\t\trawSend(process, msg);\n\t\tcallback(succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\nfunction kill(process)\n{\n\treturn nativeBinding(function(callback) {\n\t\tvar root = process.root;\n\t\tif (root.ctor === '_Task_nativeBinding' && root.cancel)\n\t\t{\n\t\t\troot.cancel();\n\t\t}\n\n\t\tprocess.root = null;\n\n\t\tcallback(succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\nfunction sleep(time)\n{\n\treturn nativeBinding(function(callback) {\n\t\tvar id = setTimeout(function() {\n\t\t\tcallback(succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t\t}, time);\n\n\t\treturn function() { clearTimeout(id); };\n\t});\n}\n\n\n// STEP PROCESSES\n\nfunction step(numSteps, process)\n{\n\twhile (numSteps < MAX_STEPS)\n\t{\n\t\tvar ctor = process.root.ctor;\n\n\t\tif (ctor === '_Task_succeed')\n\t\t{\n\t\t\twhile (process.stack && process.stack.ctor === '_Task_onError')\n\t\t\t{\n\t\t\t\tprocess.stack = process.stack.rest;\n\t\t\t}\n\t\t\tif (process.stack === null)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprocess.root = process.stack.callback(process.root.value);\n\t\t\tprocess.stack = process.stack.rest;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_fail')\n\t\t{\n\t\t\twhile (process.stack && process.stack.ctor === '_Task_andThen')\n\t\t\t{\n\t\t\t\tprocess.stack = process.stack.rest;\n\t\t\t}\n\t\t\tif (process.stack === null)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprocess.root = process.stack.callback(process.root.value);\n\t\t\tprocess.stack = process.stack.rest;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_andThen')\n\t\t{\n\t\t\tprocess.stack = {\n\t\t\t\tctor: '_Task_andThen',\n\t\t\t\tcallback: process.root.callback,\n\t\t\t\trest: process.stack\n\t\t\t};\n\t\t\tprocess.root = process.root.task;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_onError')\n\t\t{\n\t\t\tprocess.stack = {\n\t\t\t\tctor: '_Task_onError',\n\t\t\t\tcallback: process.root.callback,\n\t\t\t\trest: process.stack\n\t\t\t};\n\t\t\tprocess.root = process.root.task;\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (ctor === '_Task_nativeBinding')\n\t\t{\n\t\t\tprocess.root.cancel = process.root.callback(function(newRoot) {\n\t\t\t\tprocess.root = newRoot;\n\t\t\t\tenqueue(process);\n\t\t\t});\n\n\t\t\tbreak;\n\t\t}\n\n\t\tif (ctor === '_Task_receive')\n\t\t{\n\t\t\tvar mailbox = process.mailbox;\n\t\t\tif (mailbox.length === 0)\n\t\t\t{\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tprocess.root = process.root.callback(mailbox.shift());\n\t\t\t++numSteps;\n\t\t\tcontinue;\n\t\t}\n\n\t\tthrow new Error(ctor);\n\t}\n\n\tif (numSteps < MAX_STEPS)\n\t{\n\t\treturn numSteps + 1;\n\t}\n\tenqueue(process);\n\n\treturn numSteps;\n}\n\n\n// WORK QUEUE\n\nvar working = false;\nvar workQueue = [];\n\nfunction enqueue(process)\n{\n\tworkQueue.push(process);\n\n\tif (!working)\n\t{\n\t\tsetTimeout(work, 0);\n\t\tworking = true;\n\t}\n}\n\nfunction work()\n{\n\tvar numSteps = 0;\n\tvar process;\n\twhile (numSteps < MAX_STEPS && (process = workQueue.shift()))\n\t{\n\t\tif (process.root)\n\t\t{\n\t\t\tnumSteps = step(numSteps, process);\n\t\t}\n\t}\n\tif (!process)\n\t{\n\t\tworking = false;\n\t\treturn;\n\t}\n\tsetTimeout(work, 0);\n}\n\n\nreturn {\n\tsucceed: succeed,\n\tfail: fail,\n\tnativeBinding: nativeBinding,\n\tandThen: F2(andThen),\n\tonError: F2(onError),\n\treceive: receive,\n\n\tspawn: spawn,\n\tkill: kill,\n\tsleep: sleep,\n\tsend: F2(send),\n\n\trawSpawn: rawSpawn,\n\trawSend: rawSend\n};\n\n}();\n//import //\n\nvar _elm_lang$core$Native_Platform = function() {\n\n\n// PROGRAMS\n\nfunction program(impl)\n{\n\treturn function(flagDecoder)\n\t{\n\t\treturn function(object, moduleName)\n\t\t{\n\t\t\tobject['worker'] = function worker(flags)\n\t\t\t{\n\t\t\t\tif (typeof flags !== 'undefined')\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'The `' + moduleName + '` module does not need flags.\\n'\n\t\t\t\t\t\t+ 'Call ' + moduleName + '.worker() with no arguments and you should be all set!'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn initialize(\n\t\t\t\t\timpl.init,\n\t\t\t\t\timpl.update,\n\t\t\t\t\timpl.subscriptions,\n\t\t\t\t\trenderer\n\t\t\t\t);\n\t\t\t};\n\t\t};\n\t};\n}\n\nfunction programWithFlags(impl)\n{\n\treturn function(flagDecoder)\n\t{\n\t\treturn function(object, moduleName)\n\t\t{\n\t\t\tobject['worker'] = function worker(flags)\n\t\t\t{\n\t\t\t\tif (typeof flagDecoder === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Are you trying to sneak a Never value into Elm? Trickster!\\n'\n\t\t\t\t\t\t+ 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\\n'\n\t\t\t\t\t\t+ 'Use `program` instead if you do not want flags.'\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tvar result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);\n\t\t\t\tif (result.ctor === 'Err')\n\t\t\t\t{\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\tmoduleName + '.worker(...) was called with an unexpected argument.\\n'\n\t\t\t\t\t\t+ 'I tried to convert it to an Elm value, but ran into this problem:\\n\\n'\n\t\t\t\t\t\t+ result._0\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn initialize(\n\t\t\t\t\timpl.init(result._0),\n\t\t\t\t\timpl.update,\n\t\t\t\t\timpl.subscriptions,\n\t\t\t\t\trenderer\n\t\t\t\t);\n\t\t\t};\n\t\t};\n\t};\n}\n\nfunction renderer(enqueue, _)\n{\n\treturn function(_) {};\n}\n\n\n// HTML TO PROGRAM\n\nfunction htmlToProgram(vnode)\n{\n\tvar emptyBag = batch(_elm_lang$core$Native_List.Nil);\n\tvar noChange = _elm_lang$core$Native_Utils.Tuple2(\n\t\t_elm_lang$core$Native_Utils.Tuple0,\n\t\temptyBag\n\t);\n\n\treturn _elm_lang$virtual_dom$VirtualDom$program({\n\t\tinit: noChange,\n\t\tview: function(model) { return main; },\n\t\tupdate: F2(function(msg, model) { return noChange; }),\n\t\tsubscriptions: function (model) { return emptyBag; }\n\t});\n}\n\n\n// INITIALIZE A PROGRAM\n\nfunction initialize(init, update, subscriptions, renderer)\n{\n\t// ambient state\n\tvar managers = {};\n\tvar updateView;\n\n\t// init and update state in main process\n\tvar initApp = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {\n\t\tvar model = init._0;\n\t\tupdateView = renderer(enqueue, model);\n\t\tvar cmds = init._1;\n\t\tvar subs = subscriptions(model);\n\t\tdispatchEffects(managers, cmds, subs);\n\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(model));\n\t});\n\n\tfunction onMessage(msg, model)\n\t{\n\t\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback) {\n\t\t\tvar results = A2(update, msg, model);\n\t\t\tmodel = results._0;\n\t\t\tupdateView(model);\n\t\t\tvar cmds = results._1;\n\t\t\tvar subs = subscriptions(model);\n\t\t\tdispatchEffects(managers, cmds, subs);\n\t\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(model));\n\t\t});\n\t}\n\n\tvar mainProcess = spawnLoop(initApp, onMessage);\n\n\tfunction enqueue(msg)\n\t{\n\t\t_elm_lang$core$Native_Scheduler.rawSend(mainProcess, msg);\n\t}\n\n\tvar ports = setupEffects(managers, enqueue);\n\n\treturn ports ? { ports: ports } : {};\n}\n\n\n// EFFECT MANAGERS\n\nvar effectManagers = {};\n\nfunction setupEffects(managers, callback)\n{\n\tvar ports;\n\n\t// setup all necessary effect managers\n\tfor (var key in effectManagers)\n\t{\n\t\tvar manager = effectManagers[key];\n\n\t\tif (manager.isForeign)\n\t\t{\n\t\t\tports = ports || {};\n\t\t\tports[key] = manager.tag === 'cmd'\n\t\t\t\t? setupOutgoingPort(key)\n\t\t\t\t: setupIncomingPort(key, callback);\n\t\t}\n\n\t\tmanagers[key] = makeManager(manager, callback);\n\t}\n\n\treturn ports;\n}\n\nfunction makeManager(info, callback)\n{\n\tvar router = {\n\t\tmain: callback,\n\t\tself: undefined\n\t};\n\n\tvar tag = info.tag;\n\tvar onEffects = info.onEffects;\n\tvar onSelfMsg = info.onSelfMsg;\n\n\tfunction onMessage(msg, state)\n\t{\n\t\tif (msg.ctor === 'self')\n\t\t{\n\t\t\treturn A3(onSelfMsg, router, msg._0, state);\n\t\t}\n\n\t\tvar fx = msg._0;\n\t\tswitch (tag)\n\t\t{\n\t\t\tcase 'cmd':\n\t\t\t\treturn A3(onEffects, router, fx.cmds, state);\n\n\t\t\tcase 'sub':\n\t\t\t\treturn A3(onEffects, router, fx.subs, state);\n\n\t\t\tcase 'fx':\n\t\t\t\treturn A4(onEffects, router, fx.cmds, fx.subs, state);\n\t\t}\n\t}\n\n\tvar process = spawnLoop(info.init, onMessage);\n\trouter.self = process;\n\treturn process;\n}\n\nfunction sendToApp(router, msg)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\trouter.main(msg);\n\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\nfunction sendToSelf(router, msg)\n{\n\treturn A2(_elm_lang$core$Native_Scheduler.send, router.self, {\n\t\tctor: 'self',\n\t\t_0: msg\n\t});\n}\n\n\n// HELPER for STATEFUL LOOPS\n\nfunction spawnLoop(init, onMessage)\n{\n\tvar andThen = _elm_lang$core$Native_Scheduler.andThen;\n\n\tfunction loop(state)\n\t{\n\t\tvar handleMsg = _elm_lang$core$Native_Scheduler.receive(function(msg) {\n\t\t\treturn onMessage(msg, state);\n\t\t});\n\t\treturn A2(andThen, loop, handleMsg);\n\t}\n\n\tvar task = A2(andThen, loop, init);\n\n\treturn _elm_lang$core$Native_Scheduler.rawSpawn(task);\n}\n\n\n// BAGS\n\nfunction leaf(home)\n{\n\treturn function(value)\n\t{\n\t\treturn {\n\t\t\ttype: 'leaf',\n\t\t\thome: home,\n\t\t\tvalue: value\n\t\t};\n\t};\n}\n\nfunction batch(list)\n{\n\treturn {\n\t\ttype: 'node',\n\t\tbranches: list\n\t};\n}\n\nfunction map(tagger, bag)\n{\n\treturn {\n\t\ttype: 'map',\n\t\ttagger: tagger,\n\t\ttree: bag\n\t}\n}\n\n\n// PIPE BAGS INTO EFFECT MANAGERS\n\nfunction dispatchEffects(managers, cmdBag, subBag)\n{\n\tvar effectsDict = {};\n\tgatherEffects(true, cmdBag, effectsDict, null);\n\tgatherEffects(false, subBag, effectsDict, null);\n\n\tfor (var home in managers)\n\t{\n\t\tvar fx = home in effectsDict\n\t\t\t? effectsDict[home]\n\t\t\t: {\n\t\t\t\tcmds: _elm_lang$core$Native_List.Nil,\n\t\t\t\tsubs: _elm_lang$core$Native_List.Nil\n\t\t\t};\n\n\t\t_elm_lang$core$Native_Scheduler.rawSend(managers[home], { ctor: 'fx', _0: fx });\n\t}\n}\n\nfunction gatherEffects(isCmd, bag, effectsDict, taggers)\n{\n\tswitch (bag.type)\n\t{\n\t\tcase 'leaf':\n\t\t\tvar home = bag.home;\n\t\t\tvar effect = toEffect(isCmd, home, taggers, bag.value);\n\t\t\teffectsDict[home] = insert(isCmd, effect, effectsDict[home]);\n\t\t\treturn;\n\n\t\tcase 'node':\n\t\t\tvar list = bag.branches;\n\t\t\twhile (list.ctor !== '[]')\n\t\t\t{\n\t\t\t\tgatherEffects(isCmd, list._0, effectsDict, taggers);\n\t\t\t\tlist = list._1;\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase 'map':\n\t\t\tgatherEffects(isCmd, bag.tree, effectsDict, {\n\t\t\t\ttagger: bag.tagger,\n\t\t\t\trest: taggers\n\t\t\t});\n\t\t\treturn;\n\t}\n}\n\nfunction toEffect(isCmd, home, taggers, value)\n{\n\tfunction applyTaggers(x)\n\t{\n\t\tvar temp = taggers;\n\t\twhile (temp)\n\t\t{\n\t\t\tx = temp.tagger(x);\n\t\t\ttemp = temp.rest;\n\t\t}\n\t\treturn x;\n\t}\n\n\tvar map = isCmd\n\t\t? effectManagers[home].cmdMap\n\t\t: effectManagers[home].subMap;\n\n\treturn A2(map, applyTaggers, value)\n}\n\nfunction insert(isCmd, newEffect, effects)\n{\n\teffects = effects || {\n\t\tcmds: _elm_lang$core$Native_List.Nil,\n\t\tsubs: _elm_lang$core$Native_List.Nil\n\t};\n\tif (isCmd)\n\t{\n\t\teffects.cmds = _elm_lang$core$Native_List.Cons(newEffect, effects.cmds);\n\t\treturn effects;\n\t}\n\teffects.subs = _elm_lang$core$Native_List.Cons(newEffect, effects.subs);\n\treturn effects;\n}\n\n\n// PORTS\n\nfunction checkPortName(name)\n{\n\tif (name in effectManagers)\n\t{\n\t\tthrow new Error('There can only be one port named `' + name + '`, but your program has multiple.');\n\t}\n}\n\n\n// OUTGOING PORTS\n\nfunction outgoingPort(name, converter)\n{\n\tcheckPortName(name);\n\teffectManagers[name] = {\n\t\ttag: 'cmd',\n\t\tcmdMap: outgoingPortMap,\n\t\tconverter: converter,\n\t\tisForeign: true\n\t};\n\treturn leaf(name);\n}\n\nvar outgoingPortMap = F2(function cmdMap(tagger, value) {\n\treturn value;\n});\n\nfunction setupOutgoingPort(name)\n{\n\tvar subs = [];\n\tvar converter = effectManagers[name].converter;\n\n\t// CREATE MANAGER\n\n\tvar init = _elm_lang$core$Native_Scheduler.succeed(null);\n\n\tfunction onEffects(router, cmdList, state)\n\t{\n\t\twhile (cmdList.ctor !== '[]')\n\t\t{\n\t\t\t// grab a separate reference to subs in case unsubscribe is called\n\t\t\tvar currentSubs = subs;\n\t\t\tvar value = converter(cmdList._0);\n\t\t\tfor (var i = 0; i < currentSubs.length; i++)\n\t\t\t{\n\t\t\t\tcurrentSubs[i](value);\n\t\t\t}\n\t\t\tcmdList = cmdList._1;\n\t\t}\n\t\treturn init;\n\t}\n\n\teffectManagers[name].init = init;\n\teffectManagers[name].onEffects = F3(onEffects);\n\n\t// PUBLIC API\n\n\tfunction subscribe(callback)\n\t{\n\t\tsubs.push(callback);\n\t}\n\n\tfunction unsubscribe(callback)\n\t{\n\t\t// copy subs into a new array in case unsubscribe is called within a\n\t\t// subscribed callback\n\t\tsubs = subs.slice();\n\t\tvar index = subs.indexOf(callback);\n\t\tif (index >= 0)\n\t\t{\n\t\t\tsubs.splice(index, 1);\n\t\t}\n\t}\n\n\treturn {\n\t\tsubscribe: subscribe,\n\t\tunsubscribe: unsubscribe\n\t};\n}\n\n\n// INCOMING PORTS\n\nfunction incomingPort(name, converter)\n{\n\tcheckPortName(name);\n\teffectManagers[name] = {\n\t\ttag: 'sub',\n\t\tsubMap: incomingPortMap,\n\t\tconverter: converter,\n\t\tisForeign: true\n\t};\n\treturn leaf(name);\n}\n\nvar incomingPortMap = F2(function subMap(tagger, finalTagger)\n{\n\treturn function(value)\n\t{\n\t\treturn tagger(finalTagger(value));\n\t};\n});\n\nfunction setupIncomingPort(name, callback)\n{\n\tvar sentBeforeInit = [];\n\tvar subs = _elm_lang$core$Native_List.Nil;\n\tvar converter = effectManagers[name].converter;\n\tvar currentOnEffects = preInitOnEffects;\n\tvar currentSend = preInitSend;\n\n\t// CREATE MANAGER\n\n\tvar init = _elm_lang$core$Native_Scheduler.succeed(null);\n\n\tfunction preInitOnEffects(router, subList, state)\n\t{\n\t\tvar postInitResult = postInitOnEffects(router, subList, state);\n\n\t\tfor(var i = 0; i < sentBeforeInit.length; i++)\n\t\t{\n\t\t\tpostInitSend(sentBeforeInit[i]);\n\t\t}\n\n\t\tsentBeforeInit = null; // to release objects held in queue\n\t\tcurrentSend = postInitSend;\n\t\tcurrentOnEffects = postInitOnEffects;\n\t\treturn postInitResult;\n\t}\n\n\tfunction postInitOnEffects(router, subList, state)\n\t{\n\t\tsubs = subList;\n\t\treturn init;\n\t}\n\n\tfunction onEffects(router, subList, state)\n\t{\n\t\treturn currentOnEffects(router, subList, state);\n\t}\n\n\teffectManagers[name].init = init;\n\teffectManagers[name].onEffects = F3(onEffects);\n\n\t// PUBLIC API\n\n\tfunction preInitSend(value)\n\t{\n\t\tsentBeforeInit.push(value);\n\t}\n\n\tfunction postInitSend(value)\n\t{\n\t\tvar temp = subs;\n\t\twhile (temp.ctor !== '[]')\n\t\t{\n\t\t\tcallback(temp._0(value));\n\t\t\ttemp = temp._1;\n\t\t}\n\t}\n\n\tfunction send(incomingValue)\n\t{\n\t\tvar result = A2(_elm_lang$core$Json_Decode$decodeValue, converter, incomingValue);\n\t\tif (result.ctor === 'Err')\n\t\t{\n\t\t\tthrow new Error('Trying to send an unexpected type of value through port `' + name + '`:\\n' + result._0);\n\t\t}\n\n\t\tcurrentSend(result._0);\n\t}\n\n\treturn { send: send };\n}\n\nreturn {\n\t// routers\n\tsendToApp: F2(sendToApp),\n\tsendToSelf: F2(sendToSelf),\n\n\t// global setup\n\teffectManagers: effectManagers,\n\toutgoingPort: outgoingPort,\n\tincomingPort: incomingPort,\n\n\thtmlToProgram: htmlToProgram,\n\tprogram: program,\n\tprogramWithFlags: programWithFlags,\n\tinitialize: initialize,\n\n\t// effect bags\n\tleaf: leaf,\n\tbatch: batch,\n\tmap: F2(map)\n};\n\n}();\n\nvar _elm_lang$core$Platform_Cmd$batch = _elm_lang$core$Native_Platform.batch;\nvar _elm_lang$core$Platform_Cmd$none = _elm_lang$core$Platform_Cmd$batch(\n\t{ctor: '[]'});\nvar _elm_lang$core$Platform_Cmd_ops = _elm_lang$core$Platform_Cmd_ops || {};\n_elm_lang$core$Platform_Cmd_ops['!'] = F2(\n\tfunction (model, commands) {\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: model,\n\t\t\t_1: _elm_lang$core$Platform_Cmd$batch(commands)\n\t\t};\n\t});\nvar _elm_lang$core$Platform_Cmd$map = _elm_lang$core$Native_Platform.map;\nvar _elm_lang$core$Platform_Cmd$Cmd = {ctor: 'Cmd'};\n\nvar _elm_lang$core$Platform_Sub$batch = _elm_lang$core$Native_Platform.batch;\nvar _elm_lang$core$Platform_Sub$none = _elm_lang$core$Platform_Sub$batch(\n\t{ctor: '[]'});\nvar _elm_lang$core$Platform_Sub$map = _elm_lang$core$Native_Platform.map;\nvar _elm_lang$core$Platform_Sub$Sub = {ctor: 'Sub'};\n\nvar _elm_lang$core$Platform$hack = _elm_lang$core$Native_Scheduler.succeed;\nvar _elm_lang$core$Platform$sendToSelf = _elm_lang$core$Native_Platform.sendToSelf;\nvar _elm_lang$core$Platform$sendToApp = _elm_lang$core$Native_Platform.sendToApp;\nvar _elm_lang$core$Platform$programWithFlags = _elm_lang$core$Native_Platform.programWithFlags;\nvar _elm_lang$core$Platform$program = _elm_lang$core$Native_Platform.program;\nvar _elm_lang$core$Platform$Program = {ctor: 'Program'};\nvar _elm_lang$core$Platform$Task = {ctor: 'Task'};\nvar _elm_lang$core$Platform$ProcessId = {ctor: 'ProcessId'};\nvar _elm_lang$core$Platform$Router = {ctor: 'Router'};\n\nvar _elm_lang$core$Result$toMaybe = function (result) {\n\tvar _p0 = result;\n\tif (_p0.ctor === 'Ok') {\n\t\treturn _elm_lang$core$Maybe$Just(_p0._0);\n\t} else {\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n};\nvar _elm_lang$core$Result$withDefault = F2(\n\tfunction (def, result) {\n\t\tvar _p1 = result;\n\t\tif (_p1.ctor === 'Ok') {\n\t\t\treturn _p1._0;\n\t\t} else {\n\t\t\treturn def;\n\t\t}\n\t});\nvar _elm_lang$core$Result$Err = function (a) {\n\treturn {ctor: 'Err', _0: a};\n};\nvar _elm_lang$core$Result$andThen = F2(\n\tfunction (callback, result) {\n\t\tvar _p2 = result;\n\t\tif (_p2.ctor === 'Ok') {\n\t\t\treturn callback(_p2._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p2._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$Ok = function (a) {\n\treturn {ctor: 'Ok', _0: a};\n};\nvar _elm_lang$core$Result$map = F2(\n\tfunction (func, ra) {\n\t\tvar _p3 = ra;\n\t\tif (_p3.ctor === 'Ok') {\n\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\tfunc(_p3._0));\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p3._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map2 = F3(\n\tfunction (func, ra, rb) {\n\t\tvar _p4 = {ctor: '_Tuple2', _0: ra, _1: rb};\n\t\tif (_p4._0.ctor === 'Ok') {\n\t\t\tif (_p4._1.ctor === 'Ok') {\n\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\tA2(func, _p4._0._0, _p4._1._0));\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p4._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p4._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map3 = F4(\n\tfunction (func, ra, rb, rc) {\n\t\tvar _p5 = {ctor: '_Tuple3', _0: ra, _1: rb, _2: rc};\n\t\tif (_p5._0.ctor === 'Ok') {\n\t\t\tif (_p5._1.ctor === 'Ok') {\n\t\t\t\tif (_p5._2.ctor === 'Ok') {\n\t\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\t\tA3(func, _p5._0._0, _p5._1._0, _p5._2._0));\n\t\t\t\t} else {\n\t\t\t\t\treturn _elm_lang$core$Result$Err(_p5._2._0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p5._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p5._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map4 = F5(\n\tfunction (func, ra, rb, rc, rd) {\n\t\tvar _p6 = {ctor: '_Tuple4', _0: ra, _1: rb, _2: rc, _3: rd};\n\t\tif (_p6._0.ctor === 'Ok') {\n\t\t\tif (_p6._1.ctor === 'Ok') {\n\t\t\t\tif (_p6._2.ctor === 'Ok') {\n\t\t\t\t\tif (_p6._3.ctor === 'Ok') {\n\t\t\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\t\t\tA4(func, _p6._0._0, _p6._1._0, _p6._2._0, _p6._3._0));\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn _elm_lang$core$Result$Err(_p6._3._0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn _elm_lang$core$Result$Err(_p6._2._0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p6._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p6._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$map5 = F6(\n\tfunction (func, ra, rb, rc, rd, re) {\n\t\tvar _p7 = {ctor: '_Tuple5', _0: ra, _1: rb, _2: rc, _3: rd, _4: re};\n\t\tif (_p7._0.ctor === 'Ok') {\n\t\t\tif (_p7._1.ctor === 'Ok') {\n\t\t\t\tif (_p7._2.ctor === 'Ok') {\n\t\t\t\t\tif (_p7._3.ctor === 'Ok') {\n\t\t\t\t\t\tif (_p7._4.ctor === 'Ok') {\n\t\t\t\t\t\t\treturn _elm_lang$core$Result$Ok(\n\t\t\t\t\t\t\t\tA5(func, _p7._0._0, _p7._1._0, _p7._2._0, _p7._3._0, _p7._4._0));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn _elm_lang$core$Result$Err(_p7._4._0);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn _elm_lang$core$Result$Err(_p7._3._0);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn _elm_lang$core$Result$Err(_p7._2._0);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn _elm_lang$core$Result$Err(_p7._1._0);\n\t\t\t}\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(_p7._0._0);\n\t\t}\n\t});\nvar _elm_lang$core$Result$mapError = F2(\n\tfunction (f, result) {\n\t\tvar _p8 = result;\n\t\tif (_p8.ctor === 'Ok') {\n\t\t\treturn _elm_lang$core$Result$Ok(_p8._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(\n\t\t\t\tf(_p8._0));\n\t\t}\n\t});\nvar _elm_lang$core$Result$fromMaybe = F2(\n\tfunction (err, maybe) {\n\t\tvar _p9 = maybe;\n\t\tif (_p9.ctor === 'Just') {\n\t\t\treturn _elm_lang$core$Result$Ok(_p9._0);\n\t\t} else {\n\t\t\treturn _elm_lang$core$Result$Err(err);\n\t\t}\n\t});\n\nvar _elm_lang$core$Task$onError = _elm_lang$core$Native_Scheduler.onError;\nvar _elm_lang$core$Task$andThen = _elm_lang$core$Native_Scheduler.andThen;\nvar _elm_lang$core$Task$spawnCmd = F2(\n\tfunction (router, _p0) {\n\t\tvar _p1 = _p0;\n\t\treturn _elm_lang$core$Native_Scheduler.spawn(\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t_elm_lang$core$Platform$sendToApp(router),\n\t\t\t\t_p1._0));\n\t});\nvar _elm_lang$core$Task$fail = _elm_lang$core$Native_Scheduler.fail;\nvar _elm_lang$core$Task$mapError = F2(\n\tfunction (convert, task) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$onError,\n\t\t\tfunction (_p2) {\n\t\t\t\treturn _elm_lang$core$Task$fail(\n\t\t\t\t\tconvert(_p2));\n\t\t\t},\n\t\t\ttask);\n\t});\nvar _elm_lang$core$Task$succeed = _elm_lang$core$Native_Scheduler.succeed;\nvar _elm_lang$core$Task$map = F2(\n\tfunction (func, taskA) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\tfunc(a));\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map2 = F3(\n\tfunction (func, taskA, taskB) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\tA2(func, a, b));\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map3 = F4(\n\tfunction (func, taskA, taskB, taskC) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\tfunction (c) {\n\t\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\t\tA3(func, a, b, c));\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskC);\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map4 = F5(\n\tfunction (func, taskA, taskB, taskC, taskD) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\tfunction (c) {\n\t\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\t\t\tfunction (d) {\n\t\t\t\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\t\t\t\tA4(func, a, b, c, d));\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttaskD);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskC);\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$map5 = F6(\n\tfunction (func, taskA, taskB, taskC, taskD, taskE) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (a) {\n\t\t\t\treturn A2(\n\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\tfunction (b) {\n\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\tfunction (c) {\n\t\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\t\t\tfunction (d) {\n\t\t\t\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\t\t\t\t\t\tfunction (e) {\n\t\t\t\t\t\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\t\t\t\t\t\tA5(func, a, b, c, d, e));\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\ttaskE);\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttaskD);\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\ttaskC);\n\t\t\t\t\t},\n\t\t\t\t\ttaskB);\n\t\t\t},\n\t\t\ttaskA);\n\t});\nvar _elm_lang$core$Task$sequence = function (tasks) {\n\tvar _p3 = tasks;\n\tif (_p3.ctor === '[]') {\n\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t{ctor: '[]'});\n\t} else {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Task$map2,\n\t\t\tF2(\n\t\t\t\tfunction (x, y) {\n\t\t\t\t\treturn {ctor: '::', _0: x, _1: y};\n\t\t\t\t}),\n\t\t\t_p3._0,\n\t\t\t_elm_lang$core$Task$sequence(_p3._1));\n\t}\n};\nvar _elm_lang$core$Task$onEffects = F3(\n\tfunction (router, commands, state) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$map,\n\t\t\tfunction (_p4) {\n\t\t\t\treturn {ctor: '_Tuple0'};\n\t\t\t},\n\t\t\t_elm_lang$core$Task$sequence(\n\t\t\t\tA2(\n\t\t\t\t\t_elm_lang$core$List$map,\n\t\t\t\t\t_elm_lang$core$Task$spawnCmd(router),\n\t\t\t\t\tcommands)));\n\t});\nvar _elm_lang$core$Task$init = _elm_lang$core$Task$succeed(\n\t{ctor: '_Tuple0'});\nvar _elm_lang$core$Task$onSelfMsg = F3(\n\tfunction (_p7, _p6, _p5) {\n\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t{ctor: '_Tuple0'});\n\t});\nvar _elm_lang$core$Task$command = _elm_lang$core$Native_Platform.leaf('Task');\nvar _elm_lang$core$Task$Perform = function (a) {\n\treturn {ctor: 'Perform', _0: a};\n};\nvar _elm_lang$core$Task$perform = F2(\n\tfunction (toMessage, task) {\n\t\treturn _elm_lang$core$Task$command(\n\t\t\t_elm_lang$core$Task$Perform(\n\t\t\t\tA2(_elm_lang$core$Task$map, toMessage, task)));\n\t});\nvar _elm_lang$core$Task$attempt = F2(\n\tfunction (resultToMessage, task) {\n\t\treturn _elm_lang$core$Task$command(\n\t\t\t_elm_lang$core$Task$Perform(\n\t\t\t\tA2(\n\t\t\t\t\t_elm_lang$core$Task$onError,\n\t\t\t\t\tfunction (_p8) {\n\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\tresultToMessage(\n\t\t\t\t\t\t\t\t_elm_lang$core$Result$Err(_p8)));\n\t\t\t\t\t},\n\t\t\t\t\tA2(\n\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\tfunction (_p9) {\n\t\t\t\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\t\t\t\tresultToMessage(\n\t\t\t\t\t\t\t\t\t_elm_lang$core$Result$Ok(_p9)));\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttask))));\n\t});\nvar _elm_lang$core$Task$cmdMap = F2(\n\tfunction (tagger, _p10) {\n\t\tvar _p11 = _p10;\n\t\treturn _elm_lang$core$Task$Perform(\n\t\t\tA2(_elm_lang$core$Task$map, tagger, _p11._0));\n\t});\n_elm_lang$core$Native_Platform.effectManagers['Task'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Task$init, onEffects: _elm_lang$core$Task$onEffects, onSelfMsg: _elm_lang$core$Task$onSelfMsg, tag: 'cmd', cmdMap: _elm_lang$core$Task$cmdMap};\n\n//import Native.Utils //\n\nvar _elm_lang$core$Native_Debug = function() {\n\nfunction log(tag, value)\n{\n\tvar msg = tag + ': ' + _elm_lang$core$Native_Utils.toString(value);\n\tvar process = process || {};\n\tif (process.stdout)\n\t{\n\t\tprocess.stdout.write(msg);\n\t}\n\telse\n\t{\n\t\tconsole.log(msg);\n\t}\n\treturn value;\n}\n\nfunction crash(message)\n{\n\tthrow new Error(message);\n}\n\nreturn {\n\tcrash: crash,\n\tlog: F2(log)\n};\n\n}();\n//import Maybe, Native.List, Native.Utils, Result //\n\nvar _elm_lang$core$Native_String = function() {\n\nfunction isEmpty(str)\n{\n\treturn str.length === 0;\n}\nfunction cons(chr, str)\n{\n\treturn chr + str;\n}\nfunction uncons(str)\n{\n\tvar hd = str[0];\n\tif (hd)\n\t{\n\t\treturn _elm_lang$core$Maybe$Just(_elm_lang$core$Native_Utils.Tuple2(_elm_lang$core$Native_Utils.chr(hd), str.slice(1)));\n\t}\n\treturn _elm_lang$core$Maybe$Nothing;\n}\nfunction append(a, b)\n{\n\treturn a + b;\n}\nfunction concat(strs)\n{\n\treturn _elm_lang$core$Native_List.toArray(strs).join('');\n}\nfunction length(str)\n{\n\treturn str.length;\n}\nfunction map(f, str)\n{\n\tvar out = str.split('');\n\tfor (var i = out.length; i--; )\n\t{\n\t\tout[i] = f(_elm_lang$core$Native_Utils.chr(out[i]));\n\t}\n\treturn out.join('');\n}\nfunction filter(pred, str)\n{\n\treturn str.split('').map(_elm_lang$core$Native_Utils.chr).filter(pred).join('');\n}\nfunction reverse(str)\n{\n\treturn str.split('').reverse().join('');\n}\nfunction foldl(f, b, str)\n{\n\tvar len = str.length;\n\tfor (var i = 0; i < len; ++i)\n\t{\n\t\tb = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);\n\t}\n\treturn b;\n}\nfunction foldr(f, b, str)\n{\n\tfor (var i = str.length; i--; )\n\t{\n\t\tb = A2(f, _elm_lang$core$Native_Utils.chr(str[i]), b);\n\t}\n\treturn b;\n}\nfunction split(sep, str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.split(sep));\n}\nfunction join(sep, strs)\n{\n\treturn _elm_lang$core$Native_List.toArray(strs).join(sep);\n}\nfunction repeat(n, str)\n{\n\tvar result = '';\n\twhile (n > 0)\n\t{\n\t\tif (n & 1)\n\t\t{\n\t\t\tresult += str;\n\t\t}\n\t\tn >>= 1, str += str;\n\t}\n\treturn result;\n}\nfunction slice(start, end, str)\n{\n\treturn str.slice(start, end);\n}\nfunction left(n, str)\n{\n\treturn n < 1 ? '' : str.slice(0, n);\n}\nfunction right(n, str)\n{\n\treturn n < 1 ? '' : str.slice(-n);\n}\nfunction dropLeft(n, str)\n{\n\treturn n < 1 ? str : str.slice(n);\n}\nfunction dropRight(n, str)\n{\n\treturn n < 1 ? str : str.slice(0, -n);\n}\nfunction pad(n, chr, str)\n{\n\tvar half = (n - str.length) / 2;\n\treturn repeat(Math.ceil(half), chr) + str + repeat(half | 0, chr);\n}\nfunction padRight(n, chr, str)\n{\n\treturn str + repeat(n - str.length, chr);\n}\nfunction padLeft(n, chr, str)\n{\n\treturn repeat(n - str.length, chr) + str;\n}\n\nfunction trim(str)\n{\n\treturn str.trim();\n}\nfunction trimLeft(str)\n{\n\treturn str.replace(/^\\s+/, '');\n}\nfunction trimRight(str)\n{\n\treturn str.replace(/\\s+$/, '');\n}\n\nfunction words(str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.trim().split(/\\s+/g));\n}\nfunction lines(str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.split(/\\r\\n|\\r|\\n/g));\n}\n\nfunction toUpper(str)\n{\n\treturn str.toUpperCase();\n}\nfunction toLower(str)\n{\n\treturn str.toLowerCase();\n}\n\nfunction any(pred, str)\n{\n\tfor (var i = str.length; i--; )\n\t{\n\t\tif (pred(_elm_lang$core$Native_Utils.chr(str[i])))\n\t\t{\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\nfunction all(pred, str)\n{\n\tfor (var i = str.length; i--; )\n\t{\n\t\tif (!pred(_elm_lang$core$Native_Utils.chr(str[i])))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\nfunction contains(sub, str)\n{\n\treturn str.indexOf(sub) > -1;\n}\nfunction startsWith(sub, str)\n{\n\treturn str.indexOf(sub) === 0;\n}\nfunction endsWith(sub, str)\n{\n\treturn str.length >= sub.length &&\n\t\tstr.lastIndexOf(sub) === str.length - sub.length;\n}\nfunction indexes(sub, str)\n{\n\tvar subLen = sub.length;\n\n\tif (subLen < 1)\n\t{\n\t\treturn _elm_lang$core$Native_List.Nil;\n\t}\n\n\tvar i = 0;\n\tvar is = [];\n\n\twhile ((i = str.indexOf(sub, i)) > -1)\n\t{\n\t\tis.push(i);\n\t\ti = i + subLen;\n\t}\n\n\treturn _elm_lang$core$Native_List.fromArray(is);\n}\n\n\nfunction toInt(s)\n{\n\tvar len = s.length;\n\n\t// if empty\n\tif (len === 0)\n\t{\n\t\treturn intErr(s);\n\t}\n\n\t// if hex\n\tvar c = s[0];\n\tif (c === '0' && s[1] === 'x')\n\t{\n\t\tfor (var i = 2; i < len; ++i)\n\t\t{\n\t\t\tvar c = s[i];\n\t\t\tif (('0' <= c && c <= '9') || ('A' <= c && c <= 'F') || ('a' <= c && c <= 'f'))\n\t\t\t{\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\treturn intErr(s);\n\t\t}\n\t\treturn _elm_lang$core$Result$Ok(parseInt(s, 16));\n\t}\n\n\t// is decimal\n\tif (c > '9' || (c < '0' && c !== '-' && c !== '+'))\n\t{\n\t\treturn intErr(s);\n\t}\n\tfor (var i = 1; i < len; ++i)\n\t{\n\t\tvar c = s[i];\n\t\tif (c < '0' || '9' < c)\n\t\t{\n\t\t\treturn intErr(s);\n\t\t}\n\t}\n\n\treturn _elm_lang$core$Result$Ok(parseInt(s, 10));\n}\n\nfunction intErr(s)\n{\n\treturn _elm_lang$core$Result$Err(\"could not convert string '\" + s + \"' to an Int\");\n}\n\n\nfunction toFloat(s)\n{\n\t// check if it is a hex, octal, or binary number\n\tif (s.length === 0 || /[\\sxbo]/.test(s))\n\t{\n\t\treturn floatErr(s);\n\t}\n\tvar n = +s;\n\t// faster isNaN check\n\treturn n === n ? _elm_lang$core$Result$Ok(n) : floatErr(s);\n}\n\nfunction floatErr(s)\n{\n\treturn _elm_lang$core$Result$Err(\"could not convert string '\" + s + \"' to a Float\");\n}\n\n\nfunction toList(str)\n{\n\treturn _elm_lang$core$Native_List.fromArray(str.split('').map(_elm_lang$core$Native_Utils.chr));\n}\nfunction fromList(chars)\n{\n\treturn _elm_lang$core$Native_List.toArray(chars).join('');\n}\n\nreturn {\n\tisEmpty: isEmpty,\n\tcons: F2(cons),\n\tuncons: uncons,\n\tappend: F2(append),\n\tconcat: concat,\n\tlength: length,\n\tmap: F2(map),\n\tfilter: F2(filter),\n\treverse: reverse,\n\tfoldl: F3(foldl),\n\tfoldr: F3(foldr),\n\n\tsplit: F2(split),\n\tjoin: F2(join),\n\trepeat: F2(repeat),\n\n\tslice: F3(slice),\n\tleft: F2(left),\n\tright: F2(right),\n\tdropLeft: F2(dropLeft),\n\tdropRight: F2(dropRight),\n\n\tpad: F3(pad),\n\tpadLeft: F3(padLeft),\n\tpadRight: F3(padRight),\n\n\ttrim: trim,\n\ttrimLeft: trimLeft,\n\ttrimRight: trimRight,\n\n\twords: words,\n\tlines: lines,\n\n\ttoUpper: toUpper,\n\ttoLower: toLower,\n\n\tany: F2(any),\n\tall: F2(all),\n\n\tcontains: F2(contains),\n\tstartsWith: F2(startsWith),\n\tendsWith: F2(endsWith),\n\tindexes: F2(indexes),\n\n\ttoInt: toInt,\n\ttoFloat: toFloat,\n\ttoList: toList,\n\tfromList: fromList\n};\n\n}();\n\nvar _elm_lang$core$String$fromList = _elm_lang$core$Native_String.fromList;\nvar _elm_lang$core$String$toList = _elm_lang$core$Native_String.toList;\nvar _elm_lang$core$String$toFloat = _elm_lang$core$Native_String.toFloat;\nvar _elm_lang$core$String$toInt = _elm_lang$core$Native_String.toInt;\nvar _elm_lang$core$String$indices = _elm_lang$core$Native_String.indexes;\nvar _elm_lang$core$String$indexes = _elm_lang$core$Native_String.indexes;\nvar _elm_lang$core$String$endsWith = _elm_lang$core$Native_String.endsWith;\nvar _elm_lang$core$String$startsWith = _elm_lang$core$Native_String.startsWith;\nvar _elm_lang$core$String$contains = _elm_lang$core$Native_String.contains;\nvar _elm_lang$core$String$all = _elm_lang$core$Native_String.all;\nvar _elm_lang$core$String$any = _elm_lang$core$Native_String.any;\nvar _elm_lang$core$String$toLower = _elm_lang$core$Native_String.toLower;\nvar _elm_lang$core$String$toUpper = _elm_lang$core$Native_String.toUpper;\nvar _elm_lang$core$String$lines = _elm_lang$core$Native_String.lines;\nvar _elm_lang$core$String$words = _elm_lang$core$Native_String.words;\nvar _elm_lang$core$String$trimRight = _elm_lang$core$Native_String.trimRight;\nvar _elm_lang$core$String$trimLeft = _elm_lang$core$Native_String.trimLeft;\nvar _elm_lang$core$String$trim = _elm_lang$core$Native_String.trim;\nvar _elm_lang$core$String$padRight = _elm_lang$core$Native_String.padRight;\nvar _elm_lang$core$String$padLeft = _elm_lang$core$Native_String.padLeft;\nvar _elm_lang$core$String$pad = _elm_lang$core$Native_String.pad;\nvar _elm_lang$core$String$dropRight = _elm_lang$core$Native_String.dropRight;\nvar _elm_lang$core$String$dropLeft = _elm_lang$core$Native_String.dropLeft;\nvar _elm_lang$core$String$right = _elm_lang$core$Native_String.right;\nvar _elm_lang$core$String$left = _elm_lang$core$Native_String.left;\nvar _elm_lang$core$String$slice = _elm_lang$core$Native_String.slice;\nvar _elm_lang$core$String$repeat = _elm_lang$core$Native_String.repeat;\nvar _elm_lang$core$String$join = _elm_lang$core$Native_String.join;\nvar _elm_lang$core$String$split = _elm_lang$core$Native_String.split;\nvar _elm_lang$core$String$foldr = _elm_lang$core$Native_String.foldr;\nvar _elm_lang$core$String$foldl = _elm_lang$core$Native_String.foldl;\nvar _elm_lang$core$String$reverse = _elm_lang$core$Native_String.reverse;\nvar _elm_lang$core$String$filter = _elm_lang$core$Native_String.filter;\nvar _elm_lang$core$String$map = _elm_lang$core$Native_String.map;\nvar _elm_lang$core$String$length = _elm_lang$core$Native_String.length;\nvar _elm_lang$core$String$concat = _elm_lang$core$Native_String.concat;\nvar _elm_lang$core$String$append = _elm_lang$core$Native_String.append;\nvar _elm_lang$core$String$uncons = _elm_lang$core$Native_String.uncons;\nvar _elm_lang$core$String$cons = _elm_lang$core$Native_String.cons;\nvar _elm_lang$core$String$fromChar = function ($char) {\n\treturn A2(_elm_lang$core$String$cons, $char, '');\n};\nvar _elm_lang$core$String$isEmpty = _elm_lang$core$Native_String.isEmpty;\n\nvar _elm_lang$core$Dict$foldr = F3(\n\tfunction (f, acc, t) {\n\t\tfoldr:\n\t\twhile (true) {\n\t\t\tvar _p0 = t;\n\t\t\tif (_p0.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn acc;\n\t\t\t} else {\n\t\t\t\tvar _v1 = f,\n\t\t\t\t\t_v2 = A3(\n\t\t\t\t\tf,\n\t\t\t\t\t_p0._1,\n\t\t\t\t\t_p0._2,\n\t\t\t\t\tA3(_elm_lang$core$Dict$foldr, f, acc, _p0._4)),\n\t\t\t\t\t_v3 = _p0._3;\n\t\t\t\tf = _v1;\n\t\t\t\tacc = _v2;\n\t\t\t\tt = _v3;\n\t\t\t\tcontinue foldr;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$keys = function (dict) {\n\treturn A3(\n\t\t_elm_lang$core$Dict$foldr,\n\t\tF3(\n\t\t\tfunction (key, value, keyList) {\n\t\t\t\treturn {ctor: '::', _0: key, _1: keyList};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tdict);\n};\nvar _elm_lang$core$Dict$values = function (dict) {\n\treturn A3(\n\t\t_elm_lang$core$Dict$foldr,\n\t\tF3(\n\t\t\tfunction (key, value, valueList) {\n\t\t\t\treturn {ctor: '::', _0: value, _1: valueList};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tdict);\n};\nvar _elm_lang$core$Dict$toList = function (dict) {\n\treturn A3(\n\t\t_elm_lang$core$Dict$foldr,\n\t\tF3(\n\t\t\tfunction (key, value, list) {\n\t\t\t\treturn {\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: {ctor: '_Tuple2', _0: key, _1: value},\n\t\t\t\t\t_1: list\n\t\t\t\t};\n\t\t\t}),\n\t\t{ctor: '[]'},\n\t\tdict);\n};\nvar _elm_lang$core$Dict$foldl = F3(\n\tfunction (f, acc, dict) {\n\t\tfoldl:\n\t\twhile (true) {\n\t\t\tvar _p1 = dict;\n\t\t\tif (_p1.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn acc;\n\t\t\t} else {\n\t\t\t\tvar _v5 = f,\n\t\t\t\t\t_v6 = A3(\n\t\t\t\t\tf,\n\t\t\t\t\t_p1._1,\n\t\t\t\t\t_p1._2,\n\t\t\t\t\tA3(_elm_lang$core$Dict$foldl, f, acc, _p1._3)),\n\t\t\t\t\t_v7 = _p1._4;\n\t\t\t\tf = _v5;\n\t\t\t\tacc = _v6;\n\t\t\t\tdict = _v7;\n\t\t\t\tcontinue foldl;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$merge = F6(\n\tfunction (leftStep, bothStep, rightStep, leftDict, rightDict, initialResult) {\n\t\tvar stepState = F3(\n\t\t\tfunction (rKey, rValue, _p2) {\n\t\t\t\tstepState:\n\t\t\t\twhile (true) {\n\t\t\t\t\tvar _p3 = _p2;\n\t\t\t\t\tvar _p9 = _p3._1;\n\t\t\t\t\tvar _p8 = _p3._0;\n\t\t\t\t\tvar _p4 = _p8;\n\t\t\t\t\tif (_p4.ctor === '[]') {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t_0: _p8,\n\t\t\t\t\t\t\t_1: A3(rightStep, rKey, rValue, _p9)\n\t\t\t\t\t\t};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _p7 = _p4._1;\n\t\t\t\t\t\tvar _p6 = _p4._0._1;\n\t\t\t\t\t\tvar _p5 = _p4._0._0;\n\t\t\t\t\t\tif (_elm_lang$core$Native_Utils.cmp(_p5, rKey) < 0) {\n\t\t\t\t\t\t\tvar _v10 = rKey,\n\t\t\t\t\t\t\t\t_v11 = rValue,\n\t\t\t\t\t\t\t\t_v12 = {\n\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t_0: _p7,\n\t\t\t\t\t\t\t\t_1: A3(leftStep, _p5, _p6, _p9)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\trKey = _v10;\n\t\t\t\t\t\t\trValue = _v11;\n\t\t\t\t\t\t\t_p2 = _v12;\n\t\t\t\t\t\t\tcontinue stepState;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (_elm_lang$core$Native_Utils.cmp(_p5, rKey) > 0) {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _p8,\n\t\t\t\t\t\t\t\t\t_1: A3(rightStep, rKey, rValue, _p9)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _p7,\n\t\t\t\t\t\t\t\t\t_1: A4(bothStep, _p5, _p6, rValue, _p9)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\tvar _p10 = A3(\n\t\t\t_elm_lang$core$Dict$foldl,\n\t\t\tstepState,\n\t\t\t{\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: _elm_lang$core$Dict$toList(leftDict),\n\t\t\t\t_1: initialResult\n\t\t\t},\n\t\t\trightDict);\n\t\tvar leftovers = _p10._0;\n\t\tvar intermediateResult = _p10._1;\n\t\treturn A3(\n\t\t\t_elm_lang$core$List$foldl,\n\t\t\tF2(\n\t\t\t\tfunction (_p11, result) {\n\t\t\t\t\tvar _p12 = _p11;\n\t\t\t\t\treturn A3(leftStep, _p12._0, _p12._1, result);\n\t\t\t\t}),\n\t\t\tintermediateResult,\n\t\t\tleftovers);\n\t});\nvar _elm_lang$core$Dict$reportRemBug = F4(\n\tfunction (msg, c, lgot, rgot) {\n\t\treturn _elm_lang$core$Native_Debug.crash(\n\t\t\t_elm_lang$core$String$concat(\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: 'Internal red-black tree invariant violated, expected ',\n\t\t\t\t\t_1: {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: msg,\n\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t_0: ' and got ',\n\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t_0: _elm_lang$core$Basics$toString(c),\n\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t_0: '/',\n\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t_0: lgot,\n\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t_0: '/',\n\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t_0: rgot,\n\t\t\t\t\t\t\t\t\t\t\t\t_1: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_0: '\\nPlease report this bug to <https://github.com/elm-lang/core/issues>',\n\t\t\t\t\t\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}));\n\t});\nvar _elm_lang$core$Dict$isBBlack = function (dict) {\n\tvar _p13 = dict;\n\t_v14_2:\n\tdo {\n\t\tif (_p13.ctor === 'RBNode_elm_builtin') {\n\t\t\tif (_p13._0.ctor === 'BBlack') {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tbreak _v14_2;\n\t\t\t}\n\t\t} else {\n\t\t\tif (_p13._0.ctor === 'LBBlack') {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tbreak _v14_2;\n\t\t\t}\n\t\t}\n\t} while(false);\n\treturn false;\n};\nvar _elm_lang$core$Dict$sizeHelp = F2(\n\tfunction (n, dict) {\n\t\tsizeHelp:\n\t\twhile (true) {\n\t\t\tvar _p14 = dict;\n\t\t\tif (_p14.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn n;\n\t\t\t} else {\n\t\t\t\tvar _v16 = A2(_elm_lang$core$Dict$sizeHelp, n + 1, _p14._4),\n\t\t\t\t\t_v17 = _p14._3;\n\t\t\t\tn = _v16;\n\t\t\t\tdict = _v17;\n\t\t\t\tcontinue sizeHelp;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$size = function (dict) {\n\treturn A2(_elm_lang$core$Dict$sizeHelp, 0, dict);\n};\nvar _elm_lang$core$Dict$get = F2(\n\tfunction (targetKey, dict) {\n\t\tget:\n\t\twhile (true) {\n\t\t\tvar _p15 = dict;\n\t\t\tif (_p15.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn _elm_lang$core$Maybe$Nothing;\n\t\t\t} else {\n\t\t\t\tvar _p16 = A2(_elm_lang$core$Basics$compare, targetKey, _p15._1);\n\t\t\t\tswitch (_p16.ctor) {\n\t\t\t\t\tcase 'LT':\n\t\t\t\t\t\tvar _v20 = targetKey,\n\t\t\t\t\t\t\t_v21 = _p15._3;\n\t\t\t\t\t\ttargetKey = _v20;\n\t\t\t\t\t\tdict = _v21;\n\t\t\t\t\t\tcontinue get;\n\t\t\t\t\tcase 'EQ':\n\t\t\t\t\t\treturn _elm_lang$core$Maybe$Just(_p15._2);\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar _v22 = targetKey,\n\t\t\t\t\t\t\t_v23 = _p15._4;\n\t\t\t\t\t\ttargetKey = _v22;\n\t\t\t\t\t\tdict = _v23;\n\t\t\t\t\t\tcontinue get;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$member = F2(\n\tfunction (key, dict) {\n\t\tvar _p17 = A2(_elm_lang$core$Dict$get, key, dict);\n\t\tif (_p17.ctor === 'Just') {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t});\nvar _elm_lang$core$Dict$maxWithDefault = F3(\n\tfunction (k, v, r) {\n\t\tmaxWithDefault:\n\t\twhile (true) {\n\t\t\tvar _p18 = r;\n\t\t\tif (_p18.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\treturn {ctor: '_Tuple2', _0: k, _1: v};\n\t\t\t} else {\n\t\t\t\tvar _v26 = _p18._1,\n\t\t\t\t\t_v27 = _p18._2,\n\t\t\t\t\t_v28 = _p18._4;\n\t\t\t\tk = _v26;\n\t\t\t\tv = _v27;\n\t\t\t\tr = _v28;\n\t\t\t\tcontinue maxWithDefault;\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$NBlack = {ctor: 'NBlack'};\nvar _elm_lang$core$Dict$BBlack = {ctor: 'BBlack'};\nvar _elm_lang$core$Dict$Black = {ctor: 'Black'};\nvar _elm_lang$core$Dict$blackish = function (t) {\n\tvar _p19 = t;\n\tif (_p19.ctor === 'RBNode_elm_builtin') {\n\t\tvar _p20 = _p19._0;\n\t\treturn _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$Black) || _elm_lang$core$Native_Utils.eq(_p20, _elm_lang$core$Dict$BBlack);\n\t} else {\n\t\treturn true;\n\t}\n};\nvar _elm_lang$core$Dict$Red = {ctor: 'Red'};\nvar _elm_lang$core$Dict$moreBlack = function (color) {\n\tvar _p21 = color;\n\tswitch (_p21.ctor) {\n\t\tcase 'Black':\n\t\t\treturn _elm_lang$core$Dict$BBlack;\n\t\tcase 'Red':\n\t\t\treturn _elm_lang$core$Dict$Black;\n\t\tcase 'NBlack':\n\t\t\treturn _elm_lang$core$Dict$Red;\n\t\tdefault:\n\t\t\treturn _elm_lang$core$Native_Debug.crash('Can\\'t make a double black node more black!');\n\t}\n};\nvar _elm_lang$core$Dict$lessBlack = function (color) {\n\tvar _p22 = color;\n\tswitch (_p22.ctor) {\n\t\tcase 'BBlack':\n\t\t\treturn _elm_lang$core$Dict$Black;\n\t\tcase 'Black':\n\t\t\treturn _elm_lang$core$Dict$Red;\n\t\tcase 'Red':\n\t\t\treturn _elm_lang$core$Dict$NBlack;\n\t\tdefault:\n\t\t\treturn _elm_lang$core$Native_Debug.crash('Can\\'t make a negative black node less black!');\n\t}\n};\nvar _elm_lang$core$Dict$LBBlack = {ctor: 'LBBlack'};\nvar _elm_lang$core$Dict$LBlack = {ctor: 'LBlack'};\nvar _elm_lang$core$Dict$RBEmpty_elm_builtin = function (a) {\n\treturn {ctor: 'RBEmpty_elm_builtin', _0: a};\n};\nvar _elm_lang$core$Dict$empty = _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\nvar _elm_lang$core$Dict$isEmpty = function (dict) {\n\treturn _elm_lang$core$Native_Utils.eq(dict, _elm_lang$core$Dict$empty);\n};\nvar _elm_lang$core$Dict$RBNode_elm_builtin = F5(\n\tfunction (a, b, c, d, e) {\n\t\treturn {ctor: 'RBNode_elm_builtin', _0: a, _1: b, _2: c, _3: d, _4: e};\n\t});\nvar _elm_lang$core$Dict$ensureBlackRoot = function (dict) {\n\tvar _p23 = dict;\n\tif ((_p23.ctor === 'RBNode_elm_builtin') && (_p23._0.ctor === 'Red')) {\n\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p23._1, _p23._2, _p23._3, _p23._4);\n\t} else {\n\t\treturn dict;\n\t}\n};\nvar _elm_lang$core$Dict$lessBlackTree = function (dict) {\n\tvar _p24 = dict;\n\tif (_p24.ctor === 'RBNode_elm_builtin') {\n\t\treturn A5(\n\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t_elm_lang$core$Dict$lessBlack(_p24._0),\n\t\t\t_p24._1,\n\t\t\t_p24._2,\n\t\t\t_p24._3,\n\t\t\t_p24._4);\n\t} else {\n\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t}\n};\nvar _elm_lang$core$Dict$balancedTree = function (col) {\n\treturn function (xk) {\n\t\treturn function (xv) {\n\t\t\treturn function (yk) {\n\t\t\t\treturn function (yv) {\n\t\t\t\t\treturn function (zk) {\n\t\t\t\t\t\treturn function (zv) {\n\t\t\t\t\t\t\treturn function (a) {\n\t\t\t\t\t\t\t\treturn function (b) {\n\t\t\t\t\t\t\t\t\treturn function (c) {\n\t\t\t\t\t\t\t\t\t\treturn function (d) {\n\t\t\t\t\t\t\t\t\t\t\treturn A5(\n\t\t\t\t\t\t\t\t\t\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t\t\t\t\t\t\t\t\t\t_elm_lang$core$Dict$lessBlack(col),\n\t\t\t\t\t\t\t\t\t\t\t\tyk,\n\t\t\t\t\t\t\t\t\t\t\t\tyv,\n\t\t\t\t\t\t\t\t\t\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, xk, xv, a, b),\n\t\t\t\t\t\t\t\t\t\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, zk, zv, c, d));\n\t\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n};\nvar _elm_lang$core$Dict$blacken = function (t) {\n\tvar _p25 = t;\n\tif (_p25.ctor === 'RBEmpty_elm_builtin') {\n\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t} else {\n\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p25._1, _p25._2, _p25._3, _p25._4);\n\t}\n};\nvar _elm_lang$core$Dict$redden = function (t) {\n\tvar _p26 = t;\n\tif (_p26.ctor === 'RBEmpty_elm_builtin') {\n\t\treturn _elm_lang$core$Native_Debug.crash('can\\'t make a Leaf red');\n\t} else {\n\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, _p26._1, _p26._2, _p26._3, _p26._4);\n\t}\n};\nvar _elm_lang$core$Dict$balanceHelp = function (tree) {\n\tvar _p27 = tree;\n\t_v36_6:\n\tdo {\n\t\t_v36_5:\n\t\tdo {\n\t\t\t_v36_4:\n\t\t\tdo {\n\t\t\t\t_v36_3:\n\t\t\t\tdo {\n\t\t\t\t\t_v36_2:\n\t\t\t\t\tdo {\n\t\t\t\t\t\t_v36_1:\n\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t_v36_0:\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\tif (_p27.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\tif (_p27._3.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\t\tif (_p27._4.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._3._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (_p27._0.ctor === 'BBlack') {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._3._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._3.ctor === 'RBNode_elm_builtin') && (_p27._3._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_0;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._3._4.ctor === 'RBNode_elm_builtin') && (_p27._3._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_1;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._3._3.ctor === 'RBNode_elm_builtin')) && (_p27._3._3._0.ctor === 'Black')) && (_p27._3._4.ctor === 'RBNode_elm_builtin')) && (_p27._3._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_5;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tif (_p27._4.ctor === 'RBNode_elm_builtin') {\n\t\t\t\t\t\t\t\t\t\t\tswitch (_p27._4._0.ctor) {\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._3.ctor === 'RBNode_elm_builtin') && (_p27._4._3._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_2;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tif ((_p27._4._4.ctor === 'RBNode_elm_builtin') && (_p27._4._4._0.ctor === 'Red')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_3;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tcase 'NBlack':\n\t\t\t\t\t\t\t\t\t\t\t\t\tif (((((_p27._0.ctor === 'BBlack') && (_p27._4._3.ctor === 'RBNode_elm_builtin')) && (_p27._4._3._0.ctor === 'Black')) && (_p27._4._4.ctor === 'RBNode_elm_builtin')) && (_p27._4._4._0.ctor === 'Black')) {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_4;\n\t\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbreak _v36_6;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} while(false);\n\t\t\t\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._3._1)(_p27._3._3._2)(_p27._3._1)(_p27._3._2)(_p27._1)(_p27._2)(_p27._3._3._3)(_p27._3._3._4)(_p27._3._4)(_p27._4);\n\t\t\t\t\t\t} while(false);\n\t\t\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._3._1)(_p27._3._2)(_p27._3._4._1)(_p27._3._4._2)(_p27._1)(_p27._2)(_p27._3._3)(_p27._3._4._3)(_p27._3._4._4)(_p27._4);\n\t\t\t\t\t} while(false);\n\t\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._3._1)(_p27._4._3._2)(_p27._4._1)(_p27._4._2)(_p27._3)(_p27._4._3._3)(_p27._4._3._4)(_p27._4._4);\n\t\t\t\t} while(false);\n\t\t\t\treturn _elm_lang$core$Dict$balancedTree(_p27._0)(_p27._1)(_p27._2)(_p27._4._1)(_p27._4._2)(_p27._4._4._1)(_p27._4._4._2)(_p27._3)(_p27._4._3)(_p27._4._4._3)(_p27._4._4._4);\n\t\t\t} while(false);\n\t\t\treturn A5(\n\t\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t\t_p27._4._3._1,\n\t\t\t\t_p27._4._3._2,\n\t\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3, _p27._4._3._3),\n\t\t\t\tA5(\n\t\t\t\t\t_elm_lang$core$Dict$balance,\n\t\t\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t\t\t_p27._4._1,\n\t\t\t\t\t_p27._4._2,\n\t\t\t\t\t_p27._4._3._4,\n\t\t\t\t\t_elm_lang$core$Dict$redden(_p27._4._4)));\n\t\t} while(false);\n\t\treturn A5(\n\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t_p27._3._4._1,\n\t\t\t_p27._3._4._2,\n\t\t\tA5(\n\t\t\t\t_elm_lang$core$Dict$balance,\n\t\t\t\t_elm_lang$core$Dict$Black,\n\t\t\t\t_p27._3._1,\n\t\t\t\t_p27._3._2,\n\t\t\t\t_elm_lang$core$Dict$redden(_p27._3._3),\n\t\t\t\t_p27._3._4._3),\n\t\t\tA5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p27._1, _p27._2, _p27._3._4._4, _p27._4));\n\t} while(false);\n\treturn tree;\n};\nvar _elm_lang$core$Dict$balance = F5(\n\tfunction (c, k, v, l, r) {\n\t\tvar tree = A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r);\n\t\treturn _elm_lang$core$Dict$blackish(tree) ? _elm_lang$core$Dict$balanceHelp(tree) : tree;\n\t});\nvar _elm_lang$core$Dict$bubble = F5(\n\tfunction (c, k, v, l, r) {\n\t\treturn (_elm_lang$core$Dict$isBBlack(l) || _elm_lang$core$Dict$isBBlack(r)) ? A5(\n\t\t\t_elm_lang$core$Dict$balance,\n\t\t\t_elm_lang$core$Dict$moreBlack(c),\n\t\t\tk,\n\t\t\tv,\n\t\t\t_elm_lang$core$Dict$lessBlackTree(l),\n\t\t\t_elm_lang$core$Dict$lessBlackTree(r)) : A5(_elm_lang$core$Dict$RBNode_elm_builtin, c, k, v, l, r);\n\t});\nvar _elm_lang$core$Dict$removeMax = F5(\n\tfunction (c, k, v, l, r) {\n\t\tvar _p28 = r;\n\t\tif (_p28.ctor === 'RBEmpty_elm_builtin') {\n\t\t\treturn A3(_elm_lang$core$Dict$rem, c, l, r);\n\t\t} else {\n\t\t\treturn A5(\n\t\t\t\t_elm_lang$core$Dict$bubble,\n\t\t\t\tc,\n\t\t\t\tk,\n\t\t\t\tv,\n\t\t\t\tl,\n\t\t\t\tA5(_elm_lang$core$Dict$removeMax, _p28._0, _p28._1, _p28._2, _p28._3, _p28._4));\n\t\t}\n\t});\nvar _elm_lang$core$Dict$rem = F3(\n\tfunction (color, left, right) {\n\t\tvar _p29 = {ctor: '_Tuple2', _0: left, _1: right};\n\t\tif (_p29._0.ctor === 'RBEmpty_elm_builtin') {\n\t\t\tif (_p29._1.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\tvar _p30 = color;\n\t\t\t\tswitch (_p30.ctor) {\n\t\t\t\t\tcase 'Red':\n\t\t\t\t\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t\t\t\t\tcase 'Black':\n\t\t\t\t\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBBlack);\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn _elm_lang$core$Native_Debug.crash('cannot have bblack or nblack nodes at this point');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _p33 = _p29._1._0;\n\t\t\t\tvar _p32 = _p29._0._0;\n\t\t\t\tvar _p31 = {ctor: '_Tuple3', _0: color, _1: _p32, _2: _p33};\n\t\t\t\tif ((((_p31.ctor === '_Tuple3') && (_p31._0.ctor === 'Black')) && (_p31._1.ctor === 'LBlack')) && (_p31._2.ctor === 'Red')) {\n\t\t\t\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._1._1, _p29._1._2, _p29._1._3, _p29._1._4);\n\t\t\t\t} else {\n\t\t\t\t\treturn A4(\n\t\t\t\t\t\t_elm_lang$core$Dict$reportRemBug,\n\t\t\t\t\t\t'Black/LBlack/Red',\n\t\t\t\t\t\tcolor,\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p32),\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p33));\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (_p29._1.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\tvar _p36 = _p29._1._0;\n\t\t\t\tvar _p35 = _p29._0._0;\n\t\t\t\tvar _p34 = {ctor: '_Tuple3', _0: color, _1: _p35, _2: _p36};\n\t\t\t\tif ((((_p34.ctor === '_Tuple3') && (_p34._0.ctor === 'Black')) && (_p34._1.ctor === 'Red')) && (_p34._2.ctor === 'LBlack')) {\n\t\t\t\t\treturn A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Black, _p29._0._1, _p29._0._2, _p29._0._3, _p29._0._4);\n\t\t\t\t} else {\n\t\t\t\t\treturn A4(\n\t\t\t\t\t\t_elm_lang$core$Dict$reportRemBug,\n\t\t\t\t\t\t'Black/Red/LBlack',\n\t\t\t\t\t\tcolor,\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p35),\n\t\t\t\t\t\t_elm_lang$core$Basics$toString(_p36));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _p40 = _p29._0._2;\n\t\t\t\tvar _p39 = _p29._0._4;\n\t\t\t\tvar _p38 = _p29._0._1;\n\t\t\t\tvar newLeft = A5(_elm_lang$core$Dict$removeMax, _p29._0._0, _p38, _p40, _p29._0._3, _p39);\n\t\t\t\tvar _p37 = A3(_elm_lang$core$Dict$maxWithDefault, _p38, _p40, _p39);\n\t\t\t\tvar k = _p37._0;\n\t\t\t\tvar v = _p37._1;\n\t\t\t\treturn A5(_elm_lang$core$Dict$bubble, color, k, v, newLeft, right);\n\t\t\t}\n\t\t}\n\t});\nvar _elm_lang$core$Dict$map = F2(\n\tfunction (f, dict) {\n\t\tvar _p41 = dict;\n\t\tif (_p41.ctor === 'RBEmpty_elm_builtin') {\n\t\t\treturn _elm_lang$core$Dict$RBEmpty_elm_builtin(_elm_lang$core$Dict$LBlack);\n\t\t} else {\n\t\t\tvar _p42 = _p41._1;\n\t\t\treturn A5(\n\t\t\t\t_elm_lang$core$Dict$RBNode_elm_builtin,\n\t\t\t\t_p41._0,\n\t\t\t\t_p42,\n\t\t\t\tA2(f, _p42, _p41._2),\n\t\t\t\tA2(_elm_lang$core$Dict$map, f, _p41._3),\n\t\t\t\tA2(_elm_lang$core$Dict$map, f, _p41._4));\n\t\t}\n\t});\nvar _elm_lang$core$Dict$Same = {ctor: 'Same'};\nvar _elm_lang$core$Dict$Remove = {ctor: 'Remove'};\nvar _elm_lang$core$Dict$Insert = {ctor: 'Insert'};\nvar _elm_lang$core$Dict$update = F3(\n\tfunction (k, alter, dict) {\n\t\tvar up = function (dict) {\n\t\t\tvar _p43 = dict;\n\t\t\tif (_p43.ctor === 'RBEmpty_elm_builtin') {\n\t\t\t\tvar _p44 = alter(_elm_lang$core$Maybe$Nothing);\n\t\t\t\tif (_p44.ctor === 'Nothing') {\n\t\t\t\t\treturn {ctor: '_Tuple2', _0: _elm_lang$core$Dict$Same, _1: _elm_lang$core$Dict$empty};\n\t\t\t\t} else {\n\t\t\t\t\treturn {\n\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t_0: _elm_lang$core$Dict$Insert,\n\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _elm_lang$core$Dict$Red, k, _p44._0, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty)\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar _p55 = _p43._2;\n\t\t\t\tvar _p54 = _p43._4;\n\t\t\t\tvar _p53 = _p43._3;\n\t\t\t\tvar _p52 = _p43._1;\n\t\t\t\tvar _p51 = _p43._0;\n\t\t\t\tvar _p45 = A2(_elm_lang$core$Basics$compare, k, _p52);\n\t\t\t\tswitch (_p45.ctor) {\n\t\t\t\t\tcase 'EQ':\n\t\t\t\t\t\tvar _p46 = alter(\n\t\t\t\t\t\t\t_elm_lang$core$Maybe$Just(_p55));\n\t\t\t\t\t\tif (_p46.ctor === 'Nothing') {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Remove,\n\t\t\t\t\t\t\t\t_1: A3(_elm_lang$core$Dict$rem, _p51, _p53, _p54)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Same,\n\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p46._0, _p53, _p54)\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\tcase 'LT':\n\t\t\t\t\t\tvar _p47 = up(_p53);\n\t\t\t\t\t\tvar flag = _p47._0;\n\t\t\t\t\t\tvar newLeft = _p47._1;\n\t\t\t\t\t\tvar _p48 = flag;\n\t\t\t\t\t\tswitch (_p48.ctor) {\n\t\t\t\t\t\t\tcase 'Same':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Same,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, newLeft, _p54)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'Insert':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Insert,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, newLeft, _p54)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Remove,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, newLeft, _p54)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar _p49 = up(_p54);\n\t\t\t\t\t\tvar flag = _p49._0;\n\t\t\t\t\t\tvar newRight = _p49._1;\n\t\t\t\t\t\tvar _p50 = flag;\n\t\t\t\t\t\tswitch (_p50.ctor) {\n\t\t\t\t\t\t\tcase 'Same':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Same,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$RBNode_elm_builtin, _p51, _p52, _p55, _p53, newRight)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tcase 'Insert':\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Insert,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$balance, _p51, _p52, _p55, _p53, newRight)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t\t\t\t\t_0: _elm_lang$core$Dict$Remove,\n\t\t\t\t\t\t\t\t\t_1: A5(_elm_lang$core$Dict$bubble, _p51, _p52, _p55, _p53, newRight)\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tvar _p56 = up(dict);\n\t\tvar flag = _p56._0;\n\t\tvar updatedDict = _p56._1;\n\t\tvar _p57 = flag;\n\t\tswitch (_p57.ctor) {\n\t\t\tcase 'Same':\n\t\t\t\treturn updatedDict;\n\t\t\tcase 'Insert':\n\t\t\t\treturn _elm_lang$core$Dict$ensureBlackRoot(updatedDict);\n\t\t\tdefault:\n\t\t\t\treturn _elm_lang$core$Dict$blacken(updatedDict);\n\t\t}\n\t});\nvar _elm_lang$core$Dict$insert = F3(\n\tfunction (key, value, dict) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$update,\n\t\t\tkey,\n\t\t\t_elm_lang$core$Basics$always(\n\t\t\t\t_elm_lang$core$Maybe$Just(value)),\n\t\t\tdict);\n\t});\nvar _elm_lang$core$Dict$singleton = F2(\n\tfunction (key, value) {\n\t\treturn A3(_elm_lang$core$Dict$insert, key, value, _elm_lang$core$Dict$empty);\n\t});\nvar _elm_lang$core$Dict$union = F2(\n\tfunction (t1, t2) {\n\t\treturn A3(_elm_lang$core$Dict$foldl, _elm_lang$core$Dict$insert, t2, t1);\n\t});\nvar _elm_lang$core$Dict$filter = F2(\n\tfunction (predicate, dictionary) {\n\t\tvar add = F3(\n\t\t\tfunction (key, value, dict) {\n\t\t\t\treturn A2(predicate, key, value) ? A3(_elm_lang$core$Dict$insert, key, value, dict) : dict;\n\t\t\t});\n\t\treturn A3(_elm_lang$core$Dict$foldl, add, _elm_lang$core$Dict$empty, dictionary);\n\t});\nvar _elm_lang$core$Dict$intersect = F2(\n\tfunction (t1, t2) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Dict$filter,\n\t\t\tF2(\n\t\t\t\tfunction (k, _p58) {\n\t\t\t\t\treturn A2(_elm_lang$core$Dict$member, k, t2);\n\t\t\t\t}),\n\t\t\tt1);\n\t});\nvar _elm_lang$core$Dict$partition = F2(\n\tfunction (predicate, dict) {\n\t\tvar add = F3(\n\t\t\tfunction (key, value, _p59) {\n\t\t\t\tvar _p60 = _p59;\n\t\t\t\tvar _p62 = _p60._1;\n\t\t\t\tvar _p61 = _p60._0;\n\t\t\t\treturn A2(predicate, key, value) ? {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: A3(_elm_lang$core$Dict$insert, key, value, _p61),\n\t\t\t\t\t_1: _p62\n\t\t\t\t} : {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: _p61,\n\t\t\t\t\t_1: A3(_elm_lang$core$Dict$insert, key, value, _p62)\n\t\t\t\t};\n\t\t\t});\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$foldl,\n\t\t\tadd,\n\t\t\t{ctor: '_Tuple2', _0: _elm_lang$core$Dict$empty, _1: _elm_lang$core$Dict$empty},\n\t\t\tdict);\n\t});\nvar _elm_lang$core$Dict$fromList = function (assocs) {\n\treturn A3(\n\t\t_elm_lang$core$List$foldl,\n\t\tF2(\n\t\t\tfunction (_p63, dict) {\n\t\t\t\tvar _p64 = _p63;\n\t\t\t\treturn A3(_elm_lang$core$Dict$insert, _p64._0, _p64._1, dict);\n\t\t\t}),\n\t\t_elm_lang$core$Dict$empty,\n\t\tassocs);\n};\nvar _elm_lang$core$Dict$remove = F2(\n\tfunction (key, dict) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$update,\n\t\t\tkey,\n\t\t\t_elm_lang$core$Basics$always(_elm_lang$core$Maybe$Nothing),\n\t\t\tdict);\n\t});\nvar _elm_lang$core$Dict$diff = F2(\n\tfunction (t1, t2) {\n\t\treturn A3(\n\t\t\t_elm_lang$core$Dict$foldl,\n\t\t\tF3(\n\t\t\t\tfunction (k, v, t) {\n\t\t\t\t\treturn A2(_elm_lang$core$Dict$remove, k, t);\n\t\t\t\t}),\n\t\t\tt1,\n\t\t\tt2);\n\t});\n\n//import Native.Scheduler //\n\nvar _elm_lang$core$Native_Time = function() {\n\nvar now = _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n{\n\tcallback(_elm_lang$core$Native_Scheduler.succeed(Date.now()));\n});\n\nfunction setInterval_(interval, task)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\tvar id = setInterval(function() {\n\t\t\t_elm_lang$core$Native_Scheduler.rawSpawn(task);\n\t\t}, interval);\n\n\t\treturn function() { clearInterval(id); };\n\t});\n}\n\nreturn {\n\tnow: now,\n\tsetInterval_: F2(setInterval_)\n};\n\n}();\nvar _elm_lang$core$Time$setInterval = _elm_lang$core$Native_Time.setInterval_;\nvar _elm_lang$core$Time$spawnHelp = F3(\n\tfunction (router, intervals, processes) {\n\t\tvar _p0 = intervals;\n\t\tif (_p0.ctor === '[]') {\n\t\t\treturn _elm_lang$core$Task$succeed(processes);\n\t\t} else {\n\t\t\tvar _p1 = _p0._0;\n\t\t\tvar spawnRest = function (id) {\n\t\t\t\treturn A3(\n\t\t\t\t\t_elm_lang$core$Time$spawnHelp,\n\t\t\t\t\trouter,\n\t\t\t\t\t_p0._1,\n\t\t\t\t\tA3(_elm_lang$core$Dict$insert, _p1, id, processes));\n\t\t\t};\n\t\t\tvar spawnTimer = _elm_lang$core$Native_Scheduler.spawn(\n\t\t\t\tA2(\n\t\t\t\t\t_elm_lang$core$Time$setInterval,\n\t\t\t\t\t_p1,\n\t\t\t\t\tA2(_elm_lang$core$Platform$sendToSelf, router, _p1)));\n\t\t\treturn A2(_elm_lang$core$Task$andThen, spawnRest, spawnTimer);\n\t\t}\n\t});\nvar _elm_lang$core$Time$addMySub = F2(\n\tfunction (_p2, state) {\n\t\tvar _p3 = _p2;\n\t\tvar _p6 = _p3._1;\n\t\tvar _p5 = _p3._0;\n\t\tvar _p4 = A2(_elm_lang$core$Dict$get, _p5, state);\n\t\tif (_p4.ctor === 'Nothing') {\n\t\t\treturn A3(\n\t\t\t\t_elm_lang$core$Dict$insert,\n\t\t\t\t_p5,\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: _p6,\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t},\n\t\t\t\tstate);\n\t\t} else {\n\t\t\treturn A3(\n\t\t\t\t_elm_lang$core$Dict$insert,\n\t\t\t\t_p5,\n\t\t\t\t{ctor: '::', _0: _p6, _1: _p4._0},\n\t\t\t\tstate);\n\t\t}\n\t});\nvar _elm_lang$core$Time$inMilliseconds = function (t) {\n\treturn t;\n};\nvar _elm_lang$core$Time$millisecond = 1;\nvar _elm_lang$core$Time$second = 1000 * _elm_lang$core$Time$millisecond;\nvar _elm_lang$core$Time$minute = 60 * _elm_lang$core$Time$second;\nvar _elm_lang$core$Time$hour = 60 * _elm_lang$core$Time$minute;\nvar _elm_lang$core$Time$inHours = function (t) {\n\treturn t / _elm_lang$core$Time$hour;\n};\nvar _elm_lang$core$Time$inMinutes = function (t) {\n\treturn t / _elm_lang$core$Time$minute;\n};\nvar _elm_lang$core$Time$inSeconds = function (t) {\n\treturn t / _elm_lang$core$Time$second;\n};\nvar _elm_lang$core$Time$now = _elm_lang$core$Native_Time.now;\nvar _elm_lang$core$Time$onSelfMsg = F3(\n\tfunction (router, interval, state) {\n\t\tvar _p7 = A2(_elm_lang$core$Dict$get, interval, state.taggers);\n\t\tif (_p7.ctor === 'Nothing') {\n\t\t\treturn _elm_lang$core$Task$succeed(state);\n\t\t} else {\n\t\t\tvar tellTaggers = function (time) {\n\t\t\t\treturn _elm_lang$core$Task$sequence(\n\t\t\t\t\tA2(\n\t\t\t\t\t\t_elm_lang$core$List$map,\n\t\t\t\t\t\tfunction (tagger) {\n\t\t\t\t\t\t\treturn A2(\n\t\t\t\t\t\t\t\t_elm_lang$core$Platform$sendToApp,\n\t\t\t\t\t\t\t\trouter,\n\t\t\t\t\t\t\t\ttagger(time));\n\t\t\t\t\t\t},\n\t\t\t\t\t\t_p7._0));\n\t\t\t};\n\t\t\treturn A2(\n\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\tfunction (_p8) {\n\t\t\t\t\treturn _elm_lang$core$Task$succeed(state);\n\t\t\t\t},\n\t\t\t\tA2(_elm_lang$core$Task$andThen, tellTaggers, _elm_lang$core$Time$now));\n\t\t}\n\t});\nvar _elm_lang$core$Time$subscription = _elm_lang$core$Native_Platform.leaf('Time');\nvar _elm_lang$core$Time$State = F2(\n\tfunction (a, b) {\n\t\treturn {taggers: a, processes: b};\n\t});\nvar _elm_lang$core$Time$init = _elm_lang$core$Task$succeed(\n\tA2(_elm_lang$core$Time$State, _elm_lang$core$Dict$empty, _elm_lang$core$Dict$empty));\nvar _elm_lang$core$Time$onEffects = F3(\n\tfunction (router, subs, _p9) {\n\t\tvar _p10 = _p9;\n\t\tvar rightStep = F3(\n\t\t\tfunction (_p12, id, _p11) {\n\t\t\t\tvar _p13 = _p11;\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple3',\n\t\t\t\t\t_0: _p13._0,\n\t\t\t\t\t_1: _p13._1,\n\t\t\t\t\t_2: A2(\n\t\t\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\t\t\tfunction (_p14) {\n\t\t\t\t\t\t\treturn _p13._2;\n\t\t\t\t\t\t},\n\t\t\t\t\t\t_elm_lang$core$Native_Scheduler.kill(id))\n\t\t\t\t};\n\t\t\t});\n\t\tvar bothStep = F4(\n\t\t\tfunction (interval, taggers, id, _p15) {\n\t\t\t\tvar _p16 = _p15;\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple3',\n\t\t\t\t\t_0: _p16._0,\n\t\t\t\t\t_1: A3(_elm_lang$core$Dict$insert, interval, id, _p16._1),\n\t\t\t\t\t_2: _p16._2\n\t\t\t\t};\n\t\t\t});\n\t\tvar leftStep = F3(\n\t\t\tfunction (interval, taggers, _p17) {\n\t\t\t\tvar _p18 = _p17;\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple3',\n\t\t\t\t\t_0: {ctor: '::', _0: interval, _1: _p18._0},\n\t\t\t\t\t_1: _p18._1,\n\t\t\t\t\t_2: _p18._2\n\t\t\t\t};\n\t\t\t});\n\t\tvar newTaggers = A3(_elm_lang$core$List$foldl, _elm_lang$core$Time$addMySub, _elm_lang$core$Dict$empty, subs);\n\t\tvar _p19 = A6(\n\t\t\t_elm_lang$core$Dict$merge,\n\t\t\tleftStep,\n\t\t\tbothStep,\n\t\t\trightStep,\n\t\t\tnewTaggers,\n\t\t\t_p10.processes,\n\t\t\t{\n\t\t\t\tctor: '_Tuple3',\n\t\t\t\t_0: {ctor: '[]'},\n\t\t\t\t_1: _elm_lang$core$Dict$empty,\n\t\t\t\t_2: _elm_lang$core$Task$succeed(\n\t\t\t\t\t{ctor: '_Tuple0'})\n\t\t\t});\n\t\tvar spawnList = _p19._0;\n\t\tvar existingDict = _p19._1;\n\t\tvar killTask = _p19._2;\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$andThen,\n\t\t\tfunction (newProcesses) {\n\t\t\t\treturn _elm_lang$core$Task$succeed(\n\t\t\t\t\tA2(_elm_lang$core$Time$State, newTaggers, newProcesses));\n\t\t\t},\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$Task$andThen,\n\t\t\t\tfunction (_p20) {\n\t\t\t\t\treturn A3(_elm_lang$core$Time$spawnHelp, router, spawnList, existingDict);\n\t\t\t\t},\n\t\t\t\tkillTask));\n\t});\nvar _elm_lang$core$Time$Every = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'Every', _0: a, _1: b};\n\t});\nvar _elm_lang$core$Time$every = F2(\n\tfunction (interval, tagger) {\n\t\treturn _elm_lang$core$Time$subscription(\n\t\t\tA2(_elm_lang$core$Time$Every, interval, tagger));\n\t});\nvar _elm_lang$core$Time$subMap = F2(\n\tfunction (f, _p21) {\n\t\tvar _p22 = _p21;\n\t\treturn A2(\n\t\t\t_elm_lang$core$Time$Every,\n\t\t\t_p22._0,\n\t\t\tfunction (_p23) {\n\t\t\t\treturn f(\n\t\t\t\t\t_p22._1(_p23));\n\t\t\t});\n\t});\n_elm_lang$core$Native_Platform.effectManagers['Time'] = {pkg: 'elm-lang/core', init: _elm_lang$core$Time$init, onEffects: _elm_lang$core$Time$onEffects, onSelfMsg: _elm_lang$core$Time$onSelfMsg, tag: 'sub', subMap: _elm_lang$core$Time$subMap};\n\nvar _elm_lang$core$Debug$crash = _elm_lang$core$Native_Debug.crash;\nvar _elm_lang$core$Debug$log = _elm_lang$core$Native_Debug.log;\n\n//import Maybe, Native.Array, Native.List, Native.Utils, Result //\n\nvar _elm_lang$core$Native_Json = function() {\n\n\n// CORE DECODERS\n\nfunction succeed(msg)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'succeed',\n\t\tmsg: msg\n\t};\n}\n\nfunction fail(msg)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'fail',\n\t\tmsg: msg\n\t};\n}\n\nfunction decodePrimitive(tag)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: tag\n\t};\n}\n\nfunction decodeContainer(tag, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: tag,\n\t\tdecoder: decoder\n\t};\n}\n\nfunction decodeNull(value)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'null',\n\t\tvalue: value\n\t};\n}\n\nfunction decodeField(field, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'field',\n\t\tfield: field,\n\t\tdecoder: decoder\n\t};\n}\n\nfunction decodeIndex(index, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'index',\n\t\tindex: index,\n\t\tdecoder: decoder\n\t};\n}\n\nfunction decodeKeyValuePairs(decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'key-value',\n\t\tdecoder: decoder\n\t};\n}\n\nfunction mapMany(f, decoders)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'map-many',\n\t\tfunc: f,\n\t\tdecoders: decoders\n\t};\n}\n\nfunction andThen(callback, decoder)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'andThen',\n\t\tdecoder: decoder,\n\t\tcallback: callback\n\t};\n}\n\nfunction oneOf(decoders)\n{\n\treturn {\n\t\tctor: '<decoder>',\n\t\ttag: 'oneOf',\n\t\tdecoders: decoders\n\t};\n}\n\n\n// DECODING OBJECTS\n\nfunction map1(f, d1)\n{\n\treturn mapMany(f, [d1]);\n}\n\nfunction map2(f, d1, d2)\n{\n\treturn mapMany(f, [d1, d2]);\n}\n\nfunction map3(f, d1, d2, d3)\n{\n\treturn mapMany(f, [d1, d2, d3]);\n}\n\nfunction map4(f, d1, d2, d3, d4)\n{\n\treturn mapMany(f, [d1, d2, d3, d4]);\n}\n\nfunction map5(f, d1, d2, d3, d4, d5)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5]);\n}\n\nfunction map6(f, d1, d2, d3, d4, d5, d6)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5, d6]);\n}\n\nfunction map7(f, d1, d2, d3, d4, d5, d6, d7)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5, d6, d7]);\n}\n\nfunction map8(f, d1, d2, d3, d4, d5, d6, d7, d8)\n{\n\treturn mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]);\n}\n\n\n// DECODE HELPERS\n\nfunction ok(value)\n{\n\treturn { tag: 'ok', value: value };\n}\n\nfunction badPrimitive(type, value)\n{\n\treturn { tag: 'primitive', type: type, value: value };\n}\n\nfunction badIndex(index, nestedProblems)\n{\n\treturn { tag: 'index', index: index, rest: nestedProblems };\n}\n\nfunction badField(field, nestedProblems)\n{\n\treturn { tag: 'field', field: field, rest: nestedProblems };\n}\n\nfunction badIndex(index, nestedProblems)\n{\n\treturn { tag: 'index', index: index, rest: nestedProblems };\n}\n\nfunction badOneOf(problems)\n{\n\treturn { tag: 'oneOf', problems: problems };\n}\n\nfunction bad(msg)\n{\n\treturn { tag: 'fail', msg: msg };\n}\n\nfunction badToString(problem)\n{\n\tvar context = '_';\n\twhile (problem)\n\t{\n\t\tswitch (problem.tag)\n\t\t{\n\t\t\tcase 'primitive':\n\t\t\t\treturn 'Expecting ' + problem.type\n\t\t\t\t\t+ (context === '_' ? '' : ' at ' + context)\n\t\t\t\t\t+ ' but instead got: ' + jsToString(problem.value);\n\n\t\t\tcase 'index':\n\t\t\t\tcontext += '[' + problem.index + ']';\n\t\t\t\tproblem = problem.rest;\n\t\t\t\tbreak;\n\n\t\t\tcase 'field':\n\t\t\t\tcontext += '.' + problem.field;\n\t\t\t\tproblem = problem.rest;\n\t\t\t\tbreak;\n\n\t\t\tcase 'oneOf':\n\t\t\t\tvar problems = problem.problems;\n\t\t\t\tfor (var i = 0; i < problems.length; i++)\n\t\t\t\t{\n\t\t\t\t\tproblems[i] = badToString(problems[i]);\n\t\t\t\t}\n\t\t\t\treturn 'I ran into the following problems'\n\t\t\t\t\t+ (context === '_' ? '' : ' at ' + context)\n\t\t\t\t\t+ ':\\n\\n' + problems.join('\\n');\n\n\t\t\tcase 'fail':\n\t\t\t\treturn 'I ran into a `fail` decoder'\n\t\t\t\t\t+ (context === '_' ? '' : ' at ' + context)\n\t\t\t\t\t+ ': ' + problem.msg;\n\t\t}\n\t}\n}\n\nfunction jsToString(value)\n{\n\treturn value === undefined\n\t\t? 'undefined'\n\t\t: JSON.stringify(value);\n}\n\n\n// DECODE\n\nfunction runOnString(decoder, string)\n{\n\tvar json;\n\ttry\n\t{\n\t\tjson = JSON.parse(string);\n\t}\n\tcatch (e)\n\t{\n\t\treturn _elm_lang$core$Result$Err('Given an invalid JSON: ' + e.message);\n\t}\n\treturn run(decoder, json);\n}\n\nfunction run(decoder, value)\n{\n\tvar result = runHelp(decoder, value);\n\treturn (result.tag === 'ok')\n\t\t? _elm_lang$core$Result$Ok(result.value)\n\t\t: _elm_lang$core$Result$Err(badToString(result));\n}\n\nfunction runHelp(decoder, value)\n{\n\tswitch (decoder.tag)\n\t{\n\t\tcase 'bool':\n\t\t\treturn (typeof value === 'boolean')\n\t\t\t\t? ok(value)\n\t\t\t\t: badPrimitive('a Bool', value);\n\n\t\tcase 'int':\n\t\t\tif (typeof value !== 'number') {\n\t\t\t\treturn badPrimitive('an Int', value);\n\t\t\t}\n\n\t\t\tif (-2147483647 < value && value < 2147483647 && (value | 0) === value) {\n\t\t\t\treturn ok(value);\n\t\t\t}\n\n\t\t\tif (isFinite(value) && !(value % 1)) {\n\t\t\t\treturn ok(value);\n\t\t\t}\n\n\t\t\treturn badPrimitive('an Int', value);\n\n\t\tcase 'float':\n\t\t\treturn (typeof value === 'number')\n\t\t\t\t? ok(value)\n\t\t\t\t: badPrimitive('a Float', value);\n\n\t\tcase 'string':\n\t\t\treturn (typeof value === 'string')\n\t\t\t\t? ok(value)\n\t\t\t\t: (value instanceof String)\n\t\t\t\t\t? ok(value + '')\n\t\t\t\t\t: badPrimitive('a String', value);\n\n\t\tcase 'null':\n\t\t\treturn (value === null)\n\t\t\t\t? ok(decoder.value)\n\t\t\t\t: badPrimitive('null', value);\n\n\t\tcase 'value':\n\t\t\treturn ok(value);\n\n\t\tcase 'list':\n\t\t\tif (!(value instanceof Array))\n\t\t\t{\n\t\t\t\treturn badPrimitive('a List', value);\n\t\t\t}\n\n\t\t\tvar list = _elm_lang$core$Native_List.Nil;\n\t\t\tfor (var i = value.length; i--; )\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoder.decoder, value[i]);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn badIndex(i, result)\n\t\t\t\t}\n\t\t\t\tlist = _elm_lang$core$Native_List.Cons(result.value, list);\n\t\t\t}\n\t\t\treturn ok(list);\n\n\t\tcase 'array':\n\t\t\tif (!(value instanceof Array))\n\t\t\t{\n\t\t\t\treturn badPrimitive('an Array', value);\n\t\t\t}\n\n\t\t\tvar len = value.length;\n\t\t\tvar array = new Array(len);\n\t\t\tfor (var i = len; i--; )\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoder.decoder, value[i]);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn badIndex(i, result);\n\t\t\t\t}\n\t\t\t\tarray[i] = result.value;\n\t\t\t}\n\t\t\treturn ok(_elm_lang$core$Native_Array.fromJSArray(array));\n\n\t\tcase 'maybe':\n\t\t\tvar result = runHelp(decoder.decoder, value);\n\t\t\treturn (result.tag === 'ok')\n\t\t\t\t? ok(_elm_lang$core$Maybe$Just(result.value))\n\t\t\t\t: ok(_elm_lang$core$Maybe$Nothing);\n\n\t\tcase 'field':\n\t\t\tvar field = decoder.field;\n\t\t\tif (typeof value !== 'object' || value === null || !(field in value))\n\t\t\t{\n\t\t\t\treturn badPrimitive('an object with a field named `' + field + '`', value);\n\t\t\t}\n\n\t\t\tvar result = runHelp(decoder.decoder, value[field]);\n\t\t\treturn (result.tag === 'ok') ? result : badField(field, result);\n\n\t\tcase 'index':\n\t\t\tvar index = decoder.index;\n\t\t\tif (!(value instanceof Array))\n\t\t\t{\n\t\t\t\treturn badPrimitive('an array', value);\n\t\t\t}\n\t\t\tif (index >= value.length)\n\t\t\t{\n\t\t\t\treturn badPrimitive('a longer array. Need index ' + index + ' but there are only ' + value.length + ' entries', value);\n\t\t\t}\n\n\t\t\tvar result = runHelp(decoder.decoder, value[index]);\n\t\t\treturn (result.tag === 'ok') ? result : badIndex(index, result);\n\n\t\tcase 'key-value':\n\t\t\tif (typeof value !== 'object' || value === null || value instanceof Array)\n\t\t\t{\n\t\t\t\treturn badPrimitive('an object', value);\n\t\t\t}\n\n\t\t\tvar keyValuePairs = _elm_lang$core$Native_List.Nil;\n\t\t\tfor (var key in value)\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoder.decoder, value[key]);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn badField(key, result);\n\t\t\t\t}\n\t\t\t\tvar pair = _elm_lang$core$Native_Utils.Tuple2(key, result.value);\n\t\t\t\tkeyValuePairs = _elm_lang$core$Native_List.Cons(pair, keyValuePairs);\n\t\t\t}\n\t\t\treturn ok(keyValuePairs);\n\n\t\tcase 'map-many':\n\t\t\tvar answer = decoder.func;\n\t\t\tvar decoders = decoder.decoders;\n\t\t\tfor (var i = 0; i < decoders.length; i++)\n\t\t\t{\n\t\t\t\tvar result = runHelp(decoders[i], value);\n\t\t\t\tif (result.tag !== 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t\tanswer = answer(result.value);\n\t\t\t}\n\t\t\treturn ok(answer);\n\n\t\tcase 'andThen':\n\t\t\tvar result = runHelp(decoder.decoder, value);\n\t\t\treturn (result.tag !== 'ok')\n\t\t\t\t? result\n\t\t\t\t: runHelp(decoder.callback(result.value), value);\n\n\t\tcase 'oneOf':\n\t\t\tvar errors = [];\n\t\t\tvar temp = decoder.decoders;\n\t\t\twhile (temp.ctor !== '[]')\n\t\t\t{\n\t\t\t\tvar result = runHelp(temp._0, value);\n\n\t\t\t\tif (result.tag === 'ok')\n\t\t\t\t{\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\n\t\t\t\terrors.push(result);\n\n\t\t\t\ttemp = temp._1;\n\t\t\t}\n\t\t\treturn badOneOf(errors);\n\n\t\tcase 'fail':\n\t\t\treturn bad(decoder.msg);\n\n\t\tcase 'succeed':\n\t\t\treturn ok(decoder.msg);\n\t}\n}\n\n\n// EQUALITY\n\nfunction equality(a, b)\n{\n\tif (a === b)\n\t{\n\t\treturn true;\n\t}\n\n\tif (a.tag !== b.tag)\n\t{\n\t\treturn false;\n\t}\n\n\tswitch (a.tag)\n\t{\n\t\tcase 'succeed':\n\t\tcase 'fail':\n\t\t\treturn a.msg === b.msg;\n\n\t\tcase 'bool':\n\t\tcase 'int':\n\t\tcase 'float':\n\t\tcase 'string':\n\t\tcase 'value':\n\t\t\treturn true;\n\n\t\tcase 'null':\n\t\t\treturn a.value === b.value;\n\n\t\tcase 'list':\n\t\tcase 'array':\n\t\tcase 'maybe':\n\t\tcase 'key-value':\n\t\t\treturn equality(a.decoder, b.decoder);\n\n\t\tcase 'field':\n\t\t\treturn a.field === b.field && equality(a.decoder, b.decoder);\n\n\t\tcase 'index':\n\t\t\treturn a.index === b.index && equality(a.decoder, b.decoder);\n\n\t\tcase 'map-many':\n\t\t\tif (a.func !== b.func)\n\t\t\t{\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn listEquality(a.decoders, b.decoders);\n\n\t\tcase 'andThen':\n\t\t\treturn a.callback === b.callback && equality(a.decoder, b.decoder);\n\n\t\tcase 'oneOf':\n\t\t\treturn listEquality(a.decoders, b.decoders);\n\t}\n}\n\nfunction listEquality(aDecoders, bDecoders)\n{\n\tvar len = aDecoders.length;\n\tif (len !== bDecoders.length)\n\t{\n\t\treturn false;\n\t}\n\tfor (var i = 0; i < len; i++)\n\t{\n\t\tif (!equality(aDecoders[i], bDecoders[i]))\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n}\n\n\n// ENCODE\n\nfunction encode(indentLevel, value)\n{\n\treturn JSON.stringify(value, null, indentLevel);\n}\n\nfunction identity(value)\n{\n\treturn value;\n}\n\nfunction encodeObject(keyValuePairs)\n{\n\tvar obj = {};\n\twhile (keyValuePairs.ctor !== '[]')\n\t{\n\t\tvar pair = keyValuePairs._0;\n\t\tobj[pair._0] = pair._1;\n\t\tkeyValuePairs = keyValuePairs._1;\n\t}\n\treturn obj;\n}\n\nreturn {\n\tencode: F2(encode),\n\trunOnString: F2(runOnString),\n\trun: F2(run),\n\n\tdecodeNull: decodeNull,\n\tdecodePrimitive: decodePrimitive,\n\tdecodeContainer: F2(decodeContainer),\n\n\tdecodeField: F2(decodeField),\n\tdecodeIndex: F2(decodeIndex),\n\n\tmap1: F2(map1),\n\tmap2: F3(map2),\n\tmap3: F4(map3),\n\tmap4: F5(map4),\n\tmap5: F6(map5),\n\tmap6: F7(map6),\n\tmap7: F8(map7),\n\tmap8: F9(map8),\n\tdecodeKeyValuePairs: decodeKeyValuePairs,\n\n\tandThen: F2(andThen),\n\tfail: fail,\n\tsucceed: succeed,\n\toneOf: oneOf,\n\n\tidentity: identity,\n\tencodeNull: null,\n\tencodeArray: _elm_lang$core$Native_Array.toJSArray,\n\tencodeList: _elm_lang$core$Native_List.toArray,\n\tencodeObject: encodeObject,\n\n\tequality: equality\n};\n\n}();\n\nvar _elm_lang$core$Json_Encode$list = _elm_lang$core$Native_Json.encodeList;\nvar _elm_lang$core$Json_Encode$array = _elm_lang$core$Native_Json.encodeArray;\nvar _elm_lang$core$Json_Encode$object = _elm_lang$core$Native_Json.encodeObject;\nvar _elm_lang$core$Json_Encode$null = _elm_lang$core$Native_Json.encodeNull;\nvar _elm_lang$core$Json_Encode$bool = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$float = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$int = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$string = _elm_lang$core$Native_Json.identity;\nvar _elm_lang$core$Json_Encode$encode = _elm_lang$core$Native_Json.encode;\nvar _elm_lang$core$Json_Encode$Value = {ctor: 'Value'};\n\nvar _elm_lang$core$Json_Decode$null = _elm_lang$core$Native_Json.decodeNull;\nvar _elm_lang$core$Json_Decode$value = _elm_lang$core$Native_Json.decodePrimitive('value');\nvar _elm_lang$core$Json_Decode$andThen = _elm_lang$core$Native_Json.andThen;\nvar _elm_lang$core$Json_Decode$fail = _elm_lang$core$Native_Json.fail;\nvar _elm_lang$core$Json_Decode$succeed = _elm_lang$core$Native_Json.succeed;\nvar _elm_lang$core$Json_Decode$lazy = function (thunk) {\n\treturn A2(\n\t\t_elm_lang$core$Json_Decode$andThen,\n\t\tthunk,\n\t\t_elm_lang$core$Json_Decode$succeed(\n\t\t\t{ctor: '_Tuple0'}));\n};\nvar _elm_lang$core$Json_Decode$decodeValue = _elm_lang$core$Native_Json.run;\nvar _elm_lang$core$Json_Decode$decodeString = _elm_lang$core$Native_Json.runOnString;\nvar _elm_lang$core$Json_Decode$map8 = _elm_lang$core$Native_Json.map8;\nvar _elm_lang$core$Json_Decode$map7 = _elm_lang$core$Native_Json.map7;\nvar _elm_lang$core$Json_Decode$map6 = _elm_lang$core$Native_Json.map6;\nvar _elm_lang$core$Json_Decode$map5 = _elm_lang$core$Native_Json.map5;\nvar _elm_lang$core$Json_Decode$map4 = _elm_lang$core$Native_Json.map4;\nvar _elm_lang$core$Json_Decode$map3 = _elm_lang$core$Native_Json.map3;\nvar _elm_lang$core$Json_Decode$map2 = _elm_lang$core$Native_Json.map2;\nvar _elm_lang$core$Json_Decode$map = _elm_lang$core$Native_Json.map1;\nvar _elm_lang$core$Json_Decode$oneOf = _elm_lang$core$Native_Json.oneOf;\nvar _elm_lang$core$Json_Decode$maybe = function (decoder) {\n\treturn A2(_elm_lang$core$Native_Json.decodeContainer, 'maybe', decoder);\n};\nvar _elm_lang$core$Json_Decode$index = _elm_lang$core$Native_Json.decodeIndex;\nvar _elm_lang$core$Json_Decode$field = _elm_lang$core$Native_Json.decodeField;\nvar _elm_lang$core$Json_Decode$at = F2(\n\tfunction (fields, decoder) {\n\t\treturn A3(_elm_lang$core$List$foldr, _elm_lang$core$Json_Decode$field, decoder, fields);\n\t});\nvar _elm_lang$core$Json_Decode$keyValuePairs = _elm_lang$core$Native_Json.decodeKeyValuePairs;\nvar _elm_lang$core$Json_Decode$dict = function (decoder) {\n\treturn A2(\n\t\t_elm_lang$core$Json_Decode$map,\n\t\t_elm_lang$core$Dict$fromList,\n\t\t_elm_lang$core$Json_Decode$keyValuePairs(decoder));\n};\nvar _elm_lang$core$Json_Decode$array = function (decoder) {\n\treturn A2(_elm_lang$core$Native_Json.decodeContainer, 'array', decoder);\n};\nvar _elm_lang$core$Json_Decode$list = function (decoder) {\n\treturn A2(_elm_lang$core$Native_Json.decodeContainer, 'list', decoder);\n};\nvar _elm_lang$core$Json_Decode$nullable = function (decoder) {\n\treturn _elm_lang$core$Json_Decode$oneOf(\n\t\t{\n\t\t\tctor: '::',\n\t\t\t_0: _elm_lang$core$Json_Decode$null(_elm_lang$core$Maybe$Nothing),\n\t\t\t_1: {\n\t\t\t\tctor: '::',\n\t\t\t\t_0: A2(_elm_lang$core$Json_Decode$map, _elm_lang$core$Maybe$Just, decoder),\n\t\t\t\t_1: {ctor: '[]'}\n\t\t\t}\n\t\t});\n};\nvar _elm_lang$core$Json_Decode$float = _elm_lang$core$Native_Json.decodePrimitive('float');\nvar _elm_lang$core$Json_Decode$int = _elm_lang$core$Native_Json.decodePrimitive('int');\nvar _elm_lang$core$Json_Decode$bool = _elm_lang$core$Native_Json.decodePrimitive('bool');\nvar _elm_lang$core$Json_Decode$string = _elm_lang$core$Native_Json.decodePrimitive('string');\nvar _elm_lang$core$Json_Decode$Decoder = {ctor: 'Decoder'};\n\nvar _elm_lang$core$Tuple$mapSecond = F2(\n\tfunction (func, _p0) {\n\t\tvar _p1 = _p0;\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: _p1._0,\n\t\t\t_1: func(_p1._1)\n\t\t};\n\t});\nvar _elm_lang$core$Tuple$mapFirst = F2(\n\tfunction (func, _p2) {\n\t\tvar _p3 = _p2;\n\t\treturn {\n\t\t\tctor: '_Tuple2',\n\t\t\t_0: func(_p3._0),\n\t\t\t_1: _p3._1\n\t\t};\n\t});\nvar _elm_lang$core$Tuple$second = function (_p4) {\n\tvar _p5 = _p4;\n\treturn _p5._1;\n};\nvar _elm_lang$core$Tuple$first = function (_p6) {\n\tvar _p7 = _p6;\n\treturn _p7._0;\n};\n\nvar _elm_lang$virtual_dom$VirtualDom_Debug$wrap;\nvar _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags;\n\nvar _elm_lang$virtual_dom$Native_VirtualDom = function() {\n\nvar STYLE_KEY = 'STYLE';\nvar EVENT_KEY = 'EVENT';\nvar ATTR_KEY = 'ATTR';\nvar ATTR_NS_KEY = 'ATTR_NS';\n\nvar localDoc = typeof document !== 'undefined' ? document : {};\n\n\n//////////// VIRTUAL DOM NODES ////////////\n\n\nfunction text(string)\n{\n\treturn {\n\t\ttype: 'text',\n\t\ttext: string\n\t};\n}\n\n\nfunction node(tag)\n{\n\treturn F2(function(factList, kidList) {\n\t\treturn nodeHelp(tag, factList, kidList);\n\t});\n}\n\n\nfunction nodeHelp(tag, factList, kidList)\n{\n\tvar organized = organizeFacts(factList);\n\tvar namespace = organized.namespace;\n\tvar facts = organized.facts;\n\n\tvar children = [];\n\tvar descendantsCount = 0;\n\twhile (kidList.ctor !== '[]')\n\t{\n\t\tvar kid = kidList._0;\n\t\tdescendantsCount += (kid.descendantsCount || 0);\n\t\tchildren.push(kid);\n\t\tkidList = kidList._1;\n\t}\n\tdescendantsCount += children.length;\n\n\treturn {\n\t\ttype: 'node',\n\t\ttag: tag,\n\t\tfacts: facts,\n\t\tchildren: children,\n\t\tnamespace: namespace,\n\t\tdescendantsCount: descendantsCount\n\t};\n}\n\n\nfunction keyedNode(tag, factList, kidList)\n{\n\tvar organized = organizeFacts(factList);\n\tvar namespace = organized.namespace;\n\tvar facts = organized.facts;\n\n\tvar children = [];\n\tvar descendantsCount = 0;\n\twhile (kidList.ctor !== '[]')\n\t{\n\t\tvar kid = kidList._0;\n\t\tdescendantsCount += (kid._1.descendantsCount || 0);\n\t\tchildren.push(kid);\n\t\tkidList = kidList._1;\n\t}\n\tdescendantsCount += children.length;\n\n\treturn {\n\t\ttype: 'keyed-node',\n\t\ttag: tag,\n\t\tfacts: facts,\n\t\tchildren: children,\n\t\tnamespace: namespace,\n\t\tdescendantsCount: descendantsCount\n\t};\n}\n\n\nfunction custom(factList, model, impl)\n{\n\tvar facts = organizeFacts(factList).facts;\n\n\treturn {\n\t\ttype: 'custom',\n\t\tfacts: facts,\n\t\tmodel: model,\n\t\timpl: impl\n\t};\n}\n\n\nfunction map(tagger, node)\n{\n\treturn {\n\t\ttype: 'tagger',\n\t\ttagger: tagger,\n\t\tnode: node,\n\t\tdescendantsCount: 1 + (node.descendantsCount || 0)\n\t};\n}\n\n\nfunction thunk(func, args, thunk)\n{\n\treturn {\n\t\ttype: 'thunk',\n\t\tfunc: func,\n\t\targs: args,\n\t\tthunk: thunk,\n\t\tnode: undefined\n\t};\n}\n\nfunction lazy(fn, a)\n{\n\treturn thunk(fn, [a], function() {\n\t\treturn fn(a);\n\t});\n}\n\nfunction lazy2(fn, a, b)\n{\n\treturn thunk(fn, [a,b], function() {\n\t\treturn A2(fn, a, b);\n\t});\n}\n\nfunction lazy3(fn, a, b, c)\n{\n\treturn thunk(fn, [a,b,c], function() {\n\t\treturn A3(fn, a, b, c);\n\t});\n}\n\n\n\n// FACTS\n\n\nfunction organizeFacts(factList)\n{\n\tvar namespace, facts = {};\n\n\twhile (factList.ctor !== '[]')\n\t{\n\t\tvar entry = factList._0;\n\t\tvar key = entry.key;\n\n\t\tif (key === ATTR_KEY || key === ATTR_NS_KEY || key === EVENT_KEY)\n\t\t{\n\t\t\tvar subFacts = facts[key] || {};\n\t\t\tsubFacts[entry.realKey] = entry.value;\n\t\t\tfacts[key] = subFacts;\n\t\t}\n\t\telse if (key === STYLE_KEY)\n\t\t{\n\t\t\tvar styles = facts[key] || {};\n\t\t\tvar styleList = entry.value;\n\t\t\twhile (styleList.ctor !== '[]')\n\t\t\t{\n\t\t\t\tvar style = styleList._0;\n\t\t\t\tstyles[style._0] = style._1;\n\t\t\t\tstyleList = styleList._1;\n\t\t\t}\n\t\t\tfacts[key] = styles;\n\t\t}\n\t\telse if (key === 'namespace')\n\t\t{\n\t\t\tnamespace = entry.value;\n\t\t}\n\t\telse if (key === 'className')\n\t\t{\n\t\t\tvar classes = facts[key];\n\t\t\tfacts[key] = typeof classes === 'undefined'\n\t\t\t\t? entry.value\n\t\t\t\t: classes + ' ' + entry.value;\n\t\t}\n \t\telse\n\t\t{\n\t\t\tfacts[key] = entry.value;\n\t\t}\n\t\tfactList = factList._1;\n\t}\n\n\treturn {\n\t\tfacts: facts,\n\t\tnamespace: namespace\n\t};\n}\n\n\n\n//////////// PROPERTIES AND ATTRIBUTES ////////////\n\n\nfunction style(value)\n{\n\treturn {\n\t\tkey: STYLE_KEY,\n\t\tvalue: value\n\t};\n}\n\n\nfunction property(key, value)\n{\n\treturn {\n\t\tkey: key,\n\t\tvalue: value\n\t};\n}\n\n\nfunction attribute(key, value)\n{\n\treturn {\n\t\tkey: ATTR_KEY,\n\t\trealKey: key,\n\t\tvalue: value\n\t};\n}\n\n\nfunction attributeNS(namespace, key, value)\n{\n\treturn {\n\t\tkey: ATTR_NS_KEY,\n\t\trealKey: key,\n\t\tvalue: {\n\t\t\tvalue: value,\n\t\t\tnamespace: namespace\n\t\t}\n\t};\n}\n\n\nfunction on(name, options, decoder)\n{\n\treturn {\n\t\tkey: EVENT_KEY,\n\t\trealKey: name,\n\t\tvalue: {\n\t\t\toptions: options,\n\t\t\tdecoder: decoder\n\t\t}\n\t};\n}\n\n\nfunction equalEvents(a, b)\n{\n\tif (a.options !== b.options)\n\t{\n\t\tif (a.options.stopPropagation !== b.options.stopPropagation || a.options.preventDefault !== b.options.preventDefault)\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn _elm_lang$core$Native_Json.equality(a.decoder, b.decoder);\n}\n\n\nfunction mapProperty(func, property)\n{\n\tif (property.key !== EVENT_KEY)\n\t{\n\t\treturn property;\n\t}\n\treturn on(\n\t\tproperty.realKey,\n\t\tproperty.value.options,\n\t\tA2(_elm_lang$core$Json_Decode$map, func, property.value.decoder)\n\t);\n}\n\n\n//////////// RENDER ////////////\n\n\nfunction render(vNode, eventNode)\n{\n\tswitch (vNode.type)\n\t{\n\t\tcase 'thunk':\n\t\t\tif (!vNode.node)\n\t\t\t{\n\t\t\t\tvNode.node = vNode.thunk();\n\t\t\t}\n\t\t\treturn render(vNode.node, eventNode);\n\n\t\tcase 'tagger':\n\t\t\tvar subNode = vNode.node;\n\t\t\tvar tagger = vNode.tagger;\n\n\t\t\twhile (subNode.type === 'tagger')\n\t\t\t{\n\t\t\t\ttypeof tagger !== 'object'\n\t\t\t\t\t? tagger = [tagger, subNode.tagger]\n\t\t\t\t\t: tagger.push(subNode.tagger);\n\n\t\t\t\tsubNode = subNode.node;\n\t\t\t}\n\n\t\t\tvar subEventRoot = { tagger: tagger, parent: eventNode };\n\t\t\tvar domNode = render(subNode, subEventRoot);\n\t\t\tdomNode.elm_event_node_ref = subEventRoot;\n\t\t\treturn domNode;\n\n\t\tcase 'text':\n\t\t\treturn localDoc.createTextNode(vNode.text);\n\n\t\tcase 'node':\n\t\t\tvar domNode = vNode.namespace\n\t\t\t\t? localDoc.createElementNS(vNode.namespace, vNode.tag)\n\t\t\t\t: localDoc.createElement(vNode.tag);\n\n\t\t\tapplyFacts(domNode, eventNode, vNode.facts);\n\n\t\t\tvar children = vNode.children;\n\n\t\t\tfor (var i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tdomNode.appendChild(render(children[i], eventNode));\n\t\t\t}\n\n\t\t\treturn domNode;\n\n\t\tcase 'keyed-node':\n\t\t\tvar domNode = vNode.namespace\n\t\t\t\t? localDoc.createElementNS(vNode.namespace, vNode.tag)\n\t\t\t\t: localDoc.createElement(vNode.tag);\n\n\t\t\tapplyFacts(domNode, eventNode, vNode.facts);\n\n\t\t\tvar children = vNode.children;\n\n\t\t\tfor (var i = 0; i < children.length; i++)\n\t\t\t{\n\t\t\t\tdomNode.appendChild(render(children[i]._1, eventNode));\n\t\t\t}\n\n\t\t\treturn domNode;\n\n\t\tcase 'custom':\n\t\t\tvar domNode = vNode.impl.render(vNode.model);\n\t\t\tapplyFacts(domNode, eventNode, vNode.facts);\n\t\t\treturn domNode;\n\t}\n}\n\n\n\n//////////// APPLY FACTS ////////////\n\n\nfunction applyFacts(domNode, eventNode, facts)\n{\n\tfor (var key in facts)\n\t{\n\t\tvar value = facts[key];\n\n\t\tswitch (key)\n\t\t{\n\t\t\tcase STYLE_KEY:\n\t\t\t\tapplyStyles(domNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase EVENT_KEY:\n\t\t\t\tapplyEvents(domNode, eventNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase ATTR_KEY:\n\t\t\t\tapplyAttrs(domNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase ATTR_NS_KEY:\n\t\t\t\tapplyAttrsNS(domNode, value);\n\t\t\t\tbreak;\n\n\t\t\tcase 'value':\n\t\t\t\tif (domNode[key] !== value)\n\t\t\t\t{\n\t\t\t\t\tdomNode[key] = value;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tdomNode[key] = value;\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n\nfunction applyStyles(domNode, styles)\n{\n\tvar domNodeStyle = domNode.style;\n\n\tfor (var key in styles)\n\t{\n\t\tdomNodeStyle[key] = styles[key];\n\t}\n}\n\nfunction applyEvents(domNode, eventNode, events)\n{\n\tvar allHandlers = domNode.elm_handlers || {};\n\n\tfor (var key in events)\n\t{\n\t\tvar handler = allHandlers[key];\n\t\tvar value = events[key];\n\n\t\tif (typeof value === 'undefined')\n\t\t{\n\t\t\tdomNode.removeEventListener(key, handler);\n\t\t\tallHandlers[key] = undefined;\n\t\t}\n\t\telse if (typeof handler === 'undefined')\n\t\t{\n\t\t\tvar handler = makeEventHandler(eventNode, value);\n\t\t\tdomNode.addEventListener(key, handler);\n\t\t\tallHandlers[key] = handler;\n\t\t}\n\t\telse\n\t\t{\n\t\t\thandler.info = value;\n\t\t}\n\t}\n\n\tdomNode.elm_handlers = allHandlers;\n}\n\nfunction makeEventHandler(eventNode, info)\n{\n\tfunction eventHandler(event)\n\t{\n\t\tvar info = eventHandler.info;\n\n\t\tvar value = A2(_elm_lang$core$Native_Json.run, info.decoder, event);\n\n\t\tif (value.ctor === 'Ok')\n\t\t{\n\t\t\tvar options = info.options;\n\t\t\tif (options.stopPropagation)\n\t\t\t{\n\t\t\t\tevent.stopPropagation();\n\t\t\t}\n\t\t\tif (options.preventDefault)\n\t\t\t{\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\n\t\t\tvar message = value._0;\n\n\t\t\tvar currentEventNode = eventNode;\n\t\t\twhile (currentEventNode)\n\t\t\t{\n\t\t\t\tvar tagger = currentEventNode.tagger;\n\t\t\t\tif (typeof tagger === 'function')\n\t\t\t\t{\n\t\t\t\t\tmessage = tagger(message);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tfor (var i = tagger.length; i--; )\n\t\t\t\t\t{\n\t\t\t\t\t\tmessage = tagger[i](message);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurrentEventNode = currentEventNode.parent;\n\t\t\t}\n\t\t}\n\t};\n\n\teventHandler.info = info;\n\n\treturn eventHandler;\n}\n\nfunction applyAttrs(domNode, attrs)\n{\n\tfor (var key in attrs)\n\t{\n\t\tvar value = attrs[key];\n\t\tif (typeof value === 'undefined')\n\t\t{\n\t\t\tdomNode.removeAttribute(key);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdomNode.setAttribute(key, value);\n\t\t}\n\t}\n}\n\nfunction applyAttrsNS(domNode, nsAttrs)\n{\n\tfor (var key in nsAttrs)\n\t{\n\t\tvar pair = nsAttrs[key];\n\t\tvar namespace = pair.namespace;\n\t\tvar value = pair.value;\n\n\t\tif (typeof value === 'undefined')\n\t\t{\n\t\t\tdomNode.removeAttributeNS(namespace, key);\n\t\t}\n\t\telse\n\t\t{\n\t\t\tdomNode.setAttributeNS(namespace, key, value);\n\t\t}\n\t}\n}\n\n\n\n//////////// DIFF ////////////\n\n\nfunction diff(a, b)\n{\n\tvar patches = [];\n\tdiffHelp(a, b, patches, 0);\n\treturn patches;\n}\n\n\nfunction makePatch(type, index, data)\n{\n\treturn {\n\t\tindex: index,\n\t\ttype: type,\n\t\tdata: data,\n\t\tdomNode: undefined,\n\t\teventNode: undefined\n\t};\n}\n\n\nfunction diffHelp(a, b, patches, index)\n{\n\tif (a === b)\n\t{\n\t\treturn;\n\t}\n\n\tvar aType = a.type;\n\tvar bType = b.type;\n\n\t// Bail if you run into different types of nodes. Implies that the\n\t// structure has changed significantly and it's not worth a diff.\n\tif (aType !== bType)\n\t{\n\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\treturn;\n\t}\n\n\t// Now we know that both nodes are the same type.\n\tswitch (bType)\n\t{\n\t\tcase 'thunk':\n\t\t\tvar aArgs = a.args;\n\t\t\tvar bArgs = b.args;\n\t\t\tvar i = aArgs.length;\n\t\t\tvar same = a.func === b.func && i === bArgs.length;\n\t\t\twhile (same && i--)\n\t\t\t{\n\t\t\t\tsame = aArgs[i] === bArgs[i];\n\t\t\t}\n\t\t\tif (same)\n\t\t\t{\n\t\t\t\tb.node = a.node;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tb.node = b.thunk();\n\t\t\tvar subPatches = [];\n\t\t\tdiffHelp(a.node, b.node, subPatches, 0);\n\t\t\tif (subPatches.length > 0)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-thunk', index, subPatches));\n\t\t\t}\n\t\t\treturn;\n\n\t\tcase 'tagger':\n\t\t\t// gather nested taggers\n\t\t\tvar aTaggers = a.tagger;\n\t\t\tvar bTaggers = b.tagger;\n\t\t\tvar nesting = false;\n\n\t\t\tvar aSubNode = a.node;\n\t\t\twhile (aSubNode.type === 'tagger')\n\t\t\t{\n\t\t\t\tnesting = true;\n\n\t\t\t\ttypeof aTaggers !== 'object'\n\t\t\t\t\t? aTaggers = [aTaggers, aSubNode.tagger]\n\t\t\t\t\t: aTaggers.push(aSubNode.tagger);\n\n\t\t\t\taSubNode = aSubNode.node;\n\t\t\t}\n\n\t\t\tvar bSubNode = b.node;\n\t\t\twhile (bSubNode.type === 'tagger')\n\t\t\t{\n\t\t\t\tnesting = true;\n\n\t\t\t\ttypeof bTaggers !== 'object'\n\t\t\t\t\t? bTaggers = [bTaggers, bSubNode.tagger]\n\t\t\t\t\t: bTaggers.push(bSubNode.tagger);\n\n\t\t\t\tbSubNode = bSubNode.node;\n\t\t\t}\n\n\t\t\t// Just bail if different numbers of taggers. This implies the\n\t\t\t// structure of the virtual DOM has changed.\n\t\t\tif (nesting && aTaggers.length !== bTaggers.length)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// check if taggers are \"the same\"\n\t\t\tif (nesting ? !pairwiseRefEqual(aTaggers, bTaggers) : aTaggers !== bTaggers)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-tagger', index, bTaggers));\n\t\t\t}\n\n\t\t\t// diff everything below the taggers\n\t\t\tdiffHelp(aSubNode, bSubNode, patches, index + 1);\n\t\t\treturn;\n\n\t\tcase 'text':\n\t\t\tif (a.text !== b.text)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-text', index, b.text));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn;\n\n\t\tcase 'node':\n\t\t\t// Bail if obvious indicators have changed. Implies more serious\n\t\t\t// structural changes such that it's not worth it to diff.\n\t\t\tif (a.tag !== b.tag || a.namespace !== b.namespace)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar factsDiff = diffFacts(a.facts, b.facts);\n\n\t\t\tif (typeof factsDiff !== 'undefined')\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-facts', index, factsDiff));\n\t\t\t}\n\n\t\t\tdiffChildren(a, b, patches, index);\n\t\t\treturn;\n\n\t\tcase 'keyed-node':\n\t\t\t// Bail if obvious indicators have changed. Implies more serious\n\t\t\t// structural changes such that it's not worth it to diff.\n\t\t\tif (a.tag !== b.tag || a.namespace !== b.namespace)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar factsDiff = diffFacts(a.facts, b.facts);\n\n\t\t\tif (typeof factsDiff !== 'undefined')\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-facts', index, factsDiff));\n\t\t\t}\n\n\t\t\tdiffKeyedChildren(a, b, patches, index);\n\t\t\treturn;\n\n\t\tcase 'custom':\n\t\t\tif (a.impl !== b.impl)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-redraw', index, b));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar factsDiff = diffFacts(a.facts, b.facts);\n\t\t\tif (typeof factsDiff !== 'undefined')\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-facts', index, factsDiff));\n\t\t\t}\n\n\t\t\tvar patch = b.impl.diff(a,b);\n\t\t\tif (patch)\n\t\t\t{\n\t\t\t\tpatches.push(makePatch('p-custom', index, patch));\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn;\n\t}\n}\n\n\n// assumes the incoming arrays are the same length\nfunction pairwiseRefEqual(as, bs)\n{\n\tfor (var i = 0; i < as.length; i++)\n\t{\n\t\tif (as[i] !== bs[i])\n\t\t{\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n\n// TODO Instead of creating a new diff object, it's possible to just test if\n// there *is* a diff. During the actual patch, do the diff again and make the\n// modifications directly. This way, there's no new allocations. Worth it?\nfunction diffFacts(a, b, category)\n{\n\tvar diff;\n\n\t// look for changes and removals\n\tfor (var aKey in a)\n\t{\n\t\tif (aKey === STYLE_KEY || aKey === EVENT_KEY || aKey === ATTR_KEY || aKey === ATTR_NS_KEY)\n\t\t{\n\t\t\tvar subDiff = diffFacts(a[aKey], b[aKey] || {}, aKey);\n\t\t\tif (subDiff)\n\t\t\t{\n\t\t\t\tdiff = diff || {};\n\t\t\t\tdiff[aKey] = subDiff;\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\t// remove if not in the new facts\n\t\tif (!(aKey in b))\n\t\t{\n\t\t\tdiff = diff || {};\n\t\t\tdiff[aKey] =\n\t\t\t\t(typeof category === 'undefined')\n\t\t\t\t\t? (typeof a[aKey] === 'string' ? '' : null)\n\t\t\t\t\t:\n\t\t\t\t(category === STYLE_KEY)\n\t\t\t\t\t? ''\n\t\t\t\t\t:\n\t\t\t\t(category === EVENT_KEY || category === ATTR_KEY)\n\t\t\t\t\t? undefined\n\t\t\t\t\t:\n\t\t\t\t{ namespace: a[aKey].namespace, value: undefined };\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tvar aValue = a[aKey];\n\t\tvar bValue = b[aKey];\n\n\t\t// reference equal, so don't worry about it\n\t\tif (aValue === bValue && aKey !== 'value'\n\t\t\t|| category === EVENT_KEY && equalEvents(aValue, bValue))\n\t\t{\n\t\t\tcontinue;\n\t\t}\n\n\t\tdiff = diff || {};\n\t\tdiff[aKey] = bValue;\n\t}\n\n\t// add new stuff\n\tfor (var bKey in b)\n\t{\n\t\tif (!(bKey in a))\n\t\t{\n\t\t\tdiff = diff || {};\n\t\t\tdiff[bKey] = b[bKey];\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n\nfunction diffChildren(aParent, bParent, patches, rootIndex)\n{\n\tvar aChildren = aParent.children;\n\tvar bChildren = bParent.children;\n\n\tvar aLen = aChildren.length;\n\tvar bLen = bChildren.length;\n\n\t// FIGURE OUT IF THERE ARE INSERTS OR REMOVALS\n\n\tif (aLen > bLen)\n\t{\n\t\tpatches.push(makePatch('p-remove-last', rootIndex, aLen - bLen));\n\t}\n\telse if (aLen < bLen)\n\t{\n\t\tpatches.push(makePatch('p-append', rootIndex, bChildren.slice(aLen)));\n\t}\n\n\t// PAIRWISE DIFF EVERYTHING ELSE\n\n\tvar index = rootIndex;\n\tvar minLen = aLen < bLen ? aLen : bLen;\n\tfor (var i = 0; i < minLen; i++)\n\t{\n\t\tindex++;\n\t\tvar aChild = aChildren[i];\n\t\tdiffHelp(aChild, bChildren[i], patches, index);\n\t\tindex += aChild.descendantsCount || 0;\n\t}\n}\n\n\n\n//////////// KEYED DIFF ////////////\n\n\nfunction diffKeyedChildren(aParent, bParent, patches, rootIndex)\n{\n\tvar localPatches = [];\n\n\tvar changes = {}; // Dict String Entry\n\tvar inserts = []; // Array { index : Int, entry : Entry }\n\t// type Entry = { tag : String, vnode : VNode, index : Int, data : _ }\n\n\tvar aChildren = aParent.children;\n\tvar bChildren = bParent.children;\n\tvar aLen = aChildren.length;\n\tvar bLen = bChildren.length;\n\tvar aIndex = 0;\n\tvar bIndex = 0;\n\n\tvar index = rootIndex;\n\n\twhile (aIndex < aLen && bIndex < bLen)\n\t{\n\t\tvar a = aChildren[aIndex];\n\t\tvar b = bChildren[bIndex];\n\n\t\tvar aKey = a._0;\n\t\tvar bKey = b._0;\n\t\tvar aNode = a._1;\n\t\tvar bNode = b._1;\n\n\t\t// check if keys match\n\n\t\tif (aKey === bKey)\n\t\t{\n\t\t\tindex++;\n\t\t\tdiffHelp(aNode, bNode, localPatches, index);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\taIndex++;\n\t\t\tbIndex++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// look ahead 1 to detect insertions and removals.\n\n\t\tvar aLookAhead = aIndex + 1 < aLen;\n\t\tvar bLookAhead = bIndex + 1 < bLen;\n\n\t\tif (aLookAhead)\n\t\t{\n\t\t\tvar aNext = aChildren[aIndex + 1];\n\t\t\tvar aNextKey = aNext._0;\n\t\t\tvar aNextNode = aNext._1;\n\t\t\tvar oldMatch = bKey === aNextKey;\n\t\t}\n\n\t\tif (bLookAhead)\n\t\t{\n\t\t\tvar bNext = bChildren[bIndex + 1];\n\t\t\tvar bNextKey = bNext._0;\n\t\t\tvar bNextNode = bNext._1;\n\t\t\tvar newMatch = aKey === bNextKey;\n\t\t}\n\n\n\t\t// swap a and b\n\t\tif (aLookAhead && bLookAhead && newMatch && oldMatch)\n\t\t{\n\t\t\tindex++;\n\t\t\tdiffHelp(aNode, bNextNode, localPatches, index);\n\t\t\tinsertNode(changes, localPatches, aKey, bNode, bIndex, inserts);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\tindex++;\n\t\t\tremoveNode(changes, localPatches, aKey, aNextNode, index);\n\t\t\tindex += aNextNode.descendantsCount || 0;\n\n\t\t\taIndex += 2;\n\t\t\tbIndex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// insert b\n\t\tif (bLookAhead && newMatch)\n\t\t{\n\t\t\tindex++;\n\t\t\tinsertNode(changes, localPatches, bKey, bNode, bIndex, inserts);\n\t\t\tdiffHelp(aNode, bNextNode, localPatches, index);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\taIndex += 1;\n\t\t\tbIndex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// remove a\n\t\tif (aLookAhead && oldMatch)\n\t\t{\n\t\t\tindex++;\n\t\t\tremoveNode(changes, localPatches, aKey, aNode, index);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\tindex++;\n\t\t\tdiffHelp(aNextNode, bNode, localPatches, index);\n\t\t\tindex += aNextNode.descendantsCount || 0;\n\n\t\t\taIndex += 2;\n\t\t\tbIndex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// remove a, insert b\n\t\tif (aLookAhead && bLookAhead && aNextKey === bNextKey)\n\t\t{\n\t\t\tindex++;\n\t\t\tremoveNode(changes, localPatches, aKey, aNode, index);\n\t\t\tinsertNode(changes, localPatches, bKey, bNode, bIndex, inserts);\n\t\t\tindex += aNode.descendantsCount || 0;\n\n\t\t\tindex++;\n\t\t\tdiffHelp(aNextNode, bNextNode, localPatches, index);\n\t\t\tindex += aNextNode.descendantsCount || 0;\n\n\t\t\taIndex += 2;\n\t\t\tbIndex += 2;\n\t\t\tcontinue;\n\t\t}\n\n\t\tbreak;\n\t}\n\n\t// eat up any remaining nodes with removeNode and insertNode\n\n\twhile (aIndex < aLen)\n\t{\n\t\tindex++;\n\t\tvar a = aChildren[aIndex];\n\t\tvar aNode = a._1;\n\t\tremoveNode(changes, localPatches, a._0, aNode, index);\n\t\tindex += aNode.descendantsCount || 0;\n\t\taIndex++;\n\t}\n\n\tvar endInserts;\n\twhile (bIndex < bLen)\n\t{\n\t\tendInserts = endInserts || [];\n\t\tvar b = bChildren[bIndex];\n\t\tinsertNode(changes, localPatches, b._0, b._1, undefined, endInserts);\n\t\tbIndex++;\n\t}\n\n\tif (localPatches.length > 0 || inserts.length > 0 || typeof endInserts !== 'undefined')\n\t{\n\t\tpatches.push(makePatch('p-reorder', rootIndex, {\n\t\t\tpatches: localPatches,\n\t\t\tinserts: inserts,\n\t\t\tendInserts: endInserts\n\t\t}));\n\t}\n}\n\n\n\n//////////// CHANGES FROM KEYED DIFF ////////////\n\n\nvar POSTFIX = '_elmW6BL';\n\n\nfunction insertNode(changes, localPatches, key, vnode, bIndex, inserts)\n{\n\tvar entry = changes[key];\n\n\t// never seen this key before\n\tif (typeof entry === 'undefined')\n\t{\n\t\tentry = {\n\t\t\ttag: 'insert',\n\t\t\tvnode: vnode,\n\t\t\tindex: bIndex,\n\t\t\tdata: undefined\n\t\t};\n\n\t\tinserts.push({ index: bIndex, entry: entry });\n\t\tchanges[key] = entry;\n\n\t\treturn;\n\t}\n\n\t// this key was removed earlier, a match!\n\tif (entry.tag === 'remove')\n\t{\n\t\tinserts.push({ index: bIndex, entry: entry });\n\n\t\tentry.tag = 'move';\n\t\tvar subPatches = [];\n\t\tdiffHelp(entry.vnode, vnode, subPatches, entry.index);\n\t\tentry.index = bIndex;\n\t\tentry.data.data = {\n\t\t\tpatches: subPatches,\n\t\t\tentry: entry\n\t\t};\n\n\t\treturn;\n\t}\n\n\t// this key has already been inserted or moved, a duplicate!\n\tinsertNode(changes, localPatches, key + POSTFIX, vnode, bIndex, inserts);\n}\n\n\nfunction removeNode(changes, localPatches, key, vnode, index)\n{\n\tvar entry = changes[key];\n\n\t// never seen this key before\n\tif (typeof entry === 'undefined')\n\t{\n\t\tvar patch = makePatch('p-remove', index, undefined);\n\t\tlocalPatches.push(patch);\n\n\t\tchanges[key] = {\n\t\t\ttag: 'remove',\n\t\t\tvnode: vnode,\n\t\t\tindex: index,\n\t\t\tdata: patch\n\t\t};\n\n\t\treturn;\n\t}\n\n\t// this key was inserted earlier, a match!\n\tif (entry.tag === 'insert')\n\t{\n\t\tentry.tag = 'move';\n\t\tvar subPatches = [];\n\t\tdiffHelp(vnode, entry.vnode, subPatches, index);\n\n\t\tvar patch = makePatch('p-remove', index, {\n\t\t\tpatches: subPatches,\n\t\t\tentry: entry\n\t\t});\n\t\tlocalPatches.push(patch);\n\n\t\treturn;\n\t}\n\n\t// this key has already been removed or moved, a duplicate!\n\tremoveNode(changes, localPatches, key + POSTFIX, vnode, index);\n}\n\n\n\n//////////// ADD DOM NODES ////////////\n//\n// Each DOM node has an \"index\" assigned in order of traversal. It is important\n// to minimize our crawl over the actual DOM, so these indexes (along with the\n// descendantsCount of virtual nodes) let us skip touching entire subtrees of\n// the DOM if we know there are no patches there.\n\n\nfunction addDomNodes(domNode, vNode, patches, eventNode)\n{\n\taddDomNodesHelp(domNode, vNode, patches, 0, 0, vNode.descendantsCount, eventNode);\n}\n\n\n// assumes `patches` is non-empty and indexes increase monotonically.\nfunction addDomNodesHelp(domNode, vNode, patches, i, low, high, eventNode)\n{\n\tvar patch = patches[i];\n\tvar index = patch.index;\n\n\twhile (index === low)\n\t{\n\t\tvar patchType = patch.type;\n\n\t\tif (patchType === 'p-thunk')\n\t\t{\n\t\t\taddDomNodes(domNode, vNode.node, patch.data, eventNode);\n\t\t}\n\t\telse if (patchType === 'p-reorder')\n\t\t{\n\t\t\tpatch.domNode = domNode;\n\t\t\tpatch.eventNode = eventNode;\n\n\t\t\tvar subPatches = patch.data.patches;\n\t\t\tif (subPatches.length > 0)\n\t\t\t{\n\t\t\t\taddDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);\n\t\t\t}\n\t\t}\n\t\telse if (patchType === 'p-remove')\n\t\t{\n\t\t\tpatch.domNode = domNode;\n\t\t\tpatch.eventNode = eventNode;\n\n\t\t\tvar data = patch.data;\n\t\t\tif (typeof data !== 'undefined')\n\t\t\t{\n\t\t\t\tdata.entry.data = domNode;\n\t\t\t\tvar subPatches = data.patches;\n\t\t\t\tif (subPatches.length > 0)\n\t\t\t\t{\n\t\t\t\t\taddDomNodesHelp(domNode, vNode, subPatches, 0, low, high, eventNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tpatch.domNode = domNode;\n\t\t\tpatch.eventNode = eventNode;\n\t\t}\n\n\t\ti++;\n\n\t\tif (!(patch = patches[i]) || (index = patch.index) > high)\n\t\t{\n\t\t\treturn i;\n\t\t}\n\t}\n\n\tswitch (vNode.type)\n\t{\n\t\tcase 'tagger':\n\t\t\tvar subNode = vNode.node;\n\n\t\t\twhile (subNode.type === \"tagger\")\n\t\t\t{\n\t\t\t\tsubNode = subNode.node;\n\t\t\t}\n\n\t\t\treturn addDomNodesHelp(domNode, subNode, patches, i, low + 1, high, domNode.elm_event_node_ref);\n\n\t\tcase 'node':\n\t\t\tvar vChildren = vNode.children;\n\t\t\tvar childNodes = domNode.childNodes;\n\t\t\tfor (var j = 0; j < vChildren.length; j++)\n\t\t\t{\n\t\t\t\tlow++;\n\t\t\t\tvar vChild = vChildren[j];\n\t\t\t\tvar nextLow = low + (vChild.descendantsCount || 0);\n\t\t\t\tif (low <= index && index <= nextLow)\n\t\t\t\t{\n\t\t\t\t\ti = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);\n\t\t\t\t\tif (!(patch = patches[i]) || (index = patch.index) > high)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlow = nextLow;\n\t\t\t}\n\t\t\treturn i;\n\n\t\tcase 'keyed-node':\n\t\t\tvar vChildren = vNode.children;\n\t\t\tvar childNodes = domNode.childNodes;\n\t\t\tfor (var j = 0; j < vChildren.length; j++)\n\t\t\t{\n\t\t\t\tlow++;\n\t\t\t\tvar vChild = vChildren[j]._1;\n\t\t\t\tvar nextLow = low + (vChild.descendantsCount || 0);\n\t\t\t\tif (low <= index && index <= nextLow)\n\t\t\t\t{\n\t\t\t\t\ti = addDomNodesHelp(childNodes[j], vChild, patches, i, low, nextLow, eventNode);\n\t\t\t\t\tif (!(patch = patches[i]) || (index = patch.index) > high)\n\t\t\t\t\t{\n\t\t\t\t\t\treturn i;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlow = nextLow;\n\t\t\t}\n\t\t\treturn i;\n\n\t\tcase 'text':\n\t\tcase 'thunk':\n\t\t\tthrow new Error('should never traverse `text` or `thunk` nodes like this');\n\t}\n}\n\n\n\n//////////// APPLY PATCHES ////////////\n\n\nfunction applyPatches(rootDomNode, oldVirtualNode, patches, eventNode)\n{\n\tif (patches.length === 0)\n\t{\n\t\treturn rootDomNode;\n\t}\n\n\taddDomNodes(rootDomNode, oldVirtualNode, patches, eventNode);\n\treturn applyPatchesHelp(rootDomNode, patches);\n}\n\nfunction applyPatchesHelp(rootDomNode, patches)\n{\n\tfor (var i = 0; i < patches.length; i++)\n\t{\n\t\tvar patch = patches[i];\n\t\tvar localDomNode = patch.domNode\n\t\tvar newNode = applyPatch(localDomNode, patch);\n\t\tif (localDomNode === rootDomNode)\n\t\t{\n\t\t\trootDomNode = newNode;\n\t\t}\n\t}\n\treturn rootDomNode;\n}\n\nfunction applyPatch(domNode, patch)\n{\n\tswitch (patch.type)\n\t{\n\t\tcase 'p-redraw':\n\t\t\treturn applyPatchRedraw(domNode, patch.data, patch.eventNode);\n\n\t\tcase 'p-facts':\n\t\t\tapplyFacts(domNode, patch.eventNode, patch.data);\n\t\t\treturn domNode;\n\n\t\tcase 'p-text':\n\t\t\tdomNode.replaceData(0, domNode.length, patch.data);\n\t\t\treturn domNode;\n\n\t\tcase 'p-thunk':\n\t\t\treturn applyPatchesHelp(domNode, patch.data);\n\n\t\tcase 'p-tagger':\n\t\t\tif (typeof domNode.elm_event_node_ref !== 'undefined')\n\t\t\t{\n\t\t\t\tdomNode.elm_event_node_ref.tagger = patch.data;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tdomNode.elm_event_node_ref = { tagger: patch.data, parent: patch.eventNode };\n\t\t\t}\n\t\t\treturn domNode;\n\n\t\tcase 'p-remove-last':\n\t\t\tvar i = patch.data;\n\t\t\twhile (i--)\n\t\t\t{\n\t\t\t\tdomNode.removeChild(domNode.lastChild);\n\t\t\t}\n\t\t\treturn domNode;\n\n\t\tcase 'p-append':\n\t\t\tvar newNodes = patch.data;\n\t\t\tfor (var i = 0; i < newNodes.length; i++)\n\t\t\t{\n\t\t\t\tdomNode.appendChild(render(newNodes[i], patch.eventNode));\n\t\t\t}\n\t\t\treturn domNode;\n\n\t\tcase 'p-remove':\n\t\t\tvar data = patch.data;\n\t\t\tif (typeof data === 'undefined')\n\t\t\t{\n\t\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t\t\treturn domNode;\n\t\t\t}\n\t\t\tvar entry = data.entry;\n\t\t\tif (typeof entry.index !== 'undefined')\n\t\t\t{\n\t\t\t\tdomNode.parentNode.removeChild(domNode);\n\t\t\t}\n\t\t\tentry.data = applyPatchesHelp(domNode, data.patches);\n\t\t\treturn domNode;\n\n\t\tcase 'p-reorder':\n\t\t\treturn applyPatchReorder(domNode, patch);\n\n\t\tcase 'p-custom':\n\t\t\tvar impl = patch.data;\n\t\t\treturn impl.applyPatch(domNode, impl.data);\n\n\t\tdefault:\n\t\t\tthrow new Error('Ran into an unknown patch!');\n\t}\n}\n\n\nfunction applyPatchRedraw(domNode, vNode, eventNode)\n{\n\tvar parentNode = domNode.parentNode;\n\tvar newNode = render(vNode, eventNode);\n\n\tif (typeof newNode.elm_event_node_ref === 'undefined')\n\t{\n\t\tnewNode.elm_event_node_ref = domNode.elm_event_node_ref;\n\t}\n\n\tif (parentNode && newNode !== domNode)\n\t{\n\t\tparentNode.replaceChild(newNode, domNode);\n\t}\n\treturn newNode;\n}\n\n\nfunction applyPatchReorder(domNode, patch)\n{\n\tvar data = patch.data;\n\n\t// remove end inserts\n\tvar frag = applyPatchReorderEndInsertsHelp(data.endInserts, patch);\n\n\t// removals\n\tdomNode = applyPatchesHelp(domNode, data.patches);\n\n\t// inserts\n\tvar inserts = data.inserts;\n\tfor (var i = 0; i < inserts.length; i++)\n\t{\n\t\tvar insert = inserts[i];\n\t\tvar entry = insert.entry;\n\t\tvar node = entry.tag === 'move'\n\t\t\t? entry.data\n\t\t\t: render(entry.vnode, patch.eventNode);\n\t\tdomNode.insertBefore(node, domNode.childNodes[insert.index]);\n\t}\n\n\t// add end inserts\n\tif (typeof frag !== 'undefined')\n\t{\n\t\tdomNode.appendChild(frag);\n\t}\n\n\treturn domNode;\n}\n\n\nfunction applyPatchReorderEndInsertsHelp(endInserts, patch)\n{\n\tif (typeof endInserts === 'undefined')\n\t{\n\t\treturn;\n\t}\n\n\tvar frag = localDoc.createDocumentFragment();\n\tfor (var i = 0; i < endInserts.length; i++)\n\t{\n\t\tvar insert = endInserts[i];\n\t\tvar entry = insert.entry;\n\t\tfrag.appendChild(entry.tag === 'move'\n\t\t\t? entry.data\n\t\t\t: render(entry.vnode, patch.eventNode)\n\t\t);\n\t}\n\treturn frag;\n}\n\n\n// PROGRAMS\n\nvar program = makeProgram(checkNoFlags);\nvar programWithFlags = makeProgram(checkYesFlags);\n\nfunction makeProgram(flagChecker)\n{\n\treturn F2(function(debugWrap, impl)\n\t{\n\t\treturn function(flagDecoder)\n\t\t{\n\t\t\treturn function(object, moduleName, debugMetadata)\n\t\t\t{\n\t\t\t\tvar checker = flagChecker(flagDecoder, moduleName);\n\t\t\t\tif (typeof debugMetadata === 'undefined')\n\t\t\t\t{\n\t\t\t\t\tnormalSetup(impl, object, moduleName, checker);\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tdebugSetup(A2(debugWrap, debugMetadata, impl), object, moduleName, checker);\n\t\t\t\t}\n\t\t\t};\n\t\t};\n\t});\n}\n\nfunction staticProgram(vNode)\n{\n\tvar nothing = _elm_lang$core$Native_Utils.Tuple2(\n\t\t_elm_lang$core$Native_Utils.Tuple0,\n\t\t_elm_lang$core$Platform_Cmd$none\n\t);\n\treturn A2(program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, {\n\t\tinit: nothing,\n\t\tview: function() { return vNode; },\n\t\tupdate: F2(function() { return nothing; }),\n\t\tsubscriptions: function() { return _elm_lang$core$Platform_Sub$none; }\n\t})();\n}\n\n\n// FLAG CHECKERS\n\nfunction checkNoFlags(flagDecoder, moduleName)\n{\n\treturn function(init, flags, domNode)\n\t{\n\t\tif (typeof flags === 'undefined')\n\t\t{\n\t\t\treturn init;\n\t\t}\n\n\t\tvar errorMessage =\n\t\t\t'The `' + moduleName + '` module does not need flags.\\n'\n\t\t\t+ 'Initialize it with no arguments and you should be all set!';\n\n\t\tcrash(errorMessage, domNode);\n\t};\n}\n\nfunction checkYesFlags(flagDecoder, moduleName)\n{\n\treturn function(init, flags, domNode)\n\t{\n\t\tif (typeof flagDecoder === 'undefined')\n\t\t{\n\t\t\tvar errorMessage =\n\t\t\t\t'Are you trying to sneak a Never value into Elm? Trickster!\\n'\n\t\t\t\t+ 'It looks like ' + moduleName + '.main is defined with `programWithFlags` but has type `Program Never`.\\n'\n\t\t\t\t+ 'Use `program` instead if you do not want flags.'\n\n\t\t\tcrash(errorMessage, domNode);\n\t\t}\n\n\t\tvar result = A2(_elm_lang$core$Native_Json.run, flagDecoder, flags);\n\t\tif (result.ctor === 'Ok')\n\t\t{\n\t\t\treturn init(result._0);\n\t\t}\n\n\t\tvar errorMessage =\n\t\t\t'Trying to initialize the `' + moduleName + '` module with an unexpected flag.\\n'\n\t\t\t+ 'I tried to convert it to an Elm value, but ran into this problem:\\n\\n'\n\t\t\t+ result._0;\n\n\t\tcrash(errorMessage, domNode);\n\t};\n}\n\nfunction crash(errorMessage, domNode)\n{\n\tif (domNode)\n\t{\n\t\tdomNode.innerHTML =\n\t\t\t'<div style=\"padding-left:1em;\">'\n\t\t\t+ '<h2 style=\"font-weight:normal;\"><b>Oops!</b> Something went wrong when starting your Elm program.</h2>'\n\t\t\t+ '<pre style=\"padding-left:1em;\">' + errorMessage + '</pre>'\n\t\t\t+ '</div>';\n\t}\n\n\tthrow new Error(errorMessage);\n}\n\n\n// NORMAL SETUP\n\nfunction normalSetup(impl, object, moduleName, flagChecker)\n{\n\tobject['embed'] = function embed(node, flags)\n\t{\n\t\twhile (node.lastChild)\n\t\t{\n\t\t\tnode.removeChild(node.lastChild);\n\t\t}\n\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, node),\n\t\t\timpl.update,\n\t\t\timpl.subscriptions,\n\t\t\tnormalRenderer(node, impl.view)\n\t\t);\n\t};\n\n\tobject['fullscreen'] = function fullscreen(flags)\n\t{\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, document.body),\n\t\t\timpl.update,\n\t\t\timpl.subscriptions,\n\t\t\tnormalRenderer(document.body, impl.view)\n\t\t);\n\t};\n}\n\nfunction normalRenderer(parentNode, view)\n{\n\treturn function(tagger, initialModel)\n\t{\n\t\tvar eventNode = { tagger: tagger, parent: undefined };\n\t\tvar initialVirtualNode = view(initialModel);\n\t\tvar domNode = render(initialVirtualNode, eventNode);\n\t\tparentNode.appendChild(domNode);\n\t\treturn makeStepper(domNode, view, initialVirtualNode, eventNode);\n\t};\n}\n\n\n// STEPPER\n\nvar rAF =\n\ttypeof requestAnimationFrame !== 'undefined'\n\t\t? requestAnimationFrame\n\t\t: function(callback) { setTimeout(callback, 1000 / 60); };\n\nfunction makeStepper(domNode, view, initialVirtualNode, eventNode)\n{\n\tvar state = 'NO_REQUEST';\n\tvar currNode = initialVirtualNode;\n\tvar nextModel;\n\n\tfunction updateIfNeeded()\n\t{\n\t\tswitch (state)\n\t\t{\n\t\t\tcase 'NO_REQUEST':\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Unexpected draw callback.\\n' +\n\t\t\t\t\t'Please report this to <https://github.com/elm-lang/virtual-dom/issues>.'\n\t\t\t\t);\n\n\t\t\tcase 'PENDING_REQUEST':\n\t\t\t\trAF(updateIfNeeded);\n\t\t\t\tstate = 'EXTRA_REQUEST';\n\n\t\t\t\tvar nextNode = view(nextModel);\n\t\t\t\tvar patches = diff(currNode, nextNode);\n\t\t\t\tdomNode = applyPatches(domNode, currNode, patches, eventNode);\n\t\t\t\tcurrNode = nextNode;\n\n\t\t\t\treturn;\n\n\t\t\tcase 'EXTRA_REQUEST':\n\t\t\t\tstate = 'NO_REQUEST';\n\t\t\t\treturn;\n\t\t}\n\t}\n\n\treturn function stepper(model)\n\t{\n\t\tif (state === 'NO_REQUEST')\n\t\t{\n\t\t\trAF(updateIfNeeded);\n\t\t}\n\t\tstate = 'PENDING_REQUEST';\n\t\tnextModel = model;\n\t};\n}\n\n\n// DEBUG SETUP\n\nfunction debugSetup(impl, object, moduleName, flagChecker)\n{\n\tobject['fullscreen'] = function fullscreen(flags)\n\t{\n\t\tvar popoutRef = { doc: undefined };\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, document.body),\n\t\t\timpl.update(scrollTask(popoutRef)),\n\t\t\timpl.subscriptions,\n\t\t\tdebugRenderer(moduleName, document.body, popoutRef, impl.view, impl.viewIn, impl.viewOut)\n\t\t);\n\t};\n\n\tobject['embed'] = function fullscreen(node, flags)\n\t{\n\t\tvar popoutRef = { doc: undefined };\n\t\treturn _elm_lang$core$Native_Platform.initialize(\n\t\t\tflagChecker(impl.init, flags, node),\n\t\t\timpl.update(scrollTask(popoutRef)),\n\t\t\timpl.subscriptions,\n\t\t\tdebugRenderer(moduleName, node, popoutRef, impl.view, impl.viewIn, impl.viewOut)\n\t\t);\n\t};\n}\n\nfunction scrollTask(popoutRef)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\tvar doc = popoutRef.doc;\n\t\tif (doc)\n\t\t{\n\t\t\tvar msgs = doc.getElementsByClassName('debugger-sidebar-messages')[0];\n\t\t\tif (msgs)\n\t\t\t{\n\t\t\t\tmsgs.scrollTop = msgs.scrollHeight;\n\t\t\t}\n\t\t}\n\t\tcallback(_elm_lang$core$Native_Scheduler.succeed(_elm_lang$core$Native_Utils.Tuple0));\n\t});\n}\n\n\nfunction debugRenderer(moduleName, parentNode, popoutRef, view, viewIn, viewOut)\n{\n\treturn function(tagger, initialModel)\n\t{\n\t\tvar appEventNode = { tagger: tagger, parent: undefined };\n\t\tvar eventNode = { tagger: tagger, parent: undefined };\n\n\t\t// make normal stepper\n\t\tvar appVirtualNode = view(initialModel);\n\t\tvar appNode = render(appVirtualNode, appEventNode);\n\t\tparentNode.appendChild(appNode);\n\t\tvar appStepper = makeStepper(appNode, view, appVirtualNode, appEventNode);\n\n\t\t// make overlay stepper\n\t\tvar overVirtualNode = viewIn(initialModel)._1;\n\t\tvar overNode = render(overVirtualNode, eventNode);\n\t\tparentNode.appendChild(overNode);\n\t\tvar wrappedViewIn = wrapViewIn(appEventNode, overNode, viewIn);\n\t\tvar overStepper = makeStepper(overNode, wrappedViewIn, overVirtualNode, eventNode);\n\n\t\t// make debugger stepper\n\t\tvar debugStepper = makeDebugStepper(initialModel, viewOut, eventNode, parentNode, moduleName, popoutRef);\n\n\t\treturn function stepper(model)\n\t\t{\n\t\t\tappStepper(model);\n\t\t\toverStepper(model);\n\t\t\tdebugStepper(model);\n\t\t}\n\t};\n}\n\nfunction makeDebugStepper(initialModel, view, eventNode, parentNode, moduleName, popoutRef)\n{\n\tvar curr;\n\tvar domNode;\n\n\treturn function stepper(model)\n\t{\n\t\tif (!model.isDebuggerOpen)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (!popoutRef.doc)\n\t\t{\n\t\t\tcurr = view(model);\n\t\t\tdomNode = openDebugWindow(moduleName, popoutRef, curr, eventNode);\n\t\t\treturn;\n\t\t}\n\n\t\t// switch to document of popout\n\t\tlocalDoc = popoutRef.doc;\n\n\t\tvar next = view(model);\n\t\tvar patches = diff(curr, next);\n\t\tdomNode = applyPatches(domNode, curr, patches, eventNode);\n\t\tcurr = next;\n\n\t\t// switch back to normal document\n\t\tlocalDoc = document;\n\t};\n}\n\nfunction openDebugWindow(moduleName, popoutRef, virtualNode, eventNode)\n{\n\tvar w = 900;\n\tvar h = 360;\n\tvar x = screen.width - w;\n\tvar y = screen.height - h;\n\tvar debugWindow = window.open('', '', 'width=' + w + ',height=' + h + ',left=' + x + ',top=' + y);\n\n\t// switch to window document\n\tlocalDoc = debugWindow.document;\n\n\tpopoutRef.doc = localDoc;\n\tlocalDoc.title = 'Debugger - ' + moduleName;\n\tlocalDoc.body.style.margin = '0';\n\tlocalDoc.body.style.padding = '0';\n\tvar domNode = render(virtualNode, eventNode);\n\tlocalDoc.body.appendChild(domNode);\n\n\tlocalDoc.addEventListener('keydown', function(event) {\n\t\tif (event.metaKey && event.which === 82)\n\t\t{\n\t\t\twindow.location.reload();\n\t\t}\n\t\tif (event.which === 38)\n\t\t{\n\t\t\teventNode.tagger({ ctor: 'Up' });\n\t\t\tevent.preventDefault();\n\t\t}\n\t\tif (event.which === 40)\n\t\t{\n\t\t\teventNode.tagger({ ctor: 'Down' });\n\t\t\tevent.preventDefault();\n\t\t}\n\t});\n\n\tfunction close()\n\t{\n\t\tpopoutRef.doc = undefined;\n\t\tdebugWindow.close();\n\t}\n\twindow.addEventListener('unload', close);\n\tdebugWindow.addEventListener('unload', function() {\n\t\tpopoutRef.doc = undefined;\n\t\twindow.removeEventListener('unload', close);\n\t\teventNode.tagger({ ctor: 'Close' });\n\t});\n\n\t// switch back to the normal document\n\tlocalDoc = document;\n\n\treturn domNode;\n}\n\n\n// BLOCK EVENTS\n\nfunction wrapViewIn(appEventNode, overlayNode, viewIn)\n{\n\tvar ignorer = makeIgnorer(overlayNode);\n\tvar blocking = 'Normal';\n\tvar overflow;\n\n\tvar normalTagger = appEventNode.tagger;\n\tvar blockTagger = function() {};\n\n\treturn function(model)\n\t{\n\t\tvar tuple = viewIn(model);\n\t\tvar newBlocking = tuple._0.ctor;\n\t\tappEventNode.tagger = newBlocking === 'Normal' ? normalTagger : blockTagger;\n\t\tif (blocking !== newBlocking)\n\t\t{\n\t\t\ttraverse('removeEventListener', ignorer, blocking);\n\t\t\ttraverse('addEventListener', ignorer, newBlocking);\n\n\t\t\tif (blocking === 'Normal')\n\t\t\t{\n\t\t\t\toverflow = document.body.style.overflow;\n\t\t\t\tdocument.body.style.overflow = 'hidden';\n\t\t\t}\n\n\t\t\tif (newBlocking === 'Normal')\n\t\t\t{\n\t\t\t\tdocument.body.style.overflow = overflow;\n\t\t\t}\n\n\t\t\tblocking = newBlocking;\n\t\t}\n\t\treturn tuple._1;\n\t}\n}\n\nfunction traverse(verbEventListener, ignorer, blocking)\n{\n\tswitch(blocking)\n\t{\n\t\tcase 'Normal':\n\t\t\treturn;\n\n\t\tcase 'Pause':\n\t\t\treturn traverseHelp(verbEventListener, ignorer, mostEvents);\n\n\t\tcase 'Message':\n\t\t\treturn traverseHelp(verbEventListener, ignorer, allEvents);\n\t}\n}\n\nfunction traverseHelp(verbEventListener, handler, eventNames)\n{\n\tfor (var i = 0; i < eventNames.length; i++)\n\t{\n\t\tdocument.body[verbEventListener](eventNames[i], handler, true);\n\t}\n}\n\nfunction makeIgnorer(overlayNode)\n{\n\treturn function(event)\n\t{\n\t\tif (event.type === 'keydown' && event.metaKey && event.which === 82)\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar isScroll = event.type === 'scroll' || event.type === 'wheel';\n\n\t\tvar node = event.target;\n\t\twhile (node !== null)\n\t\t{\n\t\t\tif (node.className === 'elm-overlay-message-details' && isScroll)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node === overlayNode && !isScroll)\n\t\t\t{\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tnode = node.parentNode;\n\t\t}\n\n\t\tevent.stopPropagation();\n\t\tevent.preventDefault();\n\t}\n}\n\nvar mostEvents = [\n\t'click', 'dblclick', 'mousemove',\n\t'mouseup', 'mousedown', 'mouseenter', 'mouseleave',\n\t'touchstart', 'touchend', 'touchcancel', 'touchmove',\n\t'pointerdown', 'pointerup', 'pointerover', 'pointerout',\n\t'pointerenter', 'pointerleave', 'pointermove', 'pointercancel',\n\t'dragstart', 'drag', 'dragend', 'dragenter', 'dragover', 'dragleave', 'drop',\n\t'keyup', 'keydown', 'keypress',\n\t'input', 'change',\n\t'focus', 'blur'\n];\n\nvar allEvents = mostEvents.concat('wheel', 'scroll');\n\n\nreturn {\n\tnode: node,\n\ttext: text,\n\tcustom: custom,\n\tmap: F2(map),\n\n\ton: F3(on),\n\tstyle: style,\n\tproperty: F2(property),\n\tattribute: F2(attribute),\n\tattributeNS: F3(attributeNS),\n\tmapProperty: F2(mapProperty),\n\n\tlazy: F2(lazy),\n\tlazy2: F3(lazy2),\n\tlazy3: F4(lazy3),\n\tkeyedNode: F3(keyedNode),\n\n\tprogram: program,\n\tprogramWithFlags: programWithFlags,\n\tstaticProgram: staticProgram\n};\n\n}();\n\nvar _elm_lang$virtual_dom$VirtualDom$programWithFlags = function (impl) {\n\treturn A2(_elm_lang$virtual_dom$Native_VirtualDom.programWithFlags, _elm_lang$virtual_dom$VirtualDom_Debug$wrapWithFlags, impl);\n};\nvar _elm_lang$virtual_dom$VirtualDom$program = function (impl) {\n\treturn A2(_elm_lang$virtual_dom$Native_VirtualDom.program, _elm_lang$virtual_dom$VirtualDom_Debug$wrap, impl);\n};\nvar _elm_lang$virtual_dom$VirtualDom$keyedNode = _elm_lang$virtual_dom$Native_VirtualDom.keyedNode;\nvar _elm_lang$virtual_dom$VirtualDom$lazy3 = _elm_lang$virtual_dom$Native_VirtualDom.lazy3;\nvar _elm_lang$virtual_dom$VirtualDom$lazy2 = _elm_lang$virtual_dom$Native_VirtualDom.lazy2;\nvar _elm_lang$virtual_dom$VirtualDom$lazy = _elm_lang$virtual_dom$Native_VirtualDom.lazy;\nvar _elm_lang$virtual_dom$VirtualDom$defaultOptions = {stopPropagation: false, preventDefault: false};\nvar _elm_lang$virtual_dom$VirtualDom$onWithOptions = _elm_lang$virtual_dom$Native_VirtualDom.on;\nvar _elm_lang$virtual_dom$VirtualDom$on = F2(\n\tfunction (eventName, decoder) {\n\t\treturn A3(_elm_lang$virtual_dom$VirtualDom$onWithOptions, eventName, _elm_lang$virtual_dom$VirtualDom$defaultOptions, decoder);\n\t});\nvar _elm_lang$virtual_dom$VirtualDom$style = _elm_lang$virtual_dom$Native_VirtualDom.style;\nvar _elm_lang$virtual_dom$VirtualDom$mapProperty = _elm_lang$virtual_dom$Native_VirtualDom.mapProperty;\nvar _elm_lang$virtual_dom$VirtualDom$attributeNS = _elm_lang$virtual_dom$Native_VirtualDom.attributeNS;\nvar _elm_lang$virtual_dom$VirtualDom$attribute = _elm_lang$virtual_dom$Native_VirtualDom.attribute;\nvar _elm_lang$virtual_dom$VirtualDom$property = _elm_lang$virtual_dom$Native_VirtualDom.property;\nvar _elm_lang$virtual_dom$VirtualDom$map = _elm_lang$virtual_dom$Native_VirtualDom.map;\nvar _elm_lang$virtual_dom$VirtualDom$text = _elm_lang$virtual_dom$Native_VirtualDom.text;\nvar _elm_lang$virtual_dom$VirtualDom$node = _elm_lang$virtual_dom$Native_VirtualDom.node;\nvar _elm_lang$virtual_dom$VirtualDom$Options = F2(\n\tfunction (a, b) {\n\t\treturn {stopPropagation: a, preventDefault: b};\n\t});\nvar _elm_lang$virtual_dom$VirtualDom$Node = {ctor: 'Node'};\nvar _elm_lang$virtual_dom$VirtualDom$Property = {ctor: 'Property'};\n\nvar _elm_lang$html$Html$programWithFlags = _elm_lang$virtual_dom$VirtualDom$programWithFlags;\nvar _elm_lang$html$Html$program = _elm_lang$virtual_dom$VirtualDom$program;\nvar _elm_lang$html$Html$beginnerProgram = function (_p0) {\n\tvar _p1 = _p0;\n\treturn _elm_lang$html$Html$program(\n\t\t{\n\t\t\tinit: A2(\n\t\t\t\t_elm_lang$core$Platform_Cmd_ops['!'],\n\t\t\t\t_p1.model,\n\t\t\t\t{ctor: '[]'}),\n\t\t\tupdate: F2(\n\t\t\t\tfunction (msg, model) {\n\t\t\t\t\treturn A2(\n\t\t\t\t\t\t_elm_lang$core$Platform_Cmd_ops['!'],\n\t\t\t\t\t\tA2(_p1.update, msg, model),\n\t\t\t\t\t\t{ctor: '[]'});\n\t\t\t\t}),\n\t\t\tview: _p1.view,\n\t\t\tsubscriptions: function (_p2) {\n\t\t\t\treturn _elm_lang$core$Platform_Sub$none;\n\t\t\t}\n\t\t});\n};\nvar _elm_lang$html$Html$map = _elm_lang$virtual_dom$VirtualDom$map;\nvar _elm_lang$html$Html$text = _elm_lang$virtual_dom$VirtualDom$text;\nvar _elm_lang$html$Html$node = _elm_lang$virtual_dom$VirtualDom$node;\nvar _elm_lang$html$Html$body = _elm_lang$html$Html$node('body');\nvar _elm_lang$html$Html$section = _elm_lang$html$Html$node('section');\nvar _elm_lang$html$Html$nav = _elm_lang$html$Html$node('nav');\nvar _elm_lang$html$Html$article = _elm_lang$html$Html$node('article');\nvar _elm_lang$html$Html$aside = _elm_lang$html$Html$node('aside');\nvar _elm_lang$html$Html$h1 = _elm_lang$html$Html$node('h1');\nvar _elm_lang$html$Html$h2 = _elm_lang$html$Html$node('h2');\nvar _elm_lang$html$Html$h3 = _elm_lang$html$Html$node('h3');\nvar _elm_lang$html$Html$h4 = _elm_lang$html$Html$node('h4');\nvar _elm_lang$html$Html$h5 = _elm_lang$html$Html$node('h5');\nvar _elm_lang$html$Html$h6 = _elm_lang$html$Html$node('h6');\nvar _elm_lang$html$Html$header = _elm_lang$html$Html$node('header');\nvar _elm_lang$html$Html$footer = _elm_lang$html$Html$node('footer');\nvar _elm_lang$html$Html$address = _elm_lang$html$Html$node('address');\nvar _elm_lang$html$Html$main_ = _elm_lang$html$Html$node('main');\nvar _elm_lang$html$Html$p = _elm_lang$html$Html$node('p');\nvar _elm_lang$html$Html$hr = _elm_lang$html$Html$node('hr');\nvar _elm_lang$html$Html$pre = _elm_lang$html$Html$node('pre');\nvar _elm_lang$html$Html$blockquote = _elm_lang$html$Html$node('blockquote');\nvar _elm_lang$html$Html$ol = _elm_lang$html$Html$node('ol');\nvar _elm_lang$html$Html$ul = _elm_lang$html$Html$node('ul');\nvar _elm_lang$html$Html$li = _elm_lang$html$Html$node('li');\nvar _elm_lang$html$Html$dl = _elm_lang$html$Html$node('dl');\nvar _elm_lang$html$Html$dt = _elm_lang$html$Html$node('dt');\nvar _elm_lang$html$Html$dd = _elm_lang$html$Html$node('dd');\nvar _elm_lang$html$Html$figure = _elm_lang$html$Html$node('figure');\nvar _elm_lang$html$Html$figcaption = _elm_lang$html$Html$node('figcaption');\nvar _elm_lang$html$Html$div = _elm_lang$html$Html$node('div');\nvar _elm_lang$html$Html$a = _elm_lang$html$Html$node('a');\nvar _elm_lang$html$Html$em = _elm_lang$html$Html$node('em');\nvar _elm_lang$html$Html$strong = _elm_lang$html$Html$node('strong');\nvar _elm_lang$html$Html$small = _elm_lang$html$Html$node('small');\nvar _elm_lang$html$Html$s = _elm_lang$html$Html$node('s');\nvar _elm_lang$html$Html$cite = _elm_lang$html$Html$node('cite');\nvar _elm_lang$html$Html$q = _elm_lang$html$Html$node('q');\nvar _elm_lang$html$Html$dfn = _elm_lang$html$Html$node('dfn');\nvar _elm_lang$html$Html$abbr = _elm_lang$html$Html$node('abbr');\nvar _elm_lang$html$Html$time = _elm_lang$html$Html$node('time');\nvar _elm_lang$html$Html$code = _elm_lang$html$Html$node('code');\nvar _elm_lang$html$Html$var = _elm_lang$html$Html$node('var');\nvar _elm_lang$html$Html$samp = _elm_lang$html$Html$node('samp');\nvar _elm_lang$html$Html$kbd = _elm_lang$html$Html$node('kbd');\nvar _elm_lang$html$Html$sub = _elm_lang$html$Html$node('sub');\nvar _elm_lang$html$Html$sup = _elm_lang$html$Html$node('sup');\nvar _elm_lang$html$Html$i = _elm_lang$html$Html$node('i');\nvar _elm_lang$html$Html$b = _elm_lang$html$Html$node('b');\nvar _elm_lang$html$Html$u = _elm_lang$html$Html$node('u');\nvar _elm_lang$html$Html$mark = _elm_lang$html$Html$node('mark');\nvar _elm_lang$html$Html$ruby = _elm_lang$html$Html$node('ruby');\nvar _elm_lang$html$Html$rt = _elm_lang$html$Html$node('rt');\nvar _elm_lang$html$Html$rp = _elm_lang$html$Html$node('rp');\nvar _elm_lang$html$Html$bdi = _elm_lang$html$Html$node('bdi');\nvar _elm_lang$html$Html$bdo = _elm_lang$html$Html$node('bdo');\nvar _elm_lang$html$Html$span = _elm_lang$html$Html$node('span');\nvar _elm_lang$html$Html$br = _elm_lang$html$Html$node('br');\nvar _elm_lang$html$Html$wbr = _elm_lang$html$Html$node('wbr');\nvar _elm_lang$html$Html$ins = _elm_lang$html$Html$node('ins');\nvar _elm_lang$html$Html$del = _elm_lang$html$Html$node('del');\nvar _elm_lang$html$Html$img = _elm_lang$html$Html$node('img');\nvar _elm_lang$html$Html$iframe = _elm_lang$html$Html$node('iframe');\nvar _elm_lang$html$Html$embed = _elm_lang$html$Html$node('embed');\nvar _elm_lang$html$Html$object = _elm_lang$html$Html$node('object');\nvar _elm_lang$html$Html$param = _elm_lang$html$Html$node('param');\nvar _elm_lang$html$Html$video = _elm_lang$html$Html$node('video');\nvar _elm_lang$html$Html$audio = _elm_lang$html$Html$node('audio');\nvar _elm_lang$html$Html$source = _elm_lang$html$Html$node('source');\nvar _elm_lang$html$Html$track = _elm_lang$html$Html$node('track');\nvar _elm_lang$html$Html$canvas = _elm_lang$html$Html$node('canvas');\nvar _elm_lang$html$Html$math = _elm_lang$html$Html$node('math');\nvar _elm_lang$html$Html$table = _elm_lang$html$Html$node('table');\nvar _elm_lang$html$Html$caption = _elm_lang$html$Html$node('caption');\nvar _elm_lang$html$Html$colgroup = _elm_lang$html$Html$node('colgroup');\nvar _elm_lang$html$Html$col = _elm_lang$html$Html$node('col');\nvar _elm_lang$html$Html$tbody = _elm_lang$html$Html$node('tbody');\nvar _elm_lang$html$Html$thead = _elm_lang$html$Html$node('thead');\nvar _elm_lang$html$Html$tfoot = _elm_lang$html$Html$node('tfoot');\nvar _elm_lang$html$Html$tr = _elm_lang$html$Html$node('tr');\nvar _elm_lang$html$Html$td = _elm_lang$html$Html$node('td');\nvar _elm_lang$html$Html$th = _elm_lang$html$Html$node('th');\nvar _elm_lang$html$Html$form = _elm_lang$html$Html$node('form');\nvar _elm_lang$html$Html$fieldset = _elm_lang$html$Html$node('fieldset');\nvar _elm_lang$html$Html$legend = _elm_lang$html$Html$node('legend');\nvar _elm_lang$html$Html$label = _elm_lang$html$Html$node('label');\nvar _elm_lang$html$Html$input = _elm_lang$html$Html$node('input');\nvar _elm_lang$html$Html$button = _elm_lang$html$Html$node('button');\nvar _elm_lang$html$Html$select = _elm_lang$html$Html$node('select');\nvar _elm_lang$html$Html$datalist = _elm_lang$html$Html$node('datalist');\nvar _elm_lang$html$Html$optgroup = _elm_lang$html$Html$node('optgroup');\nvar _elm_lang$html$Html$option = _elm_lang$html$Html$node('option');\nvar _elm_lang$html$Html$textarea = _elm_lang$html$Html$node('textarea');\nvar _elm_lang$html$Html$keygen = _elm_lang$html$Html$node('keygen');\nvar _elm_lang$html$Html$output = _elm_lang$html$Html$node('output');\nvar _elm_lang$html$Html$progress = _elm_lang$html$Html$node('progress');\nvar _elm_lang$html$Html$meter = _elm_lang$html$Html$node('meter');\nvar _elm_lang$html$Html$details = _elm_lang$html$Html$node('details');\nvar _elm_lang$html$Html$summary = _elm_lang$html$Html$node('summary');\nvar _elm_lang$html$Html$menuitem = _elm_lang$html$Html$node('menuitem');\nvar _elm_lang$html$Html$menu = _elm_lang$html$Html$node('menu');\n\nvar _elm_lang$html$Html_Attributes$map = _elm_lang$virtual_dom$VirtualDom$mapProperty;\nvar _elm_lang$html$Html_Attributes$attribute = _elm_lang$virtual_dom$VirtualDom$attribute;\nvar _elm_lang$html$Html_Attributes$contextmenu = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'contextmenu', value);\n};\nvar _elm_lang$html$Html_Attributes$draggable = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'draggable', value);\n};\nvar _elm_lang$html$Html_Attributes$itemprop = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'itemprop', value);\n};\nvar _elm_lang$html$Html_Attributes$tabindex = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'tabIndex',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$charset = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'charset', value);\n};\nvar _elm_lang$html$Html_Attributes$height = function (value) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'height',\n\t\t_elm_lang$core$Basics$toString(value));\n};\nvar _elm_lang$html$Html_Attributes$width = function (value) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'width',\n\t\t_elm_lang$core$Basics$toString(value));\n};\nvar _elm_lang$html$Html_Attributes$formaction = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'formAction', value);\n};\nvar _elm_lang$html$Html_Attributes$list = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'list', value);\n};\nvar _elm_lang$html$Html_Attributes$minlength = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'minLength',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$maxlength = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'maxlength',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$size = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'size',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$form = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'form', value);\n};\nvar _elm_lang$html$Html_Attributes$cols = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'cols',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$rows = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'rows',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$challenge = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'challenge', value);\n};\nvar _elm_lang$html$Html_Attributes$media = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'media', value);\n};\nvar _elm_lang$html$Html_Attributes$rel = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'rel', value);\n};\nvar _elm_lang$html$Html_Attributes$datetime = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'datetime', value);\n};\nvar _elm_lang$html$Html_Attributes$pubdate = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'pubdate', value);\n};\nvar _elm_lang$html$Html_Attributes$colspan = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'colspan',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$rowspan = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$attribute,\n\t\t'rowspan',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$manifest = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$attribute, 'manifest', value);\n};\nvar _elm_lang$html$Html_Attributes$property = _elm_lang$virtual_dom$VirtualDom$property;\nvar _elm_lang$html$Html_Attributes$stringProperty = F2(\n\tfunction (name, string) {\n\t\treturn A2(\n\t\t\t_elm_lang$html$Html_Attributes$property,\n\t\t\tname,\n\t\t\t_elm_lang$core$Json_Encode$string(string));\n\t});\nvar _elm_lang$html$Html_Attributes$class = function (name) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'className', name);\n};\nvar _elm_lang$html$Html_Attributes$id = function (name) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'id', name);\n};\nvar _elm_lang$html$Html_Attributes$title = function (name) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'title', name);\n};\nvar _elm_lang$html$Html_Attributes$accesskey = function ($char) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$stringProperty,\n\t\t'accessKey',\n\t\t_elm_lang$core$String$fromChar($char));\n};\nvar _elm_lang$html$Html_Attributes$dir = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'dir', value);\n};\nvar _elm_lang$html$Html_Attributes$dropzone = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'dropzone', value);\n};\nvar _elm_lang$html$Html_Attributes$lang = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'lang', value);\n};\nvar _elm_lang$html$Html_Attributes$content = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'content', value);\n};\nvar _elm_lang$html$Html_Attributes$httpEquiv = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'httpEquiv', value);\n};\nvar _elm_lang$html$Html_Attributes$language = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'language', value);\n};\nvar _elm_lang$html$Html_Attributes$src = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'src', value);\n};\nvar _elm_lang$html$Html_Attributes$alt = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'alt', value);\n};\nvar _elm_lang$html$Html_Attributes$preload = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'preload', value);\n};\nvar _elm_lang$html$Html_Attributes$poster = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'poster', value);\n};\nvar _elm_lang$html$Html_Attributes$kind = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'kind', value);\n};\nvar _elm_lang$html$Html_Attributes$srclang = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'srclang', value);\n};\nvar _elm_lang$html$Html_Attributes$sandbox = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'sandbox', value);\n};\nvar _elm_lang$html$Html_Attributes$srcdoc = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'srcdoc', value);\n};\nvar _elm_lang$html$Html_Attributes$type_ = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'type', value);\n};\nvar _elm_lang$html$Html_Attributes$value = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'value', value);\n};\nvar _elm_lang$html$Html_Attributes$defaultValue = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'defaultValue', value);\n};\nvar _elm_lang$html$Html_Attributes$placeholder = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'placeholder', value);\n};\nvar _elm_lang$html$Html_Attributes$accept = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'accept', value);\n};\nvar _elm_lang$html$Html_Attributes$acceptCharset = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'acceptCharset', value);\n};\nvar _elm_lang$html$Html_Attributes$action = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'action', value);\n};\nvar _elm_lang$html$Html_Attributes$autocomplete = function (bool) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$stringProperty,\n\t\t'autocomplete',\n\t\tbool ? 'on' : 'off');\n};\nvar _elm_lang$html$Html_Attributes$enctype = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'enctype', value);\n};\nvar _elm_lang$html$Html_Attributes$method = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'method', value);\n};\nvar _elm_lang$html$Html_Attributes$name = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'name', value);\n};\nvar _elm_lang$html$Html_Attributes$pattern = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'pattern', value);\n};\nvar _elm_lang$html$Html_Attributes$for = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'htmlFor', value);\n};\nvar _elm_lang$html$Html_Attributes$max = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'max', value);\n};\nvar _elm_lang$html$Html_Attributes$min = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'min', value);\n};\nvar _elm_lang$html$Html_Attributes$step = function (n) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'step', n);\n};\nvar _elm_lang$html$Html_Attributes$wrap = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'wrap', value);\n};\nvar _elm_lang$html$Html_Attributes$usemap = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'useMap', value);\n};\nvar _elm_lang$html$Html_Attributes$shape = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'shape', value);\n};\nvar _elm_lang$html$Html_Attributes$coords = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'coords', value);\n};\nvar _elm_lang$html$Html_Attributes$keytype = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'keytype', value);\n};\nvar _elm_lang$html$Html_Attributes$align = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'align', value);\n};\nvar _elm_lang$html$Html_Attributes$cite = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'cite', value);\n};\nvar _elm_lang$html$Html_Attributes$href = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'href', value);\n};\nvar _elm_lang$html$Html_Attributes$target = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'target', value);\n};\nvar _elm_lang$html$Html_Attributes$downloadAs = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'download', value);\n};\nvar _elm_lang$html$Html_Attributes$hreflang = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'hreflang', value);\n};\nvar _elm_lang$html$Html_Attributes$ping = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'ping', value);\n};\nvar _elm_lang$html$Html_Attributes$start = function (n) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Attributes$stringProperty,\n\t\t'start',\n\t\t_elm_lang$core$Basics$toString(n));\n};\nvar _elm_lang$html$Html_Attributes$headers = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'headers', value);\n};\nvar _elm_lang$html$Html_Attributes$scope = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$stringProperty, 'scope', value);\n};\nvar _elm_lang$html$Html_Attributes$boolProperty = F2(\n\tfunction (name, bool) {\n\t\treturn A2(\n\t\t\t_elm_lang$html$Html_Attributes$property,\n\t\t\tname,\n\t\t\t_elm_lang$core$Json_Encode$bool(bool));\n\t});\nvar _elm_lang$html$Html_Attributes$hidden = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'hidden', bool);\n};\nvar _elm_lang$html$Html_Attributes$contenteditable = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'contentEditable', bool);\n};\nvar _elm_lang$html$Html_Attributes$spellcheck = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'spellcheck', bool);\n};\nvar _elm_lang$html$Html_Attributes$async = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'async', bool);\n};\nvar _elm_lang$html$Html_Attributes$defer = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'defer', bool);\n};\nvar _elm_lang$html$Html_Attributes$scoped = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'scoped', bool);\n};\nvar _elm_lang$html$Html_Attributes$autoplay = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'autoplay', bool);\n};\nvar _elm_lang$html$Html_Attributes$controls = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'controls', bool);\n};\nvar _elm_lang$html$Html_Attributes$loop = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'loop', bool);\n};\nvar _elm_lang$html$Html_Attributes$default = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'default', bool);\n};\nvar _elm_lang$html$Html_Attributes$seamless = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'seamless', bool);\n};\nvar _elm_lang$html$Html_Attributes$checked = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'checked', bool);\n};\nvar _elm_lang$html$Html_Attributes$selected = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'selected', bool);\n};\nvar _elm_lang$html$Html_Attributes$autofocus = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'autofocus', bool);\n};\nvar _elm_lang$html$Html_Attributes$disabled = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'disabled', bool);\n};\nvar _elm_lang$html$Html_Attributes$multiple = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'multiple', bool);\n};\nvar _elm_lang$html$Html_Attributes$novalidate = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'noValidate', bool);\n};\nvar _elm_lang$html$Html_Attributes$readonly = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'readOnly', bool);\n};\nvar _elm_lang$html$Html_Attributes$required = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'required', bool);\n};\nvar _elm_lang$html$Html_Attributes$ismap = function (value) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'isMap', value);\n};\nvar _elm_lang$html$Html_Attributes$download = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'download', bool);\n};\nvar _elm_lang$html$Html_Attributes$reversed = function (bool) {\n\treturn A2(_elm_lang$html$Html_Attributes$boolProperty, 'reversed', bool);\n};\nvar _elm_lang$html$Html_Attributes$classList = function (list) {\n\treturn _elm_lang$html$Html_Attributes$class(\n\t\tA2(\n\t\t\t_elm_lang$core$String$join,\n\t\t\t' ',\n\t\t\tA2(\n\t\t\t\t_elm_lang$core$List$map,\n\t\t\t\t_elm_lang$core$Tuple$first,\n\t\t\t\tA2(_elm_lang$core$List$filter, _elm_lang$core$Tuple$second, list))));\n};\nvar _elm_lang$html$Html_Attributes$style = _elm_lang$virtual_dom$VirtualDom$style;\n\nvar _elm_lang$html$Html_Events$keyCode = A2(_elm_lang$core$Json_Decode$field, 'keyCode', _elm_lang$core$Json_Decode$int);\nvar _elm_lang$html$Html_Events$targetChecked = A2(\n\t_elm_lang$core$Json_Decode$at,\n\t{\n\t\tctor: '::',\n\t\t_0: 'target',\n\t\t_1: {\n\t\t\tctor: '::',\n\t\t\t_0: 'checked',\n\t\t\t_1: {ctor: '[]'}\n\t\t}\n\t},\n\t_elm_lang$core$Json_Decode$bool);\nvar _elm_lang$html$Html_Events$targetValue = A2(\n\t_elm_lang$core$Json_Decode$at,\n\t{\n\t\tctor: '::',\n\t\t_0: 'target',\n\t\t_1: {\n\t\t\tctor: '::',\n\t\t\t_0: 'value',\n\t\t\t_1: {ctor: '[]'}\n\t\t}\n\t},\n\t_elm_lang$core$Json_Decode$string);\nvar _elm_lang$html$Html_Events$defaultOptions = _elm_lang$virtual_dom$VirtualDom$defaultOptions;\nvar _elm_lang$html$Html_Events$onWithOptions = _elm_lang$virtual_dom$VirtualDom$onWithOptions;\nvar _elm_lang$html$Html_Events$on = _elm_lang$virtual_dom$VirtualDom$on;\nvar _elm_lang$html$Html_Events$onFocus = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'focus',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onBlur = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'blur',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onSubmitOptions = _elm_lang$core$Native_Utils.update(\n\t_elm_lang$html$Html_Events$defaultOptions,\n\t{preventDefault: true});\nvar _elm_lang$html$Html_Events$onSubmit = function (msg) {\n\treturn A3(\n\t\t_elm_lang$html$Html_Events$onWithOptions,\n\t\t'submit',\n\t\t_elm_lang$html$Html_Events$onSubmitOptions,\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onCheck = function (tagger) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'change',\n\t\tA2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetChecked));\n};\nvar _elm_lang$html$Html_Events$onInput = function (tagger) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'input',\n\t\tA2(_elm_lang$core$Json_Decode$map, tagger, _elm_lang$html$Html_Events$targetValue));\n};\nvar _elm_lang$html$Html_Events$onMouseOut = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseout',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseOver = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseover',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseLeave = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseleave',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseEnter = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseenter',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseUp = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mouseup',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onMouseDown = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'mousedown',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onDoubleClick = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'dblclick',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$onClick = function (msg) {\n\treturn A2(\n\t\t_elm_lang$html$Html_Events$on,\n\t\t'click',\n\t\t_elm_lang$core$Json_Decode$succeed(msg));\n};\nvar _elm_lang$html$Html_Events$Options = F2(\n\tfunction (a, b) {\n\t\treturn {stopPropagation: a, preventDefault: b};\n\t});\n\nvar _elm_lang$http$Native_Http = function() {\n\n\n// ENCODING AND DECODING\n\nfunction encodeUri(string)\n{\n\treturn encodeURIComponent(string);\n}\n\nfunction decodeUri(string)\n{\n\ttry\n\t{\n\t\treturn _elm_lang$core$Maybe$Just(decodeURIComponent(string));\n\t}\n\tcatch(e)\n\t{\n\t\treturn _elm_lang$core$Maybe$Nothing;\n\t}\n}\n\n\n// SEND REQUEST\n\nfunction toTask(request, maybeProgress)\n{\n\treturn _elm_lang$core$Native_Scheduler.nativeBinding(function(callback)\n\t{\n\t\tvar xhr = new XMLHttpRequest();\n\n\t\tconfigureProgress(xhr, maybeProgress);\n\n\t\txhr.addEventListener('error', function() {\n\t\t\tcallback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'NetworkError' }));\n\t\t});\n\t\txhr.addEventListener('timeout', function() {\n\t\t\tcallback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'Timeout' }));\n\t\t});\n\t\txhr.addEventListener('load', function() {\n\t\t\tcallback(handleResponse(xhr, request.expect.responseToResult));\n\t\t});\n\n\t\ttry\n\t\t{\n\t\t\txhr.open(request.method, request.url, true);\n\t\t}\n\t\tcatch (e)\n\t\t{\n\t\t\treturn callback(_elm_lang$core$Native_Scheduler.fail({ ctor: 'BadUrl', _0: request.url }));\n\t\t}\n\n\t\tconfigureRequest(xhr, request);\n\t\tsend(xhr, request.body);\n\n\t\treturn function() { xhr.abort(); };\n\t});\n}\n\nfunction configureProgress(xhr, maybeProgress)\n{\n\tif (maybeProgress.ctor === 'Nothing')\n\t{\n\t\treturn;\n\t}\n\n\txhr.addEventListener('progress', function(event) {\n\t\tif (!event.lengthComputable)\n\t\t{\n\t\t\treturn;\n\t\t}\n\t\t_elm_lang$core$Native_Scheduler.rawSpawn(maybeProgress._0({\n\t\t\tbytes: event.loaded,\n\t\t\tbytesExpected: event.total\n\t\t}));\n\t});\n}\n\nfunction configureRequest(xhr, request)\n{\n\tfunction setHeader(pair)\n\t{\n\t\txhr.setRequestHeader(pair._0, pair._1);\n\t}\n\n\tA2(_elm_lang$core$List$map, setHeader, request.headers);\n\txhr.responseType = request.expect.responseType;\n\txhr.withCredentials = request.withCredentials;\n\n\tif (request.timeout.ctor === 'Just')\n\t{\n\t\txhr.timeout = request.timeout._0;\n\t}\n}\n\nfunction send(xhr, body)\n{\n\tswitch (body.ctor)\n\t{\n\t\tcase 'EmptyBody':\n\t\t\txhr.send();\n\t\t\treturn;\n\n\t\tcase 'StringBody':\n\t\t\txhr.setRequestHeader('Content-Type', body._0);\n\t\t\txhr.send(body._1);\n\t\t\treturn;\n\n\t\tcase 'FormDataBody':\n\t\t\txhr.send(body._0);\n\t\t\treturn;\n\t}\n}\n\n\n// RESPONSES\n\nfunction handleResponse(xhr, responseToResult)\n{\n\tvar response = toResponse(xhr);\n\n\tif (xhr.status < 200 || 300 <= xhr.status)\n\t{\n\t\tresponse.body = xhr.responseText;\n\t\treturn _elm_lang$core$Native_Scheduler.fail({\n\t\t\tctor: 'BadStatus',\n\t\t\t_0: response\n\t\t});\n\t}\n\n\tvar result = responseToResult(response);\n\n\tif (result.ctor === 'Ok')\n\t{\n\t\treturn _elm_lang$core$Native_Scheduler.succeed(result._0);\n\t}\n\telse\n\t{\n\t\tresponse.body = xhr.responseText;\n\t\treturn _elm_lang$core$Native_Scheduler.fail({\n\t\t\tctor: 'BadPayload',\n\t\t\t_0: result._0,\n\t\t\t_1: response\n\t\t});\n\t}\n}\n\nfunction toResponse(xhr)\n{\n\treturn {\n\t\tstatus: { code: xhr.status, message: xhr.statusText },\n\t\theaders: parseHeaders(xhr.getAllResponseHeaders()),\n\t\turl: xhr.responseURL,\n\t\tbody: xhr.response\n\t};\n}\n\nfunction parseHeaders(rawHeaders)\n{\n\tvar headers = _elm_lang$core$Dict$empty;\n\n\tif (!rawHeaders)\n\t{\n\t\treturn headers;\n\t}\n\n\tvar headerPairs = rawHeaders.split('\\u000d\\u000a');\n\tfor (var i = headerPairs.length; i--; )\n\t{\n\t\tvar headerPair = headerPairs[i];\n\t\tvar index = headerPair.indexOf('\\u003a\\u0020');\n\t\tif (index > 0)\n\t\t{\n\t\t\tvar key = headerPair.substring(0, index);\n\t\t\tvar value = headerPair.substring(index + 2);\n\n\t\t\theaders = A3(_elm_lang$core$Dict$update, key, function(oldValue) {\n\t\t\t\tif (oldValue.ctor === 'Just')\n\t\t\t\t{\n\t\t\t\t\treturn _elm_lang$core$Maybe$Just(value + ', ' + oldValue._0);\n\t\t\t\t}\n\t\t\t\treturn _elm_lang$core$Maybe$Just(value);\n\t\t\t}, headers);\n\t\t}\n\t}\n\n\treturn headers;\n}\n\n\n// EXPECTORS\n\nfunction expectStringResponse(responseToResult)\n{\n\treturn {\n\t\tresponseType: 'text',\n\t\tresponseToResult: responseToResult\n\t};\n}\n\nfunction mapExpect(func, expect)\n{\n\treturn {\n\t\tresponseType: expect.responseType,\n\t\tresponseToResult: function(response) {\n\t\t\tvar convertedResponse = expect.responseToResult(response);\n\t\t\treturn A2(_elm_lang$core$Result$map, func, convertedResponse);\n\t\t}\n\t};\n}\n\n\n// BODY\n\nfunction multipart(parts)\n{\n\tvar formData = new FormData();\n\n\twhile (parts.ctor !== '[]')\n\t{\n\t\tvar part = parts._0;\n\t\tformData.append(part._0, part._1);\n\t\tparts = parts._1;\n\t}\n\n\treturn { ctor: 'FormDataBody', _0: formData };\n}\n\nreturn {\n\ttoTask: F2(toTask),\n\texpectStringResponse: expectStringResponse,\n\tmapExpect: F2(mapExpect),\n\tmultipart: multipart,\n\tencodeUri: encodeUri,\n\tdecodeUri: decodeUri\n};\n\n}();\n\nvar _elm_lang$http$Http_Internal$map = F2(\n\tfunction (func, request) {\n\t\treturn _elm_lang$core$Native_Utils.update(\n\t\t\trequest,\n\t\t\t{\n\t\t\t\texpect: A2(_elm_lang$http$Native_Http.mapExpect, func, request.expect)\n\t\t\t});\n\t});\nvar _elm_lang$http$Http_Internal$RawRequest = F7(\n\tfunction (a, b, c, d, e, f, g) {\n\t\treturn {method: a, headers: b, url: c, body: d, expect: e, timeout: f, withCredentials: g};\n\t});\nvar _elm_lang$http$Http_Internal$Request = function (a) {\n\treturn {ctor: 'Request', _0: a};\n};\nvar _elm_lang$http$Http_Internal$Expect = {ctor: 'Expect'};\nvar _elm_lang$http$Http_Internal$FormDataBody = {ctor: 'FormDataBody'};\nvar _elm_lang$http$Http_Internal$StringBody = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'StringBody', _0: a, _1: b};\n\t});\nvar _elm_lang$http$Http_Internal$EmptyBody = {ctor: 'EmptyBody'};\nvar _elm_lang$http$Http_Internal$Header = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'Header', _0: a, _1: b};\n\t});\n\nvar _elm_lang$http$Http$decodeUri = _elm_lang$http$Native_Http.decodeUri;\nvar _elm_lang$http$Http$encodeUri = _elm_lang$http$Native_Http.encodeUri;\nvar _elm_lang$http$Http$expectStringResponse = _elm_lang$http$Native_Http.expectStringResponse;\nvar _elm_lang$http$Http$expectJson = function (decoder) {\n\treturn _elm_lang$http$Http$expectStringResponse(\n\t\tfunction (response) {\n\t\t\treturn A2(_elm_lang$core$Json_Decode$decodeString, decoder, response.body);\n\t\t});\n};\nvar _elm_lang$http$Http$expectString = _elm_lang$http$Http$expectStringResponse(\n\tfunction (response) {\n\t\treturn _elm_lang$core$Result$Ok(response.body);\n\t});\nvar _elm_lang$http$Http$multipartBody = _elm_lang$http$Native_Http.multipart;\nvar _elm_lang$http$Http$stringBody = _elm_lang$http$Http_Internal$StringBody;\nvar _elm_lang$http$Http$jsonBody = function (value) {\n\treturn A2(\n\t\t_elm_lang$http$Http_Internal$StringBody,\n\t\t'application/json',\n\t\tA2(_elm_lang$core$Json_Encode$encode, 0, value));\n};\nvar _elm_lang$http$Http$emptyBody = _elm_lang$http$Http_Internal$EmptyBody;\nvar _elm_lang$http$Http$header = _elm_lang$http$Http_Internal$Header;\nvar _elm_lang$http$Http$request = _elm_lang$http$Http_Internal$Request;\nvar _elm_lang$http$Http$post = F3(\n\tfunction (url, body, decoder) {\n\t\treturn _elm_lang$http$Http$request(\n\t\t\t{\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {ctor: '[]'},\n\t\t\t\turl: url,\n\t\t\t\tbody: body,\n\t\t\t\texpect: _elm_lang$http$Http$expectJson(decoder),\n\t\t\t\ttimeout: _elm_lang$core$Maybe$Nothing,\n\t\t\t\twithCredentials: false\n\t\t\t});\n\t});\nvar _elm_lang$http$Http$get = F2(\n\tfunction (url, decoder) {\n\t\treturn _elm_lang$http$Http$request(\n\t\t\t{\n\t\t\t\tmethod: 'GET',\n\t\t\t\theaders: {ctor: '[]'},\n\t\t\t\turl: url,\n\t\t\t\tbody: _elm_lang$http$Http$emptyBody,\n\t\t\t\texpect: _elm_lang$http$Http$expectJson(decoder),\n\t\t\t\ttimeout: _elm_lang$core$Maybe$Nothing,\n\t\t\t\twithCredentials: false\n\t\t\t});\n\t});\nvar _elm_lang$http$Http$getString = function (url) {\n\treturn _elm_lang$http$Http$request(\n\t\t{\n\t\t\tmethod: 'GET',\n\t\t\theaders: {ctor: '[]'},\n\t\t\turl: url,\n\t\t\tbody: _elm_lang$http$Http$emptyBody,\n\t\t\texpect: _elm_lang$http$Http$expectString,\n\t\t\ttimeout: _elm_lang$core$Maybe$Nothing,\n\t\t\twithCredentials: false\n\t\t});\n};\nvar _elm_lang$http$Http$toTask = function (_p0) {\n\tvar _p1 = _p0;\n\treturn A2(_elm_lang$http$Native_Http.toTask, _p1._0, _elm_lang$core$Maybe$Nothing);\n};\nvar _elm_lang$http$Http$send = F2(\n\tfunction (resultToMessage, request) {\n\t\treturn A2(\n\t\t\t_elm_lang$core$Task$attempt,\n\t\t\tresultToMessage,\n\t\t\t_elm_lang$http$Http$toTask(request));\n\t});\nvar _elm_lang$http$Http$Response = F4(\n\tfunction (a, b, c, d) {\n\t\treturn {url: a, status: b, headers: c, body: d};\n\t});\nvar _elm_lang$http$Http$BadPayload = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'BadPayload', _0: a, _1: b};\n\t});\nvar _elm_lang$http$Http$BadStatus = function (a) {\n\treturn {ctor: 'BadStatus', _0: a};\n};\nvar _elm_lang$http$Http$NetworkError = {ctor: 'NetworkError'};\nvar _elm_lang$http$Http$Timeout = {ctor: 'Timeout'};\nvar _elm_lang$http$Http$BadUrl = function (a) {\n\treturn {ctor: 'BadUrl', _0: a};\n};\nvar _elm_lang$http$Http$StringPart = F2(\n\tfunction (a, b) {\n\t\treturn {ctor: 'StringPart', _0: a, _1: b};\n\t});\nvar _elm_lang$http$Http$stringPart = _elm_lang$http$Http$StringPart;\n\nvar _user$project$Main$decodeGifUrl = A2(\n\t_elm_lang$core$Json_Decode$at,\n\t{\n\t\tctor: '::',\n\t\t_0: 'data',\n\t\t_1: {\n\t\t\tctor: '::',\n\t\t\t_0: 'image_url',\n\t\t\t_1: {ctor: '[]'}\n\t\t}\n\t},\n\t_elm_lang$core$Json_Decode$string);\nvar _user$project$Main$subscriptions = function (model) {\n\treturn _elm_lang$core$Platform_Sub$none;\n};\nvar _user$project$Main$Model = F2(\n\tfunction (a, b) {\n\t\treturn {topic: a, gifUrl: b};\n\t});\nvar _user$project$Main$NewGif = function (a) {\n\treturn {ctor: 'NewGif', _0: a};\n};\nvar _user$project$Main$getRandomGif = function (topic) {\n\tvar url = A2(_elm_lang$core$Basics_ops['++'], 'https://api.giphy.com/v1/gifs/random?api_key=dc6zaTOxFJmzC&tag=', topic);\n\treturn A2(\n\t\t_elm_lang$http$Http$send,\n\t\t_user$project$Main$NewGif,\n\t\tA2(_elm_lang$http$Http$get, url, _user$project$Main$decodeGifUrl));\n};\nvar _user$project$Main$init = function (topic) {\n\treturn {\n\t\tctor: '_Tuple2',\n\t\t_0: A2(_user$project$Main$Model, topic, 'waiting.gif'),\n\t\t_1: _user$project$Main$getRandomGif(topic)\n\t};\n};\nvar _user$project$Main$update = F2(\n\tfunction (msg, model) {\n\t\tvar _p0 = msg;\n\t\tif (_p0.ctor === 'MorePlease') {\n\t\t\treturn {\n\t\t\t\tctor: '_Tuple2',\n\t\t\t\t_0: model,\n\t\t\t\t_1: _user$project$Main$getRandomGif(model.topic)\n\t\t\t};\n\t\t} else {\n\t\t\tif (_p0._0.ctor === 'Ok') {\n\t\t\t\treturn {\n\t\t\t\t\tctor: '_Tuple2',\n\t\t\t\t\t_0: A2(_user$project$Main$Model, model.topic, _p0._0._0),\n\t\t\t\t\t_1: _elm_lang$core$Platform_Cmd$none\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn {ctor: '_Tuple2', _0: model, _1: _elm_lang$core$Platform_Cmd$none};\n\t\t\t}\n\t\t}\n\t});\nvar _user$project$Main$MorePlease = {ctor: 'MorePlease'};\nvar _user$project$Main$view = function (model) {\n\treturn A2(\n\t\t_elm_lang$html$Html$div,\n\t\t{ctor: '[]'},\n\t\t{\n\t\t\tctor: '::',\n\t\t\t_0: A2(\n\t\t\t\t_elm_lang$html$Html$h2,\n\t\t\t\t{ctor: '[]'},\n\t\t\t\t{\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: _elm_lang$html$Html$text(model.topic),\n\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t}),\n\t\t\t_1: {\n\t\t\t\tctor: '::',\n\t\t\t\t_0: A2(\n\t\t\t\t\t_elm_lang$html$Html$button,\n\t\t\t\t\t{\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: _elm_lang$html$Html_Events$onClick(_user$project$Main$MorePlease),\n\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: _elm_lang$html$Html$text('More Please!'),\n\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t}),\n\t\t\t\t_1: {\n\t\t\t\t\tctor: '::',\n\t\t\t\t\t_0: A2(\n\t\t\t\t\t\t_elm_lang$html$Html$br,\n\t\t\t\t\t\t{ctor: '[]'},\n\t\t\t\t\t\t{ctor: '[]'}),\n\t\t\t\t\t_1: {\n\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t_0: A2(\n\t\t\t\t\t\t\t_elm_lang$html$Html$img,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tctor: '::',\n\t\t\t\t\t\t\t\t_0: _elm_lang$html$Html_Attributes$src(model.gifUrl),\n\t\t\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{ctor: '[]'}),\n\t\t\t\t\t\t_1: {ctor: '[]'}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n};\nvar _user$project$Main$main = _elm_lang$html$Html$program(\n\t{\n\t\tinit: _user$project$Main$init('cats'),\n\t\tview: _user$project$Main$view,\n\t\tupdate: _user$project$Main$update,\n\t\tsubscriptions: _user$project$Main$subscriptions\n\t})();\n\nvar Elm = {};\nElm['Main'] = Elm['Main'] || {};\nif (typeof _user$project$Main$main !== 'undefined') {\n _user$project$Main$main(Elm['Main'], 'Main', undefined);\n}\n\nif (typeof define === \"function\" && define['amd'])\n{\n define([], function() { return Elm; });\n return;\n}\n\nif (typeof module === \"object\")\n{\n module['exports'] = Elm;\n return;\n}\n\nvar globalElm = this['Elm'];\nif (typeof globalElm === \"undefined\")\n{\n this['Elm'] = Elm;\n return;\n}\n\nfor (var publicModule in Elm)\n{\n if (publicModule in globalElm)\n {\n throw new Error('There are two Elm modules called `' + publicModule + '` on this page! Rename one of them.');\n }\n globalElm[publicModule] = Elm[publicModule];\n}\n\n}).call(this);\n\n\n cb();\n }\n ;\n var obj = new Object();\n defineElm.bind(obj)(function(){\n var mountNode = document.getElementById('elm-div-5');\n obj.Elm. Main.embed(mountNode);\n });\n </script>\n ", | |
"text/plain": "<IPython.core.display.HTML object>" | |
}, | |
"metadata": {} | |
} | |
] | |
}, | |
{ | |
"metadata": { | |
"collapsed": true, | |
"trusted": false | |
}, | |
"cell_type": "code", | |
"source": "", | |
"execution_count": null, | |
"outputs": [] | |
} | |
], | |
"metadata": { | |
"toc": { | |
"threshold": 4, | |
"number_sections": true, | |
"toc_cell": false, | |
"toc_window_display": false, | |
"toc_section_display": "block", | |
"sideBar": true, | |
"navigate_menu": true, | |
"moveMenuLeft": true, | |
"widenNotebook": false, | |
"colors": { | |
"hover_highlight": "#DAA520", | |
"selected_highlight": "#FFD700", | |
"running_highlight": "#FF0000", | |
"wrapper_background": "#FFFFFF", | |
"sidebar_border": "#EEEEEE", | |
"navigate_text": "#333333", | |
"navigate_num": "#000000" | |
}, | |
"nav_menu": { | |
"width": "0px", | |
"height": "0px" | |
} | |
}, | |
"kernelspec": { | |
"name": "snapkernel", | |
"display_name": "Snap", | |
"language": "" | |
}, | |
"language_info": { | |
"name": "pyspark", | |
"mimetype": "text/x-python", | |
"pygments_lexer": "python2", | |
"codemirror_mode": { | |
"name": "python", | |
"version": 2 | |
} | |
}, | |
"gist": { | |
"id": "", | |
"data": { | |
"description": "demo of http request using elm_magic ", | |
"public": true | |
} | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 2 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment