summary history branches tags files
commit:61caeda1bc29f20c31cc09a3a66237dbc7726025
author:mrmekon
committer:mrmekon
date:Mon Mar 19 17:01:01 2012 -0400
parents:491f67d18e3bd7c543fb4e1b0ddac00d95aa7bc6
Removed build files.  Added path to draw 'flipper' enemy.  Building out functions to manipulate objects by polar coordinates.  These will eventually be used for enemy movement.
diff --git a/resources/public/tempest.js b/resources/public/tempest.js
line changes: +0/-9711
index 2097293..0000000
--- a/resources/public/tempest.js
+++ /dev/null
@@ -1,9711 +0,0 @@
-var COMPILED = !0, goog = goog || {};
-goog.global = this;
-goog.DEBUG = !0;
-goog.LOCALE = "en";
-goog.evalWorksForGlobals_ = null;
-goog.provide = function(a) {
-  if(!COMPILED) {
-    if(goog.getObjectByName(a) && !goog.implicitNamespaces_[a]) {
-      throw Error('Namespace "' + a + '" already declared.');
-    }
-    for(var b = a;b = b.substring(0, b.lastIndexOf("."));) {
-      goog.implicitNamespaces_[b] = !0
-    }
-  }
-  goog.exportPath_(a)
-};
-goog.setTestOnly = function(a) {
-  if(COMPILED && !goog.DEBUG) {
-    throw a = a || "", Error("Importing test-only code into non-debug environment" + a ? ": " + a : ".");
-  }
-};
-COMPILED || (goog.implicitNamespaces_ = {});
-goog.exportPath_ = function(a, b, c) {
-  a = a.split(".");
-  c = c || goog.global;
-  !(a[0] in c) && c.execScript && c.execScript("var " + a[0]);
-  for(var d;a.length && (d = a.shift());) {
-    !a.length && goog.isDef(b) ? c[d] = b : c = c[d] ? c[d] : c[d] = {}
-  }
-};
-goog.getObjectByName = function(a, b) {
-  for(var c = a.split("."), d = b || goog.global, e;e = c.shift();) {
-    if(goog.isDefAndNotNull(d[e])) {
-      d = d[e]
-    }else {
-      return null
-    }
-  }
-  return d
-};
-goog.globalize = function(a, b) {
-  var c = b || goog.global, d;
-  for(d in a) {
-    c[d] = a[d]
-  }
-};
-goog.addDependency = function(a, b, c) {
-  if(!COMPILED) {
-    for(var d, a = a.replace(/\\/g, "/"), e = goog.dependencies_, f = 0;d = b[f];f++) {
-      e.nameToPath[d] = a;
-      a in e.pathToNames || (e.pathToNames[a] = {});
-      e.pathToNames[a][d] = true
-    }
-    for(d = 0;b = c[d];d++) {
-      a in e.requires || (e.requires[a] = {});
-      e.requires[a][b] = true
-    }
-  }
-};
-goog.require = function(a) {
-  if(!COMPILED && !goog.getObjectByName(a)) {
-    var b = goog.getPathFromDeps_(a);
-    if(b) {
-      goog.included_[b] = true;
-      goog.writeScripts_()
-    }else {
-      a = "goog.require could not find: " + a;
-      goog.global.console && goog.global.console.error(a);
-      throw Error(a);
-    }
-  }
-};
-goog.basePath = "";
-goog.nullFunction = function() {
-};
-goog.identityFunction = function(a) {
-  return a
-};
-goog.abstractMethod = function() {
-  throw Error("unimplemented abstract method");
-};
-goog.addSingletonGetter = function(a) {
-  a.getInstance = function() {
-    return a.instance_ || (a.instance_ = new a)
-  }
-};
-COMPILED || (goog.included_ = {}, goog.dependencies_ = {pathToNames:{}, nameToPath:{}, requires:{}, visited:{}, written:{}}, goog.inHtmlDocument_ = function() {
-  var a = goog.global.document;
-  return typeof a != "undefined" && "write" in a
-}, goog.findBasePath_ = function() {
-  if(goog.global.CLOSURE_BASE_PATH) {
-    goog.basePath = goog.global.CLOSURE_BASE_PATH
-  }else {
-    if(goog.inHtmlDocument_()) {
-      for(var a = goog.global.document.getElementsByTagName("script"), b = a.length - 1;b >= 0;--b) {
-        var c = a[b].src, d = c.lastIndexOf("?"), d = d == -1 ? c.length : d;
-        if(c.substr(d - 7, 7) == "base.js") {
-          goog.basePath = c.substr(0, d - 7);
-          break
-        }
-      }
-    }
-  }
-}, goog.importScript_ = function(a) {
-  var b = goog.global.CLOSURE_IMPORT_SCRIPT || goog.writeScriptTag_;
-  !goog.dependencies_.written[a] && b(a) && (goog.dependencies_.written[a] = true)
-}, goog.writeScriptTag_ = function(a) {
-  if(goog.inHtmlDocument_()) {
-    goog.global.document.write('<script type="text/javascript" src="' + a + '"><\/script>');
-    return true
-  }
-  return false
-}, goog.writeScripts_ = function() {
-  function a(e) {
-    if(!(e in d.written)) {
-      if(!(e in d.visited)) {
-        d.visited[e] = true;
-        if(e in d.requires) {
-          for(var g in d.requires[e]) {
-            if(g in d.nameToPath) {
-              a(d.nameToPath[g])
-            }else {
-              if(!goog.getObjectByName(g)) {
-                throw Error("Undefined nameToPath for " + g);
-              }
-            }
-          }
-        }
-      }
-      if(!(e in c)) {
-        c[e] = true;
-        b.push(e)
-      }
-    }
-  }
-  var b = [], c = {}, d = goog.dependencies_, e;
-  for(e in goog.included_) {
-    d.written[e] || a(e)
-  }
-  for(e = 0;e < b.length;e++) {
-    if(b[e]) {
-      goog.importScript_(goog.basePath + b[e])
-    }else {
-      throw Error("Undefined script input");
-    }
-  }
-}, goog.getPathFromDeps_ = function(a) {
-  return a in goog.dependencies_.nameToPath ? goog.dependencies_.nameToPath[a] : null
-}, goog.findBasePath_(), goog.global.CLOSURE_NO_DEPS || goog.importScript_(goog.basePath + "deps.js"));
-goog.typeOf = function(a) {
-  var b = typeof a;
-  if(b == "object") {
-    if(a) {
-      if(a instanceof Array) {
-        return"array"
-      }
-      if(a instanceof Object) {
-        return b
-      }
-      var c = Object.prototype.toString.call(a);
-      if(c == "[object Window]") {
-        return"object"
-      }
-      if(c == "[object Array]" || typeof a.length == "number" && typeof a.splice != "undefined" && typeof a.propertyIsEnumerable != "undefined" && !a.propertyIsEnumerable("splice")) {
-        return"array"
-      }
-      if(c == "[object Function]" || typeof a.call != "undefined" && typeof a.propertyIsEnumerable != "undefined" && !a.propertyIsEnumerable("call")) {
-        return"function"
-      }
-    }else {
-      return"null"
-    }
-  }else {
-    if(b == "function" && typeof a.call == "undefined") {
-      return"object"
-    }
-  }
-  return b
-};
-goog.propertyIsEnumerableCustom_ = function(a, b) {
-  if(b in a) {
-    for(var c in a) {
-      if(c == b && Object.prototype.hasOwnProperty.call(a, b)) {
-        return true
-      }
-    }
-  }
-  return false
-};
-goog.propertyIsEnumerable_ = function(a, b) {
-  return a instanceof Object ? Object.prototype.propertyIsEnumerable.call(a, b) : goog.propertyIsEnumerableCustom_(a, b)
-};
-goog.isDef = function(a) {
-  return a !== void 0
-};
-goog.isNull = function(a) {
-  return a === null
-};
-goog.isDefAndNotNull = function(a) {
-  return a != null
-};
-goog.isArray = function(a) {
-  return goog.typeOf(a) == "array"
-};
-goog.isArrayLike = function(a) {
-  var b = goog.typeOf(a);
-  return b == "array" || b == "object" && typeof a.length == "number"
-};
-goog.isDateLike = function(a) {
-  return goog.isObject(a) && typeof a.getFullYear == "function"
-};
-goog.isString = function(a) {
-  return typeof a == "string"
-};
-goog.isBoolean = function(a) {
-  return typeof a == "boolean"
-};
-goog.isNumber = function(a) {
-  return typeof a == "number"
-};
-goog.isFunction = function(a) {
-  return goog.typeOf(a) == "function"
-};
-goog.isObject = function(a) {
-  a = goog.typeOf(a);
-  return a == "object" || a == "array" || a == "function"
-};
-goog.getUid = function(a) {
-  return a[goog.UID_PROPERTY_] || (a[goog.UID_PROPERTY_] = ++goog.uidCounter_)
-};
-goog.removeUid = function(a) {
-  "removeAttribute" in a && a.removeAttribute(goog.UID_PROPERTY_);
-  try {
-    delete a[goog.UID_PROPERTY_]
-  }catch(b) {
-  }
-};
-goog.UID_PROPERTY_ = "closure_uid_" + Math.floor(2147483648 * Math.random()).toString(36);
-goog.uidCounter_ = 0;
-goog.getHashCode = goog.getUid;
-goog.removeHashCode = goog.removeUid;
-goog.cloneObject = function(a) {
-  var b = goog.typeOf(a);
-  if(b == "object" || b == "array") {
-    if(a.clone) {
-      return a.clone()
-    }
-    var b = b == "array" ? [] : {}, c;
-    for(c in a) {
-      b[c] = goog.cloneObject(a[c])
-    }
-    return b
-  }
-  return a
-};
-goog.bindNative_ = function(a, b, c) {
-  return a.call.apply(a.bind, arguments)
-};
-goog.bindJs_ = function(a, b, c) {
-  var d = b || goog.global;
-  if(arguments.length > 2) {
-    var e = Array.prototype.slice.call(arguments, 2);
-    return function() {
-      var b = Array.prototype.slice.call(arguments);
-      Array.prototype.unshift.apply(b, e);
-      return a.apply(d, b)
-    }
-  }
-  return function() {
-    return a.apply(d, arguments)
-  }
-};
-goog.bind = function(a, b, c) {
-  goog.bind = Function.prototype.bind && Function.prototype.bind.toString().indexOf("native code") != -1 ? goog.bindNative_ : goog.bindJs_;
-  return goog.bind.apply(null, arguments)
-};
-goog.partial = function(a, b) {
-  var c = Array.prototype.slice.call(arguments, 1);
-  return function() {
-    var b = Array.prototype.slice.call(arguments);
-    b.unshift.apply(b, c);
-    return a.apply(this, b)
-  }
-};
-goog.mixin = function(a, b) {
-  for(var c in b) {
-    a[c] = b[c]
-  }
-};
-goog.now = Date.now || function() {
-  return+new Date
-};
-goog.globalEval = function(a) {
-  if(goog.global.execScript) {
-    goog.global.execScript(a, "JavaScript")
-  }else {
-    if(goog.global.eval) {
-      if(goog.evalWorksForGlobals_ == null) {
-        goog.global.eval("var _et_ = 1;");
-        if(typeof goog.global._et_ != "undefined") {
-          delete goog.global._et_;
-          goog.evalWorksForGlobals_ = true
-        }else {
-          goog.evalWorksForGlobals_ = false
-        }
-      }
-      if(goog.evalWorksForGlobals_) {
-        goog.global.eval(a)
-      }else {
-        var b = goog.global.document, c = b.createElement("script");
-        c.type = "text/javascript";
-        c.defer = false;
-        c.appendChild(b.createTextNode(a));
-        b.body.appendChild(c);
-        b.body.removeChild(c)
-      }
-    }else {
-      throw Error("goog.globalEval not available");
-    }
-  }
-};
-goog.getCssName = function(a, b) {
-  var c = function(a) {
-    return goog.cssNameMapping_[a] || a
-  }, d;
-  d = goog.cssNameMapping_ ? goog.cssNameMappingStyle_ == "BY_WHOLE" ? c : function(a) {
-    for(var a = a.split("-"), b = [], d = 0;d < a.length;d++) {
-      b.push(c(a[d]))
-    }
-    return b.join("-")
-  } : function(a) {
-    return a
-  };
-  return b ? a + "-" + d(b) : d(a)
-};
-goog.setCssNameMapping = function(a, b) {
-  goog.cssNameMapping_ = a;
-  goog.cssNameMappingStyle_ = b
-};
-goog.getMsg = function(a, b) {
-  var c = b || {}, d;
-  for(d in c) {
-    var e = ("" + c[d]).replace(/\$/g, "$$$$"), a = a.replace(RegExp("\\{\\$" + d + "\\}", "gi"), e)
-  }
-  return a
-};
-goog.exportSymbol = function(a, b, c) {
-  goog.exportPath_(a, b, c)
-};
-goog.exportProperty = function(a, b, c) {
-  a[b] = c
-};
-goog.inherits = function(a, b) {
-  function c() {
-  }
-  c.prototype = b.prototype;
-  a.superClass_ = b.prototype;
-  a.prototype = new c;
-  a.prototype.constructor = a
-};
-goog.base = function(a, b, c) {
-  var d = arguments.callee.caller;
-  if(d.superClass_) {
-    return d.superClass_.constructor.apply(a, Array.prototype.slice.call(arguments, 1))
-  }
-  for(var e = Array.prototype.slice.call(arguments, 2), f = false, g = a.constructor;g;g = g.superClass_ && g.superClass_.constructor) {
-    if(g.prototype[b] === d) {
-      f = true
-    }else {
-      if(f) {
-        return g.prototype[b].apply(a, e)
-      }
-    }
-  }
-  if(a[b] === d) {
-    return a.constructor.prototype[b].apply(a, e)
-  }
-  throw Error("goog.base called from a method of one name to a method of a different name");
-};
-goog.scope = function(a) {
-  a.call(goog.global)
-};
-goog.string = {};
-goog.string.Unicode = {NBSP:"\u00a0"};
-goog.string.startsWith = function(a, b) {
-  return 0 == a.lastIndexOf(b, 0)
-};
-goog.string.endsWith = function(a, b) {
-  var c = a.length - b.length;
-  return 0 <= c && a.indexOf(b, c) == c
-};
-goog.string.caseInsensitiveStartsWith = function(a, b) {
-  return 0 == goog.string.caseInsensitiveCompare(b, a.substr(0, b.length))
-};
-goog.string.caseInsensitiveEndsWith = function(a, b) {
-  return 0 == goog.string.caseInsensitiveCompare(b, a.substr(a.length - b.length, b.length))
-};
-goog.string.subs = function(a, b) {
-  for(var c = 1;c < arguments.length;c++) {
-    var d = ("" + arguments[c]).replace(/\$/g, "$$$$"), a = a.replace(/\%s/, d)
-  }
-  return a
-};
-goog.string.collapseWhitespace = function(a) {
-  return a.replace(/[\s\xa0]+/g, " ").replace(/^\s+|\s+$/g, "")
-};
-goog.string.isEmpty = function(a) {
-  return/^[\s\xa0]*$/.test(a)
-};
-goog.string.isEmptySafe = function(a) {
-  return goog.string.isEmpty(goog.string.makeSafe(a))
-};
-goog.string.isBreakingWhitespace = function(a) {
-  return!/[^\t\n\r ]/.test(a)
-};
-goog.string.isAlpha = function(a) {
-  return!/[^a-zA-Z]/.test(a)
-};
-goog.string.isNumeric = function(a) {
-  return!/[^0-9]/.test(a)
-};
-goog.string.isAlphaNumeric = function(a) {
-  return!/[^a-zA-Z0-9]/.test(a)
-};
-goog.string.isSpace = function(a) {
-  return" " == a
-};
-goog.string.isUnicodeChar = function(a) {
-  return 1 == a.length && " " <= a && "~" >= a || "\u0080" <= a && "\ufffd" >= a
-};
-goog.string.stripNewlines = function(a) {
-  return a.replace(/(\r\n|\r|\n)+/g, " ")
-};
-goog.string.canonicalizeNewlines = function(a) {
-  return a.replace(/(\r\n|\r|\n)/g, "\n")
-};
-goog.string.normalizeWhitespace = function(a) {
-  return a.replace(/\xa0|\s/g, " ")
-};
-goog.string.normalizeSpaces = function(a) {
-  return a.replace(/\xa0|[ \t]+/g, " ")
-};
-goog.string.trim = function(a) {
-  return a.replace(/^[\s\xa0]+|[\s\xa0]+$/g, "")
-};
-goog.string.trimLeft = function(a) {
-  return a.replace(/^[\s\xa0]+/, "")
-};
-goog.string.trimRight = function(a) {
-  return a.replace(/[\s\xa0]+$/, "")
-};
-goog.string.caseInsensitiveCompare = function(a, b) {
-  var c = ("" + a).toLowerCase(), d = ("" + b).toLowerCase();
-  return c < d ? -1 : c == d ? 0 : 1
-};
-goog.string.numerateCompareRegExp_ = /(\.\d+)|(\d+)|(\D+)/g;
-goog.string.numerateCompare = function(a, b) {
-  if(a == b) {
-    return 0
-  }
-  if(!a) {
-    return-1
-  }
-  if(!b) {
-    return 1
-  }
-  for(var c = a.toLowerCase().match(goog.string.numerateCompareRegExp_), d = b.toLowerCase().match(goog.string.numerateCompareRegExp_), e = Math.min(c.length, d.length), f = 0;f < e;f++) {
-    var g = c[f], h = d[f];
-    if(g != h) {
-      return c = parseInt(g, 10), !isNaN(c) && (d = parseInt(h, 10), !isNaN(d) && c - d) ? c - d : g < h ? -1 : 1
-    }
-  }
-  return c.length != d.length ? c.length - d.length : a < b ? -1 : 1
-};
-goog.string.encodeUriRegExp_ = /^[a-zA-Z0-9\-_.!~*'()]*$/;
-goog.string.urlEncode = function(a) {
-  a = "" + a;
-  return!goog.string.encodeUriRegExp_.test(a) ? encodeURIComponent(a) : a
-};
-goog.string.urlDecode = function(a) {
-  return decodeURIComponent(a.replace(/\+/g, " "))
-};
-goog.string.newLineToBr = function(a, b) {
-  return a.replace(/(\r\n|\r|\n)/g, b ? "<br />" : "<br>")
-};
-goog.string.htmlEscape = function(a, b) {
-  if(b) {
-    return a.replace(goog.string.amperRe_, "&amp;").replace(goog.string.ltRe_, "&lt;").replace(goog.string.gtRe_, "&gt;").replace(goog.string.quotRe_, "&quot;")
-  }
-  if(!goog.string.allRe_.test(a)) {
-    return a
-  }
-  -1 != a.indexOf("&") && (a = a.replace(goog.string.amperRe_, "&amp;"));
-  -1 != a.indexOf("<") && (a = a.replace(goog.string.ltRe_, "&lt;"));
-  -1 != a.indexOf(">") && (a = a.replace(goog.string.gtRe_, "&gt;"));
-  -1 != a.indexOf('"') && (a = a.replace(goog.string.quotRe_, "&quot;"));
-  return a
-};
-goog.string.amperRe_ = /&/g;
-goog.string.ltRe_ = /</g;
-goog.string.gtRe_ = />/g;
-goog.string.quotRe_ = /\"/g;
-goog.string.allRe_ = /[&<>\"]/;
-goog.string.unescapeEntities = function(a) {
-  return goog.string.contains(a, "&") ? "document" in goog.global && !goog.string.contains(a, "<") ? goog.string.unescapeEntitiesUsingDom_(a) : goog.string.unescapePureXmlEntities_(a) : a
-};
-goog.string.unescapeEntitiesUsingDom_ = function(a) {
-  var b = goog.global.document.createElement("div");
-  b.innerHTML = "<pre>x" + a + "</pre>";
-  if(b.firstChild[goog.string.NORMALIZE_FN_]) {
-    b.firstChild[goog.string.NORMALIZE_FN_]()
-  }
-  a = b.firstChild.firstChild.nodeValue.slice(1);
-  b.innerHTML = "";
-  return goog.string.canonicalizeNewlines(a)
-};
-goog.string.unescapePureXmlEntities_ = function(a) {
-  return a.replace(/&([^;]+);/g, function(a, c) {
-    switch(c) {
-      case "amp":
-        return"&";
-      case "lt":
-        return"<";
-      case "gt":
-        return">";
-      case "quot":
-        return'"';
-      default:
-        if("#" == c.charAt(0)) {
-          var d = Number("0" + c.substr(1));
-          if(!isNaN(d)) {
-            return String.fromCharCode(d)
-          }
-        }
-        return a
-    }
-  })
-};
-goog.string.NORMALIZE_FN_ = "normalize";
-goog.string.whitespaceEscape = function(a, b) {
-  return goog.string.newLineToBr(a.replace(/  /g, " &#160;"), b)
-};
-goog.string.stripQuotes = function(a, b) {
-  for(var c = b.length, d = 0;d < c;d++) {
-    var e = 1 == c ? b : b.charAt(d);
-    if(a.charAt(0) == e && a.charAt(a.length - 1) == e) {
-      return a.substring(1, a.length - 1)
-    }
-  }
-  return a
-};
-goog.string.truncate = function(a, b, c) {
-  c && (a = goog.string.unescapeEntities(a));
-  a.length > b && (a = a.substring(0, b - 3) + "...");
-  c && (a = goog.string.htmlEscape(a));
-  return a
-};
-goog.string.truncateMiddle = function(a, b, c, d) {
-  c && (a = goog.string.unescapeEntities(a));
-  if(d) {
-    d > b && (d = b);
-    var e = a.length - d, a = a.substring(0, b - d) + "..." + a.substring(e)
-  }else {
-    a.length > b && (d = Math.floor(b / 2), e = a.length - d, a = a.substring(0, d + b % 2) + "..." + a.substring(e))
-  }
-  c && (a = goog.string.htmlEscape(a));
-  return a
-};
-goog.string.specialEscapeChars_ = {"\x00":"\\0", "\u0008":"\\b", "\u000c":"\\f", "\n":"\\n", "\r":"\\r", "\t":"\\t", "\x0B":"\\x0B", '"':'\\"', "\\":"\\\\"};
-goog.string.jsEscapeCache_ = {"'":"\\'"};
-goog.string.quote = function(a) {
-  a = "" + a;
-  if(a.quote) {
-    return a.quote()
-  }
-  for(var b = ['"'], c = 0;c < a.length;c++) {
-    var d = a.charAt(c), e = d.charCodeAt(0);
-    b[c + 1] = goog.string.specialEscapeChars_[d] || (31 < e && 127 > e ? d : goog.string.escapeChar(d))
-  }
-  b.push('"');
-  return b.join("")
-};
-goog.string.escapeString = function(a) {
-  for(var b = [], c = 0;c < a.length;c++) {
-    b[c] = goog.string.escapeChar(a.charAt(c))
-  }
-  return b.join("")
-};
-goog.string.escapeChar = function(a) {
-  if(a in goog.string.jsEscapeCache_) {
-    return goog.string.jsEscapeCache_[a]
-  }
-  if(a in goog.string.specialEscapeChars_) {
-    return goog.string.jsEscapeCache_[a] = goog.string.specialEscapeChars_[a]
-  }
-  var b = a, c = a.charCodeAt(0);
-  if(31 < c && 127 > c) {
-    b = a
-  }else {
-    if(256 > c) {
-      if(b = "\\x", 16 > c || 256 < c) {
-        b += "0"
-      }
-    }else {
-      b = "\\u", 4096 > c && (b += "0")
-    }
-    b += c.toString(16).toUpperCase()
-  }
-  return goog.string.jsEscapeCache_[a] = b
-};
-goog.string.toMap = function(a) {
-  for(var b = {}, c = 0;c < a.length;c++) {
-    b[a.charAt(c)] = !0
-  }
-  return b
-};
-goog.string.contains = function(a, b) {
-  return-1 != a.indexOf(b)
-};
-goog.string.removeAt = function(a, b, c) {
-  var d = a;
-  0 <= b && b < a.length && 0 < c && (d = a.substr(0, b) + a.substr(b + c, a.length - b - c));
-  return d
-};
-goog.string.remove = function(a, b) {
-  var c = RegExp(goog.string.regExpEscape(b), "");
-  return a.replace(c, "")
-};
-goog.string.removeAll = function(a, b) {
-  var c = RegExp(goog.string.regExpEscape(b), "g");
-  return a.replace(c, "")
-};
-goog.string.regExpEscape = function(a) {
-  return("" + a).replace(/([-()\[\]{}+?*.$\^|,:#<!\\])/g, "\\$1").replace(/\x08/g, "\\x08")
-};
-goog.string.repeat = function(a, b) {
-  return Array(b + 1).join(a)
-};
-goog.string.padNumber = function(a, b, c) {
-  a = goog.isDef(c) ? a.toFixed(c) : "" + a;
-  c = a.indexOf(".");
-  -1 == c && (c = a.length);
-  return goog.string.repeat("0", Math.max(0, b - c)) + a
-};
-goog.string.makeSafe = function(a) {
-  return null == a ? "" : "" + a
-};
-goog.string.buildString = function(a) {
-  return Array.prototype.join.call(arguments, "")
-};
-goog.string.getRandomString = function() {
-  return Math.floor(2147483648 * Math.random()).toString(36) + Math.abs(Math.floor(2147483648 * Math.random()) ^ goog.now()).toString(36)
-};
-goog.string.compareVersions = function(a, b) {
-  for(var c = 0, d = goog.string.trim("" + a).split("."), e = goog.string.trim("" + b).split("."), f = Math.max(d.length, e.length), g = 0;0 == c && g < f;g++) {
-    var h = d[g] || "", i = e[g] || "", j = RegExp("(\\d*)(\\D*)", "g"), k = RegExp("(\\d*)(\\D*)", "g");
-    do {
-      var m = j.exec(h) || ["", "", ""], l = k.exec(i) || ["", "", ""];
-      if(0 == m[0].length && 0 == l[0].length) {
-        break
-      }
-      var c = 0 == m[1].length ? 0 : parseInt(m[1], 10), o = 0 == l[1].length ? 0 : parseInt(l[1], 10), c = goog.string.compareElements_(c, o) || goog.string.compareElements_(0 == m[2].length, 0 == l[2].length) || goog.string.compareElements_(m[2], l[2])
-    }while(0 == c)
-  }
-  return c
-};
-goog.string.compareElements_ = function(a, b) {
-  return a < b ? -1 : a > b ? 1 : 0
-};
-goog.string.HASHCODE_MAX_ = 4294967296;
-goog.string.hashCode = function(a) {
-  for(var b = 0, c = 0;c < a.length;++c) {
-    b = 31 * b + a.charCodeAt(c), b %= goog.string.HASHCODE_MAX_
-  }
-  return b
-};
-goog.string.uniqueStringCounter_ = 2147483648 * Math.random() | 0;
-goog.string.createUniqueString = function() {
-  return"goog_" + goog.string.uniqueStringCounter_++
-};
-goog.string.toNumber = function(a) {
-  var b = Number(a);
-  return 0 == b && goog.string.isEmpty(a) ? NaN : b
-};
-goog.string.toCamelCaseCache_ = {};
-goog.string.toCamelCase = function(a) {
-  return goog.string.toCamelCaseCache_[a] || (goog.string.toCamelCaseCache_[a] = ("" + a).replace(/\-([a-z])/g, function(a, c) {
-    return c.toUpperCase()
-  }))
-};
-goog.string.toSelectorCaseCache_ = {};
-goog.string.toSelectorCase = function(a) {
-  return goog.string.toSelectorCaseCache_[a] || (goog.string.toSelectorCaseCache_[a] = ("" + a).replace(/([A-Z])/g, "-$1").toLowerCase())
-};
-goog.userAgent = {};
-goog.userAgent.jscript = {};
-goog.userAgent.jscript.ASSUME_NO_JSCRIPT = !1;
-goog.userAgent.jscript.init_ = function() {
-  goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_ = "ScriptEngine" in goog.global && "JScript" == goog.global.ScriptEngine();
-  goog.userAgent.jscript.DETECTED_VERSION_ = goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_ ? goog.global.ScriptEngineMajorVersion() + "." + goog.global.ScriptEngineMinorVersion() + "." + goog.global.ScriptEngineBuildVersion() : "0"
-};
-goog.userAgent.jscript.ASSUME_NO_JSCRIPT || goog.userAgent.jscript.init_();
-goog.userAgent.jscript.HAS_JSCRIPT = goog.userAgent.jscript.ASSUME_NO_JSCRIPT ? !1 : goog.userAgent.jscript.DETECTED_HAS_JSCRIPT_;
-goog.userAgent.jscript.VERSION = goog.userAgent.jscript.ASSUME_NO_JSCRIPT ? "0" : goog.userAgent.jscript.DETECTED_VERSION_;
-goog.userAgent.jscript.isVersion = function(a) {
-  return 0 <= goog.string.compareVersions(goog.userAgent.jscript.VERSION, a)
-};
-goog.string.StringBuffer = function(a, b) {
-  this.buffer_ = goog.userAgent.jscript.HAS_JSCRIPT ? [] : "";
-  null != a && this.append.apply(this, arguments)
-};
-goog.string.StringBuffer.prototype.set = function(a) {
-  this.clear();
-  this.append(a)
-};
-goog.userAgent.jscript.HAS_JSCRIPT ? (goog.string.StringBuffer.prototype.bufferLength_ = 0, goog.string.StringBuffer.prototype.append = function(a, b, c) {
-  null == b ? this.buffer_[this.bufferLength_++] = a : (this.buffer_.push.apply(this.buffer_, arguments), this.bufferLength_ = this.buffer_.length);
-  return this
-}) : goog.string.StringBuffer.prototype.append = function(a, b, c) {
-  this.buffer_ += a;
-  if(null != b) {
-    for(var d = 1;d < arguments.length;d++) {
-      this.buffer_ += arguments[d]
-    }
-  }
-  return this
-};
-goog.string.StringBuffer.prototype.clear = function() {
-  if(goog.userAgent.jscript.HAS_JSCRIPT) {
-    this.bufferLength_ = this.buffer_.length = 0
-  }else {
-    this.buffer_ = ""
-  }
-};
-goog.string.StringBuffer.prototype.getLength = function() {
-  return this.toString().length
-};
-goog.string.StringBuffer.prototype.toString = function() {
-  if(goog.userAgent.jscript.HAS_JSCRIPT) {
-    var a = this.buffer_.join("");
-    this.clear();
-    a && this.append(a);
-    return a
-  }
-  return this.buffer_
-};
-goog.events = {};
-goog.events.EventWrapper = function() {
-};
-goog.events.EventWrapper.prototype.listen = function() {
-};
-goog.events.EventWrapper.prototype.unlisten = function() {
-};
-goog.userAgent.ASSUME_IE = !1;
-goog.userAgent.ASSUME_GECKO = !1;
-goog.userAgent.ASSUME_WEBKIT = !1;
-goog.userAgent.ASSUME_MOBILE_WEBKIT = !1;
-goog.userAgent.ASSUME_OPERA = !1;
-goog.userAgent.BROWSER_KNOWN_ = goog.userAgent.ASSUME_IE || goog.userAgent.ASSUME_GECKO || goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_OPERA;
-goog.userAgent.getUserAgentString = function() {
-  return goog.global.navigator ? goog.global.navigator.userAgent : null
-};
-goog.userAgent.getNavigator = function() {
-  return goog.global.navigator
-};
-goog.userAgent.init_ = function() {
-  goog.userAgent.detectedOpera_ = !1;
-  goog.userAgent.detectedIe_ = !1;
-  goog.userAgent.detectedWebkit_ = !1;
-  goog.userAgent.detectedMobile_ = !1;
-  goog.userAgent.detectedGecko_ = !1;
-  var a;
-  if(!goog.userAgent.BROWSER_KNOWN_ && (a = goog.userAgent.getUserAgentString())) {
-    var b = goog.userAgent.getNavigator();
-    goog.userAgent.detectedOpera_ = 0 == a.indexOf("Opera");
-    goog.userAgent.detectedIe_ = !goog.userAgent.detectedOpera_ && -1 != a.indexOf("MSIE");
-    goog.userAgent.detectedWebkit_ = !goog.userAgent.detectedOpera_ && -1 != a.indexOf("WebKit");
-    goog.userAgent.detectedMobile_ = goog.userAgent.detectedWebkit_ && -1 != a.indexOf("Mobile");
-    goog.userAgent.detectedGecko_ = !goog.userAgent.detectedOpera_ && !goog.userAgent.detectedWebkit_ && "Gecko" == b.product
-  }
-};
-goog.userAgent.BROWSER_KNOWN_ || goog.userAgent.init_();
-goog.userAgent.OPERA = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_OPERA : goog.userAgent.detectedOpera_;
-goog.userAgent.IE = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_IE : goog.userAgent.detectedIe_;
-goog.userAgent.GECKO = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_GECKO : goog.userAgent.detectedGecko_;
-goog.userAgent.WEBKIT = goog.userAgent.BROWSER_KNOWN_ ? goog.userAgent.ASSUME_WEBKIT || goog.userAgent.ASSUME_MOBILE_WEBKIT : goog.userAgent.detectedWebkit_;
-goog.userAgent.MOBILE = goog.userAgent.ASSUME_MOBILE_WEBKIT || goog.userAgent.detectedMobile_;
-goog.userAgent.SAFARI = goog.userAgent.WEBKIT;
-goog.userAgent.determinePlatform_ = function() {
-  var a = goog.userAgent.getNavigator();
-  return a && a.platform || ""
-};
-goog.userAgent.PLATFORM = goog.userAgent.determinePlatform_();
-goog.userAgent.ASSUME_MAC = !1;
-goog.userAgent.ASSUME_WINDOWS = !1;
-goog.userAgent.ASSUME_LINUX = !1;
-goog.userAgent.ASSUME_X11 = !1;
-goog.userAgent.PLATFORM_KNOWN_ = goog.userAgent.ASSUME_MAC || goog.userAgent.ASSUME_WINDOWS || goog.userAgent.ASSUME_LINUX || goog.userAgent.ASSUME_X11;
-goog.userAgent.initPlatform_ = function() {
-  goog.userAgent.detectedMac_ = goog.string.contains(goog.userAgent.PLATFORM, "Mac");
-  goog.userAgent.detectedWindows_ = goog.string.contains(goog.userAgent.PLATFORM, "Win");
-  goog.userAgent.detectedLinux_ = goog.string.contains(goog.userAgent.PLATFORM, "Linux");
-  goog.userAgent.detectedX11_ = !!goog.userAgent.getNavigator() && goog.string.contains(goog.userAgent.getNavigator().appVersion || "", "X11")
-};
-goog.userAgent.PLATFORM_KNOWN_ || goog.userAgent.initPlatform_();
-goog.userAgent.MAC = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_MAC : goog.userAgent.detectedMac_;
-goog.userAgent.WINDOWS = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_WINDOWS : goog.userAgent.detectedWindows_;
-goog.userAgent.LINUX = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_LINUX : goog.userAgent.detectedLinux_;
-goog.userAgent.X11 = goog.userAgent.PLATFORM_KNOWN_ ? goog.userAgent.ASSUME_X11 : goog.userAgent.detectedX11_;
-goog.userAgent.determineVersion_ = function() {
-  var a = "", b;
-  goog.userAgent.OPERA && goog.global.opera ? (a = goog.global.opera.version, a = "function" == typeof a ? a() : a) : (goog.userAgent.GECKO ? b = /rv\:([^\);]+)(\)|;)/ : goog.userAgent.IE ? b = /MSIE\s+([^\);]+)(\)|;)/ : goog.userAgent.WEBKIT && (b = /WebKit\/(\S+)/), b && (a = (a = b.exec(goog.userAgent.getUserAgentString())) ? a[1] : ""));
-  return goog.userAgent.IE && (b = goog.userAgent.getDocumentMode_(), b > parseFloat(a)) ? "" + b : a
-};
-goog.userAgent.getDocumentMode_ = function() {
-  var a = goog.global.document;
-  return a ? a.documentMode : void 0
-};
-goog.userAgent.VERSION = goog.userAgent.determineVersion_();
-goog.userAgent.compare = function(a, b) {
-  return goog.string.compareVersions(a, b)
-};
-goog.userAgent.isVersionCache_ = {};
-goog.userAgent.isVersion = function(a) {
-  return goog.userAgent.isVersionCache_[a] || (goog.userAgent.isVersionCache_[a] = 0 <= goog.string.compareVersions(goog.userAgent.VERSION, a))
-};
-goog.events.BrowserFeature = {HAS_W3C_BUTTON:!goog.userAgent.IE || goog.userAgent.isVersion("9"), SET_KEY_CODE_TO_PREVENT_DEFAULT:goog.userAgent.IE && !goog.userAgent.isVersion("8")};
-goog.disposable = {};
-goog.disposable.IDisposable = function() {
-};
-goog.Disposable = function() {
-  goog.Disposable.ENABLE_MONITORING && (goog.Disposable.instances_[goog.getUid(this)] = this)
-};
-goog.Disposable.ENABLE_MONITORING = !1;
-goog.Disposable.instances_ = {};
-goog.Disposable.getUndisposedObjects = function() {
-  var a = [], b;
-  for(b in goog.Disposable.instances_) {
-    goog.Disposable.instances_.hasOwnProperty(b) && a.push(goog.Disposable.instances_[Number(b)])
-  }
-  return a
-};
-goog.Disposable.clearUndisposedObjects = function() {
-  goog.Disposable.instances_ = {}
-};
-goog.Disposable.prototype.disposed_ = !1;
-goog.Disposable.prototype.isDisposed = function() {
-  return this.disposed_
-};
-goog.Disposable.prototype.getDisposed = goog.Disposable.prototype.isDisposed;
-goog.Disposable.prototype.dispose = function() {
-  if(!this.disposed_ && (this.disposed_ = !0, this.disposeInternal(), goog.Disposable.ENABLE_MONITORING)) {
-    var a = goog.getUid(this);
-    if(!goog.Disposable.instances_.hasOwnProperty(a)) {
-      throw Error(this + " did not call the goog.Disposable base constructor or was disposed of after a clearUndisposedObjects call");
-    }
-    delete goog.Disposable.instances_[a]
-  }
-};
-goog.Disposable.prototype.disposeInternal = function() {
-};
-goog.dispose = function(a) {
-  a && "function" == typeof a.dispose && a.dispose()
-};
-goog.events.Event = function(a, b) {
-  goog.Disposable.call(this);
-  this.type = a;
-  this.currentTarget = this.target = b
-};
-goog.inherits(goog.events.Event, goog.Disposable);
-goog.events.Event.prototype.disposeInternal = function() {
-  delete this.type;
-  delete this.target;
-  delete this.currentTarget
-};
-goog.events.Event.prototype.propagationStopped_ = !1;
-goog.events.Event.prototype.returnValue_ = !0;
-goog.events.Event.prototype.stopPropagation = function() {
-  this.propagationStopped_ = !0
-};
-goog.events.Event.prototype.preventDefault = function() {
-  this.returnValue_ = !1
-};
-goog.events.Event.stopPropagation = function(a) {
-  a.stopPropagation()
-};
-goog.events.Event.preventDefault = function(a) {
-  a.preventDefault()
-};
-goog.events.EventType = {CLICK:"click", DBLCLICK:"dblclick", MOUSEDOWN:"mousedown", MOUSEUP:"mouseup", MOUSEOVER:"mouseover", MOUSEOUT:"mouseout", MOUSEMOVE:"mousemove", SELECTSTART:"selectstart", KEYPRESS:"keypress", KEYDOWN:"keydown", KEYUP:"keyup", BLUR:"blur", FOCUS:"focus", DEACTIVATE:"deactivate", FOCUSIN:goog.userAgent.IE ? "focusin" : "DOMFocusIn", FOCUSOUT:goog.userAgent.IE ? "focusout" : "DOMFocusOut", CHANGE:"change", SELECT:"select", SUBMIT:"submit", INPUT:"input", PROPERTYCHANGE:"propertychange", 
-DRAGSTART:"dragstart", DRAGENTER:"dragenter", DRAGOVER:"dragover", DRAGLEAVE:"dragleave", DROP:"drop", TOUCHSTART:"touchstart", TOUCHMOVE:"touchmove", TOUCHEND:"touchend", TOUCHCANCEL:"touchcancel", CONTEXTMENU:"contextmenu", ERROR:"error", HELP:"help", LOAD:"load", LOSECAPTURE:"losecapture", READYSTATECHANGE:"readystatechange", RESIZE:"resize", SCROLL:"scroll", UNLOAD:"unload", HASHCHANGE:"hashchange", PAGEHIDE:"pagehide", PAGESHOW:"pageshow", POPSTATE:"popstate", COPY:"copy", PASTE:"paste", CUT:"cut", 
-MESSAGE:"message", CONNECT:"connect"};
-goog.reflect = {};
-goog.reflect.object = function(a, b) {
-  return b
-};
-goog.reflect.sinkValue = new Function("a", "return a");
-goog.events.BrowserEvent = function(a, b) {
-  a && this.init(a, b)
-};
-goog.inherits(goog.events.BrowserEvent, goog.events.Event);
-goog.events.BrowserEvent.MouseButton = {LEFT:0, MIDDLE:1, RIGHT:2};
-goog.events.BrowserEvent.IEButtonMap = [1, 4, 2];
-goog.events.BrowserEvent.prototype.target = null;
-goog.events.BrowserEvent.prototype.relatedTarget = null;
-goog.events.BrowserEvent.prototype.offsetX = 0;
-goog.events.BrowserEvent.prototype.offsetY = 0;
-goog.events.BrowserEvent.prototype.clientX = 0;
-goog.events.BrowserEvent.prototype.clientY = 0;
-goog.events.BrowserEvent.prototype.screenX = 0;
-goog.events.BrowserEvent.prototype.screenY = 0;
-goog.events.BrowserEvent.prototype.button = 0;
-goog.events.BrowserEvent.prototype.keyCode = 0;
-goog.events.BrowserEvent.prototype.charCode = 0;
-goog.events.BrowserEvent.prototype.ctrlKey = !1;
-goog.events.BrowserEvent.prototype.altKey = !1;
-goog.events.BrowserEvent.prototype.shiftKey = !1;
-goog.events.BrowserEvent.prototype.metaKey = !1;
-goog.events.BrowserEvent.prototype.platformModifierKey = !1;
-goog.events.BrowserEvent.prototype.event_ = null;
-goog.events.BrowserEvent.prototype.init = function(a, b) {
-  var c = this.type = a.type;
-  goog.events.Event.call(this, c);
-  this.target = a.target || a.srcElement;
-  this.currentTarget = b;
-  var d = a.relatedTarget;
-  if(d) {
-    if(goog.userAgent.GECKO) {
-      try {
-        goog.reflect.sinkValue(d.nodeName)
-      }catch(e) {
-        d = null
-      }
-    }
-  }else {
-    c == goog.events.EventType.MOUSEOVER ? d = a.fromElement : c == goog.events.EventType.MOUSEOUT && (d = a.toElement)
-  }
-  this.relatedTarget = d;
-  this.offsetX = void 0 !== a.offsetX ? a.offsetX : a.layerX;
-  this.offsetY = void 0 !== a.offsetY ? a.offsetY : a.layerY;
-  this.clientX = void 0 !== a.clientX ? a.clientX : a.pageX;
-  this.clientY = void 0 !== a.clientY ? a.clientY : a.pageY;
-  this.screenX = a.screenX || 0;
-  this.screenY = a.screenY || 0;
-  this.button = a.button;
-  this.keyCode = a.keyCode || 0;
-  this.charCode = a.charCode || ("keypress" == c ? a.keyCode : 0);
-  this.ctrlKey = a.ctrlKey;
-  this.altKey = a.altKey;
-  this.shiftKey = a.shiftKey;
-  this.metaKey = a.metaKey;
-  this.platformModifierKey = goog.userAgent.MAC ? a.metaKey : a.ctrlKey;
-  this.state = a.state;
-  this.event_ = a;
-  delete this.returnValue_;
-  delete this.propagationStopped_
-};
-goog.events.BrowserEvent.prototype.isButton = function(a) {
-  return goog.events.BrowserFeature.HAS_W3C_BUTTON ? this.event_.button == a : "click" == this.type ? a == goog.events.BrowserEvent.MouseButton.LEFT : !!(this.event_.button & goog.events.BrowserEvent.IEButtonMap[a])
-};
-goog.events.BrowserEvent.prototype.isMouseActionButton = function() {
-  return this.isButton(goog.events.BrowserEvent.MouseButton.LEFT) && !(goog.userAgent.WEBKIT && goog.userAgent.MAC && this.ctrlKey)
-};
-goog.events.BrowserEvent.prototype.stopPropagation = function() {
-  goog.events.BrowserEvent.superClass_.stopPropagation.call(this);
-  this.event_.stopPropagation ? this.event_.stopPropagation() : this.event_.cancelBubble = !0
-};
-goog.events.BrowserEvent.prototype.preventDefault = function() {
-  goog.events.BrowserEvent.superClass_.preventDefault.call(this);
-  var a = this.event_;
-  if(a.preventDefault) {
-    a.preventDefault()
-  }else {
-    if(a.returnValue = !1, goog.events.BrowserFeature.SET_KEY_CODE_TO_PREVENT_DEFAULT) {
-      try {
-        if(a.ctrlKey || 112 <= a.keyCode && 123 >= a.keyCode) {
-          a.keyCode = -1
-        }
-      }catch(b) {
-      }
-    }
-  }
-};
-goog.events.BrowserEvent.prototype.getBrowserEvent = function() {
-  return this.event_
-};
-goog.events.BrowserEvent.prototype.disposeInternal = function() {
-  goog.events.BrowserEvent.superClass_.disposeInternal.call(this);
-  this.relatedTarget = this.currentTarget = this.target = this.event_ = null
-};
-goog.debug = {};
-goog.debug.Error = function(a) {
-  this.stack = Error().stack || "";
-  a && (this.message = "" + a)
-};
-goog.inherits(goog.debug.Error, Error);
-goog.debug.Error.prototype.name = "CustomError";
-goog.asserts = {};
-goog.asserts.ENABLE_ASSERTS = goog.DEBUG;
-goog.asserts.AssertionError = function(a, b) {
-  b.unshift(a);
-  goog.debug.Error.call(this, goog.string.subs.apply(null, b));
-  b.shift();
-  this.messagePattern = a
-};
-goog.inherits(goog.asserts.AssertionError, goog.debug.Error);
-goog.asserts.AssertionError.prototype.name = "AssertionError";
-goog.asserts.doAssertFailure_ = function(a, b, c, d) {
-  var e = "Assertion failed";
-  if(c) {
-    var e = e + (": " + c), f = d
-  }else {
-    a && (e += ": " + a, f = b)
-  }
-  throw new goog.asserts.AssertionError("" + e, f || []);
-};
-goog.asserts.assert = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !a && goog.asserts.doAssertFailure_("", null, b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.fail = function(a, b) {
-  if(goog.asserts.ENABLE_ASSERTS) {
-    throw new goog.asserts.AssertionError("Failure" + (a ? ": " + a : ""), Array.prototype.slice.call(arguments, 1));
-  }
-};
-goog.asserts.assertNumber = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isNumber(a) && goog.asserts.doAssertFailure_("Expected number but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.assertString = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isString(a) && goog.asserts.doAssertFailure_("Expected string but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.assertFunction = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isFunction(a) && goog.asserts.doAssertFailure_("Expected function but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.assertObject = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isObject(a) && goog.asserts.doAssertFailure_("Expected object but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.assertArray = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isArray(a) && goog.asserts.doAssertFailure_("Expected array but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.assertBoolean = function(a, b, c) {
-  goog.asserts.ENABLE_ASSERTS && !goog.isBoolean(a) && goog.asserts.doAssertFailure_("Expected boolean but got %s: %s.", [goog.typeOf(a), a], b, Array.prototype.slice.call(arguments, 2));
-  return a
-};
-goog.asserts.assertInstanceof = function(a, b, c, d) {
-  goog.asserts.ENABLE_ASSERTS && !(a instanceof b) && goog.asserts.doAssertFailure_("instanceof check failed.", null, c, Array.prototype.slice.call(arguments, 3))
-};
-goog.array = {};
-goog.NATIVE_ARRAY_PROTOTYPES = !0;
-goog.array.peek = function(a) {
-  return a[a.length - 1]
-};
-goog.array.ARRAY_PROTOTYPE_ = Array.prototype;
-goog.array.indexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.indexOf ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.indexOf.call(a, b, c)
-} : function(a, b, c) {
-  c = null == c ? 0 : 0 > c ? Math.max(0, a.length + c) : c;
-  if(goog.isString(a)) {
-    return!goog.isString(b) || 1 != b.length ? -1 : a.indexOf(b, c)
-  }
-  for(;c < a.length;c++) {
-    if(c in a && a[c] === b) {
-      return c
-    }
-  }
-  return-1
-};
-goog.array.lastIndexOf = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.lastIndexOf ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.lastIndexOf.call(a, b, null == c ? a.length - 1 : c)
-} : function(a, b, c) {
-  c = null == c ? a.length - 1 : c;
-  0 > c && (c = Math.max(0, a.length + c));
-  if(goog.isString(a)) {
-    return!goog.isString(b) || 1 != b.length ? -1 : a.lastIndexOf(b, c)
-  }
-  for(;0 <= c;c--) {
-    if(c in a && a[c] === b) {
-      return c
-    }
-  }
-  return-1
-};
-goog.array.forEach = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.forEach ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  goog.array.ARRAY_PROTOTYPE_.forEach.call(a, b, c)
-} : function(a, b, c) {
-  for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
-    f in e && b.call(c, e[f], f, a)
-  }
-};
-goog.array.forEachRight = function(a, b, c) {
-  for(var d = a.length, e = goog.isString(a) ? a.split("") : a, d = d - 1;0 <= d;--d) {
-    d in e && b.call(c, e[d], d, a)
-  }
-};
-goog.array.filter = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.filter ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.filter.call(a, b, c)
-} : function(a, b, c) {
-  for(var d = a.length, e = [], f = 0, g = goog.isString(a) ? a.split("") : a, h = 0;h < d;h++) {
-    if(h in g) {
-      var i = g[h];
-      b.call(c, i, h, a) && (e[f++] = i)
-    }
-  }
-  return e
-};
-goog.array.map = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.map ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.map.call(a, b, c)
-} : function(a, b, c) {
-  for(var d = a.length, e = Array(d), f = goog.isString(a) ? a.split("") : a, g = 0;g < d;g++) {
-    g in f && (e[g] = b.call(c, f[g], g, a))
-  }
-  return e
-};
-goog.array.reduce = function(a, b, c, d) {
-  if(a.reduce) {
-    return d ? a.reduce(goog.bind(b, d), c) : a.reduce(b, c)
-  }
-  var e = c;
-  goog.array.forEach(a, function(c, g) {
-    e = b.call(d, e, c, g, a)
-  });
-  return e
-};
-goog.array.reduceRight = function(a, b, c, d) {
-  if(a.reduceRight) {
-    return d ? a.reduceRight(goog.bind(b, d), c) : a.reduceRight(b, c)
-  }
-  var e = c;
-  goog.array.forEachRight(a, function(c, g) {
-    e = b.call(d, e, c, g, a)
-  });
-  return e
-};
-goog.array.some = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.some ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.some.call(a, b, c)
-} : function(a, b, c) {
-  for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
-    if(f in e && b.call(c, e[f], f, a)) {
-      return!0
-    }
-  }
-  return!1
-};
-goog.array.every = goog.NATIVE_ARRAY_PROTOTYPES && goog.array.ARRAY_PROTOTYPE_.every ? function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.every.call(a, b, c)
-} : function(a, b, c) {
-  for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
-    if(f in e && !b.call(c, e[f], f, a)) {
-      return!1
-    }
-  }
-  return!0
-};
-goog.array.find = function(a, b, c) {
-  b = goog.array.findIndex(a, b, c);
-  return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b]
-};
-goog.array.findIndex = function(a, b, c) {
-  for(var d = a.length, e = goog.isString(a) ? a.split("") : a, f = 0;f < d;f++) {
-    if(f in e && b.call(c, e[f], f, a)) {
-      return f
-    }
-  }
-  return-1
-};
-goog.array.findRight = function(a, b, c) {
-  b = goog.array.findIndexRight(a, b, c);
-  return 0 > b ? null : goog.isString(a) ? a.charAt(b) : a[b]
-};
-goog.array.findIndexRight = function(a, b, c) {
-  for(var d = a.length, e = goog.isString(a) ? a.split("") : a, d = d - 1;0 <= d;d--) {
-    if(d in e && b.call(c, e[d], d, a)) {
-      return d
-    }
-  }
-  return-1
-};
-goog.array.contains = function(a, b) {
-  return 0 <= goog.array.indexOf(a, b)
-};
-goog.array.isEmpty = function(a) {
-  return 0 == a.length
-};
-goog.array.clear = function(a) {
-  if(!goog.isArray(a)) {
-    for(var b = a.length - 1;0 <= b;b--) {
-      delete a[b]
-    }
-  }
-  a.length = 0
-};
-goog.array.insert = function(a, b) {
-  goog.array.contains(a, b) || a.push(b)
-};
-goog.array.insertAt = function(a, b, c) {
-  goog.array.splice(a, c, 0, b)
-};
-goog.array.insertArrayAt = function(a, b, c) {
-  goog.partial(goog.array.splice, a, c, 0).apply(null, b)
-};
-goog.array.insertBefore = function(a, b, c) {
-  var d;
-  2 == arguments.length || 0 > (d = goog.array.indexOf(a, c)) ? a.push(b) : goog.array.insertAt(a, b, d)
-};
-goog.array.remove = function(a, b) {
-  var c = goog.array.indexOf(a, b), d;
-  (d = 0 <= c) && goog.array.removeAt(a, c);
-  return d
-};
-goog.array.removeAt = function(a, b) {
-  goog.asserts.assert(null != a.length);
-  return 1 == goog.array.ARRAY_PROTOTYPE_.splice.call(a, b, 1).length
-};
-goog.array.removeIf = function(a, b, c) {
-  b = goog.array.findIndex(a, b, c);
-  return 0 <= b ? (goog.array.removeAt(a, b), !0) : !1
-};
-goog.array.concat = function(a) {
-  return goog.array.ARRAY_PROTOTYPE_.concat.apply(goog.array.ARRAY_PROTOTYPE_, arguments)
-};
-goog.array.clone = function(a) {
-  if(goog.isArray(a)) {
-    return goog.array.concat(a)
-  }
-  for(var b = [], c = 0, d = a.length;c < d;c++) {
-    b[c] = a[c]
-  }
-  return b
-};
-goog.array.toArray = function(a) {
-  return goog.isArray(a) ? goog.array.concat(a) : goog.array.clone(a)
-};
-goog.array.extend = function(a, b) {
-  for(var c = 1;c < arguments.length;c++) {
-    var d = arguments[c], e;
-    if(goog.isArray(d) || (e = goog.isArrayLike(d)) && d.hasOwnProperty("callee")) {
-      a.push.apply(a, d)
-    }else {
-      if(e) {
-        for(var f = a.length, g = d.length, h = 0;h < g;h++) {
-          a[f + h] = d[h]
-        }
-      }else {
-        a.push(d)
-      }
-    }
-  }
-};
-goog.array.splice = function(a, b, c, d) {
-  goog.asserts.assert(null != a.length);
-  return goog.array.ARRAY_PROTOTYPE_.splice.apply(a, goog.array.slice(arguments, 1))
-};
-goog.array.slice = function(a, b, c) {
-  goog.asserts.assert(null != a.length);
-  return 2 >= arguments.length ? goog.array.ARRAY_PROTOTYPE_.slice.call(a, b) : goog.array.ARRAY_PROTOTYPE_.slice.call(a, b, c)
-};
-goog.array.removeDuplicates = function(a, b) {
-  for(var c = b || a, d = {}, e = 0, f = 0;f < a.length;) {
-    var g = a[f++], h = goog.isObject(g) ? "o" + goog.getUid(g) : (typeof g).charAt(0) + g;
-    Object.prototype.hasOwnProperty.call(d, h) || (d[h] = !0, c[e++] = g)
-  }
-  c.length = e
-};
-goog.array.binarySearch = function(a, b, c) {
-  return goog.array.binarySearch_(a, c || goog.array.defaultCompare, !1, b)
-};
-goog.array.binarySelect = function(a, b, c) {
-  return goog.array.binarySearch_(a, b, !0, void 0, c)
-};
-goog.array.binarySearch_ = function(a, b, c, d, e) {
-  for(var f = 0, g = a.length, h;f < g;) {
-    var i = f + g >> 1, j;
-    j = c ? b.call(e, a[i], i, a) : b(d, a[i]);
-    0 < j ? f = i + 1 : (g = i, h = !j)
-  }
-  return h ? f : ~f
-};
-goog.array.sort = function(a, b) {
-  goog.asserts.assert(null != a.length);
-  goog.array.ARRAY_PROTOTYPE_.sort.call(a, b || goog.array.defaultCompare)
-};
-goog.array.stableSort = function(a, b) {
-  for(var c = 0;c < a.length;c++) {
-    a[c] = {index:c, value:a[c]}
-  }
-  var d = b || goog.array.defaultCompare;
-  goog.array.sort(a, function(a, b) {
-    return d(a.value, b.value) || a.index - b.index
-  });
-  for(c = 0;c < a.length;c++) {
-    a[c] = a[c].value
-  }
-};
-goog.array.sortObjectsByKey = function(a, b, c) {
-  var d = c || goog.array.defaultCompare;
-  goog.array.sort(a, function(a, c) {
-    return d(a[b], c[b])
-  })
-};
-goog.array.isSorted = function(a, b, c) {
-  for(var b = b || goog.array.defaultCompare, d = 1;d < a.length;d++) {
-    var e = b(a[d - 1], a[d]);
-    if(0 < e || 0 == e && c) {
-      return!1
-    }
-  }
-  return!0
-};
-goog.array.equals = function(a, b, c) {
-  if(!goog.isArrayLike(a) || !goog.isArrayLike(b) || a.length != b.length) {
-    return!1
-  }
-  for(var d = a.length, c = c || goog.array.defaultCompareEquality, e = 0;e < d;e++) {
-    if(!c(a[e], b[e])) {
-      return!1
-    }
-  }
-  return!0
-};
-goog.array.compare = function(a, b, c) {
-  return goog.array.equals(a, b, c)
-};
-goog.array.defaultCompare = function(a, b) {
-  return a > b ? 1 : a < b ? -1 : 0
-};
-goog.array.defaultCompareEquality = function(a, b) {
-  return a === b
-};
-goog.array.binaryInsert = function(a, b, c) {
-  c = goog.array.binarySearch(a, b, c);
-  return 0 > c ? (goog.array.insertAt(a, b, -(c + 1)), !0) : !1
-};
-goog.array.binaryRemove = function(a, b, c) {
-  b = goog.array.binarySearch(a, b, c);
-  return 0 <= b ? goog.array.removeAt(a, b) : !1
-};
-goog.array.bucket = function(a, b) {
-  for(var c = {}, d = 0;d < a.length;d++) {
-    var e = a[d], f = b(e, d, a);
-    goog.isDef(f) && (c[f] || (c[f] = [])).push(e)
-  }
-  return c
-};
-goog.array.repeat = function(a, b) {
-  for(var c = [], d = 0;d < b;d++) {
-    c[d] = a
-  }
-  return c
-};
-goog.array.flatten = function(a) {
-  for(var b = [], c = 0;c < arguments.length;c++) {
-    var d = arguments[c];
-    goog.isArray(d) ? b.push.apply(b, goog.array.flatten.apply(null, d)) : b.push(d)
-  }
-  return b
-};
-goog.array.rotate = function(a, b) {
-  goog.asserts.assert(null != a.length);
-  a.length && (b %= a.length, 0 < b ? goog.array.ARRAY_PROTOTYPE_.unshift.apply(a, a.splice(-b, b)) : 0 > b && goog.array.ARRAY_PROTOTYPE_.push.apply(a, a.splice(0, -b)));
-  return a
-};
-goog.array.zip = function(a) {
-  if(!arguments.length) {
-    return[]
-  }
-  for(var b = [], c = 0;;c++) {
-    for(var d = [], e = 0;e < arguments.length;e++) {
-      var f = arguments[e];
-      if(c >= f.length) {
-        return b
-      }
-      d.push(f[c])
-    }
-    b.push(d)
-  }
-};
-goog.array.shuffle = function(a, b) {
-  for(var c = b || Math.random, d = a.length - 1;0 < d;d--) {
-    var e = Math.floor(c() * (d + 1)), f = a[d];
-    a[d] = a[e];
-    a[e] = f
-  }
-};
-goog.debug.entryPointRegistry = {};
-goog.debug.EntryPointMonitor = function() {
-};
-goog.debug.entryPointRegistry.refList_ = [];
-goog.debug.entryPointRegistry.register = function(a) {
-  goog.debug.entryPointRegistry.refList_[goog.debug.entryPointRegistry.refList_.length] = a
-};
-goog.debug.entryPointRegistry.monitorAll = function(a) {
-  for(var a = goog.bind(a.wrap, a), b = 0;b < goog.debug.entryPointRegistry.refList_.length;b++) {
-    goog.debug.entryPointRegistry.refList_[b](a)
-  }
-};
-goog.debug.entryPointRegistry.unmonitorAllIfPossible = function(a) {
-  for(var a = goog.bind(a.unwrap, a), b = 0;b < goog.debug.entryPointRegistry.refList_.length;b++) {
-    goog.debug.entryPointRegistry.refList_[b](a)
-  }
-};
-goog.debug.errorHandlerWeakDep = {protectEntryPoint:function(a) {
-  return a
-}};
-goog.events.Listener = function() {
-};
-goog.events.Listener.counter_ = 0;
-goog.events.Listener.prototype.key = 0;
-goog.events.Listener.prototype.removed = !1;
-goog.events.Listener.prototype.callOnce = !1;
-goog.events.Listener.prototype.init = function(a, b, c, d, e, f) {
-  if(goog.isFunction(a)) {
-    this.isFunctionListener_ = !0
-  }else {
-    if(a && a.handleEvent && goog.isFunction(a.handleEvent)) {
-      this.isFunctionListener_ = !1
-    }else {
-      throw Error("Invalid listener argument");
-    }
-  }
-  this.listener = a;
-  this.proxy = b;
-  this.src = c;
-  this.type = d;
-  this.capture = !!e;
-  this.handler = f;
-  this.callOnce = !1;
-  this.key = ++goog.events.Listener.counter_;
-  this.removed = !1
-};
-goog.events.Listener.prototype.handleEvent = function(a) {
-  return this.isFunctionListener_ ? this.listener.call(this.handler || this.src, a) : this.listener.handleEvent.call(this.listener, a)
-};
-goog.structs = {};
-goog.structs.SimplePool = function(a, b) {
-  goog.Disposable.call(this);
-  this.maxCount_ = b;
-  this.freeQueue_ = [];
-  this.createInitial_(a)
-};
-goog.inherits(goog.structs.SimplePool, goog.Disposable);
-goog.structs.SimplePool.prototype.createObjectFn_ = null;
-goog.structs.SimplePool.prototype.disposeObjectFn_ = null;
-goog.structs.SimplePool.prototype.setCreateObjectFn = function(a) {
-  this.createObjectFn_ = a
-};
-goog.structs.SimplePool.prototype.setDisposeObjectFn = function(a) {
-  this.disposeObjectFn_ = a
-};
-goog.structs.SimplePool.prototype.getObject = function() {
-  return this.freeQueue_.length ? this.freeQueue_.pop() : this.createObject()
-};
-goog.structs.SimplePool.prototype.releaseObject = function(a) {
-  this.freeQueue_.length < this.maxCount_ ? this.freeQueue_.push(a) : this.disposeObject(a)
-};
-goog.structs.SimplePool.prototype.createInitial_ = function(a) {
-  if(a > this.maxCount_) {
-    throw Error("[goog.structs.SimplePool] Initial cannot be greater than max");
-  }
-  for(var b = 0;b < a;b++) {
-    this.freeQueue_.push(this.createObject())
-  }
-};
-goog.structs.SimplePool.prototype.createObject = function() {
-  return this.createObjectFn_ ? this.createObjectFn_() : {}
-};
-goog.structs.SimplePool.prototype.disposeObject = function(a) {
-  if(this.disposeObjectFn_) {
-    this.disposeObjectFn_(a)
-  }else {
-    if(goog.isObject(a)) {
-      if(goog.isFunction(a.dispose)) {
-        a.dispose()
-      }else {
-        for(var b in a) {
-          delete a[b]
-        }
-      }
-    }
-  }
-};
-goog.structs.SimplePool.prototype.disposeInternal = function() {
-  goog.structs.SimplePool.superClass_.disposeInternal.call(this);
-  for(var a = this.freeQueue_;a.length;) {
-    this.disposeObject(a.pop())
-  }
-  delete this.freeQueue_
-};
-goog.events.pools = {};
-goog.events.ASSUME_GOOD_GC = !1;
-(function() {
-  function a() {
-    return{count_:0, remaining_:0}
-  }
-  function b() {
-    return[]
-  }
-  function c() {
-    var a = function(b) {
-      return g.call(a.src, a.key, b)
-    };
-    return a
-  }
-  function d() {
-    return new goog.events.Listener
-  }
-  function e() {
-    return new goog.events.BrowserEvent
-  }
-  var f = !goog.events.ASSUME_GOOD_GC && goog.userAgent.jscript.HAS_JSCRIPT && !goog.userAgent.jscript.isVersion("5.7"), g;
-  goog.events.pools.setProxyCallbackFunction = function(a) {
-    g = a
-  };
-  if(f) {
-    goog.events.pools.getObject = function() {
-      return h.getObject()
-    };
-    goog.events.pools.releaseObject = function(a) {
-      h.releaseObject(a)
-    };
-    goog.events.pools.getArray = function() {
-      return i.getObject()
-    };
-    goog.events.pools.releaseArray = function(a) {
-      i.releaseObject(a)
-    };
-    goog.events.pools.getProxy = function() {
-      return j.getObject()
-    };
-    goog.events.pools.releaseProxy = function() {
-      j.releaseObject(c())
-    };
-    goog.events.pools.getListener = function() {
-      return k.getObject()
-    };
-    goog.events.pools.releaseListener = function(a) {
-      k.releaseObject(a)
-    };
-    goog.events.pools.getEvent = function() {
-      return m.getObject()
-    };
-    goog.events.pools.releaseEvent = function(a) {
-      m.releaseObject(a)
-    };
-    var h = new goog.structs.SimplePool(0, 600);
-    h.setCreateObjectFn(a);
-    var i = new goog.structs.SimplePool(0, 600);
-    i.setCreateObjectFn(b);
-    var j = new goog.structs.SimplePool(0, 600);
-    j.setCreateObjectFn(c);
-    var k = new goog.structs.SimplePool(0, 600);
-    k.setCreateObjectFn(d);
-    var m = new goog.structs.SimplePool(0, 600);
-    m.setCreateObjectFn(e)
-  }else {
-    goog.events.pools.getObject = a, goog.events.pools.releaseObject = goog.nullFunction, goog.events.pools.getArray = b, goog.events.pools.releaseArray = goog.nullFunction, goog.events.pools.getProxy = c, goog.events.pools.releaseProxy = goog.nullFunction, goog.events.pools.getListener = d, goog.events.pools.releaseListener = goog.nullFunction, goog.events.pools.getEvent = e, goog.events.pools.releaseEvent = goog.nullFunction
-  }
-})();
-goog.object = {};
-goog.object.forEach = function(a, b, c) {
-  for(var d in a) {
-    b.call(c, a[d], d, a)
-  }
-};
-goog.object.filter = function(a, b, c) {
-  var d = {}, e;
-  for(e in a) {
-    b.call(c, a[e], e, a) && (d[e] = a[e])
-  }
-  return d
-};
-goog.object.map = function(a, b, c) {
-  var d = {}, e;
-  for(e in a) {
-    d[e] = b.call(c, a[e], e, a)
-  }
-  return d
-};
-goog.object.some = function(a, b, c) {
-  for(var d in a) {
-    if(b.call(c, a[d], d, a)) {
-      return!0
-    }
-  }
-  return!1
-};
-goog.object.every = function(a, b, c) {
-  for(var d in a) {
-    if(!b.call(c, a[d], d, a)) {
-      return!1
-    }
-  }
-  return!0
-};
-goog.object.getCount = function(a) {
-  var b = 0, c;
-  for(c in a) {
-    b++
-  }
-  return b
-};
-goog.object.getAnyKey = function(a) {
-  for(var b in a) {
-    return b
-  }
-};
-goog.object.getAnyValue = function(a) {
-  for(var b in a) {
-    return a[b]
-  }
-};
-goog.object.contains = function(a, b) {
-  return goog.object.containsValue(a, b)
-};
-goog.object.getValues = function(a) {
-  var b = [], c = 0, d;
-  for(d in a) {
-    b[c++] = a[d]
-  }
-  return b
-};
-goog.object.getKeys = function(a) {
-  var b = [], c = 0, d;
-  for(d in a) {
-    b[c++] = d
-  }
-  return b
-};
-goog.object.getValueByKeys = function(a, b) {
-  for(var c = goog.isArrayLike(b), d = c ? b : arguments, c = c ? 0 : 1;c < d.length && !(a = a[d[c]], !goog.isDef(a));c++) {
-  }
-  return a
-};
-goog.object.containsKey = function(a, b) {
-  return b in a
-};
-goog.object.containsValue = function(a, b) {
-  for(var c in a) {
-    if(a[c] == b) {
-      return!0
-    }
-  }
-  return!1
-};
-goog.object.findKey = function(a, b, c) {
-  for(var d in a) {
-    if(b.call(c, a[d], d, a)) {
-      return d
-    }
-  }
-};
-goog.object.findValue = function(a, b, c) {
-  return(b = goog.object.findKey(a, b, c)) && a[b]
-};
-goog.object.isEmpty = function(a) {
-  for(var b in a) {
-    return!1
-  }
-  return!0
-};
-goog.object.clear = function(a) {
-  for(var b in a) {
-    delete a[b]
-  }
-};
-goog.object.remove = function(a, b) {
-  var c;
-  (c = b in a) && delete a[b];
-  return c
-};
-goog.object.add = function(a, b, c) {
-  if(b in a) {
-    throw Error('The object already contains the key "' + b + '"');
-  }
-  goog.object.set(a, b, c)
-};
-goog.object.get = function(a, b, c) {
-  return b in a ? a[b] : c
-};
-goog.object.set = function(a, b, c) {
-  a[b] = c
-};
-goog.object.setIfUndefined = function(a, b, c) {
-  return b in a ? a[b] : a[b] = c
-};
-goog.object.clone = function(a) {
-  var b = {}, c;
-  for(c in a) {
-    b[c] = a[c]
-  }
-  return b
-};
-goog.object.unsafeClone = function(a) {
-  var b = goog.typeOf(a);
-  if("object" == b || "array" == b) {
-    if(a.clone) {
-      return a.clone()
-    }
-    var b = "array" == b ? [] : {}, c;
-    for(c in a) {
-      b[c] = goog.object.unsafeClone(a[c])
-    }
-    return b
-  }
-  return a
-};
-goog.object.transpose = function(a) {
-  var b = {}, c;
-  for(c in a) {
-    b[a[c]] = c
-  }
-  return b
-};
-goog.object.PROTOTYPE_FIELDS_ = "constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(",");
-goog.object.extend = function(a, b) {
-  for(var c, d, e = 1;e < arguments.length;e++) {
-    d = arguments[e];
-    for(c in d) {
-      a[c] = d[c]
-    }
-    for(var f = 0;f < goog.object.PROTOTYPE_FIELDS_.length;f++) {
-      c = goog.object.PROTOTYPE_FIELDS_[f], Object.prototype.hasOwnProperty.call(d, c) && (a[c] = d[c])
-    }
-  }
-};
-goog.object.create = function(a) {
-  var b = arguments.length;
-  if(1 == b && goog.isArray(arguments[0])) {
-    return goog.object.create.apply(null, arguments[0])
-  }
-  if(b % 2) {
-    throw Error("Uneven number of arguments");
-  }
-  for(var c = {}, d = 0;d < b;d += 2) {
-    c[arguments[d]] = arguments[d + 1]
-  }
-  return c
-};
-goog.object.createSet = function(a) {
-  var b = arguments.length;
-  if(1 == b && goog.isArray(arguments[0])) {
-    return goog.object.createSet.apply(null, arguments[0])
-  }
-  for(var c = {}, d = 0;d < b;d++) {
-    c[arguments[d]] = !0
-  }
-  return c
-};
-goog.events.listeners_ = {};
-goog.events.listenerTree_ = {};
-goog.events.sources_ = {};
-goog.events.onString_ = "on";
-goog.events.onStringMap_ = {};
-goog.events.keySeparator_ = "_";
-goog.events.listen = function(a, b, c, d, e) {
-  if(b) {
-    if(goog.isArray(b)) {
-      for(var f = 0;f < b.length;f++) {
-        goog.events.listen(a, b[f], c, d, e)
-      }
-      return null
-    }
-    var d = !!d, g = goog.events.listenerTree_;
-    b in g || (g[b] = goog.events.pools.getObject());
-    g = g[b];
-    d in g || (g[d] = goog.events.pools.getObject(), g.count_++);
-    var g = g[d], h = goog.getUid(a), i;
-    g.remaining_++;
-    if(g[h]) {
-      i = g[h];
-      for(f = 0;f < i.length;f++) {
-        if(g = i[f], g.listener == c && g.handler == e) {
-          if(g.removed) {
-            break
-          }
-          return i[f].key
-        }
-      }
-    }else {
-      i = g[h] = goog.events.pools.getArray(), g.count_++
-    }
-    f = goog.events.pools.getProxy();
-    f.src = a;
-    g = goog.events.pools.getListener();
-    g.init(c, f, a, b, d, e);
-    c = g.key;
-    f.key = c;
-    i.push(g);
-    goog.events.listeners_[c] = g;
-    goog.events.sources_[h] || (goog.events.sources_[h] = goog.events.pools.getArray());
-    goog.events.sources_[h].push(g);
-    a.addEventListener ? (a == goog.global || !a.customEvent_) && a.addEventListener(b, f, d) : a.attachEvent(goog.events.getOnString_(b), f);
-    return c
-  }
-  throw Error("Invalid event type");
-};
-goog.events.listenOnce = function(a, b, c, d, e) {
-  if(goog.isArray(b)) {
-    for(var f = 0;f < b.length;f++) {
-      goog.events.listenOnce(a, b[f], c, d, e)
-    }
-    return null
-  }
-  a = goog.events.listen(a, b, c, d, e);
-  goog.events.listeners_[a].callOnce = !0;
-  return a
-};
-goog.events.listenWithWrapper = function(a, b, c, d, e) {
-  b.listen(a, c, d, e)
-};
-goog.events.unlisten = function(a, b, c, d, e) {
-  if(goog.isArray(b)) {
-    for(var f = 0;f < b.length;f++) {
-      goog.events.unlisten(a, b[f], c, d, e)
-    }
-    return null
-  }
-  d = !!d;
-  a = goog.events.getListeners_(a, b, d);
-  if(!a) {
-    return!1
-  }
-  for(f = 0;f < a.length;f++) {
-    if(a[f].listener == c && a[f].capture == d && a[f].handler == e) {
-      return goog.events.unlistenByKey(a[f].key)
-    }
-  }
-  return!1
-};
-goog.events.unlistenByKey = function(a) {
-  if(!goog.events.listeners_[a]) {
-    return!1
-  }
-  var b = goog.events.listeners_[a];
-  if(b.removed) {
-    return!1
-  }
-  var c = b.src, d = b.type, e = b.proxy, f = b.capture;
-  c.removeEventListener ? (c == goog.global || !c.customEvent_) && c.removeEventListener(d, e, f) : c.detachEvent && c.detachEvent(goog.events.getOnString_(d), e);
-  c = goog.getUid(c);
-  e = goog.events.listenerTree_[d][f][c];
-  if(goog.events.sources_[c]) {
-    var g = goog.events.sources_[c];
-    goog.array.remove(g, b);
-    0 == g.length && delete goog.events.sources_[c]
-  }
-  b.removed = !0;
-  e.needsCleanup_ = !0;
-  goog.events.cleanUp_(d, f, c, e);
-  delete goog.events.listeners_[a];
-  return!0
-};
-goog.events.unlistenWithWrapper = function(a, b, c, d, e) {
-  b.unlisten(a, c, d, e)
-};
-goog.events.cleanUp_ = function(a, b, c, d) {
-  if(!d.locked_ && d.needsCleanup_) {
-    for(var e = 0, f = 0;e < d.length;e++) {
-      if(d[e].removed) {
-        var g = d[e].proxy;
-        g.src = null;
-        goog.events.pools.releaseProxy(g);
-        goog.events.pools.releaseListener(d[e])
-      }else {
-        e != f && (d[f] = d[e]), f++
-      }
-    }
-    d.length = f;
-    d.needsCleanup_ = !1;
-    if(0 == f && (goog.events.pools.releaseArray(d), delete goog.events.listenerTree_[a][b][c], goog.events.listenerTree_[a][b].count_--, 0 == goog.events.listenerTree_[a][b].count_ && (goog.events.pools.releaseObject(goog.events.listenerTree_[a][b]), delete goog.events.listenerTree_[a][b], goog.events.listenerTree_[a].count_--), 0 == goog.events.listenerTree_[a].count_)) {
-      goog.events.pools.releaseObject(goog.events.listenerTree_[a]), delete goog.events.listenerTree_[a]
-    }
-  }
-};
-goog.events.removeAll = function(a, b, c) {
-  var d = 0, e = null == b, f = null == c, c = !!c;
-  if(null == a) {
-    goog.object.forEach(goog.events.sources_, function(a) {
-      for(var g = a.length - 1;0 <= g;g--) {
-        var h = a[g];
-        if((e || b == h.type) && (f || c == h.capture)) {
-          goog.events.unlistenByKey(h.key), d++
-        }
-      }
-    })
-  }else {
-    if(a = goog.getUid(a), goog.events.sources_[a]) {
-      for(var a = goog.events.sources_[a], g = a.length - 1;0 <= g;g--) {
-        var h = a[g];
-        if((e || b == h.type) && (f || c == h.capture)) {
-          goog.events.unlistenByKey(h.key), d++
-        }
-      }
-    }
-  }
-  return d
-};
-goog.events.getListeners = function(a, b, c) {
-  return goog.events.getListeners_(a, b, c) || []
-};
-goog.events.getListeners_ = function(a, b, c) {
-  var d = goog.events.listenerTree_;
-  return b in d && (d = d[b], c in d && (d = d[c], a = goog.getUid(a), d[a])) ? d[a] : null
-};
-goog.events.getListener = function(a, b, c, d, e) {
-  d = !!d;
-  if(a = goog.events.getListeners_(a, b, d)) {
-    for(b = 0;b < a.length;b++) {
-      if(a[b].listener == c && a[b].capture == d && a[b].handler == e) {
-        return a[b]
-      }
-    }
-  }
-  return null
-};
-goog.events.hasListener = function(a, b, c) {
-  var a = goog.getUid(a), d = goog.events.sources_[a];
-  if(d) {
-    var e = goog.isDef(b), f = goog.isDef(c);
-    return e && f ? (d = goog.events.listenerTree_[b], !!d && !!d[c] && a in d[c]) : !e && !f ? !0 : goog.array.some(d, function(a) {
-      return e && a.type == b || f && a.capture == c
-    })
-  }
-  return!1
-};
-goog.events.expose = function(a) {
-  var b = [], c;
-  for(c in a) {
-    a[c] && a[c].id ? b.push(c + " = " + a[c] + " (" + a[c].id + ")") : b.push(c + " = " + a[c])
-  }
-  return b.join("\n")
-};
-goog.events.getOnString_ = function(a) {
-  return a in goog.events.onStringMap_ ? goog.events.onStringMap_[a] : goog.events.onStringMap_[a] = goog.events.onString_ + a
-};
-goog.events.fireListeners = function(a, b, c, d) {
-  var e = goog.events.listenerTree_;
-  return b in e && (e = e[b], c in e) ? goog.events.fireListeners_(e[c], a, b, c, d) : !0
-};
-goog.events.fireListeners_ = function(a, b, c, d, e) {
-  var f = 1, b = goog.getUid(b);
-  if(a[b]) {
-    a.remaining_--;
-    a = a[b];
-    a.locked_ ? a.locked_++ : a.locked_ = 1;
-    try {
-      for(var g = a.length, h = 0;h < g;h++) {
-        var i = a[h];
-        i && !i.removed && (f &= !1 !== goog.events.fireListener(i, e))
-      }
-    }finally {
-      a.locked_--, goog.events.cleanUp_(c, d, b, a)
-    }
-  }
-  return Boolean(f)
-};
-goog.events.fireListener = function(a, b) {
-  var c = a.handleEvent(b);
-  a.callOnce && goog.events.unlistenByKey(a.key);
-  return c
-};
-goog.events.getTotalListenerCount = function() {
-  return goog.object.getCount(goog.events.listeners_)
-};
-goog.events.dispatchEvent = function(a, b) {
-  var c = b.type || b, d = goog.events.listenerTree_;
-  if(!(c in d)) {
-    return!0
-  }
-  if(goog.isString(b)) {
-    b = new goog.events.Event(b, a)
-  }else {
-    if(b instanceof goog.events.Event) {
-      b.target = b.target || a
-    }else {
-      var e = b, b = new goog.events.Event(c, a);
-      goog.object.extend(b, e)
-    }
-  }
-  var e = 1, f, d = d[c], c = !0 in d, g;
-  if(c) {
-    f = [];
-    for(g = a;g;g = g.getParentEventTarget()) {
-      f.push(g)
-    }
-    g = d[!0];
-    g.remaining_ = g.count_;
-    for(var h = f.length - 1;!b.propagationStopped_ && 0 <= h && g.remaining_;h--) {
-      b.currentTarget = f[h], e &= goog.events.fireListeners_(g, f[h], b.type, !0, b) && !1 != b.returnValue_
-    }
-  }
-  if(!1 in d) {
-    if(g = d[!1], g.remaining_ = g.count_, c) {
-      for(h = 0;!b.propagationStopped_ && h < f.length && g.remaining_;h++) {
-        b.currentTarget = f[h], e &= goog.events.fireListeners_(g, f[h], b.type, !1, b) && !1 != b.returnValue_
-      }
-    }else {
-      for(d = a;!b.propagationStopped_ && d && g.remaining_;d = d.getParentEventTarget()) {
-        b.currentTarget = d, e &= goog.events.fireListeners_(g, d, b.type, !1, b) && !1 != b.returnValue_
-      }
-    }
-  }
-  return Boolean(e)
-};
-goog.events.protectBrowserEventEntryPoint = function(a) {
-  goog.events.handleBrowserEvent_ = a.protectEntryPoint(goog.events.handleBrowserEvent_);
-  goog.events.pools.setProxyCallbackFunction(goog.events.handleBrowserEvent_)
-};
-goog.events.handleBrowserEvent_ = function(a, b) {
-  if(!goog.events.listeners_[a]) {
-    return!0
-  }
-  var c = goog.events.listeners_[a], d = c.type, e = goog.events.listenerTree_;
-  if(!(d in e)) {
-    return!0
-  }
-  var e = e[d], f, g;
-  if(goog.events.synthesizeEventPropagation_()) {
-    f = b || goog.getObjectByName("window.event");
-    var h = !0 in e, i = !1 in e;
-    if(h) {
-      if(goog.events.isMarkedIeEvent_(f)) {
-        return!0
-      }
-      goog.events.markIeEvent_(f)
-    }
-    var j = goog.events.pools.getEvent();
-    j.init(f, this);
-    f = !0;
-    try {
-      if(h) {
-        for(var k = goog.events.pools.getArray(), m = j.currentTarget;m;m = m.parentNode) {
-          k.push(m)
-        }
-        g = e[!0];
-        g.remaining_ = g.count_;
-        for(var l = k.length - 1;!j.propagationStopped_ && 0 <= l && g.remaining_;l--) {
-          j.currentTarget = k[l], f &= goog.events.fireListeners_(g, k[l], d, !0, j)
-        }
-        if(i) {
-          g = e[!1];
-          g.remaining_ = g.count_;
-          for(l = 0;!j.propagationStopped_ && l < k.length && g.remaining_;l++) {
-            j.currentTarget = k[l], f &= goog.events.fireListeners_(g, k[l], d, !1, j)
-          }
-        }
-      }else {
-        f = goog.events.fireListener(c, j)
-      }
-    }finally {
-      k && (k.length = 0, goog.events.pools.releaseArray(k)), j.dispose(), goog.events.pools.releaseEvent(j)
-    }
-    return f
-  }
-  d = new goog.events.BrowserEvent(b, this);
-  try {
-    f = goog.events.fireListener(c, d)
-  }finally {
-    d.dispose()
-  }
-  return f
-};
-goog.events.pools.setProxyCallbackFunction(goog.events.handleBrowserEvent_);
-goog.events.markIeEvent_ = function(a) {
-  var b = !1;
-  if(0 == a.keyCode) {
-    try {
-      a.keyCode = -1;
-      return
-    }catch(c) {
-      b = !0
-    }
-  }
-  if(b || void 0 == a.returnValue) {
-    a.returnValue = !0
-  }
-};
-goog.events.isMarkedIeEvent_ = function(a) {
-  return 0 > a.keyCode || void 0 != a.returnValue
-};
-goog.events.uniqueIdCounter_ = 0;
-goog.events.getUniqueId = function(a) {
-  return a + "_" + goog.events.uniqueIdCounter_++
-};
-goog.events.synthesizeEventPropagation_ = function() {
-  void 0 === goog.events.requiresSyntheticEventPropagation_ && (goog.events.requiresSyntheticEventPropagation_ = goog.userAgent.IE && !goog.global.addEventListener);
-  return goog.events.requiresSyntheticEventPropagation_
-};
-goog.debug.entryPointRegistry.register(function(a) {
-  goog.events.handleBrowserEvent_ = a(goog.events.handleBrowserEvent_);
-  goog.events.pools.setProxyCallbackFunction(goog.events.handleBrowserEvent_)
-});
-goog.events.EventTarget = function() {
-  goog.Disposable.call(this)
-};
-goog.inherits(goog.events.EventTarget, goog.Disposable);
-goog.events.EventTarget.prototype.customEvent_ = !0;
-goog.events.EventTarget.prototype.parentEventTarget_ = null;
-goog.events.EventTarget.prototype.getParentEventTarget = function() {
-  return this.parentEventTarget_
-};
-goog.events.EventTarget.prototype.setParentEventTarget = function(a) {
-  this.parentEventTarget_ = a
-};
-goog.events.EventTarget.prototype.addEventListener = function(a, b, c, d) {
-  goog.events.listen(this, a, b, c, d)
-};
-goog.events.EventTarget.prototype.removeEventListener = function(a, b, c, d) {
-  goog.events.unlisten(this, a, b, c, d)
-};
-goog.events.EventTarget.prototype.dispatchEvent = function(a) {
-  return goog.events.dispatchEvent(this, a)
-};
-goog.events.EventTarget.prototype.disposeInternal = function() {
-  goog.events.EventTarget.superClass_.disposeInternal.call(this);
-  goog.events.removeAll(this);
-  this.parentEventTarget_ = null
-};
-goog.math = {};
-goog.math.Coordinate = function(a, b) {
-  this.x = goog.isDef(a) ? a : 0;
-  this.y = goog.isDef(b) ? b : 0
-};
-goog.math.Coordinate.prototype.clone = function() {
-  return new goog.math.Coordinate(this.x, this.y)
-};
-goog.DEBUG && (goog.math.Coordinate.prototype.toString = function() {
-  return"(" + this.x + ", " + this.y + ")"
-});
-goog.math.Coordinate.equals = function(a, b) {
-  return a == b ? true : !a || !b ? false : a.x == b.x && a.y == b.y
-};
-goog.math.Coordinate.distance = function(a, b) {
-  var c = a.x - b.x, d = a.y - b.y;
-  return Math.sqrt(c * c + d * d)
-};
-goog.math.Coordinate.squaredDistance = function(a, b) {
-  var c = a.x - b.x, d = a.y - b.y;
-  return c * c + d * d
-};
-goog.math.Coordinate.difference = function(a, b) {
-  return new goog.math.Coordinate(a.x - b.x, a.y - b.y)
-};
-goog.math.Coordinate.sum = function(a, b) {
-  return new goog.math.Coordinate(a.x + b.x, a.y + b.y)
-};
-goog.dom = {};
-goog.dom.BrowserFeature = {CAN_ADD_NAME_OR_TYPE_ATTRIBUTES:!goog.userAgent.IE || goog.userAgent.isVersion("9"), CAN_USE_CHILDREN_ATTRIBUTE:!goog.userAgent.GECKO && !goog.userAgent.IE || goog.userAgent.IE && goog.userAgent.isVersion("9") || goog.userAgent.GECKO && goog.userAgent.isVersion("1.9.1"), CAN_USE_INNER_TEXT:goog.userAgent.IE && !goog.userAgent.isVersion("9"), INNER_HTML_NEEDS_SCOPED_ELEMENT:goog.userAgent.IE};
-goog.dom.TagName = {A:"A", ABBR:"ABBR", ACRONYM:"ACRONYM", ADDRESS:"ADDRESS", APPLET:"APPLET", AREA:"AREA", B:"B", BASE:"BASE", BASEFONT:"BASEFONT", BDO:"BDO", BIG:"BIG", BLOCKQUOTE:"BLOCKQUOTE", BODY:"BODY", BR:"BR", BUTTON:"BUTTON", CANVAS:"CANVAS", CAPTION:"CAPTION", CENTER:"CENTER", CITE:"CITE", CODE:"CODE", COL:"COL", COLGROUP:"COLGROUP", DD:"DD", DEL:"DEL", DFN:"DFN", DIR:"DIR", DIV:"DIV", DL:"DL", DT:"DT", EM:"EM", FIELDSET:"FIELDSET", FONT:"FONT", FORM:"FORM", FRAME:"FRAME", FRAMESET:"FRAMESET", 
-H1:"H1", H2:"H2", H3:"H3", H4:"H4", H5:"H5", H6:"H6", HEAD:"HEAD", HR:"HR", HTML:"HTML", I:"I", IFRAME:"IFRAME", IMG:"IMG", INPUT:"INPUT", INS:"INS", ISINDEX:"ISINDEX", KBD:"KBD", LABEL:"LABEL", LEGEND:"LEGEND", LI:"LI", LINK:"LINK", MAP:"MAP", MENU:"MENU", META:"META", NOFRAMES:"NOFRAMES", NOSCRIPT:"NOSCRIPT", OBJECT:"OBJECT", OL:"OL", OPTGROUP:"OPTGROUP", OPTION:"OPTION", P:"P", PARAM:"PARAM", PRE:"PRE", Q:"Q", S:"S", SAMP:"SAMP", SCRIPT:"SCRIPT", SELECT:"SELECT", SMALL:"SMALL", SPAN:"SPAN", STRIKE:"STRIKE", 
-STRONG:"STRONG", STYLE:"STYLE", SUB:"SUB", SUP:"SUP", TABLE:"TABLE", TBODY:"TBODY", TD:"TD", TEXTAREA:"TEXTAREA", TFOOT:"TFOOT", TH:"TH", THEAD:"THEAD", TITLE:"TITLE", TR:"TR", TT:"TT", U:"U", UL:"UL", VAR:"VAR"};
-goog.Timer = function(a, b) {
-  goog.events.EventTarget.call(this);
-  this.interval_ = a || 1;
-  this.timerObject_ = b || goog.Timer.defaultTimerObject;
-  this.boundTick_ = goog.bind(this.tick_, this);
-  this.last_ = goog.now()
-};
-goog.inherits(goog.Timer, goog.events.EventTarget);
-goog.Timer.MAX_TIMEOUT_ = 2147483647;
-goog.Timer.prototype.enabled = !1;
-goog.Timer.defaultTimerObject = goog.global.window;
-goog.Timer.intervalScale = 0.8;
-goog.Timer.prototype.timer_ = null;
-goog.Timer.prototype.getInterval = function() {
-  return this.interval_
-};
-goog.Timer.prototype.setInterval = function(a) {
-  this.interval_ = a;
-  this.timer_ && this.enabled ? (this.stop(), this.start()) : this.timer_ && this.stop()
-};
-goog.Timer.prototype.tick_ = function() {
-  if(this.enabled) {
-    var a = goog.now() - this.last_;
-    0 < a && a < this.interval_ * goog.Timer.intervalScale ? this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_ - a) : (this.dispatchTick(), this.enabled && (this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_), this.last_ = goog.now()))
-  }
-};
-goog.Timer.prototype.dispatchTick = function() {
-  this.dispatchEvent(goog.Timer.TICK)
-};
-goog.Timer.prototype.start = function() {
-  this.enabled = !0;
-  this.timer_ || (this.timer_ = this.timerObject_.setTimeout(this.boundTick_, this.interval_), this.last_ = goog.now())
-};
-goog.Timer.prototype.stop = function() {
-  this.enabled = !1;
-  this.timer_ && (this.timerObject_.clearTimeout(this.timer_), this.timer_ = null)
-};
-goog.Timer.prototype.disposeInternal = function() {
-  goog.Timer.superClass_.disposeInternal.call(this);
-  this.stop();
-  delete this.timerObject_
-};
-goog.Timer.TICK = "tick";
-goog.Timer.callOnce = function(a, b, c) {
-  if(goog.isFunction(a)) {
-    c && (a = goog.bind(a, c))
-  }else {
-    if(a && "function" == typeof a.handleEvent) {
-      a = goog.bind(a.handleEvent, a)
-    }else {
-      throw Error("Invalid listener argument");
-    }
-  }
-  return b > goog.Timer.MAX_TIMEOUT_ ? -1 : goog.Timer.defaultTimerObject.setTimeout(a, b || 0)
-};
-goog.Timer.clear = function(a) {
-  goog.Timer.defaultTimerObject.clearTimeout(a)
-};
-goog.dom.classes = {};
-goog.dom.classes.set = function(a, b) {
-  a.className = b
-};
-goog.dom.classes.get = function(a) {
-  return(a = a.className) && "function" == typeof a.split ? a.split(/\s+/) : []
-};
-goog.dom.classes.add = function(a, b) {
-  var c = goog.dom.classes.get(a), d = goog.array.slice(arguments, 1), d = goog.dom.classes.add_(c, d);
-  a.className = c.join(" ");
-  return d
-};
-goog.dom.classes.remove = function(a, b) {
-  var c = goog.dom.classes.get(a), d = goog.array.slice(arguments, 1), d = goog.dom.classes.remove_(c, d);
-  a.className = c.join(" ");
-  return d
-};
-goog.dom.classes.add_ = function(a, b) {
-  for(var c = 0, d = 0;d < b.length;d++) {
-    goog.array.contains(a, b[d]) || (a.push(b[d]), c++)
-  }
-  return c == b.length
-};
-goog.dom.classes.remove_ = function(a, b) {
-  for(var c = 0, d = 0;d < a.length;d++) {
-    goog.array.contains(b, a[d]) && (goog.array.splice(a, d--, 1), c++)
-  }
-  return c == b.length
-};
-goog.dom.classes.swap = function(a, b, c) {
-  for(var d = goog.dom.classes.get(a), e = !1, f = 0;f < d.length;f++) {
-    d[f] == b && (goog.array.splice(d, f--, 1), e = !0)
-  }
-  e && (d.push(c), a.className = d.join(" "));
-  return e
-};
-goog.dom.classes.addRemove = function(a, b, c) {
-  var d = goog.dom.classes.get(a);
-  goog.isString(b) ? goog.array.remove(d, b) : goog.isArray(b) && goog.dom.classes.remove_(d, b);
-  goog.isString(c) && !goog.array.contains(d, c) ? d.push(c) : goog.isArray(c) && goog.dom.classes.add_(d, c);
-  a.className = d.join(" ")
-};
-goog.dom.classes.has = function(a, b) {
-  return goog.array.contains(goog.dom.classes.get(a), b)
-};
-goog.dom.classes.enable = function(a, b, c) {
-  c ? goog.dom.classes.add(a, b) : goog.dom.classes.remove(a, b)
-};
-goog.dom.classes.toggle = function(a, b) {
-  var c = !goog.dom.classes.has(a, b);
-  goog.dom.classes.enable(a, b, c);
-  return c
-};
-goog.math.Size = function(a, b) {
-  this.width = a;
-  this.height = b
-};
-goog.math.Size.equals = function(a, b) {
-  return a == b ? !0 : !a || !b ? !1 : a.width == b.width && a.height == b.height
-};
-goog.math.Size.prototype.clone = function() {
-  return new goog.math.Size(this.width, this.height)
-};
-goog.DEBUG && (goog.math.Size.prototype.toString = function() {
-  return"(" + this.width + " x " + this.height + ")"
-});
-goog.math.Size.prototype.getLongest = function() {
-  return Math.max(this.width, this.height)
-};
-goog.math.Size.prototype.getShortest = function() {
-  return Math.min(this.width, this.height)
-};
-goog.math.Size.prototype.area = function() {
-  return this.width * this.height
-};
-goog.math.Size.prototype.perimeter = function() {
-  return(this.width + this.height) * 2
-};
-goog.math.Size.prototype.aspectRatio = function() {
-  return this.width / this.height
-};
-goog.math.Size.prototype.isEmpty = function() {
-  return!this.area()
-};
-goog.math.Size.prototype.ceil = function() {
-  this.width = Math.ceil(this.width);
-  this.height = Math.ceil(this.height);
-  return this
-};
-goog.math.Size.prototype.fitsInside = function(a) {
-  return this.width <= a.width && this.height <= a.height
-};
-goog.math.Size.prototype.floor = function() {
-  this.width = Math.floor(this.width);
-  this.height = Math.floor(this.height);
-  return this
-};
-goog.math.Size.prototype.round = function() {
-  this.width = Math.round(this.width);
-  this.height = Math.round(this.height);
-  return this
-};
-goog.math.Size.prototype.scale = function(a) {
-  this.width = this.width * a;
-  this.height = this.height * a;
-  return this
-};
-goog.math.Size.prototype.scaleToFit = function(a) {
-  return this.scale(this.aspectRatio() > a.aspectRatio() ? a.width / this.width : a.height / this.height)
-};
-goog.dom.ASSUME_QUIRKS_MODE = !1;
-goog.dom.ASSUME_STANDARDS_MODE = !1;
-goog.dom.COMPAT_MODE_KNOWN_ = goog.dom.ASSUME_QUIRKS_MODE || goog.dom.ASSUME_STANDARDS_MODE;
-goog.dom.NodeType = {ELEMENT:1, ATTRIBUTE:2, TEXT:3, CDATA_SECTION:4, ENTITY_REFERENCE:5, ENTITY:6, PROCESSING_INSTRUCTION:7, COMMENT:8, DOCUMENT:9, DOCUMENT_TYPE:10, DOCUMENT_FRAGMENT:11, NOTATION:12};
-goog.dom.getDomHelper = function(a) {
-  return a ? new goog.dom.DomHelper(goog.dom.getOwnerDocument(a)) : goog.dom.defaultDomHelper_ || (goog.dom.defaultDomHelper_ = new goog.dom.DomHelper)
-};
-goog.dom.getDocument = function() {
-  return document
-};
-goog.dom.getElement = function(a) {
-  return goog.isString(a) ? document.getElementById(a) : a
-};
-goog.dom.$ = goog.dom.getElement;
-goog.dom.getElementsByTagNameAndClass = function(a, b, c) {
-  return goog.dom.getElementsByTagNameAndClass_(document, a, b, c)
-};
-goog.dom.getElementsByClass = function(a, b) {
-  var c = b || document;
-  return goog.dom.canUseQuerySelector_(c) ? c.querySelectorAll("." + a) : c.getElementsByClassName ? c.getElementsByClassName(a) : goog.dom.getElementsByTagNameAndClass_(document, "*", a, b)
-};
-goog.dom.getElementByClass = function(a, b) {
-  var c = b || document, d = null;
-  return(d = goog.dom.canUseQuerySelector_(c) ? c.querySelector("." + a) : goog.dom.getElementsByClass(a, b)[0]) || null
-};
-goog.dom.canUseQuerySelector_ = function(a) {
-  return a.querySelectorAll && a.querySelector && (!goog.userAgent.WEBKIT || goog.dom.isCss1CompatMode_(document) || goog.userAgent.isVersion("528"))
-};
-goog.dom.getElementsByTagNameAndClass_ = function(a, b, c, d) {
-  a = d || a;
-  b = b && "*" != b ? b.toUpperCase() : "";
-  if(goog.dom.canUseQuerySelector_(a) && (b || c)) {
-    return a.querySelectorAll(b + (c ? "." + c : ""))
-  }
-  if(c && a.getElementsByClassName) {
-    a = a.getElementsByClassName(c);
-    if(b) {
-      for(var d = {}, e = 0, f = 0, g;g = a[f];f++) {
-        b == g.nodeName && (d[e++] = g)
-      }
-      d.length = e;
-      return d
-    }
-    return a
-  }
-  a = a.getElementsByTagName(b || "*");
-  if(c) {
-    d = {};
-    for(f = e = 0;g = a[f];f++) {
-      b = g.className, "function" == typeof b.split && goog.array.contains(b.split(/\s+/), c) && (d[e++] = g)
-    }
-    d.length = e;
-    return d
-  }
-  return a
-};
-goog.dom.$$ = goog.dom.getElementsByTagNameAndClass;
-goog.dom.setProperties = function(a, b) {
-  goog.object.forEach(b, function(b, d) {
-    "style" == d ? a.style.cssText = b : "class" == d ? a.className = b : "for" == d ? a.htmlFor = b : d in goog.dom.DIRECT_ATTRIBUTE_MAP_ ? a.setAttribute(goog.dom.DIRECT_ATTRIBUTE_MAP_[d], b) : a[d] = b
-  })
-};
-goog.dom.DIRECT_ATTRIBUTE_MAP_ = {cellpadding:"cellPadding", cellspacing:"cellSpacing", colspan:"colSpan", rowspan:"rowSpan", valign:"vAlign", height:"height", width:"width", usemap:"useMap", frameborder:"frameBorder", maxlength:"maxLength", type:"type"};
-goog.dom.getViewportSize = function(a) {
-  return goog.dom.getViewportSize_(a || window)
-};
-goog.dom.getViewportSize_ = function(a) {
-  var b = a.document;
-  if(goog.userAgent.WEBKIT && !goog.userAgent.isVersion("500") && !goog.userAgent.MOBILE) {
-    "undefined" == typeof a.innerHeight && (a = window);
-    var b = a.innerHeight, c = a.document.documentElement.scrollHeight;
-    a == a.top && c < b && (b -= 15);
-    return new goog.math.Size(a.innerWidth, b)
-  }
-  a = goog.dom.isCss1CompatMode_(b) ? b.documentElement : b.body;
-  return new goog.math.Size(a.clientWidth, a.clientHeight)
-};
-goog.dom.getDocumentHeight = function() {
-  return goog.dom.getDocumentHeight_(window)
-};
-goog.dom.getDocumentHeight_ = function(a) {
-  var b = a.document, c = 0;
-  if(b) {
-    var a = goog.dom.getViewportSize_(a).height, c = b.body, d = b.documentElement;
-    if(goog.dom.isCss1CompatMode_(b) && d.scrollHeight) {
-      c = d.scrollHeight != a ? d.scrollHeight : d.offsetHeight
-    }else {
-      var b = d.scrollHeight, e = d.offsetHeight;
-      d.clientHeight != e && (b = c.scrollHeight, e = c.offsetHeight);
-      c = b > a ? b > e ? b : e : b < e ? b : e
-    }
-  }
-  return c
-};
-goog.dom.getPageScroll = function(a) {
-  return goog.dom.getDomHelper((a || goog.global || window).document).getDocumentScroll()
-};
-goog.dom.getDocumentScroll = function() {
-  return goog.dom.getDocumentScroll_(document)
-};
-goog.dom.getDocumentScroll_ = function(a) {
-  var b = goog.dom.getDocumentScrollElement_(a), a = goog.dom.getWindow_(a);
-  return new goog.math.Coordinate(a.pageXOffset || b.scrollLeft, a.pageYOffset || b.scrollTop)
-};
-goog.dom.getDocumentScrollElement = function() {
-  return goog.dom.getDocumentScrollElement_(document)
-};
-goog.dom.getDocumentScrollElement_ = function(a) {
-  return!goog.userAgent.WEBKIT && goog.dom.isCss1CompatMode_(a) ? a.documentElement : a.body
-};
-goog.dom.getWindow = function(a) {
-  return a ? goog.dom.getWindow_(a) : window
-};
-goog.dom.getWindow_ = function(a) {
-  return a.parentWindow || a.defaultView
-};
-goog.dom.createDom = function(a, b, c) {
-  return goog.dom.createDom_(document, arguments)
-};
-goog.dom.createDom_ = function(a, b) {
-  var c = b[0], d = b[1];
-  if(!goog.dom.BrowserFeature.CAN_ADD_NAME_OR_TYPE_ATTRIBUTES && d && (d.name || d.type)) {
-    c = ["<", c];
-    d.name && c.push(' name="', goog.string.htmlEscape(d.name), '"');
-    if(d.type) {
-      c.push(' type="', goog.string.htmlEscape(d.type), '"');
-      var e = {};
-      goog.object.extend(e, d);
-      d = e;
-      delete d.type
-    }
-    c.push(">");
-    c = c.join("")
-  }
-  c = a.createElement(c);
-  d && (goog.isString(d) ? c.className = d : goog.isArray(d) ? goog.dom.classes.add.apply(null, [c].concat(d)) : goog.dom.setProperties(c, d));
-  2 < b.length && goog.dom.append_(a, c, b, 2);
-  return c
-};
-goog.dom.append_ = function(a, b, c, d) {
-  function e(c) {
-    c && b.appendChild(goog.isString(c) ? a.createTextNode(c) : c)
-  }
-  for(;d < c.length;d++) {
-    var f = c[d];
-    goog.isArrayLike(f) && !goog.dom.isNodeLike(f) ? goog.array.forEach(goog.dom.isNodeList(f) ? goog.array.clone(f) : f, e) : e(f)
-  }
-};
-goog.dom.$dom = goog.dom.createDom;
-goog.dom.createElement = function(a) {
-  return document.createElement(a)
-};
-goog.dom.createTextNode = function(a) {
-  return document.createTextNode(a)
-};
-goog.dom.createTable = function(a, b, c) {
-  return goog.dom.createTable_(document, a, b, !!c)
-};
-goog.dom.createTable_ = function(a, b, c, d) {
-  for(var e = ["<tr>"], f = 0;f < c;f++) {
-    e.push(d ? "<td>&nbsp;</td>" : "<td></td>")
-  }
-  e.push("</tr>");
-  e = e.join("");
-  c = ["<table>"];
-  for(f = 0;f < b;f++) {
-    c.push(e)
-  }
-  c.push("</table>");
-  a = a.createElement(goog.dom.TagName.DIV);
-  a.innerHTML = c.join("");
-  return a.removeChild(a.firstChild)
-};
-goog.dom.htmlToDocumentFragment = function(a) {
-  return goog.dom.htmlToDocumentFragment_(document, a)
-};
-goog.dom.htmlToDocumentFragment_ = function(a, b) {
-  var c = a.createElement("div");
-  goog.dom.BrowserFeature.INNER_HTML_NEEDS_SCOPED_ELEMENT ? (c.innerHTML = "<br>" + b, c.removeChild(c.firstChild)) : c.innerHTML = b;
-  if(1 == c.childNodes.length) {
-    return c.removeChild(c.firstChild)
-  }
-  for(var d = a.createDocumentFragment();c.firstChild;) {
-    d.appendChild(c.firstChild)
-  }
-  return d
-};
-goog.dom.getCompatMode = function() {
-  return goog.dom.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"
-};
-goog.dom.isCss1CompatMode = function() {
-  return goog.dom.isCss1CompatMode_(document)
-};
-goog.dom.isCss1CompatMode_ = function(a) {
-  return goog.dom.COMPAT_MODE_KNOWN_ ? goog.dom.ASSUME_STANDARDS_MODE : "CSS1Compat" == a.compatMode
-};
-goog.dom.canHaveChildren = function(a) {
-  if(a.nodeType != goog.dom.NodeType.ELEMENT) {
-    return!1
-  }
-  switch(a.tagName) {
-    case goog.dom.TagName.APPLET:
-    ;
-    case goog.dom.TagName.AREA:
-    ;
-    case goog.dom.TagName.BASE:
-    ;
-    case goog.dom.TagName.BR:
-    ;
-    case goog.dom.TagName.COL:
-    ;
-    case goog.dom.TagName.FRAME:
-    ;
-    case goog.dom.TagName.HR:
-    ;
-    case goog.dom.TagName.IMG:
-    ;
-    case goog.dom.TagName.INPUT:
-    ;
-    case goog.dom.TagName.IFRAME:
-    ;
-    case goog.dom.TagName.ISINDEX:
-    ;
-    case goog.dom.TagName.LINK:
-    ;
-    case goog.dom.TagName.NOFRAMES:
-    ;
-    case goog.dom.TagName.NOSCRIPT:
-    ;
-    case goog.dom.TagName.META:
-    ;
-    case goog.dom.TagName.OBJECT:
-    ;
-    case goog.dom.TagName.PARAM:
-    ;
-    case goog.dom.TagName.SCRIPT:
-    ;
-    case goog.dom.TagName.STYLE:
-      return!1
-  }
-  return!0
-};
-goog.dom.appendChild = function(a, b) {
-  a.appendChild(b)
-};
-goog.dom.append = function(a, b) {
-  goog.dom.append_(goog.dom.getOwnerDocument(a), a, arguments, 1)
-};
-goog.dom.removeChildren = function(a) {
-  for(var b;b = a.firstChild;) {
-    a.removeChild(b)
-  }
-};
-goog.dom.insertSiblingBefore = function(a, b) {
-  b.parentNode && b.parentNode.insertBefore(a, b)
-};
-goog.dom.insertSiblingAfter = function(a, b) {
-  b.parentNode && b.parentNode.insertBefore(a, b.nextSibling)
-};
-goog.dom.insertChildAt = function(a, b, c) {
-  a.insertBefore(b, a.childNodes[c] || null)
-};
-goog.dom.removeNode = function(a) {
-  return a && a.parentNode ? a.parentNode.removeChild(a) : null
-};
-goog.dom.replaceNode = function(a, b) {
-  var c = b.parentNode;
-  c && c.replaceChild(a, b)
-};
-goog.dom.flattenElement = function(a) {
-  var b, c = a.parentNode;
-  if(c && c.nodeType != goog.dom.NodeType.DOCUMENT_FRAGMENT) {
-    if(a.removeNode) {
-      return a.removeNode(!1)
-    }
-    for(;b = a.firstChild;) {
-      c.insertBefore(b, a)
-    }
-    return goog.dom.removeNode(a)
-  }
-};
-goog.dom.getChildren = function(a) {
-  return goog.dom.BrowserFeature.CAN_USE_CHILDREN_ATTRIBUTE && void 0 != a.children ? a.children : goog.array.filter(a.childNodes, function(a) {
-    return a.nodeType == goog.dom.NodeType.ELEMENT
-  })
-};
-goog.dom.getFirstElementChild = function(a) {
-  return void 0 != a.firstElementChild ? a.firstElementChild : goog.dom.getNextElementNode_(a.firstChild, !0)
-};
-goog.dom.getLastElementChild = function(a) {
-  return void 0 != a.lastElementChild ? a.lastElementChild : goog.dom.getNextElementNode_(a.lastChild, !1)
-};
-goog.dom.getNextElementSibling = function(a) {
-  return void 0 != a.nextElementSibling ? a.nextElementSibling : goog.dom.getNextElementNode_(a.nextSibling, !0)
-};
-goog.dom.getPreviousElementSibling = function(a) {
-  return void 0 != a.previousElementSibling ? a.previousElementSibling : goog.dom.getNextElementNode_(a.previousSibling, !1)
-};
-goog.dom.getNextElementNode_ = function(a, b) {
-  for(;a && a.nodeType != goog.dom.NodeType.ELEMENT;) {
-    a = b ? a.nextSibling : a.previousSibling
-  }
-  return a
-};
-goog.dom.getNextNode = function(a) {
-  if(!a) {
-    return null
-  }
-  if(a.firstChild) {
-    return a.firstChild
-  }
-  for(;a && !a.nextSibling;) {
-    a = a.parentNode
-  }
-  return a ? a.nextSibling : null
-};
-goog.dom.getPreviousNode = function(a) {
-  if(!a) {
-    return null
-  }
-  if(!a.previousSibling) {
-    return a.parentNode
-  }
-  for(a = a.previousSibling;a && a.lastChild;) {
-    a = a.lastChild
-  }
-  return a
-};
-goog.dom.isNodeLike = function(a) {
-  return goog.isObject(a) && 0 < a.nodeType
-};
-goog.dom.isWindow = function(a) {
-  return goog.isObject(a) && a.window == a
-};
-goog.dom.contains = function(a, b) {
-  if(a.contains && b.nodeType == goog.dom.NodeType.ELEMENT) {
-    return a == b || a.contains(b)
-  }
-  if("undefined" != typeof a.compareDocumentPosition) {
-    return a == b || Boolean(a.compareDocumentPosition(b) & 16)
-  }
-  for(;b && a != b;) {
-    b = b.parentNode
-  }
-  return b == a
-};
-goog.dom.compareNodeOrder = function(a, b) {
-  if(a == b) {
-    return 0
-  }
-  if(a.compareDocumentPosition) {
-    return a.compareDocumentPosition(b) & 2 ? 1 : -1
-  }
-  if("sourceIndex" in a || a.parentNode && "sourceIndex" in a.parentNode) {
-    var c = a.nodeType == goog.dom.NodeType.ELEMENT, d = b.nodeType == goog.dom.NodeType.ELEMENT;
-    if(c && d) {
-      return a.sourceIndex - b.sourceIndex
-    }
-    var e = a.parentNode, f = b.parentNode;
-    return e == f ? goog.dom.compareSiblingOrder_(a, b) : !c && goog.dom.contains(e, b) ? -1 * goog.dom.compareParentsDescendantNodeIe_(a, b) : !d && goog.dom.contains(f, a) ? goog.dom.compareParentsDescendantNodeIe_(b, a) : (c ? a.sourceIndex : e.sourceIndex) - (d ? b.sourceIndex : f.sourceIndex)
-  }
-  d = goog.dom.getOwnerDocument(a);
-  c = d.createRange();
-  c.selectNode(a);
-  c.collapse(!0);
-  d = d.createRange();
-  d.selectNode(b);
-  d.collapse(!0);
-  return c.compareBoundaryPoints(goog.global.Range.START_TO_END, d)
-};
-goog.dom.compareParentsDescendantNodeIe_ = function(a, b) {
-  var c = a.parentNode;
-  if(c == b) {
-    return-1
-  }
-  for(var d = b;d.parentNode != c;) {
-    d = d.parentNode
-  }
-  return goog.dom.compareSiblingOrder_(d, a)
-};
-goog.dom.compareSiblingOrder_ = function(a, b) {
-  for(var c = b;c = c.previousSibling;) {
-    if(c == a) {
-      return-1
-    }
-  }
-  return 1
-};
-goog.dom.findCommonAncestor = function(a) {
-  var b, c = arguments.length;
-  if(c) {
-    if(1 == c) {
-      return arguments[0]
-    }
-  }else {
-    return null
-  }
-  var d = [], e = Infinity;
-  for(b = 0;b < c;b++) {
-    for(var f = [], g = arguments[b];g;) {
-      f.unshift(g), g = g.parentNode
-    }
-    d.push(f);
-    e = Math.min(e, f.length)
-  }
-  f = null;
-  for(b = 0;b < e;b++) {
-    for(var g = d[0][b], h = 1;h < c;h++) {
-      if(g != d[h][b]) {
-        return f
-      }
-    }
-    f = g
-  }
-  return f
-};
-goog.dom.getOwnerDocument = function(a) {
-  return a.nodeType == goog.dom.NodeType.DOCUMENT ? a : a.ownerDocument || a.document
-};
-goog.dom.getFrameContentDocument = function(a) {
-  return goog.userAgent.WEBKIT ? a.document || a.contentWindow.document : a.contentDocument || a.contentWindow.document
-};
-goog.dom.getFrameContentWindow = function(a) {
-  return a.contentWindow || goog.dom.getWindow_(goog.dom.getFrameContentDocument(a))
-};
-goog.dom.setTextContent = function(a, b) {
-  if("textContent" in a) {
-    a.textContent = b
-  }else {
-    if(a.firstChild && a.firstChild.nodeType == goog.dom.NodeType.TEXT) {
-      for(;a.lastChild != a.firstChild;) {
-        a.removeChild(a.lastChild)
-      }
-      a.firstChild.data = b
-    }else {
-      goog.dom.removeChildren(a);
-      var c = goog.dom.getOwnerDocument(a);
-      a.appendChild(c.createTextNode(b))
-    }
-  }
-};
-goog.dom.getOuterHtml = function(a) {
-  if("outerHTML" in a) {
-    return a.outerHTML
-  }
-  var b = goog.dom.getOwnerDocument(a).createElement("div");
-  b.appendChild(a.cloneNode(!0));
-  return b.innerHTML
-};
-goog.dom.findNode = function(a, b) {
-  var c = [];
-  return goog.dom.findNodes_(a, b, c, !0) ? c[0] : void 0
-};
-goog.dom.findNodes = function(a, b) {
-  var c = [];
-  goog.dom.findNodes_(a, b, c, !1);
-  return c
-};
-goog.dom.findNodes_ = function(a, b, c, d) {
-  if(null != a) {
-    for(var e = 0, f;f = a.childNodes[e];e++) {
-      if(b(f) && (c.push(f), d) || goog.dom.findNodes_(f, b, c, d)) {
-        return!0
-      }
-    }
-  }
-  return!1
-};
-goog.dom.TAGS_TO_IGNORE_ = {SCRIPT:1, STYLE:1, HEAD:1, IFRAME:1, OBJECT:1};
-goog.dom.PREDEFINED_TAG_VALUES_ = {IMG:" ", BR:"\n"};
-goog.dom.isFocusableTabIndex = function(a) {
-  var b = a.getAttributeNode("tabindex");
-  return b && b.specified ? (a = a.tabIndex, goog.isNumber(a) && 0 <= a) : !1
-};
-goog.dom.setFocusableTabIndex = function(a, b) {
-  b ? a.tabIndex = 0 : a.removeAttribute("tabIndex")
-};
-goog.dom.getTextContent = function(a) {
-  if(goog.dom.BrowserFeature.CAN_USE_INNER_TEXT && "innerText" in a) {
-    a = goog.string.canonicalizeNewlines(a.innerText)
-  }else {
-    var b = [];
-    goog.dom.getTextContent_(a, b, !0);
-    a = b.join("")
-  }
-  a = a.replace(/ \xAD /g, " ").replace(/\xAD/g, "");
-  a = a.replace(/\u200B/g, "");
-  goog.userAgent.IE || (a = a.replace(/ +/g, " "));
-  " " != a && (a = a.replace(/^\s*/, ""));
-  return a
-};
-goog.dom.getRawTextContent = function(a) {
-  var b = [];
-  goog.dom.getTextContent_(a, b, !1);
-  return b.join("")
-};
-goog.dom.getTextContent_ = function(a, b, c) {
-  if(!(a.nodeName in goog.dom.TAGS_TO_IGNORE_)) {
-    if(a.nodeType == goog.dom.NodeType.TEXT) {
-      c ? b.push(("" + a.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : b.push(a.nodeValue)
-    }else {
-      if(a.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
-        b.push(goog.dom.PREDEFINED_TAG_VALUES_[a.nodeName])
-      }else {
-        for(a = a.firstChild;a;) {
-          goog.dom.getTextContent_(a, b, c), a = a.nextSibling
-        }
-      }
-    }
-  }
-};
-goog.dom.getNodeTextLength = function(a) {
-  return goog.dom.getTextContent(a).length
-};
-goog.dom.getNodeTextOffset = function(a, b) {
-  for(var c = b || goog.dom.getOwnerDocument(a).body, d = [];a && a != c;) {
-    for(var e = a;e = e.previousSibling;) {
-      d.unshift(goog.dom.getTextContent(e))
-    }
-    a = a.parentNode
-  }
-  return goog.string.trimLeft(d.join("")).replace(/ +/g, " ").length
-};
-goog.dom.getNodeAtOffset = function(a, b, c) {
-  for(var a = [a], d = 0, e;0 < a.length && d < b;) {
-    if(e = a.pop(), !(e.nodeName in goog.dom.TAGS_TO_IGNORE_)) {
-      if(e.nodeType == goog.dom.NodeType.TEXT) {
-        var f = e.nodeValue.replace(/(\r\n|\r|\n)/g, "").replace(/ +/g, " "), d = d + f.length
-      }else {
-        if(e.nodeName in goog.dom.PREDEFINED_TAG_VALUES_) {
-          d += goog.dom.PREDEFINED_TAG_VALUES_[e.nodeName].length
-        }else {
-          for(f = e.childNodes.length - 1;0 <= f;f--) {
-            a.push(e.childNodes[f])
-          }
-        }
-      }
-    }
-  }
-  goog.isObject(c) && (c.remainder = e ? e.nodeValue.length + b - d - 1 : 0, c.node = e);
-  return e
-};
-goog.dom.isNodeList = function(a) {
-  if(a && "number" == typeof a.length) {
-    if(goog.isObject(a)) {
-      return"function" == typeof a.item || "string" == typeof a.item
-    }
-    if(goog.isFunction(a)) {
-      return"function" == typeof a.item
-    }
-  }
-  return!1
-};
-goog.dom.getAncestorByTagNameAndClass = function(a, b, c) {
-  var d = b ? b.toUpperCase() : null;
-  return goog.dom.getAncestor(a, function(a) {
-    return(!d || a.nodeName == d) && (!c || goog.dom.classes.has(a, c))
-  }, !0)
-};
-goog.dom.getAncestorByClass = function(a, b) {
-  return goog.dom.getAncestorByTagNameAndClass(a, null, b)
-};
-goog.dom.getAncestor = function(a, b, c, d) {
-  c || (a = a.parentNode);
-  for(var c = null == d, e = 0;a && (c || e <= d);) {
-    if(b(a)) {
-      return a
-    }
-    a = a.parentNode;
-    e++
-  }
-  return null
-};
-goog.dom.DomHelper = function(a) {
-  this.document_ = a || goog.global.document || document
-};
-goog.dom.DomHelper.prototype.getDomHelper = goog.dom.getDomHelper;
-goog.dom.DomHelper.prototype.setDocument = function(a) {
-  this.document_ = a
-};
-goog.dom.DomHelper.prototype.getDocument = function() {
-  return this.document_
-};
-goog.dom.DomHelper.prototype.getElement = function(a) {
-  return goog.isString(a) ? this.document_.getElementById(a) : a
-};
-goog.dom.DomHelper.prototype.$ = goog.dom.DomHelper.prototype.getElement;
-goog.dom.DomHelper.prototype.getElementsByTagNameAndClass = function(a, b, c) {
-  return goog.dom.getElementsByTagNameAndClass_(this.document_, a, b, c)
-};
-goog.dom.DomHelper.prototype.getElementsByClass = function(a, b) {
-  return goog.dom.getElementsByClass(a, b || this.document_)
-};
-goog.dom.DomHelper.prototype.getElementByClass = function(a, b) {
-  return goog.dom.getElementByClass(a, b || this.document_)
-};
-goog.dom.DomHelper.prototype.$$ = goog.dom.DomHelper.prototype.getElementsByTagNameAndClass;
-goog.dom.DomHelper.prototype.setProperties = goog.dom.setProperties;
-goog.dom.DomHelper.prototype.getViewportSize = function(a) {
-  return goog.dom.getViewportSize(a || this.getWindow())
-};
-goog.dom.DomHelper.prototype.getDocumentHeight = function() {
-  return goog.dom.getDocumentHeight_(this.getWindow())
-};
-goog.dom.DomHelper.prototype.createDom = function(a, b, c) {
-  return goog.dom.createDom_(this.document_, arguments)
-};
-goog.dom.DomHelper.prototype.$dom = goog.dom.DomHelper.prototype.createDom;
-goog.dom.DomHelper.prototype.createElement = function(a) {
-  return this.document_.createElement(a)
-};
-goog.dom.DomHelper.prototype.createTextNode = function(a) {
-  return this.document_.createTextNode(a)
-};
-goog.dom.DomHelper.prototype.createTable = function(a, b, c) {
-  return goog.dom.createTable_(this.document_, a, b, !!c)
-};
-goog.dom.DomHelper.prototype.htmlToDocumentFragment = function(a) {
-  return goog.dom.htmlToDocumentFragment_(this.document_, a)
-};
-goog.dom.DomHelper.prototype.getCompatMode = function() {
-  return this.isCss1CompatMode() ? "CSS1Compat" : "BackCompat"
-};
-goog.dom.DomHelper.prototype.isCss1CompatMode = function() {
-  return goog.dom.isCss1CompatMode_(this.document_)
-};
-goog.dom.DomHelper.prototype.getWindow = function() {
-  return goog.dom.getWindow_(this.document_)
-};
-goog.dom.DomHelper.prototype.getDocumentScrollElement = function() {
-  return goog.dom.getDocumentScrollElement_(this.document_)
-};
-goog.dom.DomHelper.prototype.getDocumentScroll = function() {
-  return goog.dom.getDocumentScroll_(this.document_)
-};
-goog.dom.DomHelper.prototype.appendChild = goog.dom.appendChild;
-goog.dom.DomHelper.prototype.append = goog.dom.append;
-goog.dom.DomHelper.prototype.removeChildren = goog.dom.removeChildren;
-goog.dom.DomHelper.prototype.insertSiblingBefore = goog.dom.insertSiblingBefore;
-goog.dom.DomHelper.prototype.insertSiblingAfter = goog.dom.insertSiblingAfter;
-goog.dom.DomHelper.prototype.removeNode = goog.dom.removeNode;
-goog.dom.DomHelper.prototype.replaceNode = goog.dom.replaceNode;
-goog.dom.DomHelper.prototype.flattenElement = goog.dom.flattenElement;
-goog.dom.DomHelper.prototype.getFirstElementChild = goog.dom.getFirstElementChild;
-goog.dom.DomHelper.prototype.getLastElementChild = goog.dom.getLastElementChild;
-goog.dom.DomHelper.prototype.getNextElementSibling = goog.dom.getNextElementSibling;
-goog.dom.DomHelper.prototype.getPreviousElementSibling = goog.dom.getPreviousElementSibling;
-goog.dom.DomHelper.prototype.getNextNode = goog.dom.getNextNode;
-goog.dom.DomHelper.prototype.getPreviousNode = goog.dom.getPreviousNode;
-goog.dom.DomHelper.prototype.isNodeLike = goog.dom.isNodeLike;
-goog.dom.DomHelper.prototype.contains = goog.dom.contains;
-goog.dom.DomHelper.prototype.getOwnerDocument = goog.dom.getOwnerDocument;
-goog.dom.DomHelper.prototype.getFrameContentDocument = goog.dom.getFrameContentDocument;
-goog.dom.DomHelper.prototype.getFrameContentWindow = goog.dom.getFrameContentWindow;
-goog.dom.DomHelper.prototype.setTextContent = goog.dom.setTextContent;
-goog.dom.DomHelper.prototype.findNode = goog.dom.findNode;
-goog.dom.DomHelper.prototype.findNodes = goog.dom.findNodes;
-goog.dom.DomHelper.prototype.getTextContent = goog.dom.getTextContent;
-goog.dom.DomHelper.prototype.getNodeTextLength = goog.dom.getNodeTextLength;
-goog.dom.DomHelper.prototype.getNodeTextOffset = goog.dom.getNodeTextOffset;
-goog.dom.DomHelper.prototype.getAncestorByTagNameAndClass = goog.dom.getAncestorByTagNameAndClass;
-goog.dom.DomHelper.prototype.getAncestor = goog.dom.getAncestor;
-goog.math.randomInt = function(a) {
-  return Math.floor(Math.random() * a)
-};
-goog.math.uniformRandom = function(a, b) {
-  return a + Math.random() * (b - a)
-};
-goog.math.clamp = function(a, b, c) {
-  return Math.min(Math.max(a, b), c)
-};
-goog.math.modulo = function(a, b) {
-  var c = a % b;
-  return 0 > c * b ? c + b : c
-};
-goog.math.lerp = function(a, b, c) {
-  return a + c * (b - a)
-};
-goog.math.nearlyEquals = function(a, b, c) {
-  return Math.abs(a - b) <= (c || 1.0E-6)
-};
-goog.math.standardAngle = function(a) {
-  return goog.math.modulo(a, 360)
-};
-goog.math.toRadians = function(a) {
-  return a * Math.PI / 180
-};
-goog.math.toDegrees = function(a) {
-  return 180 * a / Math.PI
-};
-goog.math.angleDx = function(a, b) {
-  return b * Math.cos(goog.math.toRadians(a))
-};
-goog.math.angleDy = function(a, b) {
-  return b * Math.sin(goog.math.toRadians(a))
-};
-goog.math.angle = function(a, b, c, d) {
-  return goog.math.standardAngle(goog.math.toDegrees(Math.atan2(d - b, c - a)))
-};
-goog.math.angleDifference = function(a, b) {
-  var c = goog.math.standardAngle(b) - goog.math.standardAngle(a);
-  180 < c ? c -= 360 : -180 >= c && (c = 360 + c);
-  return c
-};
-goog.math.sign = function(a) {
-  return 0 == a ? 0 : 0 > a ? -1 : 1
-};
-goog.math.longestCommonSubsequence = function(a, b, c, d) {
-  for(var c = c || function(a, b) {
-    return a == b
-  }, d = d || function(b) {
-    return a[b]
-  }, e = a.length, f = b.length, g = [], h = 0;h < e + 1;h++) {
-    g[h] = [], g[h][0] = 0
-  }
-  for(var i = 0;i < f + 1;i++) {
-    g[0][i] = 0
-  }
-  for(h = 1;h <= e;h++) {
-    for(i = 1;i <= e;i++) {
-      g[h][i] = c(a[h - 1], b[i - 1]) ? g[h - 1][i - 1] + 1 : Math.max(g[h - 1][i], g[h][i - 1])
-    }
-  }
-  for(var j = [], h = e, i = f;0 < h && 0 < i;) {
-    c(a[h - 1], b[i - 1]) ? (j.unshift(d(h - 1, i - 1)), h--, i--) : g[h - 1][i] > g[h][i - 1] ? h-- : i--
-  }
-  return j
-};
-goog.math.sum = function(a) {
-  return goog.array.reduce(arguments, function(a, c) {
-    return a + c
-  }, 0)
-};
-goog.math.average = function(a) {
-  return goog.math.sum.apply(null, arguments) / arguments.length
-};
-goog.math.standardDeviation = function(a) {
-  var b = arguments.length;
-  if(2 > b) {
-    return 0
-  }
-  var c = goog.math.average.apply(null, arguments), b = goog.math.sum.apply(null, goog.array.map(arguments, function(a) {
-    return Math.pow(a - c, 2)
-  })) / (b - 1);
-  return Math.sqrt(b)
-};
-goog.math.isInt = function(a) {
-  return isFinite(a) && 0 == a % 1
-};
-goog.math.isFiniteNumber = function(a) {
-  return isFinite(a) && !isNaN(a)
-};
-var cljs = {core:{}};
-cljs.core._STAR_print_fn_STAR_ = function() {
-  throw Error("No *print-fn* fn set for evaluation environment");
-};
-cljs.core.truth_ = function(a) {
-  return null != a && !1 !== a
-};
-cljs.core.type_satisfies_ = function(a, b) {
-  var c = a[goog.typeOf.call(null, b)];
-  if(cljs.core.truth_(c)) {
-    return c
-  }
-  c = a._;
-  return cljs.core.truth_(c) ? c : !1
-};
-cljs.core.is_proto_ = function(a) {
-  return a.constructor.prototype === a
-};
-cljs.core._STAR_main_cli_fn_STAR_ = null;
-cljs.core.missing_protocol = function(a, b) {
-  return Error.call(null, "No protocol method " + a + " defined for type " + goog.typeOf.call(null, b) + ": " + b)
-};
-cljs.core.aclone = function(a) {
-  return Array.prototype.slice.call(a)
-};
-cljs.core.array = function(a) {
-  return Array.prototype.slice.call(arguments)
-};
-cljs.core.aget = function(a, b) {
-  return a[b]
-};
-cljs.core.aset = function(a, b, c) {
-  return a[b] = c
-};
-cljs.core.alength = function(a) {
-  return a.length
-};
-cljs.core.IFn = {};
-cljs.core._invoke = function() {
-  return function(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s, t, ja) {
-    switch(arguments.length) {
-      case 1:
-        var u;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          u = a.cljs$core$IFn$_invoke(a)
-        }else {
-          var v;
-          var ka = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(ka)) {
-            v = ka
-          }else {
-            var la = cljs.core._invoke._;
-            if(cljs.core.truth_(la)) {
-              v = la
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          u = v.call(null, a)
-        }
-        return u;
-      case 2:
-        var w;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          w = a.cljs$core$IFn$_invoke(a, b)
-        }else {
-          var x;
-          var ma = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(ma)) {
-            x = ma
-          }else {
-            var na = cljs.core._invoke._;
-            if(cljs.core.truth_(na)) {
-              x = na
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          w = x.call(null, a, b)
-        }
-        return w;
-      case 3:
-        var y;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          y = a.cljs$core$IFn$_invoke(a, b, c)
-        }else {
-          var z;
-          var oa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(oa)) {
-            z = oa
-          }else {
-            var pa = cljs.core._invoke._;
-            if(cljs.core.truth_(pa)) {
-              z = pa
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          y = z.call(null, a, b, c)
-        }
-        return y;
-      case 4:
-        var A;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          A = a.cljs$core$IFn$_invoke(a, b, c, d)
-        }else {
-          var B;
-          var qa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(qa)) {
-            B = qa
-          }else {
-            var ra = cljs.core._invoke._;
-            if(cljs.core.truth_(ra)) {
-              B = ra
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          A = B.call(null, a, b, c, d)
-        }
-        return A;
-      case 5:
-        var C;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          C = a.cljs$core$IFn$_invoke(a, b, c, d, e)
-        }else {
-          var D;
-          var sa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(sa)) {
-            D = sa
-          }else {
-            var ta = cljs.core._invoke._;
-            if(cljs.core.truth_(ta)) {
-              D = ta
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          C = D.call(null, a, b, c, d, e)
-        }
-        return C;
-      case 6:
-        var E;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          E = a.cljs$core$IFn$_invoke(a, b, c, d, e, f)
-        }else {
-          var F;
-          var ua = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(ua)) {
-            F = ua
-          }else {
-            var va = cljs.core._invoke._;
-            if(cljs.core.truth_(va)) {
-              F = va
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          E = F.call(null, a, b, c, d, e, f)
-        }
-        return E;
-      case 7:
-        var G;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          G = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g)
-        }else {
-          var H;
-          var wa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(wa)) {
-            H = wa
-          }else {
-            var xa = cljs.core._invoke._;
-            if(cljs.core.truth_(xa)) {
-              H = xa
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          G = H.call(null, a, b, c, d, e, f, g)
-        }
-        return G;
-      case 8:
-        var I;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          I = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h)
-        }else {
-          var J;
-          var ya = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(ya)) {
-            J = ya
-          }else {
-            var za = cljs.core._invoke._;
-            if(cljs.core.truth_(za)) {
-              J = za
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          I = J.call(null, a, b, c, d, e, f, g, h)
-        }
-        return I;
-      case 9:
-        var K;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          K = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i)
-        }else {
-          var L;
-          var Aa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Aa)) {
-            L = Aa
-          }else {
-            var Ba = cljs.core._invoke._;
-            if(cljs.core.truth_(Ba)) {
-              L = Ba
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          K = L.call(null, a, b, c, d, e, f, g, h, i)
-        }
-        return K;
-      case 10:
-        var M;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          M = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j)
-        }else {
-          var N;
-          var Ca = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ca)) {
-            N = Ca
-          }else {
-            var Da = cljs.core._invoke._;
-            if(cljs.core.truth_(Da)) {
-              N = Da
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          M = N.call(null, a, b, c, d, e, f, g, h, i, j)
-        }
-        return M;
-      case 11:
-        var O;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          O = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k)
-        }else {
-          var P;
-          var Ea = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ea)) {
-            P = Ea
-          }else {
-            var Fa = cljs.core._invoke._;
-            if(cljs.core.truth_(Fa)) {
-              P = Fa
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          O = P.call(null, a, b, c, d, e, f, g, h, i, j, k)
-        }
-        return O;
-      case 12:
-        var Q;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          Q = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m)
-        }else {
-          var R;
-          var Ga = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ga)) {
-            R = Ga
-          }else {
-            var Ha = cljs.core._invoke._;
-            if(cljs.core.truth_(Ha)) {
-              R = Ha
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          Q = R.call(null, a, b, c, d, e, f, g, h, i, j, k, m)
-        }
-        return Q;
-      case 13:
-        var S;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          S = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l)
-        }else {
-          var T;
-          var Ia = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ia)) {
-            T = Ia
-          }else {
-            var Ja = cljs.core._invoke._;
-            if(cljs.core.truth_(Ja)) {
-              T = Ja
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          S = T.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l)
-        }
-        return S;
-      case 14:
-        var U;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          U = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o)
-        }else {
-          var V;
-          var Ka = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ka)) {
-            V = Ka
-          }else {
-            var La = cljs.core._invoke._;
-            if(cljs.core.truth_(La)) {
-              V = La
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          U = V.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o)
-        }
-        return U;
-      case 15:
-        var W;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          W = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n)
-        }else {
-          var X;
-          var Ma = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ma)) {
-            X = Ma
-          }else {
-            var Na = cljs.core._invoke._;
-            if(cljs.core.truth_(Na)) {
-              X = Na
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          W = X.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n)
-        }
-        return W;
-      case 16:
-        var Y;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          Y = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q)
-        }else {
-          var Z;
-          var Oa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Oa)) {
-            Z = Oa
-          }else {
-            var Pa = cljs.core._invoke._;
-            if(cljs.core.truth_(Pa)) {
-              Z = Pa
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          Y = Z.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q)
-        }
-        return Y;
-      case 17:
-        var $;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          $ = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p)
-        }else {
-          var aa;
-          var Qa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Qa)) {
-            aa = Qa
-          }else {
-            var Ra = cljs.core._invoke._;
-            if(cljs.core.truth_(Ra)) {
-              aa = Ra
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          $ = aa.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p)
-        }
-        return $;
-      case 18:
-        var ba;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          ba = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r)
-        }else {
-          var ca;
-          var Sa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Sa)) {
-            ca = Sa
-          }else {
-            var Ta = cljs.core._invoke._;
-            if(cljs.core.truth_(Ta)) {
-              ca = Ta
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          ba = ca.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r)
-        }
-        return ba;
-      case 19:
-        var da;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          da = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s)
-        }else {
-          var ea;
-          var Ua = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ua)) {
-            ea = Ua
-          }else {
-            var Va = cljs.core._invoke._;
-            if(cljs.core.truth_(Va)) {
-              ea = Va
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          da = ea.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s)
-        }
-        return da;
-      case 20:
-        var fa;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          fa = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s, t)
-        }else {
-          var ga;
-          var Wa = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Wa)) {
-            ga = Wa
-          }else {
-            var Xa = cljs.core._invoke._;
-            if(cljs.core.truth_(Xa)) {
-              ga = Xa
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          fa = ga.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s, t)
-        }
-        return fa;
-      case 21:
-        var ha;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IFn$_invoke : a)) {
-          ha = a.cljs$core$IFn$_invoke(a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s, t, ja)
-        }else {
-          var ia;
-          var Ya = cljs.core._invoke[goog.typeOf.call(null, a)];
-          if(cljs.core.truth_(Ya)) {
-            ia = Ya
-          }else {
-            var Za = cljs.core._invoke._;
-            if(cljs.core.truth_(Za)) {
-              ia = Za
-            }else {
-              throw cljs.core.missing_protocol.call(null, "IFn.-invoke", a);
-            }
-          }
-          ha = ia.call(null, a, b, c, d, e, f, g, h, i, j, k, m, l, o, n, q, p, r, s, t, ja)
-        }
-        return ha
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ICounted = {};
-cljs.core._count = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ICounted$_count : a)) {
-    a = a.cljs$core$ICounted$_count(a)
-  }else {
-    var b;
-    b = cljs.core._count[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._count._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "ICounted.-count", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.IEmptyableCollection = {};
-cljs.core._empty = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IEmptyableCollection$_empty : a)) {
-    a = a.cljs$core$IEmptyableCollection$_empty(a)
-  }else {
-    var b;
-    b = cljs.core._empty[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._empty._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IEmptyableCollection.-empty", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.ICollection = {};
-cljs.core._conj = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ICollection$_conj : a)) {
-    c = a.cljs$core$ICollection$_conj(a, b)
-  }else {
-    c = cljs.core._conj[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._conj._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "ICollection.-conj", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.IIndexed = {};
-cljs.core._nth = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        var d;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IIndexed$_nth : a)) {
-          d = a.cljs$core$IIndexed$_nth(a, b)
-        }else {
-          d = cljs.core._nth[goog.typeOf.call(null, a)];
-          if(!cljs.core.truth_(d) && (d = cljs.core._nth._, !cljs.core.truth_(d))) {
-            throw cljs.core.missing_protocol.call(null, "IIndexed.-nth", a);
-          }
-          d = d.call(null, a, b)
-        }
-        return d;
-      case 3:
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IIndexed$_nth : a)) {
-          d = a.cljs$core$IIndexed$_nth(a, b, c)
-        }else {
-          d = cljs.core._nth[goog.typeOf.call(null, a)];
-          if(!cljs.core.truth_(d) && (d = cljs.core._nth._, !cljs.core.truth_(d))) {
-            throw cljs.core.missing_protocol.call(null, "IIndexed.-nth", a);
-          }
-          d = d.call(null, a, b, c)
-        }
-        return d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ISeq = {};
-cljs.core._first = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ISeq$_first : a)) {
-    a = a.cljs$core$ISeq$_first(a)
-  }else {
-    var b;
-    b = cljs.core._first[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._first._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "ISeq.-first", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core._rest = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ISeq$_rest : a)) {
-    a = a.cljs$core$ISeq$_rest(a)
-  }else {
-    var b;
-    b = cljs.core._rest[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._rest._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "ISeq.-rest", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.ILookup = {};
-cljs.core._lookup = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        var d;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ILookup$_lookup : a)) {
-          d = a.cljs$core$ILookup$_lookup(a, b)
-        }else {
-          d = cljs.core._lookup[goog.typeOf.call(null, a)];
-          if(!cljs.core.truth_(d) && (d = cljs.core._lookup._, !cljs.core.truth_(d))) {
-            throw cljs.core.missing_protocol.call(null, "ILookup.-lookup", a);
-          }
-          d = d.call(null, a, b)
-        }
-        return d;
-      case 3:
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ILookup$_lookup : a)) {
-          d = a.cljs$core$ILookup$_lookup(a, b, c)
-        }else {
-          d = cljs.core._lookup[goog.typeOf.call(null, a)];
-          if(!cljs.core.truth_(d) && (d = cljs.core._lookup._, !cljs.core.truth_(d))) {
-            throw cljs.core.missing_protocol.call(null, "ILookup.-lookup", a);
-          }
-          d = d.call(null, a, b, c)
-        }
-        return d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IAssociative = {};
-cljs.core._contains_key_QMARK_ = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IAssociative$_contains_key_QMARK_ : a)) {
-    c = a.cljs$core$IAssociative$_contains_key_QMARK_(a, b)
-  }else {
-    c = cljs.core._contains_key_QMARK_[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._contains_key_QMARK_._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IAssociative.-contains-key?", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core._assoc = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IAssociative$_assoc : a)) {
-    a = a.cljs$core$IAssociative$_assoc(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._assoc[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._assoc._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IAssociative.-assoc", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core.IMap = {};
-cljs.core._dissoc = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMap$_dissoc : a)) {
-    c = a.cljs$core$IMap$_dissoc(a, b)
-  }else {
-    c = cljs.core._dissoc[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._dissoc._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IMap.-dissoc", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.ISet = {};
-cljs.core._disjoin = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ISet$_disjoin : a)) {
-    c = a.cljs$core$ISet$_disjoin(a, b)
-  }else {
-    c = cljs.core._disjoin[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._disjoin._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "ISet.-disjoin", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.IStack = {};
-cljs.core._peek = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IStack$_peek : a)) {
-    a = a.cljs$core$IStack$_peek(a)
-  }else {
-    var b;
-    b = cljs.core._peek[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._peek._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IStack.-peek", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core._pop = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IStack$_pop : a)) {
-    a = a.cljs$core$IStack$_pop(a)
-  }else {
-    var b;
-    b = cljs.core._pop[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._pop._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IStack.-pop", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.IVector = {};
-cljs.core._assoc_n = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IVector$_assoc_n : a)) {
-    a = a.cljs$core$IVector$_assoc_n(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._assoc_n[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._assoc_n._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IVector.-assoc-n", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core.IDeref = {};
-cljs.core._deref = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IDeref$_deref : a)) {
-    a = a.cljs$core$IDeref$_deref(a)
-  }else {
-    var b;
-    b = cljs.core._deref[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._deref._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IDeref.-deref", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.IDerefWithTimeout = {};
-cljs.core._deref_with_timeout = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IDerefWithTimeout$_deref_with_timeout : a)) {
-    a = a.cljs$core$IDerefWithTimeout$_deref_with_timeout(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._deref_with_timeout[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._deref_with_timeout._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IDerefWithTimeout.-deref-with-timeout", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core.IMeta = {};
-cljs.core._meta = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMeta$_meta : a)) {
-    a = a.cljs$core$IMeta$_meta(a)
-  }else {
-    var b;
-    b = cljs.core._meta[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._meta._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IMeta.-meta", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.IWithMeta = {};
-cljs.core._with_meta = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IWithMeta$_with_meta : a)) {
-    c = a.cljs$core$IWithMeta$_with_meta(a, b)
-  }else {
-    c = cljs.core._with_meta[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._with_meta._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IWithMeta.-with-meta", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.IReduce = {};
-cljs.core._reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        var d;
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IReduce$_reduce : a)) {
-          d = a.cljs$core$IReduce$_reduce(a, b)
-        }else {
-          d = cljs.core._reduce[goog.typeOf.call(null, a)];
-          if(!cljs.core.truth_(d) && (d = cljs.core._reduce._, !cljs.core.truth_(d))) {
-            throw cljs.core.missing_protocol.call(null, "IReduce.-reduce", a);
-          }
-          d = d.call(null, a, b)
-        }
-        return d;
-      case 3:
-        if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IReduce$_reduce : a)) {
-          d = a.cljs$core$IReduce$_reduce(a, b, c)
-        }else {
-          d = cljs.core._reduce[goog.typeOf.call(null, a)];
-          if(!cljs.core.truth_(d) && (d = cljs.core._reduce._, !cljs.core.truth_(d))) {
-            throw cljs.core.missing_protocol.call(null, "IReduce.-reduce", a);
-          }
-          d = d.call(null, a, b, c)
-        }
-        return d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IEquiv = {};
-cljs.core._equiv = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IEquiv$_equiv : a)) {
-    c = a.cljs$core$IEquiv$_equiv(a, b)
-  }else {
-    c = cljs.core._equiv[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._equiv._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IEquiv.-equiv", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.IHash = {};
-cljs.core._hash = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IHash$_hash : a)) {
-    a = a.cljs$core$IHash$_hash(a)
-  }else {
-    var b;
-    b = cljs.core._hash[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._hash._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IHash.-hash", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.ISeqable = {};
-cljs.core._seq = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$ISeqable$_seq : a)) {
-    a = a.cljs$core$ISeqable$_seq(a)
-  }else {
-    var b;
-    b = cljs.core._seq[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._seq._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "ISeqable.-seq", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.ISequential = {};
-cljs.core.IRecord = {};
-cljs.core.IPrintable = {};
-cljs.core._pr_seq = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IPrintable$_pr_seq : a)) {
-    c = a.cljs$core$IPrintable$_pr_seq(a, b)
-  }else {
-    c = cljs.core._pr_seq[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._pr_seq._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IPrintable.-pr-seq", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.IPending = {};
-cljs.core._realized_QMARK_ = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IPending$_realized_QMARK_ : a)) {
-    a = a.cljs$core$IPending$_realized_QMARK_(a)
-  }else {
-    var b;
-    b = cljs.core._realized_QMARK_[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._realized_QMARK_._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IPending.-realized?", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core.IWatchable = {};
-cljs.core._notify_watches = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IWatchable$_notify_watches : a)) {
-    a = a.cljs$core$IWatchable$_notify_watches(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._notify_watches[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._notify_watches._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IWatchable.-notify-watches", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core._add_watch = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IWatchable$_add_watch : a)) {
-    a = a.cljs$core$IWatchable$_add_watch(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._add_watch[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._add_watch._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IWatchable.-add-watch", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core._remove_watch = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IWatchable$_remove_watch : a)) {
-    c = a.cljs$core$IWatchable$_remove_watch(a, b)
-  }else {
-    c = cljs.core._remove_watch[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._remove_watch._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IWatchable.-remove-watch", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.identical_QMARK_ = function(a, b) {
-  return a === b
-};
-cljs.core._EQ_ = function(a, b) {
-  return cljs.core._equiv.call(null, a, b)
-};
-cljs.core.nil_QMARK_ = function(a) {
-  return null === a
-};
-cljs.core.type = function(a) {
-  return a.constructor
-};
-cljs.core.IHash["null"] = !0;
-cljs.core._hash["null"] = function() {
-  return 0
-};
-cljs.core.ILookup["null"] = !0;
-cljs.core._lookup["null"] = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return null;
-      case 3:
-        return c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IAssociative["null"] = !0;
-cljs.core._assoc["null"] = function(a, b, c) {
-  return cljs.core.hash_map.call(null, b, c)
-};
-cljs.core.ICollection["null"] = !0;
-cljs.core._conj["null"] = function(a, b) {
-  return cljs.core.list.call(null, b)
-};
-cljs.core.IReduce["null"] = !0;
-cljs.core._reduce["null"] = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return b.call(null);
-      case 3:
-        return c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IPrintable["null"] = !0;
-cljs.core._pr_seq["null"] = function() {
-  return cljs.core.list.call(null, "nil")
-};
-cljs.core.ISet["null"] = !0;
-cljs.core._disjoin["null"] = function() {
-  return null
-};
-cljs.core.ICounted["null"] = !0;
-cljs.core._count["null"] = function() {
-  return 0
-};
-cljs.core.IStack["null"] = !0;
-cljs.core._peek["null"] = function() {
-  return null
-};
-cljs.core._pop["null"] = function() {
-  return null
-};
-cljs.core.ISeq["null"] = !0;
-cljs.core._first["null"] = function() {
-  return null
-};
-cljs.core._rest["null"] = function() {
-  return cljs.core.list.call(null)
-};
-cljs.core.IEquiv["null"] = !0;
-cljs.core._equiv["null"] = function(a, b) {
-  return null === b
-};
-cljs.core.IWithMeta["null"] = !0;
-cljs.core._with_meta["null"] = function() {
-  return null
-};
-cljs.core.IMeta["null"] = !0;
-cljs.core._meta["null"] = function() {
-  return null
-};
-cljs.core.IIndexed["null"] = !0;
-cljs.core._nth["null"] = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return null;
-      case 3:
-        return c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IEmptyableCollection["null"] = !0;
-cljs.core._empty["null"] = function() {
-  return null
-};
-cljs.core.IMap["null"] = !0;
-cljs.core._dissoc["null"] = function() {
-  return null
-};
-Date.prototype.cljs$core$IEquiv$ = !0;
-Date.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return a.toString() === b.toString()
-};
-cljs.core.IHash.number = !0;
-cljs.core._hash.number = function(a) {
-  return a
-};
-cljs.core.IEquiv.number = !0;
-cljs.core._equiv.number = function(a, b) {
-  return a === b
-};
-cljs.core.IHash["boolean"] = !0;
-cljs.core._hash["boolean"] = function(a) {
-  return!0 === a ? 1 : 0
-};
-cljs.core.IHash["function"] = !0;
-cljs.core._hash["function"] = function(a) {
-  return goog.getUid.call(null, a)
-};
-cljs.core.inc = function(a) {
-  return a + 1
-};
-cljs.core.ci_reduce = function() {
-  return function(a, b, c, d) {
-    switch(arguments.length) {
-      case 2:
-        var e;
-        a: {
-          if(cljs.core.truth_(cljs.core._EQ_.call(null, 0, cljs.core._count.call(null, a)))) {
-            e = b.call(null)
-          }else {
-            for(var f = cljs.core._nth.call(null, a, 0), g = 1;;) {
-              if(cljs.core.truth_(g < cljs.core._count.call(null, a))) {
-                f = b.call(null, f, cljs.core._nth.call(null, a, g)), g += 1
-              }else {
-                e = f;
-                break a
-              }
-            }
-          }
-        }
-        return e;
-      case 3:
-        a: {
-          e = c;
-          for(g = 0;;) {
-            if(cljs.core.truth_(g < cljs.core._count.call(null, a))) {
-              e = b.call(null, e, cljs.core._nth.call(null, a, g)), g += 1
-            }else {
-              f = e;
-              break a
-            }
-          }
-        }
-        return f;
-      case 4:
-        a: {
-          e = c;
-          for(f = d;;) {
-            if(cljs.core.truth_(f < cljs.core._count.call(null, a))) {
-              e = b.call(null, e, cljs.core._nth.call(null, a, f)), f += 1
-            }else {
-              g = e;
-              break a
-            }
-          }
-        }
-        return g
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IndexedSeq = function(a, b) {
-  this.a = a;
-  this.i = b
-};
-cljs.core.IndexedSeq.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.IndexedSeq")
-};
-cljs.core.IndexedSeq.prototype.cljs$core$IHash$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.IndexedSeq.prototype.cljs$core$IReduce$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$IReduce$_reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.ci_reduce.call(null, this.a, b, this.a[this.i], this.i + 1);
-      case 3:
-        return cljs.core.ci_reduce.call(null, this.a, b, c, this.i)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IndexedSeq.prototype.cljs$core$ICollection$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return cljs.core.cons.call(null, b, a)
-};
-cljs.core.IndexedSeq.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.IndexedSeq.prototype.cljs$core$ISequential$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$IIndexed$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$IIndexed$_nth = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        var d = b + this.i;
-        return cljs.core.truth_(d < this.a.length) ? this.a[d] : null;
-      case 3:
-        return d = b + this.i, cljs.core.truth_(d < this.a.length) ? this.a[d] : c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IndexedSeq.prototype.cljs$core$ICounted$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$ICounted$_count = function() {
-  return this.a.length - this.i
-};
-cljs.core.IndexedSeq.prototype.cljs$core$ISeq$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$ISeq$_first = function() {
-  return this.a[this.i]
-};
-cljs.core.IndexedSeq.prototype.cljs$core$ISeq$_rest = function() {
-  return cljs.core.truth_(this.i + 1 < this.a.length) ? new cljs.core.IndexedSeq(this.a, this.i + 1) : cljs.core.list.call(null)
-};
-cljs.core.IndexedSeq.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$ISeqable$_seq = function(a) {
-  return a
-};
-cljs.core.IndexedSeq;
-cljs.core.prim_seq = function(a, b) {
-  return cljs.core.truth_(cljs.core._EQ_.call(null, 0, a.length)) ? null : new cljs.core.IndexedSeq(a, b)
-};
-cljs.core.array_seq = function(a, b) {
-  return cljs.core.prim_seq.call(null, a, b)
-};
-cljs.core.IReduce.array = !0;
-cljs.core._reduce.array = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.ci_reduce.call(null, a, b);
-      case 3:
-        return cljs.core.ci_reduce.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ILookup.array = !0;
-cljs.core._lookup.array = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return a[b];
-      case 3:
-        return cljs.core._nth.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IIndexed.array = !0;
-cljs.core._nth.array = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.truth_(b < a.length) ? a[b] : null;
-      case 3:
-        return cljs.core.truth_(b < a.length) ? a[b] : c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ICounted.array = !0;
-cljs.core._count.array = function(a) {
-  return a.length
-};
-cljs.core.ISeqable.array = !0;
-cljs.core._seq.array = function(a) {
-  return cljs.core.array_seq.call(null, a, 0)
-};
-cljs.core.seq = function(a) {
-  return cljs.core.truth_(a) ? cljs.core._seq.call(null, a) : null
-};
-cljs.core.first = function(a) {
-  a = cljs.core.seq.call(null, a);
-  return cljs.core.truth_(a) ? cljs.core._first.call(null, a) : null
-};
-cljs.core.rest = function(a) {
-  return cljs.core._rest.call(null, cljs.core.seq.call(null, a))
-};
-cljs.core.next = function(a) {
-  return cljs.core.truth_(a) ? cljs.core.seq.call(null, cljs.core.rest.call(null, a)) : null
-};
-cljs.core.second = function(a) {
-  return cljs.core.first.call(null, cljs.core.next.call(null, a))
-};
-cljs.core.ffirst = function(a) {
-  return cljs.core.first.call(null, cljs.core.first.call(null, a))
-};
-cljs.core.nfirst = function(a) {
-  return cljs.core.next.call(null, cljs.core.first.call(null, a))
-};
-cljs.core.fnext = function(a) {
-  return cljs.core.first.call(null, cljs.core.next.call(null, a))
-};
-cljs.core.nnext = function(a) {
-  return cljs.core.next.call(null, cljs.core.next.call(null, a))
-};
-cljs.core.last = function(a) {
-  for(;;) {
-    if(cljs.core.truth_(cljs.core.next.call(null, a))) {
-      a = cljs.core.next.call(null, a)
-    }else {
-      return cljs.core.first.call(null, a)
-    }
-  }
-};
-cljs.core.ICounted._ = !0;
-cljs.core._count._ = function(a) {
-  for(var a = cljs.core.seq.call(null, a), b = 0;;) {
-    if(cljs.core.truth_(a)) {
-      a = cljs.core.next.call(null, a), b += 1
-    }else {
-      return b
-    }
-  }
-};
-cljs.core.IEquiv._ = !0;
-cljs.core._equiv._ = function(a, b) {
-  return a === b
-};
-cljs.core.not = function(a) {
-  return cljs.core.truth_(a) ? !1 : !0
-};
-cljs.core.conj = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d) {
-      for(;;) {
-        if(cljs.core.truth_(d)) {
-          b = a.call(null, b, c), c = cljs.core.first.call(null, d), d = cljs.core.next.call(null, d)
-        }else {
-          return a.call(null, b, c)
-        }
-      }
-    }, d = function(a, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return b.call(this, a, d, h)
-    };
-    d.cljs$lang$maxFixedArity = 2;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return b.call(this, d, g, a)
-    };
-    return d
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._conj.call(null, a, d);
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.empty = function(a) {
-  return cljs.core._empty.call(null, a)
-};
-cljs.core.count = function(a) {
-  return cljs.core._count.call(null, a)
-};
-cljs.core.nth = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._nth.call(null, a, Math.floor(b));
-      case 3:
-        return cljs.core._nth.call(null, a, Math.floor(b), c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.get = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, a, b);
-      case 3:
-        return cljs.core._lookup.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.assoc = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d, h) {
-      for(;;) {
-        if(b = a.call(null, b, c, d), cljs.core.truth_(h)) {
-          c = cljs.core.first.call(null, h), d = cljs.core.second.call(null, h), h = cljs.core.nnext.call(null, h)
-        }else {
-          return b
-        }
-      }
-    }, d = function(a, d, g, h) {
-      var i = null;
-      goog.isDef(h) && (i = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return b.call(this, a, d, g, i)
-    };
-    d.cljs$lang$maxFixedArity = 3;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), h = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-      return b.call(this, d, g, h, a)
-    };
-    return d
-  }(), a = function(a, d, e, f) {
-    switch(arguments.length) {
-      case 3:
-        return cljs.core._assoc.call(null, a, d, e);
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.dissoc = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d) {
-      for(;;) {
-        if(b = a.call(null, b, c), cljs.core.truth_(d)) {
-          c = cljs.core.first.call(null, d), d = cljs.core.next.call(null, d)
-        }else {
-          return b
-        }
-      }
-    }, d = function(a, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return b.call(this, a, d, h)
-    };
-    d.cljs$lang$maxFixedArity = 2;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return b.call(this, d, g, a)
-    };
-    return d
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return a;
-      case 2:
-        return cljs.core._dissoc.call(null, a, d);
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.with_meta = function(a, b) {
-  return cljs.core._with_meta.call(null, a, b)
-};
-cljs.core.meta = function(a) {
-  return cljs.core.truth_(function() {
-    return cljs.core.truth_(function() {
-      if(cljs.core.truth_(a)) {
-        var b = a.cljs$core$IMeta$;
-        return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$IMeta$")) : b
-      }
-      return a
-    }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.IMeta, a)
-  }()) ? cljs.core._meta.call(null, a) : null
-};
-cljs.core.peek = function(a) {
-  return cljs.core._peek.call(null, a)
-};
-cljs.core.pop = function(a) {
-  return cljs.core._pop.call(null, a)
-};
-cljs.core.disj = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d) {
-      for(;;) {
-        if(b = a.call(null, b, c), cljs.core.truth_(d)) {
-          c = cljs.core.first.call(null, d), d = cljs.core.next.call(null, d)
-        }else {
-          return b
-        }
-      }
-    }, d = function(a, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return b.call(this, a, d, h)
-    };
-    d.cljs$lang$maxFixedArity = 2;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return b.call(this, d, g, a)
-    };
-    return d
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return a;
-      case 2:
-        return cljs.core._disjoin.call(null, a, d);
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.hash = function(a) {
-  return cljs.core._hash.call(null, a)
-};
-cljs.core.empty_QMARK_ = function(a) {
-  return cljs.core.not.call(null, cljs.core.seq.call(null, a))
-};
-cljs.core.coll_QMARK_ = function(a) {
-  return cljs.core.truth_(null === a) ? !1 : cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$ICollection$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$ICollection$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.ICollection, a)
-};
-cljs.core.set_QMARK_ = function(a) {
-  return cljs.core.truth_(null === a) ? !1 : cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$ISet$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$ISet$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.ISet, a)
-};
-cljs.core.associative_QMARK_ = function(a) {
-  return cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$IAssociative$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$IAssociative$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.IAssociative, a)
-};
-cljs.core.sequential_QMARK_ = function(a) {
-  return cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$ISequential$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$ISequential$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.ISequential, a)
-};
-cljs.core.counted_QMARK_ = function(a) {
-  return cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$ICounted$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$ICounted$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.ICounted, a)
-};
-cljs.core.map_QMARK_ = function(a) {
-  return cljs.core.truth_(null === a) ? !1 : cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$IMap$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$IMap$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.IMap, a)
-};
-cljs.core.vector_QMARK_ = function(a) {
-  return cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$IVector$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$IVector$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.IVector, a)
-};
-cljs.core.js_obj = function() {
-  return{}
-};
-cljs.core.js_keys = function(a) {
-  var b = [];
-  goog.object.forEach.call(null, a, function(a, d) {
-    return b.push(d)
-  });
-  return b
-};
-cljs.core.js_delete = function(a, b) {
-  return delete a[b]
-};
-cljs.core.lookup_sentinel = cljs.core.js_obj.call(null);
-cljs.core.false_QMARK_ = function(a) {
-  return!1 === a
-};
-cljs.core.true_QMARK_ = function(a) {
-  return!0 === a
-};
-cljs.core.undefined_QMARK_ = function(a) {
-  return void 0 === a
-};
-cljs.core.instance_QMARK_ = function(a, b) {
-  return null != b && (b instanceof a || b.constructor === a || a === Object)
-};
-cljs.core.seq_QMARK_ = function(a) {
-  return cljs.core.truth_(null === a) ? !1 : cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var b = a.cljs$core$ISeq$;
-      return cljs.core.truth_(b) ? cljs.core.not.call(null, a.hasOwnProperty("cljs$core$ISeq$")) : b
-    }
-    return a
-  }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.ISeq, a)
-};
-cljs.core.boolean$ = function(a) {
-  return cljs.core.truth_(a) ? !0 : !1
-};
-cljs.core.string_QMARK_ = function(a) {
-  var b = goog.isString.call(null, a);
-  return cljs.core.truth_(b) ? cljs.core.not.call(null, function() {
-    var b = cljs.core._EQ_.call(null, a.charAt(0), "\ufdd0");
-    return cljs.core.truth_(b) ? b : cljs.core._EQ_.call(null, a.charAt(0), "\ufdd1")
-  }()) : b
-};
-cljs.core.keyword_QMARK_ = function(a) {
-  var b = goog.isString.call(null, a);
-  return cljs.core.truth_(b) ? cljs.core._EQ_.call(null, a.charAt(0), "\ufdd0") : b
-};
-cljs.core.symbol_QMARK_ = function(a) {
-  var b = goog.isString.call(null, a);
-  return cljs.core.truth_(b) ? cljs.core._EQ_.call(null, a.charAt(0), "\ufdd1") : b
-};
-cljs.core.number_QMARK_ = function(a) {
-  return goog.isNumber.call(null, a)
-};
-cljs.core.fn_QMARK_ = function(a) {
-  return goog.isFunction.call(null, a)
-};
-cljs.core.integer_QMARK_ = function(a) {
-  var b = cljs.core.number_QMARK_.call(null, a);
-  return cljs.core.truth_(b) ? a == a.toFixed() : b
-};
-cljs.core.contains_QMARK_ = function(a, b) {
-  return cljs.core.truth_(cljs.core._lookup.call(null, a, b, cljs.core.lookup_sentinel) === cljs.core.lookup_sentinel) ? !1 : !0
-};
-cljs.core.find = function(a, b) {
-  return cljs.core.truth_(function() {
-    if(cljs.core.truth_(a)) {
-      var c = cljs.core.associative_QMARK_.call(null, a);
-      return cljs.core.truth_(c) ? cljs.core.contains_QMARK_.call(null, a, b) : c
-    }
-    return a
-  }()) ? cljs.core.Vector.fromArray([b, cljs.core._lookup.call(null, a, b)]) : null
-};
-cljs.core.distinct_QMARK_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      if(cljs.core.truth_(cljs.core.not.call(null, cljs.core._EQ_.call(null, a, b)))) {
-        a = cljs.core.set([b, a]);
-        for(b = c;;) {
-          var d = cljs.core.first.call(null, b), c = cljs.core.next.call(null, b);
-          if(cljs.core.truth_(b)) {
-            if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null, a, d))) {
-              return!1
-            }
-            a = cljs.core.conj.call(null, a, d);
-            b = c
-          }else {
-            return!0
-          }
-        }
-      }else {
-        return!1
-      }
-    }, b = function(b, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return a.call(this, b, d, h)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return a.call(this, d, g, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!0;
-      case 2:
-        return cljs.core.not.call(null, cljs.core._EQ_.call(null, a, d));
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.compare = function(a, b) {
-  return goog.array.defaultCompare.call(null, a, b)
-};
-cljs.core.fn__GT_comparator = function(a) {
-  return cljs.core.truth_(cljs.core._EQ_.call(null, a, cljs.core.compare)) ? cljs.core.compare : function(b, c) {
-    var d = a.call(null, b, c);
-    return cljs.core.truth_(cljs.core.number_QMARK_.call(null, d)) ? d : cljs.core.truth_(d) ? -1 : cljs.core.truth_(a.call(null, c, b)) ? 1 : 0
-  }
-};
-cljs.core.sort = function() {
-  var a = null;
-  return a = function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        return a.call(null, cljs.core.compare, b);
-      case 2:
-        var d;
-        cljs.core.truth_(cljs.core.seq.call(null, c)) ? (d = cljs.core.to_array.call(null, c), goog.array.stableSort.call(null, d, cljs.core.fn__GT_comparator.call(null, b)), d = cljs.core.seq.call(null, d)) : d = cljs.core.List.EMPTY;
-        return d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.sort_by = function() {
-  var a = null, b = function(a, b, e) {
-    return cljs.core.sort.call(null, function(e, g) {
-      return cljs.core.fn__GT_comparator.call(null, b).call(null, a.call(null, e), a.call(null, g))
-    }, e)
-  };
-  return a = function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(null, c, cljs.core.compare, d);
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._reduce.call(null, b, a);
-      case 3:
-        return cljs.core._reduce.call(null, c, a, b)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.seq_reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        var d;
-        d = cljs.core.seq.call(null, b);
-        d = cljs.core.truth_(d) ? cljs.core.reduce.call(null, a, cljs.core.first.call(null, d), cljs.core.next.call(null, d)) : a.call(null);
-        return d;
-      case 3:
-        a: {
-          for(var e = b, f = cljs.core.seq.call(null, c);;) {
-            if(cljs.core.truth_(f)) {
-              e = a.call(null, e, cljs.core.first.call(null, f)), f = cljs.core.next.call(null, f)
-            }else {
-              d = e;
-              break a
-            }
-          }
-        }
-        return d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IReduce._ = !0;
-cljs.core._reduce._ = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.seq_reduce.call(null, b, a);
-      case 3:
-        return cljs.core.seq_reduce.call(null, b, c, a)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core._PLUS_ = function() {
-  var a = null, b = function() {
-    var b = function(b, c, f) {
-      var g = null;
-      goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.reduce.call(null, a, b + c, g)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), f = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return cljs.core.reduce.call(null, a, c + f, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 0:
-        return 0;
-      case 1:
-        return a;
-      case 2:
-        return a + d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._ = function() {
-  var a = null, b = function() {
-    var b = function(b, c, f) {
-      var g = null;
-      goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.reduce.call(null, a, b - c, g)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), f = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return cljs.core.reduce.call(null, a, c - f, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return-a;
-      case 2:
-        return a - d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._STAR_ = function() {
-  var a = null, b = function() {
-    var b = function(b, c, f) {
-      var g = null;
-      goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.reduce.call(null, a, b * c, g)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), f = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return cljs.core.reduce.call(null, a, c * f, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 0:
-        return 1;
-      case 1:
-        return a;
-      case 2:
-        return a * d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._SLASH_ = function() {
-  var a = null, b = function() {
-    var b = function(b, c, f) {
-      var g = null;
-      goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.reduce.call(null, a, a.call(null, b, c), g)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), f = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return cljs.core.reduce.call(null, a, a.call(null, c, f), b)
-    };
-    return b
-  }(), a = function(c, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return a.call(null, 1, c);
-      case 2:
-        return c / d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._LT_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      for(;;) {
-        if(cljs.core.truth_(a < b)) {
-          if(cljs.core.truth_(cljs.core.next.call(null, c))) {
-            a = b, b = cljs.core.first.call(null, c), c = cljs.core.next.call(null, c)
-          }else {
-            return b < cljs.core.first.call(null, c)
-          }
-        }else {
-          return!1
-        }
-      }
-    }, b = function(b, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return a.call(this, b, d, h)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return a.call(this, d, g, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!0;
-      case 2:
-        return a < d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._LT__EQ_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      for(;;) {
-        if(cljs.core.truth_(a <= b)) {
-          if(cljs.core.truth_(cljs.core.next.call(null, c))) {
-            a = b, b = cljs.core.first.call(null, c), c = cljs.core.next.call(null, c)
-          }else {
-            return b <= cljs.core.first.call(null, c)
-          }
-        }else {
-          return!1
-        }
-      }
-    }, b = function(b, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return a.call(this, b, d, h)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return a.call(this, d, g, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!0;
-      case 2:
-        return a <= d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._GT_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      for(;;) {
-        if(cljs.core.truth_(a > b)) {
-          if(cljs.core.truth_(cljs.core.next.call(null, c))) {
-            a = b, b = cljs.core.first.call(null, c), c = cljs.core.next.call(null, c)
-          }else {
-            return b > cljs.core.first.call(null, c)
-          }
-        }else {
-          return!1
-        }
-      }
-    }, b = function(b, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return a.call(this, b, d, h)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return a.call(this, d, g, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!0;
-      case 2:
-        return a > d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core._GT__EQ_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      for(;;) {
-        if(cljs.core.truth_(a >= b)) {
-          if(cljs.core.truth_(cljs.core.next.call(null, c))) {
-            a = b, b = cljs.core.first.call(null, c), c = cljs.core.next.call(null, c)
-          }else {
-            return b >= cljs.core.first.call(null, c)
-          }
-        }else {
-          return!1
-        }
-      }
-    }, b = function(b, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return a.call(this, b, d, h)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return a.call(this, d, g, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!0;
-      case 2:
-        return a >= d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.dec = function(a) {
-  return a - 1
-};
-cljs.core.max = function() {
-  var a = null, b = function() {
-    var b = function(b, c, f) {
-      var g = null;
-      goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.reduce.call(null, a, b > c ? b : c, g)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), f = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return cljs.core.reduce.call(null, a, c > f ? c : f, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return a;
-      case 2:
-        return a > d ? a : d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.min = function() {
-  var a = null, b = function() {
-    var b = function(b, c, f) {
-      var g = null;
-      goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.reduce.call(null, a, b < c ? b : c, g)
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), f = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-      return cljs.core.reduce.call(null, a, c < f ? c : f, b)
-    };
-    return b
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return a;
-      case 2:
-        return a < d ? a : d;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.fix = function(a) {
-  return cljs.core.truth_(0 <= a) ? Math.floor.call(null, a) : Math.ceil.call(null, a)
-};
-cljs.core.mod = function(a, b) {
-  return a % b
-};
-cljs.core.quot = function(a, b) {
-  return cljs.core.fix.call(null, (a - a % b) / b)
-};
-cljs.core.rem = function(a, b) {
-  var c = cljs.core.quot.call(null, a, b);
-  return a - b * c
-};
-cljs.core.rand = function() {
-  var a = null;
-  return a = function(b) {
-    switch(arguments.length) {
-      case 0:
-        return Math.random.call(null);
-      case 1:
-        return b * a.call(null)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.rand_int = function(a) {
-  return cljs.core.fix.call(null, cljs.core.rand.call(null, a))
-};
-cljs.core.bit_xor = function(a, b) {
-  return a ^ b
-};
-cljs.core.bit_and = function(a, b) {
-  return a & b
-};
-cljs.core.bit_or = function(a, b) {
-  return a | b
-};
-cljs.core.bit_and_not = function(a, b) {
-  return a & ~b
-};
-cljs.core.bit_clear = function(a, b) {
-  return a & ~(1 << b)
-};
-cljs.core.bit_flip = function(a, b) {
-  return a ^ 1 << b
-};
-cljs.core.bit_not = function(a) {
-  return~a
-};
-cljs.core.bit_set = function(a, b) {
-  return a | 1 << b
-};
-cljs.core.bit_test = function(a, b) {
-  return 0 != (a & 1 << b)
-};
-cljs.core.bit_shift_left = function(a, b) {
-  return a << b
-};
-cljs.core.bit_shift_right = function(a, b) {
-  return a >> b
-};
-cljs.core._EQ__EQ_ = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d) {
-      for(;;) {
-        if(cljs.core.truth_(a.call(null, b, c))) {
-          if(cljs.core.truth_(cljs.core.next.call(null, d))) {
-            b = c, c = cljs.core.first.call(null, d), d = cljs.core.next.call(null, d)
-          }else {
-            return a.call(null, c, cljs.core.first.call(null, d))
-          }
-        }else {
-          return!1
-        }
-      }
-    }, d = function(a, d, g) {
-      var h = null;
-      goog.isDef(g) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return b.call(this, a, d, h)
-    };
-    d.cljs$lang$maxFixedArity = 2;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return b.call(this, d, g, a)
-    };
-    return d
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!0;
-      case 2:
-        return cljs.core._equiv.call(null, a, d);
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.pos_QMARK_ = function(a) {
-  return 0 < a
-};
-cljs.core.zero_QMARK_ = function(a) {
-  return 0 === a
-};
-cljs.core.neg_QMARK_ = function(a) {
-  return 0 > a
-};
-cljs.core.nthnext = function(a, b) {
-  for(var c = b, d = cljs.core.seq.call(null, a);;) {
-    if(cljs.core.truth_(function() {
-      var a = d;
-      return cljs.core.truth_(a) ? 0 < c : a
-    }())) {
-      var e = c - 1, f = cljs.core.next.call(null, d), c = e, d = f
-    }else {
-      return d
-    }
-  }
-};
-cljs.core.IIndexed._ = !0;
-cljs.core._nth._ = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        var d;
-        d = cljs.core.nthnext.call(null, a, b);
-        if(cljs.core.truth_(d)) {
-          d = cljs.core.first.call(null, d)
-        }else {
-          throw Error("Index out of bounds");
-        }
-        return d;
-      case 3:
-        return d = cljs.core.nthnext.call(null, a, b), d = cljs.core.truth_(d) ? cljs.core.first.call(null, d) : c, d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.str_STAR_ = function() {
-  var a = null, b = function() {
-    var b = function(b, c) {
-      return function(b, c) {
-        for(;;) {
-          if(cljs.core.truth_(c)) {
-            var d = b.append(a.call(null, cljs.core.first.call(null, c))), e = cljs.core.next.call(null, c), b = d, c = e
-          }else {
-            return a.call(null, b)
-          }
-        }
-      }.call(null, new goog.string.StringBuffer(a.call(null, b)), c)
-    }, d = function(a, d) {
-      var g = null;
-      goog.isDef(d) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-      return b.call(this, a, g)
-    };
-    d.cljs$lang$maxFixedArity = 1;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), a = cljs.core.rest(a);
-      return b.call(this, d, a)
-    };
-    return d
-  }(), a = function(a, d) {
-    switch(arguments.length) {
-      case 0:
-        return"";
-      case 1:
-        return cljs.core.truth_(null === a) ? "" : cljs.core.truth_("\ufdd0'else") ? a.toString() : null;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 1;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.str = function() {
-  var a = null, b = function() {
-    var a = function(a, b) {
-      var c = null;
-      goog.isDef(b) && (c = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-      return cljs.core.apply.call(null, cljs.core.str_STAR_, a, c)
-    };
-    a.cljs$lang$maxFixedArity = 1;
-    a.cljs$lang$applyTo = function(a) {
-      var b = cljs.core.first(a), a = cljs.core.rest(a);
-      return cljs.core.apply.call(null, cljs.core.str_STAR_, b, a)
-    };
-    return a
-  }(), a = function(a, d) {
-    switch(arguments.length) {
-      case 0:
-        return"";
-      case 1:
-        return cljs.core.truth_(cljs.core.symbol_QMARK_.call(null, a)) ? a.substring(2, a.length) : cljs.core.truth_(cljs.core.keyword_QMARK_.call(null, a)) ? cljs.core.str_STAR_.call(null, ":", a.substring(2, a.length)) : cljs.core.truth_(null === a) ? "" : cljs.core.truth_("\ufdd0'else") ? a.toString() : null;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 1;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.subs = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return a.substring(b);
-      case 3:
-        return a.substring(b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.symbol = function() {
-  var a = null;
-  return a = function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        return cljs.core.truth_(cljs.core.symbol_QMARK_.call(null, b)) ? b : cljs.core.truth_(cljs.core.keyword_QMARK_.call(null, b)) && cljs.core.str_STAR_.call(null, "\ufdd1", "'", cljs.core.subs.call(null, b, 2)), cljs.core.str_STAR_.call(null, "\ufdd1", "'", b);
-      case 2:
-        return a.call(null, cljs.core.str_STAR_.call(null, b, "/", c))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.keyword = function() {
-  var a = null;
-  return a = function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        return cljs.core.truth_(cljs.core.keyword_QMARK_.call(null, b)) ? b : cljs.core.truth_(cljs.core.symbol_QMARK_.call(null, b)) ? cljs.core.str_STAR_.call(null, "\ufdd0", "'", cljs.core.subs.call(null, b, 2)) : cljs.core.truth_("\ufdd0'else") ? cljs.core.str_STAR_.call(null, "\ufdd0", "'", b) : null;
-      case 2:
-        return a.call(null, cljs.core.str_STAR_.call(null, b, "/", c))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.equiv_sequential = function(a, b) {
-  return cljs.core.boolean$.call(null, cljs.core.truth_(cljs.core.sequential_QMARK_.call(null, b)) ? function() {
-    for(var c = cljs.core.seq.call(null, a), d = cljs.core.seq.call(null, b);;) {
-      if(cljs.core.truth_(null === c)) {
-        return null === d
-      }
-      if(cljs.core.truth_(null === d)) {
-        return!1
-      }
-      if(cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.first.call(null, c), cljs.core.first.call(null, d)))) {
-        c = cljs.core.next.call(null, c), d = cljs.core.next.call(null, d)
-      }else {
-        return cljs.core.truth_("\ufdd0'else") ? !1 : null
-      }
-    }
-  }() : null)
-};
-cljs.core.hash_combine = function(a, b) {
-  return a ^ b + 2654435769 + (a << 6) + (a >> 2)
-};
-cljs.core.hash_coll = function(a) {
-  return cljs.core.reduce.call(null, function(a, c) {
-    return cljs.core.hash_combine.call(null, a, cljs.core.hash.call(null, c))
-  }, cljs.core.hash.call(null, cljs.core.first.call(null, a)), cljs.core.next.call(null, a))
-};
-cljs.core.extend_object_BANG_ = function(a, b) {
-  var c = cljs.core.seq.call(null, b);
-  if(cljs.core.truth_(c)) {
-    var d = cljs.core.first.call(null, c);
-    cljs.core.nth.call(null, d, 0, null);
-    for(cljs.core.nth.call(null, d, 1, null);;) {
-      var e = d, d = cljs.core.nth.call(null, e, 0, null), e = cljs.core.nth.call(null, e, 1, null), d = cljs.core.name.call(null, d);
-      a[d] = e;
-      c = cljs.core.next.call(null, c);
-      if(cljs.core.truth_(c)) {
-        d = c, c = cljs.core.first.call(null, d), e = d, d = c, c = e
-      }else {
-        break
-      }
-    }
-  }
-  return a
-};
-cljs.core.List = function(a, b, c, d) {
-  this.meta = a;
-  this.first = b;
-  this.rest = c;
-  this.count = d
-};
-cljs.core.List.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.List")
-};
-cljs.core.List.prototype.cljs$core$IHash$ = !0;
-cljs.core.List.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.List.prototype.cljs$core$ISequential$ = !0;
-cljs.core.List.prototype.cljs$core$ICollection$ = !0;
-cljs.core.List.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return new cljs.core.List(this.meta, b, a, this.count + 1)
-};
-cljs.core.List.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.List.prototype.cljs$core$ISeqable$_seq = function(a) {
-  return a
-};
-cljs.core.List.prototype.cljs$core$ICounted$ = !0;
-cljs.core.List.prototype.cljs$core$ICounted$_count = function() {
-  return this.count
-};
-cljs.core.List.prototype.cljs$core$IStack$ = !0;
-cljs.core.List.prototype.cljs$core$IStack$_peek = function() {
-  return this.first
-};
-cljs.core.List.prototype.cljs$core$IStack$_pop = function(a) {
-  return cljs.core._rest.call(null, a)
-};
-cljs.core.List.prototype.cljs$core$ISeq$ = !0;
-cljs.core.List.prototype.cljs$core$ISeq$_first = function() {
-  return this.first
-};
-cljs.core.List.prototype.cljs$core$ISeq$_rest = function() {
-  return this.rest
-};
-cljs.core.List.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.List.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.List.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.List.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.List(b, this.first, this.rest, this.count)
-};
-cljs.core.List.prototype.cljs$core$IMeta$ = !0;
-cljs.core.List.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.List.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.List.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.List.EMPTY
-};
-cljs.core.List;
-cljs.core.EmptyList = function(a) {
-  this.meta = a
-};
-cljs.core.EmptyList.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.EmptyList")
-};
-cljs.core.EmptyList.prototype.cljs$core$IHash$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.EmptyList.prototype.cljs$core$ISequential$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$ICollection$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return new cljs.core.List(this.meta, b, null, 1)
-};
-cljs.core.EmptyList.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$ISeqable$_seq = function() {
-  return null
-};
-cljs.core.EmptyList.prototype.cljs$core$ICounted$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$ICounted$_count = function() {
-  return 0
-};
-cljs.core.EmptyList.prototype.cljs$core$IStack$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IStack$_peek = function() {
-  return null
-};
-cljs.core.EmptyList.prototype.cljs$core$IStack$_pop = function() {
-  return null
-};
-cljs.core.EmptyList.prototype.cljs$core$ISeq$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$ISeq$_first = function() {
-  return null
-};
-cljs.core.EmptyList.prototype.cljs$core$ISeq$_rest = function() {
-  return null
-};
-cljs.core.EmptyList.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.EmptyList.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.EmptyList(b)
-};
-cljs.core.EmptyList.prototype.cljs$core$IMeta$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.EmptyList.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IEmptyableCollection$_empty = function(a) {
-  return a
-};
-cljs.core.EmptyList;
-cljs.core.List.EMPTY = new cljs.core.EmptyList(null);
-cljs.core.reverse = function(a) {
-  return cljs.core.reduce.call(null, cljs.core.conj, cljs.core.List.EMPTY, a)
-};
-cljs.core.list = function() {
-  var a = function(a) {
-    return cljs.core.reduce.call(null, cljs.core.conj, cljs.core.List.EMPTY, cljs.core.reverse.call(null, a))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.Cons = function(a, b, c) {
-  this.meta = a;
-  this.first = b;
-  this.rest = c
-};
-cljs.core.Cons.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Cons")
-};
-cljs.core.Cons.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.Cons.prototype.cljs$core$ISeqable$_seq = function(a) {
-  return a
-};
-cljs.core.Cons.prototype.cljs$core$IHash$ = !0;
-cljs.core.Cons.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.Cons.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.Cons.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.Cons.prototype.cljs$core$ISequential$ = !0;
-cljs.core.Cons.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.Cons.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.List.EMPTY, this.meta)
-};
-cljs.core.Cons.prototype.cljs$core$ICollection$ = !0;
-cljs.core.Cons.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return new cljs.core.Cons(null, b, a)
-};
-cljs.core.Cons.prototype.cljs$core$ISeq$ = !0;
-cljs.core.Cons.prototype.cljs$core$ISeq$_first = function() {
-  return this.first
-};
-cljs.core.Cons.prototype.cljs$core$ISeq$_rest = function() {
-  return cljs.core.truth_(null === this.rest) ? cljs.core.List.EMPTY : this.rest
-};
-cljs.core.Cons.prototype.cljs$core$IMeta$ = !0;
-cljs.core.Cons.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.Cons.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.Cons.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.Cons(b, this.first, this.rest)
-};
-cljs.core.Cons;
-cljs.core.cons = function(a, b) {
-  return new cljs.core.Cons(null, a, b)
-};
-cljs.core.IReduce.string = !0;
-cljs.core._reduce.string = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.ci_reduce.call(null, a, b);
-      case 3:
-        return cljs.core.ci_reduce.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ILookup.string = !0;
-cljs.core._lookup.string = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._nth.call(null, a, b);
-      case 3:
-        return cljs.core._nth.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.IIndexed.string = !0;
-cljs.core._nth.string = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.truth_(b < cljs.core._count.call(null, a)) ? a.charAt(b) : null;
-      case 3:
-        return cljs.core.truth_(b < cljs.core._count.call(null, a)) ? a.charAt(b) : c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ICounted.string = !0;
-cljs.core._count.string = function(a) {
-  return a.length
-};
-cljs.core.ISeqable.string = !0;
-cljs.core._seq.string = function(a) {
-  return cljs.core.prim_seq.call(null, a, 0)
-};
-cljs.core.IHash.string = !0;
-cljs.core._hash.string = function(a) {
-  return goog.string.hashCode.call(null, a)
-};
-String.prototype.cljs$core$IFn$ = !0;
-String.prototype.call = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.get.call(null, b, this.toString());
-      case 3:
-        return cljs.core.get.call(null, b, this.toString(), c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-String.prototype.apply = function(a, b) {
-  return cljs.core.truth_(2 > cljs.core.count.call(null, b)) ? cljs.core.get.call(null, b[0], a) : cljs.core.get.call(null, b[0], a, b[1])
-};
-cljs.core.lazy_seq_value = function(a) {
-  var b = a.x;
-  if(cljs.core.truth_(a.realized)) {
-    return b
-  }
-  a.x = b.call(null);
-  a.realized = !0;
-  return a.x
-};
-cljs.core.LazySeq = function(a, b, c) {
-  this.meta = a;
-  this.realized = b;
-  this.x = c
-};
-cljs.core.LazySeq.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.LazySeq")
-};
-cljs.core.LazySeq.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$ISeqable$_seq = function(a) {
-  return cljs.core.seq.call(null, cljs.core.lazy_seq_value.call(null, a))
-};
-cljs.core.LazySeq.prototype.cljs$core$IHash$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.LazySeq.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.LazySeq.prototype.cljs$core$ISequential$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.List.EMPTY, this.meta)
-};
-cljs.core.LazySeq.prototype.cljs$core$ICollection$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return cljs.core.cons.call(null, b, a)
-};
-cljs.core.LazySeq.prototype.cljs$core$ISeq$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$ISeq$_first = function(a) {
-  return cljs.core.first.call(null, cljs.core.lazy_seq_value.call(null, a))
-};
-cljs.core.LazySeq.prototype.cljs$core$ISeq$_rest = function(a) {
-  return cljs.core.rest.call(null, cljs.core.lazy_seq_value.call(null, a))
-};
-cljs.core.LazySeq.prototype.cljs$core$IMeta$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.LazySeq.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.LazySeq(b, this.realized, this.x)
-};
-cljs.core.LazySeq;
-cljs.core.to_array = function(a) {
-  for(var b = [];;) {
-    if(cljs.core.truth_(cljs.core.seq.call(null, a))) {
-      b.push(cljs.core.first.call(null, a)), a = cljs.core.next.call(null, a)
-    }else {
-      return b
-    }
-  }
-};
-cljs.core.bounded_count = function(a, b) {
-  for(var c = a, d = b, e = 0;;) {
-    if(cljs.core.truth_(function() {
-      var a = 0 < d;
-      return cljs.core.truth_(a) ? cljs.core.seq.call(null, c) : a
-    }())) {
-      var f = cljs.core.next.call(null, c), g = d - 1, e = e + 1, c = f, d = g
-    }else {
-      return e
-    }
-  }
-};
-cljs.core.spread = function spread(b) {
-  return cljs.core.truth_(null === b) ? null : cljs.core.truth_(null === cljs.core.next.call(null, b)) ? cljs.core.seq.call(null, cljs.core.first.call(null, b)) : cljs.core.truth_("\ufdd0'else") ? cljs.core.cons.call(null, cljs.core.first.call(null, b), spread.call(null, cljs.core.next.call(null, b))) : null
-};
-cljs.core.concat = function() {
-  var a = null, b = function() {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return null
-    })
-  }, c = function(a) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return a
-    })
-  }, d = function(b, c) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var d = cljs.core.seq.call(null, b);
-      return cljs.core.truth_(d) ? cljs.core.cons.call(null, cljs.core.first.call(null, d), a.call(null, cljs.core.rest.call(null, d), c)) : c
-    })
-  }, e = function() {
-    var b = function(b, c, d) {
-      return function m(a, b) {
-        return new cljs.core.LazySeq(null, !1, function() {
-          var c = cljs.core.seq.call(null, a);
-          return cljs.core.truth_(c) ? cljs.core.cons.call(null, cljs.core.first.call(null, c), m.call(null, cljs.core.rest.call(null, c), b)) : cljs.core.truth_(b) ? m.call(null, cljs.core.first.call(null, b), cljs.core.next.call(null, b)) : null
-        })
-      }.call(null, a.call(null, b, c), d)
-    }, c = function(a, c, d) {
-      var e = null;
-      goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return b.call(this, a, c, e)
-    };
-    c.cljs$lang$maxFixedArity = 2;
-    c.cljs$lang$applyTo = function(a) {
-      var c = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return b.call(this, c, d, a)
-    };
-    return c
-  }(), a = function(a, g, h) {
-    switch(arguments.length) {
-      case 0:
-        return b.call(this);
-      case 1:
-        return c.call(this, a);
-      case 2:
-        return d.call(this, a, g);
-      default:
-        return e.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = e.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.list_STAR_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c, d, i) {
-      return cljs.core.cons.call(null, a, cljs.core.cons.call(null, b, cljs.core.cons.call(null, c, cljs.core.cons.call(null, d, cljs.core.spread.call(null, i)))))
-    }, b = function(b, d, g, h, i) {
-      var j = null;
-      goog.isDef(i) && (j = cljs.core.array_seq(Array.prototype.slice.call(arguments, 4), 0));
-      return a.call(this, b, d, g, h, j)
-    };
-    b.cljs$lang$maxFixedArity = 4;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), h = cljs.core.first(cljs.core.next(cljs.core.next(b))), i = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(b)))), b = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(b))));
-      return a.call(this, d, g, h, i, b)
-    };
-    return b
-  }(), a = function(a, d, e, f, g) {
-    switch(arguments.length) {
-      case 1:
-        return cljs.core.seq.call(null, a);
-      case 2:
-        return cljs.core.cons.call(null, a, d);
-      case 3:
-        return cljs.core.cons.call(null, a, cljs.core.cons.call(null, d, e));
-      case 4:
-        return cljs.core.cons.call(null, a, cljs.core.cons.call(null, d, cljs.core.cons.call(null, e, f)));
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 4;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.apply = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c, d, i, j) {
-      b = cljs.core.cons.call(null, b, cljs.core.cons.call(null, c, cljs.core.cons.call(null, d, cljs.core.cons.call(null, i, cljs.core.spread.call(null, j)))));
-      c = a.cljs$lang$maxFixedArity;
-      return cljs.core.truth_(a.cljs$lang$applyTo) ? cljs.core.truth_(cljs.core.bounded_count.call(null, b, c) <= c) ? a.apply(a, cljs.core.to_array.call(null, b)) : a.cljs$lang$applyTo(b) : a.apply(a, cljs.core.to_array.call(null, b))
-    }, b = function(b, d, g, h, i, j) {
-      var k = null;
-      goog.isDef(j) && (k = cljs.core.array_seq(Array.prototype.slice.call(arguments, 5), 0));
-      return a.call(this, b, d, g, h, i, k)
-    };
-    b.cljs$lang$maxFixedArity = 5;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), g = cljs.core.first(cljs.core.next(b)), h = cljs.core.first(cljs.core.next(cljs.core.next(b))), i = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(b)))), j = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(b))))), b = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(b)))));
-      return a.call(this, d, g, h, i, j, b)
-    };
-    return b
-  }(), a = function(a, d, e, f, g, h) {
-    switch(arguments.length) {
-      case 2:
-        var i = a, j = d, k = i.cljs$lang$maxFixedArity;
-        return cljs.core.truth_(i.cljs$lang$applyTo) ? cljs.core.truth_(cljs.core.bounded_count.call(null, j, k + 1) <= k) ? i.apply(i, cljs.core.to_array.call(null, j)) : i.cljs$lang$applyTo(j) : i.apply(i, cljs.core.to_array.call(null, j));
-      case 3:
-        return i = a, j = cljs.core.list_STAR_.call(null, d, e), k = i.cljs$lang$maxFixedArity, cljs.core.truth_(i.cljs$lang$applyTo) ? cljs.core.truth_(cljs.core.bounded_count.call(null, j, k) <= k) ? i.apply(i, cljs.core.to_array.call(null, j)) : i.cljs$lang$applyTo(j) : i.apply(i, cljs.core.to_array.call(null, j));
-      case 4:
-        return i = a, j = cljs.core.list_STAR_.call(null, d, e, f), k = i.cljs$lang$maxFixedArity, cljs.core.truth_(i.cljs$lang$applyTo) ? cljs.core.truth_(cljs.core.bounded_count.call(null, j, k) <= k) ? i.apply(i, cljs.core.to_array.call(null, j)) : i.cljs$lang$applyTo(j) : i.apply(i, cljs.core.to_array.call(null, j));
-      case 5:
-        return i = a, j = cljs.core.list_STAR_.call(null, d, e, f, g), k = i.cljs$lang$maxFixedArity, cljs.core.truth_(i.cljs$lang$applyTo) ? cljs.core.truth_(cljs.core.bounded_count.call(null, j, k) <= k) ? i.apply(i, cljs.core.to_array.call(null, j)) : i.cljs$lang$applyTo(j) : i.apply(i, cljs.core.to_array.call(null, j));
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 5;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.vary_meta = function() {
-  var a = function(a, b, e) {
-    return cljs.core.with_meta.call(null, a, cljs.core.apply.call(null, b, cljs.core.meta.call(null, a), e))
-  }, b = function(b, d, e) {
-    var f = null;
-    goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-    return a.call(this, b, d, f)
-  };
-  b.cljs$lang$maxFixedArity = 2;
-  b.cljs$lang$applyTo = function(b) {
-    var d = cljs.core.first(b), e = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-    return a.call(this, d, e, b)
-  };
-  return b
-}();
-cljs.core.not_EQ_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      var g = null;
-      goog.isDef(c) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.not.call(null, cljs.core.apply.call(null, cljs.core._EQ_, a, b, g))
-    };
-    a.cljs$lang$maxFixedArity = 2;
-    a.cljs$lang$applyTo = function(a) {
-      var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return cljs.core.not.call(null, cljs.core.apply.call(null, cljs.core._EQ_, b, c, a))
-    };
-    return a
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 1:
-        return!1;
-      case 2:
-        return cljs.core.not.call(null, cljs.core._EQ_.call(null, a, d));
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.not_empty = function(a) {
-  return cljs.core.truth_(cljs.core.seq.call(null, a)) ? a : null
-};
-cljs.core.every_QMARK_ = function(a, b) {
-  for(;;) {
-    if(cljs.core.truth_(null === cljs.core.seq.call(null, b))) {
-      return!0
-    }
-    if(cljs.core.truth_(a.call(null, cljs.core.first.call(null, b)))) {
-      var c = a, d = cljs.core.next.call(null, b), a = c, b = d
-    }else {
-      return cljs.core.truth_("\ufdd0'else") ? !1 : null
-    }
-  }
-};
-cljs.core.not_every_QMARK_ = function(a, b) {
-  return cljs.core.not.call(null, cljs.core.every_QMARK_.call(null, a, b))
-};
-cljs.core.some = function(a, b) {
-  for(;;) {
-    if(cljs.core.truth_(cljs.core.seq.call(null, b))) {
-      var c = a.call(null, cljs.core.first.call(null, b));
-      if(cljs.core.truth_(c)) {
-        return c
-      }
-      var c = a, d = cljs.core.next.call(null, b), a = c, b = d
-    }else {
-      return null
-    }
-  }
-};
-cljs.core.not_any_QMARK_ = function(a, b) {
-  return cljs.core.not.call(null, cljs.core.some.call(null, a, b))
-};
-cljs.core.even_QMARK_ = function(a) {
-  if(cljs.core.truth_(cljs.core.integer_QMARK_.call(null, a))) {
-    return 0 === (a & 1)
-  }
-  throw Error(cljs.core.str.call(null, "Argument must be an integer: ", a));
-};
-cljs.core.odd_QMARK_ = function(a) {
-  return cljs.core.not.call(null, cljs.core.even_QMARK_.call(null, a))
-};
-cljs.core.identity = function(a) {
-  return a
-};
-cljs.core.complement = function(a) {
-  return function() {
-    var b = null, c = function() {
-      var b = function(b, c, d) {
-        var h = null;
-        goog.isDef(d) && (h = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-        return cljs.core.not.call(null, cljs.core.apply.call(null, a, b, c, h))
-      };
-      b.cljs$lang$maxFixedArity = 2;
-      b.cljs$lang$applyTo = function(b) {
-        var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), b = cljs.core.rest(cljs.core.next(b));
-        return cljs.core.not.call(null, cljs.core.apply.call(null, a, c, d, b))
-      };
-      return b
-    }(), b = function(b, e, f) {
-      switch(arguments.length) {
-        case 0:
-          return cljs.core.not.call(null, a.call(null));
-        case 1:
-          return cljs.core.not.call(null, a.call(null, b));
-        case 2:
-          return cljs.core.not.call(null, a.call(null, b, e));
-        default:
-          return c.apply(this, arguments)
-      }
-      throw"Invalid arity: " + arguments.length;
-    };
-    b.cljs$lang$maxFixedArity = 2;
-    b.cljs$lang$applyTo = c.cljs$lang$applyTo;
-    return b
-  }()
-};
-cljs.core.constantly = function(a) {
-  return function() {
-    var b = function(b) {
-      goog.isDef(b) && cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0);
-      return a
-    };
-    b.cljs$lang$maxFixedArity = 0;
-    b.cljs$lang$applyTo = function(b) {
-      cljs.core.seq(b);
-      return a
-    };
-    return b
-  }()
-};
-cljs.core.comp = function() {
-  var a = null, b = function(a, b) {
-    return function() {
-      var c = null, d = function() {
-        var c = function(c, d, g, h) {
-          var i = null;
-          goog.isDef(h) && (i = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return a.call(null, cljs.core.apply.call(null, b, c, d, g, i))
-        };
-        c.cljs$lang$maxFixedArity = 3;
-        c.cljs$lang$applyTo = function(c) {
-          var d = cljs.core.first(c), g = cljs.core.first(cljs.core.next(c)), h = cljs.core.first(cljs.core.next(cljs.core.next(c))), c = cljs.core.rest(cljs.core.next(cljs.core.next(c)));
-          return a.call(null, cljs.core.apply.call(null, b, d, g, h, c))
-        };
-        return c
-      }(), c = function(c, g, k, m) {
-        switch(arguments.length) {
-          case 0:
-            return a.call(null, b.call(null));
-          case 1:
-            return a.call(null, b.call(null, c));
-          case 2:
-            return a.call(null, b.call(null, c, g));
-          case 3:
-            return a.call(null, b.call(null, c, g, k));
-          default:
-            return d.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      c.cljs$lang$maxFixedArity = 3;
-      c.cljs$lang$applyTo = d.cljs$lang$applyTo;
-      return c
-    }()
-  }, c = function(a, b, c) {
-    return function() {
-      var d = null, i = function() {
-        var d = function(d, h, i, j) {
-          var n = null;
-          goog.isDef(j) && (n = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return a.call(null, b.call(null, cljs.core.apply.call(null, c, d, h, i, n)))
-        };
-        d.cljs$lang$maxFixedArity = 3;
-        d.cljs$lang$applyTo = function(d) {
-          var h = cljs.core.first(d), i = cljs.core.first(cljs.core.next(d)), j = cljs.core.first(cljs.core.next(cljs.core.next(d))), d = cljs.core.rest(cljs.core.next(cljs.core.next(d)));
-          return a.call(null, b.call(null, cljs.core.apply.call(null, c, h, i, j, d)))
-        };
-        return d
-      }(), d = function(d, h, m, l) {
-        switch(arguments.length) {
-          case 0:
-            return a.call(null, b.call(null, c.call(null)));
-          case 1:
-            return a.call(null, b.call(null, c.call(null, d)));
-          case 2:
-            return a.call(null, b.call(null, c.call(null, d, h)));
-          case 3:
-            return a.call(null, b.call(null, c.call(null, d, h, m)));
-          default:
-            return i.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      d.cljs$lang$maxFixedArity = 3;
-      d.cljs$lang$applyTo = i.cljs$lang$applyTo;
-      return d
-    }()
-  }, d = function() {
-    var a = function(a, b, c, d) {
-      var e = cljs.core.reverse.call(null, cljs.core.list_STAR_.call(null, a, b, c, d));
-      return function() {
-        var a = function(a) {
-          for(var a = cljs.core.apply.call(null, cljs.core.first.call(null, e), a), b = cljs.core.next.call(null, e);;) {
-            if(cljs.core.truth_(b)) {
-              a = cljs.core.first.call(null, b).call(null, a), b = cljs.core.next.call(null, b)
-            }else {
-              return a
-            }
-          }
-        }, b = function(b) {
-          var c = null;
-          goog.isDef(b) && (c = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-          return a.call(this, c)
-        };
-        b.cljs$lang$maxFixedArity = 0;
-        b.cljs$lang$applyTo = function(b) {
-          b = cljs.core.seq(b);
-          return a.call(this, b)
-        };
-        return b
-      }()
-    }, b = function(b, c, d, f) {
-      var k = null;
-      goog.isDef(f) && (k = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return a.call(this, b, c, d, k)
-    };
-    b.cljs$lang$maxFixedArity = 3;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), f = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-      return a.call(this, c, d, f, b)
-    };
-    return b
-  }(), a = function(a, f, g, h) {
-    switch(arguments.length) {
-      case 0:
-        return cljs.core.identity;
-      case 1:
-        return a;
-      case 2:
-        return b.call(this, a, f);
-      case 3:
-        return c.call(this, a, f, g);
-      default:
-        return d.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = d.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.partial = function() {
-  var a = null, b = function(a, b) {
-    return function() {
-      var c = function(c) {
-        var d = null;
-        goog.isDef(c) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-        return cljs.core.apply.call(null, a, b, d)
-      };
-      c.cljs$lang$maxFixedArity = 0;
-      c.cljs$lang$applyTo = function(c) {
-        c = cljs.core.seq(c);
-        return cljs.core.apply.call(null, a, b, c)
-      };
-      return c
-    }()
-  }, c = function(a, b, c) {
-    return function() {
-      var d = function(d) {
-        var e = null;
-        goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-        return cljs.core.apply.call(null, a, b, c, e)
-      };
-      d.cljs$lang$maxFixedArity = 0;
-      d.cljs$lang$applyTo = function(d) {
-        d = cljs.core.seq(d);
-        return cljs.core.apply.call(null, a, b, c, d)
-      };
-      return d
-    }()
-  }, d = function(a, b, c, d) {
-    return function() {
-      var e = function(e) {
-        var j = null;
-        goog.isDef(e) && (j = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-        return cljs.core.apply.call(null, a, b, c, d, j)
-      };
-      e.cljs$lang$maxFixedArity = 0;
-      e.cljs$lang$applyTo = function(e) {
-        e = cljs.core.seq(e);
-        return cljs.core.apply.call(null, a, b, c, d, e)
-      };
-      return e
-    }()
-  }, e = function() {
-    var a = function(a, b, c, d, e) {
-      return function() {
-        var f = function(f) {
-          return cljs.core.apply.call(null, a, b, c, d, cljs.core.concat.call(null, e, f))
-        }, g = function(a) {
-          var b = null;
-          goog.isDef(a) && (b = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-          return f.call(this, b)
-        };
-        g.cljs$lang$maxFixedArity = 0;
-        g.cljs$lang$applyTo = function(a) {
-          a = cljs.core.seq(a);
-          return f.call(this, a)
-        };
-        return g
-      }()
-    }, b = function(b, c, d, e, g) {
-      var l = null;
-      goog.isDef(g) && (l = cljs.core.array_seq(Array.prototype.slice.call(arguments, 4), 0));
-      return a.call(this, b, c, d, e, l)
-    };
-    b.cljs$lang$maxFixedArity = 4;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), e = cljs.core.first(cljs.core.next(cljs.core.next(b))), g = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(b)))), b = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(b))));
-      return a.call(this, c, d, e, g, b)
-    };
-    return b
-  }(), a = function(a, g, h, i, j) {
-    switch(arguments.length) {
-      case 2:
-        return b.call(this, a, g);
-      case 3:
-        return c.call(this, a, g, h);
-      case 4:
-        return d.call(this, a, g, h, i);
-      default:
-        return e.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 4;
-  a.cljs$lang$applyTo = e.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.fnil = function() {
-  var a = function(a, b) {
-    return function() {
-      var c = null, g = function() {
-        var c = function(c, f, g, h) {
-          var l = null;
-          goog.isDef(h) && (l = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return cljs.core.apply.call(null, a, cljs.core.truth_(null === c) ? b : c, f, g, l)
-        };
-        c.cljs$lang$maxFixedArity = 3;
-        c.cljs$lang$applyTo = function(c) {
-          var f = cljs.core.first(c), g = cljs.core.first(cljs.core.next(c)), h = cljs.core.first(cljs.core.next(cljs.core.next(c))), c = cljs.core.rest(cljs.core.next(cljs.core.next(c)));
-          return cljs.core.apply.call(null, a, cljs.core.truth_(null === f) ? b : f, g, h, c)
-        };
-        return c
-      }(), c = function(c, f, j, k) {
-        switch(arguments.length) {
-          case 1:
-            return a.call(null, cljs.core.truth_(null === c) ? b : c);
-          case 2:
-            return a.call(null, cljs.core.truth_(null === c) ? b : c, f);
-          case 3:
-            return a.call(null, cljs.core.truth_(null === c) ? b : c, f, j);
-          default:
-            return g.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      c.cljs$lang$maxFixedArity = 3;
-      c.cljs$lang$applyTo = g.cljs$lang$applyTo;
-      return c
-    }()
-  }, b = function(a, b, c) {
-    return function() {
-      var g = null, h = function() {
-        var g = function(g, h, i, j) {
-          return cljs.core.apply.call(null, a, cljs.core.truth_(null === g) ? b : g, cljs.core.truth_(null === h) ? c : h, i, j)
-        }, h = function(a, b, c, d) {
-          var e = null;
-          goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return g.call(this, a, b, c, e)
-        };
-        h.cljs$lang$maxFixedArity = 3;
-        h.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), d = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return g.call(this, b, c, d, a)
-        };
-        return h
-      }(), g = function(g, j, k, m) {
-        switch(arguments.length) {
-          case 2:
-            return a.call(null, cljs.core.truth_(null === g) ? b : g, cljs.core.truth_(null === j) ? c : j);
-          case 3:
-            return a.call(null, cljs.core.truth_(null === g) ? b : g, cljs.core.truth_(null === j) ? c : j, k);
-          default:
-            return h.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      g.cljs$lang$maxFixedArity = 3;
-      g.cljs$lang$applyTo = h.cljs$lang$applyTo;
-      return g
-    }()
-  }, c = function(a, b, c, g) {
-    return function() {
-      var h = null, i = function() {
-        var h = function(h, i, j, k) {
-          return cljs.core.apply.call(null, a, cljs.core.truth_(null === h) ? b : h, cljs.core.truth_(null === i) ? c : i, cljs.core.truth_(null === j) ? g : j, k)
-        }, i = function(a, b, c, d) {
-          var e = null;
-          goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return h.call(this, a, b, c, e)
-        };
-        i.cljs$lang$maxFixedArity = 3;
-        i.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), d = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return h.call(this, b, c, d, a)
-        };
-        return i
-      }(), h = function(h, k, m, l) {
-        switch(arguments.length) {
-          case 2:
-            return a.call(null, cljs.core.truth_(null === h) ? b : h, cljs.core.truth_(null === k) ? c : k);
-          case 3:
-            return a.call(null, cljs.core.truth_(null === h) ? b : h, cljs.core.truth_(null === k) ? c : k, cljs.core.truth_(null === m) ? g : m);
-          default:
-            return i.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      h.cljs$lang$maxFixedArity = 3;
-      h.cljs$lang$applyTo = i.cljs$lang$applyTo;
-      return h
-    }()
-  };
-  return function(d, e, f, g) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(this, d, e);
-      case 3:
-        return b.call(this, d, e, f);
-      case 4:
-        return c.call(this, d, e, f, g)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.map_indexed = function(a, b) {
-  return function d(b, f) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var g = cljs.core.seq.call(null, f);
-      return cljs.core.truth_(g) ? cljs.core.cons.call(null, a.call(null, b, cljs.core.first.call(null, g)), d.call(null, b + 1, cljs.core.rest.call(null, g))) : null
-    })
-  }.call(null, 0, b)
-};
-cljs.core.keep = function keep(b, c) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    var d = cljs.core.seq.call(null, c);
-    if(cljs.core.truth_(d)) {
-      var e = b.call(null, cljs.core.first.call(null, d));
-      return cljs.core.truth_(e === null) ? keep.call(null, b, cljs.core.rest.call(null, d)) : cljs.core.cons.call(null, e, keep.call(null, b, cljs.core.rest.call(null, d)))
-    }
-    return null
-  })
-};
-cljs.core.keep_indexed = function(a, b) {
-  return function d(b, f) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var g = cljs.core.seq.call(null, f);
-      if(cljs.core.truth_(g)) {
-        var h = a.call(null, b, cljs.core.first.call(null, g));
-        return cljs.core.truth_(h === null) ? d.call(null, b + 1, cljs.core.rest.call(null, g)) : cljs.core.cons.call(null, h, d.call(null, b + 1, cljs.core.rest.call(null, g)))
-      }
-      return null
-    })
-  }.call(null, 0, b)
-};
-cljs.core.every_pred = function() {
-  var a = null, b = function(a) {
-    return function() {
-      var b = null, c = function(b, c) {
-        return cljs.core.boolean$.call(null, function() {
-          var d = a.call(null, b);
-          return cljs.core.truth_(d) ? a.call(null, c) : d
-        }())
-      }, d = function(b, c, d) {
-        return cljs.core.boolean$.call(null, function() {
-          var e = a.call(null, b);
-          return cljs.core.truth_(e) ? (e = a.call(null, c), cljs.core.truth_(e) ? a.call(null, d) : e) : e
-        }())
-      }, e = function() {
-        var c = function(c, d, e, h) {
-          return cljs.core.boolean$.call(null, function() {
-            var i = b.call(null, c, d, e);
-            return cljs.core.truth_(i) ? cljs.core.every_QMARK_.call(null, a, h) : i
-          }())
-        }, d = function(a, b, d, e) {
-          var f = null;
-          goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return c.call(this, a, b, d, f)
-        };
-        d.cljs$lang$maxFixedArity = 3;
-        d.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return c.call(this, b, d, e, a)
-        };
-        return d
-      }(), b = function(b, g, l, o) {
-        switch(arguments.length) {
-          case 0:
-            return!0;
-          case 1:
-            return cljs.core.boolean$.call(null, a.call(null, b));
-          case 2:
-            return c.call(this, b, g);
-          case 3:
-            return d.call(this, b, g, l);
-          default:
-            return e.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      b.cljs$lang$maxFixedArity = 3;
-      b.cljs$lang$applyTo = e.cljs$lang$applyTo;
-      return b
-    }()
-  }, c = function(a, b) {
-    return function() {
-      var c = null, d = function(c) {
-        return cljs.core.boolean$.call(null, function() {
-          var d = a.call(null, c);
-          return cljs.core.truth_(d) ? b.call(null, c) : d
-        }())
-      }, e = function(c, d) {
-        return cljs.core.boolean$.call(null, function() {
-          var e = a.call(null, c);
-          return cljs.core.truth_(e) && (e = a.call(null, d), cljs.core.truth_(e)) ? (e = b.call(null, c), cljs.core.truth_(e) ? b.call(null, d) : e) : e
-        }())
-      }, k = function(c, d, e) {
-        return cljs.core.boolean$.call(null, function() {
-          var h = a.call(null, c);
-          return cljs.core.truth_(h) && (h = a.call(null, d), cljs.core.truth_(h) && (h = a.call(null, e), cljs.core.truth_(h) && (h = b.call(null, c), cljs.core.truth_(h)))) ? (h = b.call(null, d), cljs.core.truth_(h) ? b.call(null, e) : h) : h
-        }())
-      }, m = function() {
-        var d = function(d, e, i, j) {
-          return cljs.core.boolean$.call(null, function() {
-            var k = c.call(null, d, e, i);
-            return cljs.core.truth_(k) ? cljs.core.every_QMARK_.call(null, function(c) {
-              var d = a.call(null, c);
-              return cljs.core.truth_(d) ? b.call(null, c) : d
-            }, j) : k
-          }())
-        }, e = function(a, b, c, e) {
-          var f = null;
-          goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return d.call(this, a, b, c, f)
-        };
-        e.cljs$lang$maxFixedArity = 3;
-        e.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return d.call(this, b, c, e, a)
-        };
-        return e
-      }(), c = function(a, b, c, f) {
-        switch(arguments.length) {
-          case 0:
-            return!0;
-          case 1:
-            return d.call(this, a);
-          case 2:
-            return e.call(this, a, b);
-          case 3:
-            return k.call(this, a, b, c);
-          default:
-            return m.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      c.cljs$lang$maxFixedArity = 3;
-      c.cljs$lang$applyTo = m.cljs$lang$applyTo;
-      return c
-    }()
-  }, d = function(a, b, c) {
-    return function() {
-      var d = null, e = function(d) {
-        return cljs.core.boolean$.call(null, function() {
-          var e = a.call(null, d);
-          return cljs.core.truth_(e) ? (e = b.call(null, d), cljs.core.truth_(e) ? c.call(null, d) : e) : e
-        }())
-      }, k = function(d, e) {
-        return cljs.core.boolean$.call(null, function() {
-          var i = a.call(null, d);
-          return cljs.core.truth_(i) && (i = b.call(null, d), cljs.core.truth_(i) && (i = c.call(null, d), cljs.core.truth_(i) && (i = a.call(null, e), cljs.core.truth_(i)))) ? (i = b.call(null, e), cljs.core.truth_(i) ? c.call(null, e) : i) : i
-        }())
-      }, m = function(d, e, i) {
-        return cljs.core.boolean$.call(null, function() {
-          var j = a.call(null, d);
-          return cljs.core.truth_(j) && (j = b.call(null, d), cljs.core.truth_(j) && (j = c.call(null, d), cljs.core.truth_(j) && (j = a.call(null, e), cljs.core.truth_(j) && (j = b.call(null, e), cljs.core.truth_(j) && (j = c.call(null, e), cljs.core.truth_(j) && (j = a.call(null, i), cljs.core.truth_(j))))))) ? (j = b.call(null, i), cljs.core.truth_(j) ? c.call(null, i) : j) : j
-        }())
-      }, l = function() {
-        var e = function(e, j, k, l) {
-          return cljs.core.boolean$.call(null, function() {
-            var m = d.call(null, e, j, k);
-            return cljs.core.truth_(m) ? cljs.core.every_QMARK_.call(null, function(d) {
-              var e = a.call(null, d);
-              return cljs.core.truth_(e) ? (e = b.call(null, d), cljs.core.truth_(e) ? c.call(null, d) : e) : e
-            }, l) : m
-          }())
-        }, j = function(a, b, c, d) {
-          var f = null;
-          goog.isDef(d) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return e.call(this, a, b, c, f)
-        };
-        j.cljs$lang$maxFixedArity = 3;
-        j.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), d = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return e.call(this, b, c, d, a)
-        };
-        return j
-      }(), d = function(a, b, c, d) {
-        switch(arguments.length) {
-          case 0:
-            return!0;
-          case 1:
-            return e.call(this, a);
-          case 2:
-            return k.call(this, a, b);
-          case 3:
-            return m.call(this, a, b, c);
-          default:
-            return l.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      d.cljs$lang$maxFixedArity = 3;
-      d.cljs$lang$applyTo = l.cljs$lang$applyTo;
-      return d
-    }()
-  }, e = function() {
-    var a = function(a, b, c, d) {
-      var e = cljs.core.list_STAR_.call(null, a, b, c, d);
-      return function() {
-        var a = null, b = function(a) {
-          return cljs.core.every_QMARK_.call(null, function(b) {
-            return b.call(null, a)
-          }, e)
-        }, c = function(a, b) {
-          return cljs.core.every_QMARK_.call(null, function(c) {
-            var d = c.call(null, a);
-            return cljs.core.truth_(d) ? c.call(null, b) : d
-          }, e)
-        }, d = function(a, b, c) {
-          return cljs.core.every_QMARK_.call(null, function(d) {
-            var e = d.call(null, a);
-            return cljs.core.truth_(e) ? (e = d.call(null, b), cljs.core.truth_(e) ? d.call(null, c) : e) : e
-          }, e)
-        }, f = function() {
-          var b = function(b, c, d, f) {
-            return cljs.core.boolean$.call(null, function() {
-              var g = a.call(null, b, c, d);
-              return cljs.core.truth_(g) ? cljs.core.every_QMARK_.call(null, function(a) {
-                return cljs.core.every_QMARK_.call(null, a, f)
-              }, e) : g
-            }())
-          }, c = function(a, c, d, e) {
-            var f = null;
-            goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-            return b.call(this, a, c, d, f)
-          };
-          c.cljs$lang$maxFixedArity = 3;
-          c.cljs$lang$applyTo = function(a) {
-            var c = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-            return b.call(this, c, d, e, a)
-          };
-          return c
-        }(), a = function(a, e, g, h) {
-          switch(arguments.length) {
-            case 0:
-              return!0;
-            case 1:
-              return b.call(this, a);
-            case 2:
-              return c.call(this, a, e);
-            case 3:
-              return d.call(this, a, e, g);
-            default:
-              return f.apply(this, arguments)
-          }
-          throw"Invalid arity: " + arguments.length;
-        };
-        a.cljs$lang$maxFixedArity = 3;
-        a.cljs$lang$applyTo = f.cljs$lang$applyTo;
-        return a
-      }()
-    }, b = function(b, c, d, e) {
-      var g = null;
-      goog.isDef(e) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return a.call(this, b, c, d, g)
-    };
-    b.cljs$lang$maxFixedArity = 3;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), e = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-      return a.call(this, c, d, e, b)
-    };
-    return b
-  }(), a = function(a, g, h, i) {
-    switch(arguments.length) {
-      case 1:
-        return b.call(this, a);
-      case 2:
-        return c.call(this, a, g);
-      case 3:
-        return d.call(this, a, g, h);
-      default:
-        return e.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = e.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.some_fn = function() {
-  var a = null, b = function(a) {
-    return function() {
-      var b = null, c = function() {
-        var c = function(c, d, e, h) {
-          c = b.call(null, c, d, e);
-          return cljs.core.truth_(c) ? c : cljs.core.some.call(null, a, h)
-        }, d = function(a, b, d, e) {
-          var f = null;
-          goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return c.call(this, a, b, d, f)
-        };
-        d.cljs$lang$maxFixedArity = 3;
-        d.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return c.call(this, b, d, e, a)
-        };
-        return d
-      }(), b = function(b, d, e, g) {
-        switch(arguments.length) {
-          case 0:
-            return null;
-          case 1:
-            return a.call(null, b);
-          case 2:
-            var l = d, o = a.call(null, b);
-            return cljs.core.truth_(o) ? o : a.call(null, l);
-          case 3:
-            var o = d, l = e, n = a.call(null, b);
-            cljs.core.truth_(n) ? l = n : (o = a.call(null, o), l = cljs.core.truth_(o) ? o : a.call(null, l));
-            return l;
-          default:
-            return c.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      b.cljs$lang$maxFixedArity = 3;
-      b.cljs$lang$applyTo = c.cljs$lang$applyTo;
-      return b
-    }()
-  }, c = function(a, b) {
-    return function() {
-      var c = null, d = function(c, d, e) {
-        var h = a.call(null, c);
-        if(cljs.core.truth_(h)) {
-          return h
-        }
-        h = a.call(null, d);
-        if(cljs.core.truth_(h)) {
-          return h
-        }
-        h = a.call(null, e);
-        if(cljs.core.truth_(h)) {
-          return h
-        }
-        c = b.call(null, c);
-        if(cljs.core.truth_(c)) {
-          return c
-        }
-        d = b.call(null, d);
-        return cljs.core.truth_(d) ? d : b.call(null, e)
-      }, e = function() {
-        var d = function(d, e, i, j) {
-          d = c.call(null, d, e, i);
-          return cljs.core.truth_(d) ? d : cljs.core.some.call(null, function(c) {
-            var d = a.call(null, c);
-            return cljs.core.truth_(d) ? d : b.call(null, c)
-          }, j)
-        }, e = function(a, b, c, e) {
-          var f = null;
-          goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return d.call(this, a, b, c, f)
-        };
-        e.cljs$lang$maxFixedArity = 3;
-        e.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return d.call(this, b, c, e, a)
-        };
-        return e
-      }(), c = function(c, h, l, o) {
-        switch(arguments.length) {
-          case 0:
-            return null;
-          case 1:
-            var n = c, q = a.call(null, n);
-            return cljs.core.truth_(q) ? q : b.call(null, n);
-          case 2:
-            var q = c, n = h, p = a.call(null, q);
-            cljs.core.truth_(p) ? n = p : (p = a.call(null, n), cljs.core.truth_(p) ? n = p : (q = b.call(null, q), n = cljs.core.truth_(q) ? q : b.call(null, n)));
-            return n;
-          case 3:
-            return d.call(this, c, h, l);
-          default:
-            return e.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      c.cljs$lang$maxFixedArity = 3;
-      c.cljs$lang$applyTo = e.cljs$lang$applyTo;
-      return c
-    }()
-  }, d = function(a, b, c) {
-    return function() {
-      var d = null, e = function(d, e) {
-        var i = a.call(null, d);
-        if(cljs.core.truth_(i)) {
-          return i
-        }
-        i = b.call(null, d);
-        if(cljs.core.truth_(i)) {
-          return i
-        }
-        i = c.call(null, d);
-        if(cljs.core.truth_(i)) {
-          return i
-        }
-        i = a.call(null, e);
-        if(cljs.core.truth_(i)) {
-          return i
-        }
-        i = b.call(null, e);
-        return cljs.core.truth_(i) ? i : c.call(null, e)
-      }, k = function(d, e, i) {
-        var j = a.call(null, d);
-        if(cljs.core.truth_(j)) {
-          return j
-        }
-        j = b.call(null, d);
-        if(cljs.core.truth_(j)) {
-          return j
-        }
-        d = c.call(null, d);
-        if(cljs.core.truth_(d)) {
-          return d
-        }
-        d = a.call(null, e);
-        if(cljs.core.truth_(d)) {
-          return d
-        }
-        d = b.call(null, e);
-        if(cljs.core.truth_(d)) {
-          return d
-        }
-        e = c.call(null, e);
-        if(cljs.core.truth_(e)) {
-          return e
-        }
-        e = a.call(null, i);
-        if(cljs.core.truth_(e)) {
-          return e
-        }
-        e = b.call(null, i);
-        return cljs.core.truth_(e) ? e : c.call(null, i)
-      }, m = function() {
-        var e = function(e, j, k, m) {
-          e = d.call(null, e, j, k);
-          return cljs.core.truth_(e) ? e : cljs.core.some.call(null, function(d) {
-            var e = a.call(null, d);
-            if(cljs.core.truth_(e)) {
-              return e
-            }
-            e = b.call(null, d);
-            return cljs.core.truth_(e) ? e : c.call(null, d)
-          }, m)
-        }, j = function(a, b, c, d) {
-          var f = null;
-          goog.isDef(d) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return e.call(this, a, b, c, f)
-        };
-        j.cljs$lang$maxFixedArity = 3;
-        j.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), d = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return e.call(this, b, c, d, a)
-        };
-        return j
-      }(), d = function(d, i, n, q) {
-        switch(arguments.length) {
-          case 0:
-            return null;
-          case 1:
-            var p;
-            p = d;
-            var r = a.call(null, p);
-            cljs.core.truth_(r) ? p = r : (r = b.call(null, p), p = cljs.core.truth_(r) ? r : c.call(null, p));
-            return p;
-          case 2:
-            return e.call(this, d, i);
-          case 3:
-            return k.call(this, d, i, n);
-          default:
-            return m.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      d.cljs$lang$maxFixedArity = 3;
-      d.cljs$lang$applyTo = m.cljs$lang$applyTo;
-      return d
-    }()
-  }, e = function() {
-    var a = function(a, b, c, d) {
-      var e = cljs.core.list_STAR_.call(null, a, b, c, d);
-      return function() {
-        var a = null, b = function(a) {
-          return cljs.core.some.call(null, function(b) {
-            return b.call(null, a)
-          }, e)
-        }, c = function(a, b) {
-          return cljs.core.some.call(null, function(c) {
-            var d = c.call(null, a);
-            return cljs.core.truth_(d) ? d : c.call(null, b)
-          }, e)
-        }, d = function(a, b, c) {
-          return cljs.core.some.call(null, function(d) {
-            var e = d.call(null, a);
-            if(cljs.core.truth_(e)) {
-              return e
-            }
-            e = d.call(null, b);
-            return cljs.core.truth_(e) ? e : d.call(null, c)
-          }, e)
-        }, f = function() {
-          var b = function(b, c, d, f) {
-            b = a.call(null, b, c, d);
-            return cljs.core.truth_(b) ? b : cljs.core.some.call(null, function(a) {
-              return cljs.core.some.call(null, a, f)
-            }, e)
-          }, c = function(a, c, d, e) {
-            var f = null;
-            goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-            return b.call(this, a, c, d, f)
-          };
-          c.cljs$lang$maxFixedArity = 3;
-          c.cljs$lang$applyTo = function(a) {
-            var c = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-            return b.call(this, c, d, e, a)
-          };
-          return c
-        }(), a = function(a, e, g, h) {
-          switch(arguments.length) {
-            case 0:
-              return null;
-            case 1:
-              return b.call(this, a);
-            case 2:
-              return c.call(this, a, e);
-            case 3:
-              return d.call(this, a, e, g);
-            default:
-              return f.apply(this, arguments)
-          }
-          throw"Invalid arity: " + arguments.length;
-        };
-        a.cljs$lang$maxFixedArity = 3;
-        a.cljs$lang$applyTo = f.cljs$lang$applyTo;
-        return a
-      }()
-    }, b = function(b, c, d, e) {
-      var g = null;
-      goog.isDef(e) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return a.call(this, b, c, d, g)
-    };
-    b.cljs$lang$maxFixedArity = 3;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), e = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-      return a.call(this, c, d, e, b)
-    };
-    return b
-  }(), a = function(a, g, h, i) {
-    switch(arguments.length) {
-      case 1:
-        return b.call(this, a);
-      case 2:
-        return c.call(this, a, g);
-      case 3:
-        return d.call(this, a, g, h);
-      default:
-        return e.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = e.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.map = function() {
-  var a = null, b = function(b, c) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var d = cljs.core.seq.call(null, c);
-      return cljs.core.truth_(d) ? cljs.core.cons.call(null, b.call(null, cljs.core.first.call(null, d)), a.call(null, b, cljs.core.rest.call(null, d))) : null
-    })
-  }, c = function(b, c, d) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var e = cljs.core.seq.call(null, c), j = cljs.core.seq.call(null, d);
-      return cljs.core.truth_(cljs.core.truth_(e) ? j : e) ? cljs.core.cons.call(null, b.call(null, cljs.core.first.call(null, e), cljs.core.first.call(null, j)), a.call(null, b, cljs.core.rest.call(null, e), cljs.core.rest.call(null, j))) : null
-    })
-  }, d = function(b, c, d, e) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var j = cljs.core.seq.call(null, c), k = cljs.core.seq.call(null, d), m = cljs.core.seq.call(null, e);
-      return cljs.core.truth_(cljs.core.truth_(j) ? cljs.core.truth_(k) ? m : k : j) ? cljs.core.cons.call(null, b.call(null, cljs.core.first.call(null, j), cljs.core.first.call(null, k), cljs.core.first.call(null, m)), a.call(null, b, cljs.core.rest.call(null, j), cljs.core.rest.call(null, k), cljs.core.rest.call(null, m))) : null
-    })
-  }, e = function() {
-    var b = function(b, c, d, e, f) {
-      return a.call(null, function(a) {
-        return cljs.core.apply.call(null, b, a)
-      }, function o(b) {
-        return new cljs.core.LazySeq(null, !1, function() {
-          var c = a.call(null, cljs.core.seq, b);
-          return cljs.core.truth_(cljs.core.every_QMARK_.call(null, cljs.core.identity, c)) ? cljs.core.cons.call(null, a.call(null, cljs.core.first, c), o.call(null, a.call(null, cljs.core.rest, c))) : null
-        })
-      }.call(null, cljs.core.conj.call(null, f, e, d, c)))
-    }, c = function(a, c, d, e, g) {
-      var l = null;
-      goog.isDef(g) && (l = cljs.core.array_seq(Array.prototype.slice.call(arguments, 4), 0));
-      return b.call(this, a, c, d, e, l)
-    };
-    c.cljs$lang$maxFixedArity = 4;
-    c.cljs$lang$applyTo = function(a) {
-      var c = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), g = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(a)))), a = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(a))));
-      return b.call(this, c, d, e, g, a)
-    };
-    return c
-  }(), a = function(a, g, h, i, j) {
-    switch(arguments.length) {
-      case 2:
-        return b.call(this, a, g);
-      case 3:
-        return c.call(this, a, g, h);
-      case 4:
-        return d.call(this, a, g, h, i);
-      default:
-        return e.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 4;
-  a.cljs$lang$applyTo = e.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.take = function take(b, c) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    if(cljs.core.truth_(b > 0)) {
-      var d = cljs.core.seq.call(null, c);
-      if(cljs.core.truth_(d)) {
-        return cljs.core.cons.call(null, cljs.core.first.call(null, d), take.call(null, b - 1, cljs.core.rest.call(null, d)))
-      }
-    }
-    return null
-  })
-};
-cljs.core.drop = function(a, b) {
-  var c = function(a, b) {
-    for(;;) {
-      var c = cljs.core.seq.call(null, b);
-      if(cljs.core.truth_(function() {
-        var b = 0 < a;
-        return cljs.core.truth_(b) ? c : b
-      }())) {
-        var g = a - 1, h = cljs.core.rest.call(null, c), a = g, b = h
-      }else {
-        return c
-      }
-    }
-  };
-  return new cljs.core.LazySeq(null, !1, function() {
-    return c.call(null, a, b)
-  })
-};
-cljs.core.drop_last = function() {
-  var a = null, b = function(a, b) {
-    return cljs.core.map.call(null, function(a) {
-      return a
-    }, b, cljs.core.drop.call(null, a, b))
-  };
-  return a = function(c, d) {
-    switch(arguments.length) {
-      case 1:
-        return a.call(null, 1, c);
-      case 2:
-        return b.call(this, c, d)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.take_last = function(a, b) {
-  for(var c = cljs.core.seq.call(null, b), d = cljs.core.seq.call(null, cljs.core.drop.call(null, a, b));;) {
-    if(cljs.core.truth_(d)) {
-      c = cljs.core.next.call(null, c), d = cljs.core.next.call(null, d)
-    }else {
-      return c
-    }
-  }
-};
-cljs.core.drop_while = function(a, b) {
-  var c = function(a, b) {
-    for(;;) {
-      var c = cljs.core.seq.call(null, b);
-      if(cljs.core.truth_(function() {
-        var b = c;
-        return cljs.core.truth_(b) ? a.call(null, cljs.core.first.call(null, c)) : b
-      }())) {
-        var g = a, h = cljs.core.rest.call(null, c), a = g, b = h
-      }else {
-        return c
-      }
-    }
-  };
-  return new cljs.core.LazySeq(null, !1, function() {
-    return c.call(null, a, b)
-  })
-};
-cljs.core.cycle = function cycle(b) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    var c = cljs.core.seq.call(null, b);
-    return cljs.core.truth_(c) ? cljs.core.concat.call(null, c, cycle.call(null, c)) : null
-  })
-};
-cljs.core.split_at = function(a, b) {
-  return cljs.core.Vector.fromArray([cljs.core.take.call(null, a, b), cljs.core.drop.call(null, a, b)])
-};
-cljs.core.repeat = function() {
-  var a = null, b = function(b) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return cljs.core.cons.call(null, b, a.call(null, b))
-    })
-  };
-  return a = function(c, d) {
-    switch(arguments.length) {
-      case 1:
-        return b.call(this, c);
-      case 2:
-        return cljs.core.take.call(null, c, a.call(null, d))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.replicate = function(a, b) {
-  return cljs.core.take.call(null, a, cljs.core.repeat.call(null, b))
-};
-cljs.core.repeatedly = function() {
-  var a = null, b = function(b) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return cljs.core.cons.call(null, b.call(null), a.call(null, b))
-    })
-  };
-  return a = function(c, d) {
-    switch(arguments.length) {
-      case 1:
-        return b.call(this, c);
-      case 2:
-        return cljs.core.take.call(null, c, a.call(null, d))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.iterate = function iterate(b, c) {
-  return cljs.core.cons.call(null, c, new cljs.core.LazySeq(null, !1, function() {
-    return iterate.call(null, b, b.call(null, c))
-  }))
-};
-cljs.core.interleave = function() {
-  var a = null, b = function(b, c) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var f = cljs.core.seq.call(null, b), g = cljs.core.seq.call(null, c);
-      return cljs.core.truth_(cljs.core.truth_(f) ? g : f) ? cljs.core.cons.call(null, cljs.core.first.call(null, f), cljs.core.cons.call(null, cljs.core.first.call(null, g), a.call(null, cljs.core.rest.call(null, f), cljs.core.rest.call(null, g)))) : null
-    })
-  }, c = function() {
-    var b = function(b, c, d) {
-      return new cljs.core.LazySeq(null, !1, function() {
-        var e = cljs.core.map.call(null, cljs.core.seq, cljs.core.conj.call(null, d, c, b));
-        return cljs.core.truth_(cljs.core.every_QMARK_.call(null, cljs.core.identity, e)) ? cljs.core.concat.call(null, cljs.core.map.call(null, cljs.core.first, e), cljs.core.apply.call(null, a, cljs.core.map.call(null, cljs.core.rest, e))) : null
-      })
-    }, c = function(a, c, e) {
-      var i = null;
-      goog.isDef(e) && (i = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return b.call(this, a, c, i)
-    };
-    c.cljs$lang$maxFixedArity = 2;
-    c.cljs$lang$applyTo = function(a) {
-      var c = cljs.core.first(a), e = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return b.call(this, c, e, a)
-    };
-    return c
-  }(), a = function(a, e, f) {
-    switch(arguments.length) {
-      case 2:
-        return b.call(this, a, e);
-      default:
-        return c.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = c.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.interpose = function(a, b) {
-  return cljs.core.drop.call(null, 1, cljs.core.interleave.call(null, cljs.core.repeat.call(null, a), b))
-};
-cljs.core.flatten1 = function(a) {
-  return function c(a, e) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var f = cljs.core.seq.call(null, a);
-      return cljs.core.truth_(f) ? cljs.core.cons.call(null, cljs.core.first.call(null, f), c.call(null, cljs.core.rest.call(null, f), e)) : cljs.core.truth_(cljs.core.seq.call(null, e)) ? c.call(null, cljs.core.first.call(null, e), cljs.core.rest.call(null, e)) : null
-    })
-  }.call(null, null, a)
-};
-cljs.core.mapcat = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c) {
-      var g = null;
-      goog.isDef(c) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-      return cljs.core.flatten1.call(null, cljs.core.apply.call(null, cljs.core.map, a, b, g))
-    };
-    a.cljs$lang$maxFixedArity = 2;
-    a.cljs$lang$applyTo = function(a) {
-      var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-      return cljs.core.flatten1.call(null, cljs.core.apply.call(null, cljs.core.map, b, c, a))
-    };
-    return a
-  }(), a = function(a, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.flatten1.call(null, cljs.core.map.call(null, a, d));
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.filter = function filter(b, c) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    var d = cljs.core.seq.call(null, c);
-    if(cljs.core.truth_(d)) {
-      var e = cljs.core.first.call(null, d), d = cljs.core.rest.call(null, d);
-      return cljs.core.truth_(b.call(null, e)) ? cljs.core.cons.call(null, e, filter.call(null, b, d)) : filter.call(null, b, d)
-    }
-    return null
-  })
-};
-cljs.core.remove = function(a, b) {
-  return cljs.core.filter.call(null, cljs.core.complement.call(null, a), b)
-};
-cljs.core.tree_seq = function(a, b, c) {
-  return function e(c) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return cljs.core.cons.call(null, c, cljs.core.truth_(a.call(null, c)) ? cljs.core.mapcat.call(null, e, b.call(null, c)) : null)
-    })
-  }.call(null, c)
-};
-cljs.core.flatten = function(a) {
-  return cljs.core.filter.call(null, function(a) {
-    return cljs.core.not.call(null, cljs.core.sequential_QMARK_.call(null, a))
-  }, cljs.core.rest.call(null, cljs.core.tree_seq.call(null, cljs.core.sequential_QMARK_, cljs.core.seq, a)))
-};
-cljs.core.into = function(a, b) {
-  return cljs.core.reduce.call(null, cljs.core._conj, a, b)
-};
-cljs.core.partition = function() {
-  var a = null, b = function(b, c, f) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var g = cljs.core.seq.call(null, f);
-      if(cljs.core.truth_(g)) {
-        var h = cljs.core.take.call(null, b, g);
-        return cljs.core.truth_(cljs.core._EQ_.call(null, b, cljs.core.count.call(null, h))) ? cljs.core.cons.call(null, h, a.call(null, b, c, cljs.core.drop.call(null, c, g))) : null
-      }
-      return null
-    })
-  }, c = function(b, c, f, g) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var h = cljs.core.seq.call(null, g);
-      if(cljs.core.truth_(h)) {
-        var i = cljs.core.take.call(null, b, h);
-        return cljs.core.truth_(cljs.core._EQ_.call(null, b, cljs.core.count.call(null, i))) ? cljs.core.cons.call(null, i, a.call(null, b, c, f, cljs.core.drop.call(null, c, h))) : cljs.core.list.call(null, cljs.core.take.call(null, b, cljs.core.concat.call(null, i, f)))
-      }
-      return null
-    })
-  };
-  return a = function(d, e, f, g) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(null, d, d, e);
-      case 3:
-        return b.call(this, d, e, f);
-      case 4:
-        return c.call(this, d, e, f, g)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.get_in = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.reduce.call(null, cljs.core.get, a, b);
-      case 3:
-        var d;
-        a: {
-          for(var e = cljs.core.lookup_sentinel, f = a, g = cljs.core.seq.call(null, b);;) {
-            if(cljs.core.truth_(g)) {
-              f = cljs.core.get.call(null, f, cljs.core.first.call(null, g), e);
-              if(cljs.core.truth_(e === f)) {
-                d = c;
-                break a
-              }
-              g = cljs.core.next.call(null, g)
-            }else {
-              d = f;
-              break a
-            }
-          }
-        }
-        return d
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.assoc_in = function assoc_in(b, c, d) {
-  var e = cljs.core.nth.call(null, c, 0, null), c = cljs.core.nthnext.call(null, c, 1);
-  return cljs.core.truth_(c) ? cljs.core.assoc.call(null, b, e, assoc_in.call(null, cljs.core.get.call(null, b, e), c, d)) : cljs.core.assoc.call(null, b, e, d)
-};
-cljs.core.update_in = function() {
-  var a = function(a, d, e, f) {
-    var g = cljs.core.nth.call(null, d, 0, null), d = cljs.core.nthnext.call(null, d, 1);
-    return cljs.core.truth_(d) ? cljs.core.assoc.call(null, a, g, cljs.core.apply.call(null, b, cljs.core.get.call(null, a, g), d, e, f)) : cljs.core.assoc.call(null, a, g, cljs.core.apply.call(null, e, cljs.core.get.call(null, a, g), f))
-  }, b = function(b, d, e, f) {
-    var g = null;
-    goog.isDef(f) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-    return a.call(this, b, d, e, g)
-  };
-  b.cljs$lang$maxFixedArity = 3;
-  b.cljs$lang$applyTo = function(b) {
-    var d = cljs.core.first(b), e = cljs.core.first(cljs.core.next(b)), f = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-    return a.call(this, d, e, f, b)
-  };
-  return b
-}();
-cljs.core.Vector = function(a, b) {
-  this.meta = a;
-  this.array = b
-};
-cljs.core.Vector.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Vector")
-};
-cljs.core.Vector.prototype.cljs$core$IHash$ = !0;
-cljs.core.Vector.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.Vector.prototype.cljs$core$ILookup$ = !0;
-cljs.core.Vector.prototype.cljs$core$ILookup$_lookup = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._nth.call(null, a, b, null);
-      case 3:
-        return cljs.core._nth.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Vector.prototype.cljs$core$IAssociative$ = !0;
-cljs.core.Vector.prototype.cljs$core$IAssociative$_assoc = function(a, b, c) {
-  a = cljs.core.aclone.call(null, this.array);
-  a[b] = c;
-  return new cljs.core.Vector(this.meta, a)
-};
-cljs.core.Vector.prototype.cljs$core$IFn$ = !0;
-cljs.core.Vector.prototype.call = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, this, b);
-      case 3:
-        return cljs.core._lookup.call(null, this, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Vector.prototype.cljs$core$ISequential$ = !0;
-cljs.core.Vector.prototype.cljs$core$ICollection$ = !0;
-cljs.core.Vector.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  var c = cljs.core.aclone.call(null, this.array);
-  c.push(b);
-  return new cljs.core.Vector(this.meta, c)
-};
-cljs.core.Vector.prototype.cljs$core$IReduce$ = !0;
-cljs.core.Vector.prototype.cljs$core$IReduce$_reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.ci_reduce.call(null, this.array, b);
-      case 3:
-        return cljs.core.ci_reduce.call(null, this.array, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Vector.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.Vector.prototype.cljs$core$ISeqable$_seq = function() {
-  var a = this;
-  return cljs.core.truth_(0 < a.array.length) ? function c(d) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return cljs.core.truth_(d < a.array.length) ? cljs.core.cons.call(null, a.array[d], c.call(null, d + 1)) : null
-    })
-  }.call(null, 0) : null
-};
-cljs.core.Vector.prototype.cljs$core$ICounted$ = !0;
-cljs.core.Vector.prototype.cljs$core$ICounted$_count = function() {
-  return this.array.length
-};
-cljs.core.Vector.prototype.cljs$core$IStack$ = !0;
-cljs.core.Vector.prototype.cljs$core$IStack$_peek = function() {
-  var a = this.array.length;
-  return cljs.core.truth_(0 < a) ? this.array[a - 1] : null
-};
-cljs.core.Vector.prototype.cljs$core$IStack$_pop = function() {
-  if(cljs.core.truth_(0 < this.array.length)) {
-    var a = cljs.core.aclone.call(null, this.array);
-    a.pop();
-    return new cljs.core.Vector(this.meta, a)
-  }
-  throw Error("Can't pop empty vector");
-};
-cljs.core.Vector.prototype.cljs$core$IVector$ = !0;
-cljs.core.Vector.prototype.cljs$core$IVector$_assoc_n = function(a, b, c) {
-  return cljs.core._assoc.call(null, a, b, c)
-};
-cljs.core.Vector.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.Vector.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.Vector.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.Vector.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.Vector(b, this.array)
-};
-cljs.core.Vector.prototype.cljs$core$IMeta$ = !0;
-cljs.core.Vector.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.Vector.prototype.cljs$core$IIndexed$ = !0;
-cljs.core.Vector.prototype.cljs$core$IIndexed$_nth = function() {
-  var a = function(a, b) {
-    var e = this;
-    return cljs.core.truth_(function() {
-      var a = 0 <= b;
-      return cljs.core.truth_(a) ? b < e.array.length : a
-    }()) ? e.array[b] : null
-  }, b = function(a, b, e) {
-    var f = this;
-    return cljs.core.truth_(function() {
-      var a = 0 <= b;
-      return cljs.core.truth_(a) ? b < f.array.length : a
-    }()) ? f.array[b] : e
-  };
-  return function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(this, c, d);
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Vector.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.Vector.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.Vector.EMPTY, this.meta)
-};
-cljs.core.Vector;
-cljs.core.Vector.EMPTY = new cljs.core.Vector(null, []);
-cljs.core.Vector.fromArray = function(a) {
-  return new cljs.core.Vector(null, a)
-};
-cljs.core.vec = function(a) {
-  return cljs.core.reduce.call(null, cljs.core.conj, cljs.core.Vector.EMPTY, a)
-};
-cljs.core.vector = function() {
-  var a = function(a) {
-    var c = null;
-    goog.isDef(a) && (c = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return cljs.core.vec.call(null, c)
-  };
-  a.cljs$lang$maxFixedArity = 0;
-  a.cljs$lang$applyTo = function(a) {
-    a = cljs.core.seq(a);
-    return cljs.core.vec.call(null, a)
-  };
-  return a
-}();
-cljs.core.Subvec = function(a, b, c, d) {
-  this.meta = a;
-  this.v = b;
-  this.start = c;
-  this.end = d
-};
-cljs.core.Subvec.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Subvec")
-};
-cljs.core.Subvec.prototype.cljs$core$IHash$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.Subvec.prototype.cljs$core$ILookup$ = !0;
-cljs.core.Subvec.prototype.cljs$core$ILookup$_lookup = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._nth.call(null, a, b, null);
-      case 3:
-        return cljs.core._nth.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Subvec.prototype.cljs$core$IAssociative$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IAssociative$_assoc = function(a, b, c) {
-  a = this.start + b;
-  return new cljs.core.Subvec(this.meta, cljs.core._assoc.call(null, this.v, a, c), this.start, this.end > a + 1 ? this.end : a + 1)
-};
-cljs.core.Subvec.prototype.cljs$core$IFn$ = !0;
-cljs.core.Subvec.prototype.call = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, this, b);
-      case 3:
-        return cljs.core._lookup.call(null, this, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Subvec.prototype.cljs$core$ISequential$ = !0;
-cljs.core.Subvec.prototype.cljs$core$ICollection$ = !0;
-cljs.core.Subvec.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return new cljs.core.Subvec(this.meta, cljs.core._assoc_n.call(null, this.v, this.end, b), this.start, this.end + 1)
-};
-cljs.core.Subvec.prototype.cljs$core$IReduce$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IReduce$_reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.ci_reduce.call(null, a, b);
-      case 3:
-        return cljs.core.ci_reduce.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Subvec.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.Subvec.prototype.cljs$core$ISeqable$_seq = function() {
-  var a = this;
-  return function c(d) {
-    return cljs.core.truth_(cljs.core._EQ_.call(null, d, a.end)) ? null : cljs.core.cons.call(null, cljs.core._nth.call(null, a.v, d), new cljs.core.LazySeq(null, !1, function() {
-      return c.call(null, d + 1)
-    }))
-  }.call(null, a.start)
-};
-cljs.core.Subvec.prototype.cljs$core$ICounted$ = !0;
-cljs.core.Subvec.prototype.cljs$core$ICounted$_count = function() {
-  return this.end - this.start
-};
-cljs.core.Subvec.prototype.cljs$core$IStack$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IStack$_peek = function() {
-  return cljs.core._nth.call(null, this.v, this.end - 1)
-};
-cljs.core.Subvec.prototype.cljs$core$IStack$_pop = function() {
-  if(cljs.core.truth_(cljs.core._EQ_.call(null, this.start, this.end))) {
-    throw Error("Can't pop empty vector");
-  }
-  return new cljs.core.Subvec(this.meta, this.v, this.start, this.end - 1)
-};
-cljs.core.Subvec.prototype.cljs$core$IVector$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IVector$_assoc_n = function(a, b, c) {
-  return cljs.core._assoc.call(null, a, b, c)
-};
-cljs.core.Subvec.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.Subvec.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.Subvec(b, this.v, this.start, this.end)
-};
-cljs.core.Subvec.prototype.cljs$core$IMeta$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.Subvec.prototype.cljs$core$IIndexed$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IIndexed$_nth = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._nth.call(null, this.v, this.start + b);
-      case 3:
-        return cljs.core._nth.call(null, this.v, this.start + b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Subvec.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.Vector.EMPTY, this.meta)
-};
-cljs.core.Subvec;
-cljs.core.subvec = function() {
-  var a = null;
-  return a = function(b, c, d) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(null, b, c, cljs.core.count.call(null, b));
-      case 3:
-        return new cljs.core.Subvec(null, b, c, d)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.PersistentQueueSeq = function(a, b, c) {
-  this.meta = a;
-  this.front = b;
-  this.rear = c
-};
-cljs.core.PersistentQueueSeq.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.PersistentQueueSeq")
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeqable$_seq = function(a) {
-  return a
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IHash$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISequential$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.List.EMPTY, this.meta)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ICollection$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return cljs.core.cons.call(null, b, a)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeq$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeq$_first = function() {
-  return cljs.core._first.call(null, this.front)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeq$_rest = function(a) {
-  var b = cljs.core.next.call(null, this.front);
-  return cljs.core.truth_(b) ? new cljs.core.PersistentQueueSeq(this.meta, b, this.rear) : cljs.core.truth_(null === this.rear) ? cljs.core._empty.call(null, a) : new cljs.core.PersistentQueueSeq(this.meta, this.rear, null)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IMeta$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.PersistentQueueSeq(b, this.front, this.rear)
-};
-cljs.core.PersistentQueueSeq;
-cljs.core.PersistentQueue = function(a, b, c, d) {
-  this.meta = a;
-  this.count = b;
-  this.front = c;
-  this.rear = d
-};
-cljs.core.PersistentQueue.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.PersistentQueue")
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IHash$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.PersistentQueue.prototype.cljs$core$ISequential$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$ICollection$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  var c = this;
-  return cljs.core.truth_(c.front) ? new cljs.core.PersistentQueue(c.meta, c.count + 1, c.front, cljs.core.conj.call(null, function() {
-    var a = c.rear;
-    return cljs.core.truth_(a) ? a : cljs.core.Vector.fromArray([])
-  }(), b)) : new cljs.core.PersistentQueue(c.meta, c.count + 1, cljs.core.conj.call(null, c.front, b), cljs.core.Vector.fromArray([]))
-};
-cljs.core.PersistentQueue.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$ISeqable$_seq = function() {
-  var a = this, b = cljs.core.seq.call(null, a.rear);
-  return cljs.core.truth_(function() {
-    var c = a.front;
-    return cljs.core.truth_(c) ? c : b
-  }()) ? new cljs.core.PersistentQueueSeq(null, a.front, cljs.core.seq.call(null, b)) : cljs.core.List.EMPTY
-};
-cljs.core.PersistentQueue.prototype.cljs$core$ICounted$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$ICounted$_count = function() {
-  return this.count
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IStack$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$IStack$_peek = function() {
-  return cljs.core._first.call(null, this.front)
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IStack$_pop = function(a) {
-  return cljs.core.truth_(this.front) ? (a = cljs.core.next.call(null, this.front), cljs.core.truth_(a) ? new cljs.core.PersistentQueue(this.meta, this.count - 1, a, this.rear) : new cljs.core.PersistentQueue(this.meta, this.count - 1, cljs.core.seq.call(null, this.rear), cljs.core.Vector.fromArray([]))) : a
-};
-cljs.core.PersistentQueue.prototype.cljs$core$ISeq$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$ISeq$_first = function() {
-  return cljs.core.first.call(null, this.front)
-};
-cljs.core.PersistentQueue.prototype.cljs$core$ISeq$_rest = function(a) {
-  return cljs.core.rest.call(null, cljs.core.seq.call(null, a))
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.PersistentQueue(b, this.count, this.front, this.rear)
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IMeta$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.PersistentQueue.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.PersistentQueue.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.PersistentQueue.EMPTY
-};
-cljs.core.PersistentQueue;
-cljs.core.PersistentQueue.EMPTY = new cljs.core.PersistentQueue(null, 0, null, cljs.core.Vector.fromArray([]));
-cljs.core.NeverEquiv = function() {
-};
-cljs.core.NeverEquiv.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.NeverEquiv")
-};
-cljs.core.NeverEquiv.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.NeverEquiv.prototype.cljs$core$IEquiv$_equiv = function() {
-  return!1
-};
-cljs.core.NeverEquiv;
-cljs.core.never_equiv = new cljs.core.NeverEquiv;
-cljs.core.equiv_map = function(a, b) {
-  return cljs.core.boolean$.call(null, cljs.core.truth_(cljs.core.map_QMARK_.call(null, b)) ? cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.count.call(null, a), cljs.core.count.call(null, b))) ? cljs.core.every_QMARK_.call(null, cljs.core.identity, cljs.core.map.call(null, function(a) {
-    return cljs.core._EQ_.call(null, cljs.core.get.call(null, b, cljs.core.first.call(null, a), cljs.core.never_equiv), cljs.core.second.call(null, a))
-  }, a)) : null : null)
-};
-cljs.core.scan_array = function(a, b, c) {
-  for(var d = c.length, e = 0;;) {
-    if(cljs.core.truth_(e < d)) {
-      if(cljs.core.truth_(cljs.core._EQ_.call(null, b, c[e]))) {
-        return e
-      }
-      e += a
-    }else {
-      return null
-    }
-  }
-};
-cljs.core.obj_map_contains_key_QMARK_ = function() {
-  var a = null, b = function(a, b, e, f) {
-    return cljs.core.truth_(function() {
-      var e = goog.isString.call(null, a);
-      return cljs.core.truth_(e) ? b.hasOwnProperty(a) : e
-    }()) ? e : f
-  };
-  return a = function(c, d, e, f) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(null, c, d, !0, !1);
-      case 4:
-        return b.call(this, c, d, e, f)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.obj_map_compare_keys = function(a, b) {
-  var c = cljs.core.hash.call(null, a), d = cljs.core.hash.call(null, b);
-  return cljs.core.truth_(c < d) ? -1 : cljs.core.truth_(c > d) ? 1 : cljs.core.truth_("\ufdd0'else") ? 0 : null
-};
-cljs.core.ObjMap = function(a, b, c) {
-  this.meta = a;
-  this.keys = b;
-  this.strobj = c
-};
-cljs.core.ObjMap.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.ObjMap")
-};
-cljs.core.ObjMap.prototype.cljs$core$IHash$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.ObjMap.prototype.cljs$core$ILookup$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$ILookup$_lookup = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, a, b, null);
-      case 3:
-        return cljs.core.obj_map_contains_key_QMARK_.call(null, b, this.strobj, this.strobj[b], c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ObjMap.prototype.cljs$core$IAssociative$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IAssociative$_assoc = function(a, b, c) {
-  if(cljs.core.truth_(goog.isString.call(null, b))) {
-    var a = goog.object.clone.call(null, this.strobj), d = a.hasOwnProperty(b);
-    a[b] = c;
-    if(cljs.core.truth_(d)) {
-      return new cljs.core.ObjMap(this.meta, this.keys, a)
-    }
-    c = cljs.core.aclone.call(null, this.keys);
-    c.push(b);
-    return new cljs.core.ObjMap(this.meta, c, a)
-  }
-  return cljs.core.with_meta.call(null, cljs.core.into.call(null, cljs.core.hash_map.call(null, b, c), cljs.core.seq.call(null, a)), this.meta)
-};
-cljs.core.ObjMap.prototype.cljs$core$IAssociative$_contains_key_QMARK_ = function(a, b) {
-  return cljs.core.obj_map_contains_key_QMARK_.call(null, b, this.strobj)
-};
-cljs.core.ObjMap.prototype.cljs$core$IFn$ = !0;
-cljs.core.ObjMap.prototype.call = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, this, b);
-      case 3:
-        return cljs.core._lookup.call(null, this, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ObjMap.prototype.cljs$core$ICollection$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return cljs.core.truth_(cljs.core.vector_QMARK_.call(null, b)) ? cljs.core._assoc.call(null, a, cljs.core._nth.call(null, b, 0), cljs.core._nth.call(null, b, 1)) : cljs.core.reduce.call(null, cljs.core._conj, a, b)
-};
-cljs.core.ObjMap.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$ISeqable$_seq = function() {
-  var a = this;
-  return cljs.core.truth_(0 < a.keys.length) ? cljs.core.map.call(null, function(b) {
-    return cljs.core.vector.call(null, b, a.strobj[b])
-  }, a.keys.sort(cljs.core.obj_map_compare_keys)) : null
-};
-cljs.core.ObjMap.prototype.cljs$core$ICounted$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$ICounted$_count = function() {
-  return this.keys.length
-};
-cljs.core.ObjMap.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_map.call(null, a, b)
-};
-cljs.core.ObjMap.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.ObjMap(b, this.keys, this.strobj)
-};
-cljs.core.ObjMap.prototype.cljs$core$IMeta$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.ObjMap.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.ObjMap.EMPTY, this.meta)
-};
-cljs.core.ObjMap.prototype.cljs$core$IMap$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IMap$_dissoc = function(a, b) {
-  var c = this;
-  if(cljs.core.truth_(function() {
-    var a = goog.isString.call(null, b);
-    return cljs.core.truth_(a) ? c.strobj.hasOwnProperty(b) : a
-  }())) {
-    var d = cljs.core.aclone.call(null, c.keys), e = goog.object.clone.call(null, c.strobj);
-    d.splice(cljs.core.scan_array.call(null, 1, b, d), 1);
-    cljs.core.js_delete.call(null, e, b);
-    return new cljs.core.ObjMap(c.meta, d, e)
-  }
-  return a
-};
-cljs.core.ObjMap;
-cljs.core.ObjMap.EMPTY = new cljs.core.ObjMap(null, [], cljs.core.js_obj.call(null));
-cljs.core.ObjMap.fromObject = function(a, b) {
-  return new cljs.core.ObjMap(null, a, b)
-};
-cljs.core.HashMap = function(a, b, c) {
-  this.meta = a;
-  this.count = b;
-  this.hashobj = c
-};
-cljs.core.HashMap.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.HashMap")
-};
-cljs.core.HashMap.prototype.cljs$core$IHash$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.HashMap.prototype.cljs$core$ILookup$ = !0;
-cljs.core.HashMap.prototype.cljs$core$ILookup$_lookup = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, a, b, null);
-      case 3:
-        var d = this.hashobj[cljs.core.hash.call(null, b)], e = cljs.core.truth_(d) ? cljs.core.scan_array.call(null, 2, b, d) : null;
-        return cljs.core.truth_(e) ? d[e + 1] : c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.HashMap.prototype.cljs$core$IAssociative$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IAssociative$_assoc = function(a, b, c) {
-  var a = cljs.core.hash.call(null, b), d = this.hashobj[a];
-  if(cljs.core.truth_(d)) {
-    var d = cljs.core.aclone.call(null, d), e = goog.object.clone.call(null, this.hashobj);
-    e[a] = d;
-    a = cljs.core.scan_array.call(null, 2, b, d);
-    if(cljs.core.truth_(a)) {
-      return d[a + 1] = c, new cljs.core.HashMap(this.meta, this.count, e)
-    }
-    d.push(b, c);
-    return new cljs.core.HashMap(this.meta, this.count + 1, e)
-  }
-  d = goog.object.clone.call(null, this.hashobj);
-  d[a] = [b, c];
-  return new cljs.core.HashMap(this.meta, this.count + 1, d)
-};
-cljs.core.HashMap.prototype.cljs$core$IAssociative$_contains_key_QMARK_ = function(a, b) {
-  var c = this.hashobj[cljs.core.hash.call(null, b)], c = cljs.core.truth_(c) ? cljs.core.scan_array.call(null, 2, b, c) : null;
-  return cljs.core.truth_(c) ? !0 : !1
-};
-cljs.core.HashMap.prototype.cljs$core$IFn$ = !0;
-cljs.core.HashMap.prototype.call = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, this, b);
-      case 3:
-        return cljs.core._lookup.call(null, this, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.HashMap.prototype.cljs$core$ICollection$ = !0;
-cljs.core.HashMap.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return cljs.core.truth_(cljs.core.vector_QMARK_.call(null, b)) ? cljs.core._assoc.call(null, a, cljs.core._nth.call(null, b, 0), cljs.core._nth.call(null, b, 1)) : cljs.core.reduce.call(null, cljs.core._conj, a, b)
-};
-cljs.core.HashMap.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.HashMap.prototype.cljs$core$ISeqable$_seq = function() {
-  var a = this;
-  if(cljs.core.truth_(0 < a.count)) {
-    var b = cljs.core.js_keys.call(null, a.hashobj).sort();
-    return cljs.core.mapcat.call(null, function(b) {
-      return cljs.core.map.call(null, cljs.core.vec, cljs.core.partition.call(null, 2, a.hashobj[b]))
-    }, b)
-  }
-  return null
-};
-cljs.core.HashMap.prototype.cljs$core$ICounted$ = !0;
-cljs.core.HashMap.prototype.cljs$core$ICounted$_count = function() {
-  return this.count
-};
-cljs.core.HashMap.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_map.call(null, a, b)
-};
-cljs.core.HashMap.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.HashMap(b, this.count, this.hashobj)
-};
-cljs.core.HashMap.prototype.cljs$core$IMeta$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.HashMap.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.HashMap.EMPTY, this.meta)
-};
-cljs.core.HashMap.prototype.cljs$core$IMap$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IMap$_dissoc = function(a, b) {
-  var c = cljs.core.hash.call(null, b), d = this.hashobj[c], e = cljs.core.truth_(d) ? cljs.core.scan_array.call(null, 2, b, d) : null;
-  if(cljs.core.truth_(cljs.core.not.call(null, e))) {
-    return a
-  }
-  var f = goog.object.clone.call(null, this.hashobj);
-  cljs.core.truth_(3 > d.length) ? cljs.core.js_delete.call(null, f, c) : (d = cljs.core.aclone.call(null, d), d.splice(e, 2), f[c] = d);
-  return new cljs.core.HashMap(this.meta, this.count - 1, f)
-};
-cljs.core.HashMap;
-cljs.core.HashMap.EMPTY = new cljs.core.HashMap(null, 0, cljs.core.js_obj.call(null));
-cljs.core.HashMap.fromArrays = function(a, b) {
-  for(var c = a.length, d = 0, e = cljs.core.HashMap.EMPTY;;) {
-    if(cljs.core.truth_(d < c)) {
-      var f = d + 1, e = cljs.core.assoc.call(null, e, a[d], b[d]), d = f
-    }else {
-      return e
-    }
-  }
-};
-cljs.core.hash_map = function() {
-  var a = function(a) {
-    for(var a = cljs.core.seq.call(null, a), b = cljs.core.HashMap.EMPTY;;) {
-      if(cljs.core.truth_(a)) {
-        var e = cljs.core.nnext.call(null, a), b = cljs.core.assoc.call(null, b, cljs.core.first.call(null, a), cljs.core.second.call(null, a)), a = e
-      }else {
-        return b
-      }
-    }
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.keys = function(a) {
-  return cljs.core.seq.call(null, cljs.core.map.call(null, cljs.core.first, a))
-};
-cljs.core.vals = function(a) {
-  return cljs.core.seq.call(null, cljs.core.map.call(null, cljs.core.second, a))
-};
-cljs.core.merge = function() {
-  var a = function(a) {
-    return cljs.core.truth_(cljs.core.some.call(null, cljs.core.identity, a)) ? cljs.core.reduce.call(null, function(a, b) {
-      return cljs.core.conj.call(null, cljs.core.truth_(a) ? a : cljs.core.ObjMap.fromObject([], {}), b)
-    }, a) : null
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.merge_with = function() {
-  var a = function(a, b) {
-    if(cljs.core.truth_(cljs.core.some.call(null, cljs.core.identity, b))) {
-      var e = function(b, d) {
-        var e = cljs.core.first.call(null, d), i = cljs.core.second.call(null, d);
-        return cljs.core.truth_(cljs.core.contains_QMARK_.call(null, b, e)) ? cljs.core.assoc.call(null, b, e, a.call(null, cljs.core.get.call(null, b, e), i)) : cljs.core.assoc.call(null, b, e, i)
-      };
-      return cljs.core.reduce.call(null, function(a, b) {
-        return cljs.core.reduce.call(null, e, cljs.core.truth_(a) ? a : cljs.core.ObjMap.fromObject([], {}), cljs.core.seq.call(null, b))
-      }, b)
-    }
-    return null
-  }, b = function(b, d) {
-    var e = null;
-    goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-    return a.call(this, b, e)
-  };
-  b.cljs$lang$maxFixedArity = 1;
-  b.cljs$lang$applyTo = function(b) {
-    var d = cljs.core.first(b), b = cljs.core.rest(b);
-    return a.call(this, d, b)
-  };
-  return b
-}();
-cljs.core.select_keys = function(a, b) {
-  for(var c = cljs.core.ObjMap.fromObject([], {}), d = cljs.core.seq.call(null, b);;) {
-    if(cljs.core.truth_(d)) {
-      var e = cljs.core.first.call(null, d), f = cljs.core.get.call(null, a, e, "\ufdd0'user/not-found"), c = cljs.core.truth_(cljs.core.not_EQ_.call(null, f, "\ufdd0'user/not-found")) ? cljs.core.assoc.call(null, c, e, f) : c, d = cljs.core.next.call(null, d)
-    }else {
-      return c
-    }
-  }
-};
-cljs.core.Set = function(a, b) {
-  this.meta = a;
-  this.hash_map = b
-};
-cljs.core.Set.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Set")
-};
-cljs.core.Set.prototype.cljs$core$IHash$ = !0;
-cljs.core.Set.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.Set.prototype.cljs$core$ILookup$ = !0;
-cljs.core.Set.prototype.cljs$core$ILookup$_lookup = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, a, b, null);
-      case 3:
-        return cljs.core.truth_(cljs.core._contains_key_QMARK_.call(null, this.hash_map, b)) ? b : c
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Set.prototype.cljs$core$IFn$ = !0;
-cljs.core.Set.prototype.call = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core._lookup.call(null, this, b);
-      case 3:
-        return cljs.core._lookup.call(null, this, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Set.prototype.cljs$core$ICollection$ = !0;
-cljs.core.Set.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return new cljs.core.Set(this.meta, cljs.core.assoc.call(null, this.hash_map, b, null))
-};
-cljs.core.Set.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.Set.prototype.cljs$core$ISeqable$_seq = function() {
-  return cljs.core.keys.call(null, this.hash_map)
-};
-cljs.core.Set.prototype.cljs$core$ISet$ = !0;
-cljs.core.Set.prototype.cljs$core$ISet$_disjoin = function(a, b) {
-  return new cljs.core.Set(this.meta, cljs.core.dissoc.call(null, this.hash_map, b))
-};
-cljs.core.Set.prototype.cljs$core$ICounted$ = !0;
-cljs.core.Set.prototype.cljs$core$ICounted$_count = function(a) {
-  return cljs.core.count.call(null, cljs.core.seq.call(null, a))
-};
-cljs.core.Set.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.Set.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  var c = cljs.core.set_QMARK_.call(null, b);
-  return cljs.core.truth_(c) ? (c = cljs.core._EQ_.call(null, cljs.core.count.call(null, a), cljs.core.count.call(null, b)), cljs.core.truth_(c) ? cljs.core.every_QMARK_.call(null, function(b) {
-    return cljs.core.contains_QMARK_.call(null, a, b)
-  }, b) : c) : c
-};
-cljs.core.Set.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.Set.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.Set(b, this.hash_map)
-};
-cljs.core.Set.prototype.cljs$core$IMeta$ = !0;
-cljs.core.Set.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.Set.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.Set.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.Set.EMPTY, this.meta)
-};
-cljs.core.Set;
-cljs.core.Set.EMPTY = new cljs.core.Set(null, cljs.core.hash_map.call(null));
-cljs.core.set = function(a) {
-  for(var a = cljs.core.seq.call(null, a), b = cljs.core.Set.EMPTY;;) {
-    if(cljs.core.truth_(cljs.core.not.call(null, cljs.core.empty_QMARK_.call(null, a)))) {
-      var c = cljs.core.rest.call(null, a), b = cljs.core.conj.call(null, b, cljs.core.first.call(null, a)), a = c
-    }else {
-      return b
-    }
-  }
-};
-cljs.core.replace = function(a, b) {
-  if(cljs.core.truth_(cljs.core.vector_QMARK_.call(null, b))) {
-    var c = cljs.core.count.call(null, b);
-    return cljs.core.reduce.call(null, function(b, c) {
-      var f = cljs.core.find.call(null, a, cljs.core.nth.call(null, b, c));
-      return cljs.core.truth_(f) ? cljs.core.assoc.call(null, b, c, cljs.core.second.call(null, f)) : b
-    }, b, cljs.core.take.call(null, c, cljs.core.iterate.call(null, cljs.core.inc, 0)))
-  }
-  return cljs.core.map.call(null, function(b) {
-    var c = cljs.core.find.call(null, a, b);
-    return cljs.core.truth_(c) ? cljs.core.second.call(null, c) : b
-  }, b)
-};
-cljs.core.distinct = function(a) {
-  return function c(a, e) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      return function(a, d) {
-        for(;;) {
-          var e = a, i = cljs.core.nth.call(null, e, 0, null), e = cljs.core.seq.call(null, e);
-          if(cljs.core.truth_(e)) {
-            if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null, d, i))) {
-              i = cljs.core.rest.call(null, e);
-              e = d;
-              a = i;
-              d = e
-            }else {
-              return cljs.core.cons.call(null, i, c.call(null, cljs.core.rest.call(null, e), cljs.core.conj.call(null, d, i)))
-            }
-          }else {
-            return null
-          }
-        }
-      }.call(null, a, e)
-    })
-  }.call(null, a, cljs.core.set([]))
-};
-cljs.core.butlast = function(a) {
-  for(var b = cljs.core.Vector.fromArray([]);;) {
-    if(cljs.core.truth_(cljs.core.next.call(null, a))) {
-      b = cljs.core.conj.call(null, b, cljs.core.first.call(null, a)), a = cljs.core.next.call(null, a)
-    }else {
-      return cljs.core.seq.call(null, b)
-    }
-  }
-};
-cljs.core.name = function(a) {
-  if(cljs.core.truth_(cljs.core.string_QMARK_.call(null, a))) {
-    return a
-  }
-  if(cljs.core.truth_(function() {
-    var b = cljs.core.keyword_QMARK_.call(null, a);
-    return cljs.core.truth_(b) ? b : cljs.core.symbol_QMARK_.call(null, a)
-  }())) {
-    var b = a.lastIndexOf("/");
-    return cljs.core.truth_(0 > b) ? cljs.core.subs.call(null, a, 2) : cljs.core.subs.call(null, a, b + 1)
-  }
-  if(cljs.core.truth_("\ufdd0'else")) {
-    throw Error(cljs.core.str.call(null, "Doesn't support name: ", a));
-  }
-  return null
-};
-cljs.core.namespace = function(a) {
-  if(cljs.core.truth_(function() {
-    var b = cljs.core.keyword_QMARK_.call(null, a);
-    return cljs.core.truth_(b) ? b : cljs.core.symbol_QMARK_.call(null, a)
-  }())) {
-    var b = a.lastIndexOf("/");
-    return cljs.core.truth_(-1 < b) ? cljs.core.subs.call(null, a, 2, b) : null
-  }
-  throw Error(cljs.core.str.call(null, "Doesn't support namespace: ", a));
-};
-cljs.core.zipmap = function(a, b) {
-  for(var c = cljs.core.ObjMap.fromObject([], {}), d = cljs.core.seq.call(null, a), e = cljs.core.seq.call(null, b);;) {
-    if(cljs.core.truth_(function() {
-      var a = d;
-      return cljs.core.truth_(a) ? e : a
-    }())) {
-      var c = cljs.core.assoc.call(null, c, cljs.core.first.call(null, d), cljs.core.first.call(null, e)), f = cljs.core.next.call(null, d), g = cljs.core.next.call(null, e), d = f, e = g
-    }else {
-      return c
-    }
-  }
-};
-cljs.core.max_key = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d, h) {
-      return cljs.core.reduce.call(null, function(c, d) {
-        return a.call(null, b, c, d)
-      }, a.call(null, b, c, d), h)
-    }, d = function(a, d, g, h) {
-      var i = null;
-      goog.isDef(h) && (i = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return b.call(this, a, d, g, i)
-    };
-    d.cljs$lang$maxFixedArity = 3;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), h = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-      return b.call(this, d, g, h, a)
-    };
-    return d
-  }(), a = function(a, d, e, f) {
-    switch(arguments.length) {
-      case 2:
-        return d;
-      case 3:
-        return cljs.core.truth_(a.call(null, d) > a.call(null, e)) ? d : e;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.min_key = function() {
-  var a = null, b = function() {
-    var b = function(b, c, d, h) {
-      return cljs.core.reduce.call(null, function(c, d) {
-        return a.call(null, b, c, d)
-      }, a.call(null, b, c, d), h)
-    }, d = function(a, d, g, h) {
-      var i = null;
-      goog.isDef(h) && (i = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return b.call(this, a, d, g, i)
-    };
-    d.cljs$lang$maxFixedArity = 3;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), g = cljs.core.first(cljs.core.next(a)), h = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-      return b.call(this, d, g, h, a)
-    };
-    return d
-  }(), a = function(a, d, e, f) {
-    switch(arguments.length) {
-      case 2:
-        return d;
-      case 3:
-        return cljs.core.truth_(a.call(null, d) < a.call(null, e)) ? d : e;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.partition_all = function() {
-  var a = null, b = function(b, d, e) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var f = cljs.core.seq.call(null, e);
-      return cljs.core.truth_(f) ? cljs.core.cons.call(null, cljs.core.take.call(null, b, f), a.call(null, b, d, cljs.core.drop.call(null, d, f))) : null
-    })
-  };
-  return a = function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(null, c, c, d);
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.take_while = function take_while(b, c) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    var d = cljs.core.seq.call(null, c);
-    return cljs.core.truth_(d) ? cljs.core.truth_(b.call(null, cljs.core.first.call(null, d))) ? cljs.core.cons.call(null, cljs.core.first.call(null, d), take_while.call(null, b, cljs.core.rest.call(null, d))) : null : null
-  })
-};
-cljs.core.Range = function(a, b, c, d) {
-  this.meta = a;
-  this.start = b;
-  this.end = c;
-  this.step = d
-};
-cljs.core.Range.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Range")
-};
-cljs.core.Range.prototype.cljs$core$IHash$ = !0;
-cljs.core.Range.prototype.cljs$core$IHash$_hash = function(a) {
-  return cljs.core.hash_coll.call(null, a)
-};
-cljs.core.Range.prototype.cljs$core$ISequential$ = !0;
-cljs.core.Range.prototype.cljs$core$ICollection$ = !0;
-cljs.core.Range.prototype.cljs$core$ICollection$_conj = function(a, b) {
-  return cljs.core.cons.call(null, b, a)
-};
-cljs.core.Range.prototype.cljs$core$IReduce$ = !0;
-cljs.core.Range.prototype.cljs$core$IReduce$_reduce = function() {
-  return function(a, b, c) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.ci_reduce.call(null, a, b);
-      case 3:
-        return cljs.core.ci_reduce.call(null, a, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Range.prototype.cljs$core$ISeqable$ = !0;
-cljs.core.Range.prototype.cljs$core$ISeqable$_seq = function(a) {
-  var b = cljs.core.truth_(0 < this.step) ? cljs.core._LT_ : cljs.core._GT_;
-  return cljs.core.truth_(b.call(null, this.start, this.end)) ? a : null
-};
-cljs.core.Range.prototype.cljs$core$ICounted$ = !0;
-cljs.core.Range.prototype.cljs$core$ICounted$_count = function(a) {
-  return cljs.core.truth_(cljs.core.not.call(null, cljs.core._seq.call(null, a))) ? 0 : Math.ceil.call(null, (this.end - this.start) / this.step)
-};
-cljs.core.Range.prototype.cljs$core$ISeq$ = !0;
-cljs.core.Range.prototype.cljs$core$ISeq$_first = function() {
-  return this.start
-};
-cljs.core.Range.prototype.cljs$core$ISeq$_rest = function(a) {
-  return cljs.core.truth_(cljs.core._seq.call(null, a)) ? new cljs.core.Range(this.meta, this.start + this.step, this.end, this.step) : cljs.core.list.call(null)
-};
-cljs.core.Range.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.Range.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return cljs.core.equiv_sequential.call(null, a, b)
-};
-cljs.core.Range.prototype.cljs$core$IWithMeta$ = !0;
-cljs.core.Range.prototype.cljs$core$IWithMeta$_with_meta = function(a, b) {
-  return new cljs.core.Range(b, this.start, this.end, this.step)
-};
-cljs.core.Range.prototype.cljs$core$IMeta$ = !0;
-cljs.core.Range.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.Range.prototype.cljs$core$IIndexed$ = !0;
-cljs.core.Range.prototype.cljs$core$IIndexed$_nth = function() {
-  var a = function(a, b) {
-    var e = this;
-    if(cljs.core.truth_(b < cljs.core._count.call(null, a))) {
-      return e.start + b * e.step
-    }
-    if(cljs.core.truth_(function() {
-      var a = e.start > e.end;
-      return cljs.core.truth_(a) ? cljs.core._EQ_.call(null, e.step, 0) : a
-    }())) {
-      return e.start
-    }
-    throw Error("Index out of bounds");
-  }, b = function(a, b, e) {
-    var f = this;
-    return cljs.core.truth_(b < cljs.core._count.call(null, a)) ? f.start + b * f.step : cljs.core.truth_(function() {
-      var a = f.start > f.end;
-      return cljs.core.truth_(a) ? cljs.core._EQ_.call(null, f.step, 0) : a
-    }()) ? f.start : e
-  };
-  return function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(this, c, d);
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.Range.prototype.cljs$core$IEmptyableCollection$ = !0;
-cljs.core.Range.prototype.cljs$core$IEmptyableCollection$_empty = function() {
-  return cljs.core.with_meta.call(null, cljs.core.List.EMPTY, this.meta)
-};
-cljs.core.Range;
-cljs.core.range = function() {
-  var a = null;
-  return a = function(b, c, d) {
-    switch(arguments.length) {
-      case 0:
-        return a.call(null, 0, Number.MAX_VALUE, 1);
-      case 1:
-        return a.call(null, 0, b, 1);
-      case 2:
-        return a.call(null, b, c, 1);
-      case 3:
-        return new cljs.core.Range(null, b, c, d)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.take_nth = function take_nth(b, c) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    var d = cljs.core.seq.call(null, c);
-    return cljs.core.truth_(d) ? cljs.core.cons.call(null, cljs.core.first.call(null, d), take_nth.call(null, b, cljs.core.drop.call(null, b, d))) : null
-  })
-};
-cljs.core.split_with = function(a, b) {
-  return cljs.core.Vector.fromArray([cljs.core.take_while.call(null, a, b), cljs.core.drop_while.call(null, a, b)])
-};
-cljs.core.partition_by = function partition_by(b, c) {
-  return new cljs.core.LazySeq(null, !1, function() {
-    var d = cljs.core.seq.call(null, c);
-    if(cljs.core.truth_(d)) {
-      var e = cljs.core.first.call(null, d), f = b.call(null, e), e = cljs.core.cons.call(null, e, cljs.core.take_while.call(null, function(c) {
-        return cljs.core._EQ_.call(null, f, b.call(null, c))
-      }, cljs.core.next.call(null, d)));
-      return cljs.core.cons.call(null, e, partition_by.call(null, b, cljs.core.seq.call(null, cljs.core.drop.call(null, cljs.core.count.call(null, e), d))))
-    }
-    return null
-  })
-};
-cljs.core.frequencies = function(a) {
-  return cljs.core.reduce.call(null, function(a, c) {
-    return cljs.core.assoc.call(null, a, c, cljs.core.get.call(null, a, c, 0) + 1)
-  }, cljs.core.ObjMap.fromObject([], {}), a)
-};
-cljs.core.reductions = function() {
-  var a = null, b = function(b, c) {
-    return new cljs.core.LazySeq(null, !1, function() {
-      var f = cljs.core.seq.call(null, c);
-      return cljs.core.truth_(f) ? a.call(null, b, cljs.core.first.call(null, f), cljs.core.rest.call(null, f)) : cljs.core.list.call(null, b.call(null))
-    })
-  }, c = function(b, c, f) {
-    return cljs.core.cons.call(null, c, new cljs.core.LazySeq(null, !1, function() {
-      var g = cljs.core.seq.call(null, f);
-      return cljs.core.truth_(g) ? a.call(null, b, b.call(null, c, cljs.core.first.call(null, g)), cljs.core.rest.call(null, g)) : null
-    }))
-  };
-  return a = function(a, e, f) {
-    switch(arguments.length) {
-      case 2:
-        return b.call(this, a, e);
-      case 3:
-        return c.call(this, a, e, f)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.juxt = function() {
-  var a = null, b = function(a) {
-    return function() {
-      var b = null, c = function() {
-        var b = function(b, c, d, e) {
-          var g = null;
-          goog.isDef(e) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return cljs.core.vector.call(null, cljs.core.apply.call(null, a, b, c, d, g))
-        };
-        b.cljs$lang$maxFixedArity = 3;
-        b.cljs$lang$applyTo = function(b) {
-          var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), e = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-          return cljs.core.vector.call(null, cljs.core.apply.call(null, a, c, d, e, b))
-        };
-        return b
-      }(), b = function(b, d, e, g) {
-        switch(arguments.length) {
-          case 0:
-            return cljs.core.vector.call(null, a.call(null));
-          case 1:
-            return cljs.core.vector.call(null, a.call(null, b));
-          case 2:
-            return cljs.core.vector.call(null, a.call(null, b, d));
-          case 3:
-            return cljs.core.vector.call(null, a.call(null, b, d, e));
-          default:
-            return c.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      b.cljs$lang$maxFixedArity = 3;
-      b.cljs$lang$applyTo = c.cljs$lang$applyTo;
-      return b
-    }()
-  }, c = function(a, b) {
-    return function() {
-      var c = null, d = function() {
-        var c = function(c, d, e, h) {
-          return cljs.core.vector.call(null, cljs.core.apply.call(null, a, c, d, e, h), cljs.core.apply.call(null, b, c, d, e, h))
-        }, d = function(a, b, d, e) {
-          var f = null;
-          goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return c.call(this, a, b, d, f)
-        };
-        d.cljs$lang$maxFixedArity = 3;
-        d.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return c.call(this, b, d, e, a)
-        };
-        return d
-      }(), c = function(c, e, h, l) {
-        switch(arguments.length) {
-          case 0:
-            return cljs.core.vector.call(null, a.call(null), b.call(null));
-          case 1:
-            return cljs.core.vector.call(null, a.call(null, c), b.call(null, c));
-          case 2:
-            return cljs.core.vector.call(null, a.call(null, c, e), b.call(null, c, e));
-          case 3:
-            return cljs.core.vector.call(null, a.call(null, c, e, h), b.call(null, c, e, h));
-          default:
-            return d.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      c.cljs$lang$maxFixedArity = 3;
-      c.cljs$lang$applyTo = d.cljs$lang$applyTo;
-      return c
-    }()
-  }, d = function(a, b, c) {
-    return function() {
-      var d = null, e = function() {
-        var d = function(d, e, i, j) {
-          return cljs.core.vector.call(null, cljs.core.apply.call(null, a, d, e, i, j), cljs.core.apply.call(null, b, d, e, i, j), cljs.core.apply.call(null, c, d, e, i, j))
-        }, e = function(a, b, c, e) {
-          var f = null;
-          goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-          return d.call(this, a, b, c, f)
-        };
-        e.cljs$lang$maxFixedArity = 3;
-        e.cljs$lang$applyTo = function(a) {
-          var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), e = cljs.core.first(cljs.core.next(cljs.core.next(a))), a = cljs.core.rest(cljs.core.next(cljs.core.next(a)));
-          return d.call(this, b, c, e, a)
-        };
-        return e
-      }(), d = function(d, i, l, o) {
-        switch(arguments.length) {
-          case 0:
-            return cljs.core.vector.call(null, a.call(null), b.call(null), c.call(null));
-          case 1:
-            return cljs.core.vector.call(null, a.call(null, d), b.call(null, d), c.call(null, d));
-          case 2:
-            return cljs.core.vector.call(null, a.call(null, d, i), b.call(null, d, i), c.call(null, d, i));
-          case 3:
-            return cljs.core.vector.call(null, a.call(null, d, i, l), b.call(null, d, i, l), c.call(null, d, i, l));
-          default:
-            return e.apply(this, arguments)
-        }
-        throw"Invalid arity: " + arguments.length;
-      };
-      d.cljs$lang$maxFixedArity = 3;
-      d.cljs$lang$applyTo = e.cljs$lang$applyTo;
-      return d
-    }()
-  }, e = function() {
-    var a = function(a, b, c, d) {
-      var e = cljs.core.list_STAR_.call(null, a, b, c, d);
-      return function() {
-        var a = null, b = function() {
-          return cljs.core.reduce.call(null, function(a, b) {
-            return cljs.core.conj.call(null, a, b.call(null))
-          }, cljs.core.Vector.fromArray([]), e)
-        }, c = function(a) {
-          return cljs.core.reduce.call(null, function(b, c) {
-            return cljs.core.conj.call(null, b, c.call(null, a))
-          }, cljs.core.Vector.fromArray([]), e)
-        }, d = function(a, b) {
-          return cljs.core.reduce.call(null, function(c, d) {
-            return cljs.core.conj.call(null, c, d.call(null, a, b))
-          }, cljs.core.Vector.fromArray([]), e)
-        }, f = function(a, b, c) {
-          return cljs.core.reduce.call(null, function(d, e) {
-            return cljs.core.conj.call(null, d, e.call(null, a, b, c))
-          }, cljs.core.Vector.fromArray([]), e)
-        }, g = function() {
-          var a = function(a, b, c, d) {
-            return cljs.core.reduce.call(null, function(e, f) {
-              return cljs.core.conj.call(null, e, cljs.core.apply.call(null, f, a, b, c, d))
-            }, cljs.core.Vector.fromArray([]), e)
-          }, b = function(b, c, d, e) {
-            var f = null;
-            goog.isDef(e) && (f = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-            return a.call(this, b, c, d, f)
-          };
-          b.cljs$lang$maxFixedArity = 3;
-          b.cljs$lang$applyTo = function(b) {
-            var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), e = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-            return a.call(this, c, d, e, b)
-          };
-          return b
-        }(), a = function(a, e, h, i) {
-          switch(arguments.length) {
-            case 0:
-              return b.call(this);
-            case 1:
-              return c.call(this, a);
-            case 2:
-              return d.call(this, a, e);
-            case 3:
-              return f.call(this, a, e, h);
-            default:
-              return g.apply(this, arguments)
-          }
-          throw"Invalid arity: " + arguments.length;
-        };
-        a.cljs$lang$maxFixedArity = 3;
-        a.cljs$lang$applyTo = g.cljs$lang$applyTo;
-        return a
-      }()
-    }, b = function(b, c, d, e) {
-      var g = null;
-      goog.isDef(e) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3), 0));
-      return a.call(this, b, c, d, g)
-    };
-    b.cljs$lang$maxFixedArity = 3;
-    b.cljs$lang$applyTo = function(b) {
-      var c = cljs.core.first(b), d = cljs.core.first(cljs.core.next(b)), e = cljs.core.first(cljs.core.next(cljs.core.next(b))), b = cljs.core.rest(cljs.core.next(cljs.core.next(b)));
-      return a.call(this, c, d, e, b)
-    };
-    return b
-  }(), a = function(a, g, h, i) {
-    switch(arguments.length) {
-      case 1:
-        return b.call(this, a);
-      case 2:
-        return c.call(this, a, g);
-      case 3:
-        return d.call(this, a, g, h);
-      default:
-        return e.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 3;
-  a.cljs$lang$applyTo = e.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.dorun = function() {
-  var a = function(a, c) {
-    for(;;) {
-      if(cljs.core.truth_(function() {
-        var d = cljs.core.seq.call(null, c);
-        return cljs.core.truth_(d) ? 0 < a : d
-      }())) {
-        var d = a - 1, e = cljs.core.next.call(null, c), a = d, c = e
-      }else {
-        return null
-      }
-    }
-  };
-  return function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        var d;
-        a: {
-          for(var e = b;;) {
-            if(cljs.core.truth_(cljs.core.seq.call(null, e))) {
-              e = cljs.core.next.call(null, e)
-            }else {
-              d = null;
-              break a
-            }
-          }
-        }
-        return d;
-      case 2:
-        return a.call(this, b, c)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.doall = function() {
-  return function(a, b) {
-    switch(arguments.length) {
-      case 1:
-        return cljs.core.dorun.call(null, a), a;
-      case 2:
-        return cljs.core.dorun.call(null, a, b), b
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.re_matches = function(a, b) {
-  var c = a.exec(b);
-  return cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.first.call(null, c), b)) ? cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.count.call(null, c), 1)) ? cljs.core.first.call(null, c) : cljs.core.vec.call(null, c) : null
-};
-cljs.core.re_find = function(a, b) {
-  var c = a.exec(b);
-  return cljs.core.truth_(null === c) ? null : cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.count.call(null, c), 1)) ? cljs.core.first.call(null, c) : cljs.core.vec.call(null, c)
-};
-cljs.core.re_seq = function re_seq(b, c) {
-  var d = cljs.core.re_find.call(null, b, c), e = c.search(b), f = cljs.core.truth_(cljs.core.coll_QMARK_.call(null, d)) ? cljs.core.first.call(null, d) : d, g = cljs.core.subs.call(null, c, e + cljs.core.count.call(null, f));
-  return cljs.core.truth_(d) ? new cljs.core.LazySeq(null, !1, function() {
-    return cljs.core.cons.call(null, d, re_seq.call(null, b, g))
-  }) : null
-};
-cljs.core.re_pattern = function(a) {
-  var b = cljs.core.re_find.call(null, /^(?:\(\?([idmsux]*)\))?(.*)/, a);
-  cljs.core.nth.call(null, b, 0, null);
-  a = cljs.core.nth.call(null, b, 1, null);
-  b = cljs.core.nth.call(null, b, 2, null);
-  return RegExp(b, a)
-};
-cljs.core.pr_sequential = function(a, b, c, d, e, f) {
-  return cljs.core.concat.call(null, cljs.core.Vector.fromArray([b]), cljs.core.flatten1.call(null, cljs.core.interpose.call(null, cljs.core.Vector.fromArray([c]), cljs.core.map.call(null, function(b) {
-    return a.call(null, b, e)
-  }, f))), cljs.core.Vector.fromArray([d]))
-};
-cljs.core.string_print = function(a) {
-  cljs.core._STAR_print_fn_STAR_.call(null, a);
-  return null
-};
-cljs.core.flush = function() {
-  return null
-};
-cljs.core.pr_seq = function pr_seq(b, c) {
-  return cljs.core.truth_(null === b) ? cljs.core.list.call(null, "nil") : cljs.core.truth_(void 0 === b) ? cljs.core.list.call(null, "#<undefined>") : cljs.core.truth_("\ufdd0'else") ? cljs.core.concat.call(null, cljs.core.truth_(function() {
-    var d = cljs.core.get.call(null, c, "\ufdd0'meta");
-    return cljs.core.truth_(d) ? (d = function() {
-      return cljs.core.truth_(function() {
-        if(cljs.core.truth_(b)) {
-          var c = b.cljs$core$IMeta$;
-          return cljs.core.truth_(c) ? cljs.core.not.call(null, b.hasOwnProperty("cljs$core$IMeta$")) : c
-        }
-        return b
-      }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.IMeta, b)
-    }(), cljs.core.truth_(d) ? cljs.core.meta.call(null, b) : d) : d
-  }()) ? cljs.core.concat.call(null, cljs.core.Vector.fromArray(["^"]), pr_seq.call(null, cljs.core.meta.call(null, b), c), cljs.core.Vector.fromArray([" "])) : null, cljs.core.truth_(function() {
-    return cljs.core.truth_(function() {
-      if(cljs.core.truth_(b)) {
-        var c = b.cljs$core$IPrintable$;
-        return cljs.core.truth_(c) ? cljs.core.not.call(null, b.hasOwnProperty("cljs$core$IPrintable$")) : c
-      }
-      return b
-    }()) ? !0 : cljs.core.type_satisfies_.call(null, cljs.core.IPrintable, b)
-  }()) ? cljs.core._pr_seq.call(null, b, c) : cljs.core.list.call(null, "#<", cljs.core.str.call(null, b), ">")) : null
-};
-cljs.core.pr_str_with_opts = function(a, b) {
-  var c = cljs.core.first.call(null, a), d = new goog.string.StringBuffer, e = cljs.core.seq.call(null, a);
-  if(cljs.core.truth_(e)) {
-    for(var f = cljs.core.first.call(null, e);;) {
-      cljs.core.truth_(f === c) || d.append(" ");
-      var g = cljs.core.seq.call(null, cljs.core.pr_seq.call(null, f, b));
-      if(cljs.core.truth_(g)) {
-        for(f = cljs.core.first.call(null, g);;) {
-          if(d.append(f), f = cljs.core.next.call(null, g), cljs.core.truth_(f)) {
-            g = f, f = cljs.core.first.call(null, g)
-          }else {
-            break
-          }
-        }
-      }
-      e = cljs.core.next.call(null, e);
-      if(cljs.core.truth_(e)) {
-        f = e, e = cljs.core.first.call(null, f), g = f, f = e, e = g
-      }else {
-        break
-      }
-    }
-  }
-  return cljs.core.str.call(null, d)
-};
-cljs.core.pr_with_opts = function(a, b) {
-  var c = cljs.core.first.call(null, a), d = cljs.core.seq.call(null, a);
-  if(cljs.core.truth_(d)) {
-    for(var e = cljs.core.first.call(null, d);;) {
-      cljs.core.truth_(e === c) || cljs.core.string_print.call(null, " ");
-      var f = cljs.core.seq.call(null, cljs.core.pr_seq.call(null, e, b));
-      if(cljs.core.truth_(f)) {
-        for(e = cljs.core.first.call(null, f);;) {
-          if(cljs.core.string_print.call(null, e), e = cljs.core.next.call(null, f), cljs.core.truth_(e)) {
-            f = e, e = cljs.core.first.call(null, f)
-          }else {
-            break
-          }
-        }
-      }
-      d = cljs.core.next.call(null, d);
-      if(cljs.core.truth_(d)) {
-        e = d, d = cljs.core.first.call(null, e), f = e, e = d, d = f
-      }else {
-        return null
-      }
-    }
-  }else {
-    return null
-  }
-};
-cljs.core.newline = function(a) {
-  cljs.core.string_print.call(null, "\n");
-  return cljs.core.truth_(cljs.core.get.call(null, a, "\ufdd0'flush-on-newline")) ? cljs.core.flush.call(null) : null
-};
-cljs.core._STAR_flush_on_newline_STAR_ = !0;
-cljs.core._STAR_print_readably_STAR_ = !0;
-cljs.core._STAR_print_meta_STAR_ = !1;
-cljs.core._STAR_print_dup_STAR_ = !1;
-cljs.core.pr_opts = function() {
-  return cljs.core.ObjMap.fromObject(["\ufdd0'flush-on-newline", "\ufdd0'readably", "\ufdd0'meta", "\ufdd0'dup"], {"\ufdd0'flush-on-newline":cljs.core._STAR_flush_on_newline_STAR_, "\ufdd0'readably":cljs.core._STAR_print_readably_STAR_, "\ufdd0'meta":cljs.core._STAR_print_meta_STAR_, "\ufdd0'dup":cljs.core._STAR_print_dup_STAR_})
-};
-cljs.core.pr_str = function() {
-  var a = function(a) {
-    return cljs.core.pr_str_with_opts.call(null, a, cljs.core.pr_opts.call(null))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.pr = function() {
-  var a = function(a) {
-    return cljs.core.pr_with_opts.call(null, a, cljs.core.pr_opts.call(null))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.print = function() {
-  var a = function(a) {
-    return cljs.core.pr_with_opts.call(null, a, cljs.core.assoc.call(null, cljs.core.pr_opts.call(null), "\ufdd0'readably", !1))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.println = function() {
-  var a = function(a) {
-    cljs.core.pr_with_opts.call(null, a, cljs.core.assoc.call(null, cljs.core.pr_opts.call(null), "\ufdd0'readably", !1));
-    return cljs.core.newline.call(null, cljs.core.pr_opts.call(null))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.prn = function() {
-  var a = function(a) {
-    cljs.core.pr_with_opts.call(null, a, cljs.core.pr_opts.call(null));
-    return cljs.core.newline.call(null, cljs.core.pr_opts.call(null))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.HashMap.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.HashMap.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, function(a) {
-    return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "", " ", "", b, a)
-  }, "{", ", ", "}", b, a)
-};
-cljs.core.IPrintable.number = !0;
-cljs.core._pr_seq.number = function(a) {
-  return cljs.core.list.call(null, cljs.core.str.call(null, a))
-};
-cljs.core.IndexedSeq.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.IndexedSeq.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "(", " ", ")", b, a)
-};
-cljs.core.Subvec.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.Subvec.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "[", " ", "]", b, a)
-};
-cljs.core.LazySeq.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.LazySeq.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "(", " ", ")", b, a)
-};
-cljs.core.IPrintable["boolean"] = !0;
-cljs.core._pr_seq["boolean"] = function(a) {
-  return cljs.core.list.call(null, cljs.core.str.call(null, a))
-};
-cljs.core.Set.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.Set.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "#{", " ", "}", b, a)
-};
-cljs.core.IPrintable.string = !0;
-cljs.core._pr_seq.string = function(a, b) {
-  return cljs.core.truth_(cljs.core.keyword_QMARK_.call(null, a)) ? cljs.core.list.call(null, cljs.core.str.call(null, ":", function() {
-    var b = cljs.core.namespace.call(null, a);
-    return cljs.core.truth_(b) ? cljs.core.str.call(null, b, "/") : null
-  }(), cljs.core.name.call(null, a))) : cljs.core.truth_(cljs.core.symbol_QMARK_.call(null, a)) ? cljs.core.list.call(null, cljs.core.str.call(null, function() {
-    var b = cljs.core.namespace.call(null, a);
-    return cljs.core.truth_(b) ? cljs.core.str.call(null, b, "/") : null
-  }(), cljs.core.name.call(null, a))) : cljs.core.truth_("\ufdd0'else") ? cljs.core.list.call(null, cljs.core.truth_("\ufdd0'readably".call(null, b)) ? goog.string.quote.call(null, a) : a) : null
-};
-cljs.core.Vector.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.Vector.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "[", " ", "]", b, a)
-};
-cljs.core.List.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.List.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "(", " ", ")", b, a)
-};
-cljs.core.IPrintable.array = !0;
-cljs.core._pr_seq.array = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "#<Array [", ", ", "]>", b, a)
-};
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "(", " ", ")", b, a)
-};
-cljs.core.IPrintable["function"] = !0;
-cljs.core._pr_seq["function"] = function(a) {
-  return cljs.core.list.call(null, "#<", cljs.core.str.call(null, a), ">")
-};
-cljs.core.EmptyList.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.EmptyList.prototype.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "()")
-};
-cljs.core.Cons.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.Cons.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "(", " ", ")", b, a)
-};
-cljs.core.Range.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.Range.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "(", " ", ")", b, a)
-};
-cljs.core.ObjMap.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.ObjMap.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.pr_sequential.call(null, function(a) {
-    return cljs.core.pr_sequential.call(null, cljs.core.pr_seq, "", " ", "", b, a)
-  }, "{", ", ", "}", b, a)
-};
-cljs.core.Atom = function(a, b, c, d) {
-  this.state = a;
-  this.meta = b;
-  this.validator = c;
-  this.watches = d
-};
-cljs.core.Atom.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Atom")
-};
-cljs.core.Atom.prototype.cljs$core$IHash$ = !0;
-cljs.core.Atom.prototype.cljs$core$IHash$_hash = function(a) {
-  return goog.getUid.call(null, a)
-};
-cljs.core.Atom.prototype.cljs$core$IWatchable$ = !0;
-cljs.core.Atom.prototype.cljs$core$IWatchable$_notify_watches = function(a, b, c) {
-  var d = cljs.core.seq.call(null, this.watches);
-  if(cljs.core.truth_(d)) {
-    var e = cljs.core.first.call(null, d);
-    cljs.core.nth.call(null, e, 0, null);
-    for(cljs.core.nth.call(null, e, 1, null);;) {
-      var f = e, e = cljs.core.nth.call(null, f, 0, null), f = cljs.core.nth.call(null, f, 1, null);
-      f.call(null, e, a, b, c);
-      d = cljs.core.next.call(null, d);
-      if(cljs.core.truth_(d)) {
-        e = d, d = cljs.core.first.call(null, e), f = e, e = d, d = f
-      }else {
-        return null
-      }
-    }
-  }else {
-    return null
-  }
-};
-cljs.core.Atom.prototype.cljs$core$IWatchable$_add_watch = function(a, b, c) {
-  return a.watches = cljs.core.assoc.call(null, this.watches, b, c)
-};
-cljs.core.Atom.prototype.cljs$core$IWatchable$_remove_watch = function(a, b) {
-  return a.watches = cljs.core.dissoc.call(null, this.watches, b)
-};
-cljs.core.Atom.prototype.cljs$core$IPrintable$ = !0;
-cljs.core.Atom.prototype.cljs$core$IPrintable$_pr_seq = function(a, b) {
-  return cljs.core.concat.call(null, cljs.core.Vector.fromArray(["#<Atom: "]), cljs.core._pr_seq.call(null, this.state, b), ">")
-};
-cljs.core.Atom.prototype.cljs$core$IMeta$ = !0;
-cljs.core.Atom.prototype.cljs$core$IMeta$_meta = function() {
-  return this.meta
-};
-cljs.core.Atom.prototype.cljs$core$IDeref$ = !0;
-cljs.core.Atom.prototype.cljs$core$IDeref$_deref = function() {
-  return this.state
-};
-cljs.core.Atom.prototype.cljs$core$IEquiv$ = !0;
-cljs.core.Atom.prototype.cljs$core$IEquiv$_equiv = function(a, b) {
-  return a === b
-};
-cljs.core.Atom;
-cljs.core.atom = function() {
-  var a = null, b = function() {
-    var a = function(a, b) {
-      var c = cljs.core.truth_(cljs.core.seq_QMARK_.call(null, b)) ? cljs.core.apply.call(null, cljs.core.hash_map, b) : b, d = cljs.core.get.call(null, c, "\ufdd0'validator"), c = cljs.core.get.call(null, c, "\ufdd0'meta");
-      return new cljs.core.Atom(a, c, d, null)
-    }, b = function(b, d) {
-      var g = null;
-      goog.isDef(d) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-      return a.call(this, b, g)
-    };
-    b.cljs$lang$maxFixedArity = 1;
-    b.cljs$lang$applyTo = function(b) {
-      var d = cljs.core.first(b), b = cljs.core.rest(b);
-      return a.call(this, d, b)
-    };
-    return b
-  }(), a = function(a, d) {
-    switch(arguments.length) {
-      case 1:
-        return new cljs.core.Atom(a, null, null, null);
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 1;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.reset_BANG_ = function(a, b) {
-  var c = a.validator;
-  if(cljs.core.truth_(c) && !cljs.core.truth_(c.call(null, b))) {
-    throw Error(cljs.core.str.call(null, "Assert failed: ", "Validator rejected reference state", "\n", cljs.core.pr_str.call(null, cljs.core.with_meta(cljs.core.list("\ufdd1'validate", "\ufdd1'new-value"), cljs.core.hash_map("\ufdd0'line", 3072)))));
-  }
-  c = a.state;
-  a.state = b;
-  cljs.core._notify_watches.call(null, a, c, b);
-  return b
-};
-cljs.core.swap_BANG_ = function() {
-  var a = null, b = function() {
-    var a = function(a, b, c, g, h, i) {
-      var j = null;
-      goog.isDef(i) && (j = cljs.core.array_seq(Array.prototype.slice.call(arguments, 5), 0));
-      return cljs.core.reset_BANG_.call(null, a, cljs.core.apply.call(null, b, a.state, c, g, h, j))
-    };
-    a.cljs$lang$maxFixedArity = 5;
-    a.cljs$lang$applyTo = function(a) {
-      var b = cljs.core.first(a), c = cljs.core.first(cljs.core.next(a)), g = cljs.core.first(cljs.core.next(cljs.core.next(a))), h = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(a)))), i = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(a))))), a = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(a)))));
-      return cljs.core.reset_BANG_.call(null, b, cljs.core.apply.call(null, c, b.state, g, h, i, a))
-    };
-    return a
-  }(), a = function(a, d, e, f, g, h) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.reset_BANG_.call(null, a, d.call(null, a.state));
-      case 3:
-        return cljs.core.reset_BANG_.call(null, a, d.call(null, a.state, e));
-      case 4:
-        return cljs.core.reset_BANG_.call(null, a, d.call(null, a.state, e, f));
-      case 5:
-        return cljs.core.reset_BANG_.call(null, a, d.call(null, a.state, e, f, g));
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 5;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.compare_and_set_BANG_ = function(a, b, c) {
-  return cljs.core.truth_(cljs.core._EQ_.call(null, a.state, b)) ? (cljs.core.reset_BANG_.call(null, a, c), !0) : !1
-};
-cljs.core.deref = function(a) {
-  return cljs.core._deref.call(null, a)
-};
-cljs.core.set_validator_BANG_ = function(a, b) {
-  return a.validator = b
-};
-cljs.core.get_validator = function(a) {
-  return a.validator
-};
-cljs.core.alter_meta_BANG_ = function() {
-  var a = function(a, c, d) {
-    var e = null;
-    goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2), 0));
-    return a.meta = cljs.core.apply.call(null, c, a.meta, e)
-  };
-  a.cljs$lang$maxFixedArity = 2;
-  a.cljs$lang$applyTo = function(a) {
-    var c = cljs.core.first(a), d = cljs.core.first(cljs.core.next(a)), a = cljs.core.rest(cljs.core.next(a));
-    return c.meta = cljs.core.apply.call(null, d, c.meta, a)
-  };
-  return a
-}();
-cljs.core.reset_meta_BANG_ = function(a, b) {
-  return a.meta = b
-};
-cljs.core.add_watch = function(a, b, c) {
-  return cljs.core._add_watch.call(null, a, b, c)
-};
-cljs.core.remove_watch = function(a, b) {
-  return cljs.core._remove_watch.call(null, a, b)
-};
-cljs.core.gensym_counter = null;
-cljs.core.gensym = function() {
-  var a = null;
-  return a = function(b) {
-    switch(arguments.length) {
-      case 0:
-        return a.call(null, "G__");
-      case 1:
-        return cljs.core.truth_(null === cljs.core.gensym_counter) && (cljs.core.gensym_counter = cljs.core.atom.call(null, 0)), cljs.core.symbol.call(null, cljs.core.str.call(null, b, cljs.core.swap_BANG_.call(null, cljs.core.gensym_counter, cljs.core.inc)))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.fixture1 = 1;
-cljs.core.fixture2 = 2;
-cljs.core.Delay = function(a, b) {
-  this.f = a;
-  this.state = b
-};
-cljs.core.Delay.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.Delay")
-};
-cljs.core.Delay.prototype.cljs$core$IPending$ = !0;
-cljs.core.Delay.prototype.cljs$core$IPending$_realized_QMARK_ = function() {
-  return cljs.core.not.call(null, null === cljs.core.deref.call(null, this.state))
-};
-cljs.core.Delay.prototype.cljs$core$IDeref$ = !0;
-cljs.core.Delay.prototype.cljs$core$IDeref$_deref = function() {
-  cljs.core.truth_(cljs.core.deref.call(null, this.state)) || cljs.core.swap_BANG_.call(null, this.state, this.f);
-  return cljs.core.deref.call(null, this.state)
-};
-cljs.core.Delay;
-cljs.core.delay = function() {
-  var a = function(a) {
-    return new cljs.core.Delay(function() {
-      return cljs.core.apply.call(null, cljs.core.identity, a)
-    }, cljs.core.atom.call(null, null))
-  }, b = function(b) {
-    var d = null;
-    goog.isDef(b) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-    return a.call(this, d)
-  };
-  b.cljs$lang$maxFixedArity = 0;
-  b.cljs$lang$applyTo = function(b) {
-    b = cljs.core.seq(b);
-    return a.call(this, b)
-  };
-  return b
-}();
-cljs.core.delay_QMARK_ = function(a) {
-  return cljs.core.instance_QMARK_.call(null, cljs.core.Delay, a)
-};
-cljs.core.force = function(a) {
-  return cljs.core.truth_(cljs.core.delay_QMARK_.call(null, a)) ? cljs.core.deref.call(null, a) : a
-};
-cljs.core.realized_QMARK_ = function(a) {
-  return cljs.core._realized_QMARK_.call(null, a)
-};
-cljs.core.js__GT_clj = function() {
-  var a = function(a, b) {
-    var e = cljs.core.truth_(cljs.core.seq_QMARK_.call(null, b)) ? cljs.core.apply.call(null, cljs.core.hash_map, b) : b, e = cljs.core.get.call(null, e, "\ufdd0'keywordize-keys"), f = cljs.core.truth_(e) ? cljs.core.keyword : cljs.core.str;
-    return function h(a) {
-      return cljs.core.truth_(cljs.core.seq_QMARK_.call(null, a)) ? cljs.core.doall.call(null, cljs.core.map.call(null, h, a)) : cljs.core.truth_(cljs.core.coll_QMARK_.call(null, a)) ? cljs.core.into.call(null, cljs.core.empty.call(null, a), cljs.core.map.call(null, h, a)) : cljs.core.truth_(goog.isArray.call(null, a)) ? cljs.core.vec.call(null, cljs.core.map.call(null, h, a)) : cljs.core.truth_(goog.isObject.call(null, a)) ? cljs.core.into.call(null, cljs.core.ObjMap.fromObject([], {}), function() {
-        return function k(b) {
-          return new cljs.core.LazySeq(null, !1, function() {
-            for(;;) {
-              if(cljs.core.truth_(cljs.core.seq.call(null, b))) {
-                var c = cljs.core.first.call(null, b);
-                return cljs.core.cons.call(null, cljs.core.Vector.fromArray([f.call(null, c), h.call(null, a[c])]), k.call(null, cljs.core.rest.call(null, b)))
-              }
-              return null
-            }
-          })
-        }.call(null, cljs.core.js_keys.call(null, a))
-      }()) : cljs.core.truth_("\ufdd0'else") ? a : null
-    }.call(null, a)
-  }, b = function(b, d) {
-    var e = null;
-    goog.isDef(d) && (e = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-    return a.call(this, b, e)
-  };
-  b.cljs$lang$maxFixedArity = 1;
-  b.cljs$lang$applyTo = function(b) {
-    var d = cljs.core.first(b), b = cljs.core.rest(b);
-    return a.call(this, d, b)
-  };
-  return b
-}();
-cljs.core.memoize = function(a) {
-  var b = cljs.core.atom.call(null, cljs.core.ObjMap.fromObject([], {}));
-  return function() {
-    var c = function(c) {
-      var d = cljs.core.get.call(null, cljs.core.deref.call(null, b), c);
-      if(cljs.core.truth_(d)) {
-        return d
-      }
-      d = cljs.core.apply.call(null, a, c);
-      cljs.core.swap_BANG_.call(null, b, cljs.core.assoc, c, d);
-      return d
-    }, d = function(a) {
-      var b = null;
-      goog.isDef(a) && (b = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0), 0));
-      return c.call(this, b)
-    };
-    d.cljs$lang$maxFixedArity = 0;
-    d.cljs$lang$applyTo = function(a) {
-      a = cljs.core.seq(a);
-      return c.call(this, a)
-    };
-    return d
-  }()
-};
-cljs.core.trampoline = function() {
-  var a = null, b = function() {
-    var b = function(b, c) {
-      return a.call(null, function() {
-        return cljs.core.apply.call(null, b, c)
-      })
-    }, d = function(a, d) {
-      var g = null;
-      goog.isDef(d) && (g = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-      return b.call(this, a, g)
-    };
-    d.cljs$lang$maxFixedArity = 1;
-    d.cljs$lang$applyTo = function(a) {
-      var d = cljs.core.first(a), a = cljs.core.rest(a);
-      return b.call(this, d, a)
-    };
-    return d
-  }(), a = function(a, d) {
-    switch(arguments.length) {
-      case 1:
-        var e;
-        a: {
-          for(var f = a;;) {
-            if(f = f.call(null), !cljs.core.truth_(cljs.core.fn_QMARK_.call(null, f))) {
-              e = f;
-              break a
-            }
-          }
-        }
-        return e;
-      default:
-        return b.apply(this, arguments)
-    }
-    throw"Invalid arity: " + arguments.length;
-  };
-  a.cljs$lang$maxFixedArity = 1;
-  a.cljs$lang$applyTo = b.cljs$lang$applyTo;
-  return a
-}();
-cljs.core.rand = function() {
-  var a = null;
-  return a = function(b) {
-    switch(arguments.length) {
-      case 0:
-        return a.call(null, 1);
-      case 1:
-        return Math.random() * b
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.rand_int = function(a) {
-  return Math.floor(Math.random() * a)
-};
-cljs.core.rand_nth = function(a) {
-  return cljs.core.nth.call(null, a, cljs.core.rand_int.call(null, cljs.core.count.call(null, a)))
-};
-cljs.core.group_by = function(a, b) {
-  return cljs.core.reduce.call(null, function(b, d) {
-    var e = a.call(null, d);
-    return cljs.core.assoc.call(null, b, e, cljs.core.conj.call(null, cljs.core.get.call(null, b, e, cljs.core.Vector.fromArray([])), d))
-  }, cljs.core.ObjMap.fromObject([], {}), b)
-};
-cljs.core.make_hierarchy = function() {
-  return cljs.core.ObjMap.fromObject(["\ufdd0'parents", "\ufdd0'descendants", "\ufdd0'ancestors"], {"\ufdd0'parents":cljs.core.ObjMap.fromObject([], {}), "\ufdd0'descendants":cljs.core.ObjMap.fromObject([], {}), "\ufdd0'ancestors":cljs.core.ObjMap.fromObject([], {})})
-};
-cljs.core.global_hierarchy = cljs.core.atom.call(null, cljs.core.make_hierarchy.call(null));
-cljs.core.isa_QMARK_ = function() {
-  var a = null, b = function(b, d, e) {
-    var f = cljs.core._EQ_.call(null, d, e);
-    if(cljs.core.truth_(f)) {
-      return f
-    }
-    f = cljs.core.contains_QMARK_.call(null, "\ufdd0'ancestors".call(null, b).call(null, d), e);
-    if(cljs.core.truth_(f)) {
-      return f
-    }
-    f = cljs.core.vector_QMARK_.call(null, e);
-    if(cljs.core.truth_(f)) {
-      if(f = cljs.core.vector_QMARK_.call(null, d), cljs.core.truth_(f)) {
-        if(f = cljs.core._EQ_.call(null, cljs.core.count.call(null, e), cljs.core.count.call(null, d)), cljs.core.truth_(f)) {
-          for(var g = !0, h = 0;;) {
-            if(cljs.core.truth_(function() {
-              var a = cljs.core.not.call(null, g);
-              return cljs.core.truth_(a) ? a : cljs.core._EQ_.call(null, h, cljs.core.count.call(null, e))
-            }())) {
-              return g
-            }
-            var f = a.call(null, b, d.call(null, h), e.call(null, h)), i = h + 1, g = f, h = i
-          }
-        }else {
-          return f
-        }
-      }else {
-        return f
-      }
-    }else {
-      return f
-    }
-  };
-  return a = function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return a.call(null, cljs.core.deref.call(null, cljs.core.global_hierarchy), c, d);
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.parents = function() {
-  var a = null;
-  return a = function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        return a.call(null, cljs.core.deref.call(null, cljs.core.global_hierarchy), b);
-      case 2:
-        return cljs.core.not_empty.call(null, cljs.core.get.call(null, "\ufdd0'parents".call(null, b), c))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.ancestors = function() {
-  var a = null;
-  return a = function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        return a.call(null, cljs.core.deref.call(null, cljs.core.global_hierarchy), b);
-      case 2:
-        return cljs.core.not_empty.call(null, cljs.core.get.call(null, "\ufdd0'ancestors".call(null, b), c))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.descendants = function() {
-  var a = null;
-  return a = function(b, c) {
-    switch(arguments.length) {
-      case 1:
-        return a.call(null, cljs.core.deref.call(null, cljs.core.global_hierarchy), b);
-      case 2:
-        return cljs.core.not_empty.call(null, cljs.core.get.call(null, "\ufdd0'descendants".call(null, b), c))
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.derive = function() {
-  var a = null, b = function(a, b, e) {
-    if(!cljs.core.truth_(cljs.core.not_EQ_.call(null, b, e))) {
-      throw Error(cljs.core.str.call(null, "Assert failed: ", cljs.core.pr_str.call(null, cljs.core.with_meta(cljs.core.list("\ufdd1'not=", "\ufdd1'tag", "\ufdd1'parent"), cljs.core.hash_map("\ufdd0'line", 3368)))));
-    }
-    var f = "\ufdd0'parents".call(null, a), g = "\ufdd0'descendants".call(null, a), h = "\ufdd0'ancestors".call(null, a), i = function(a, b, c, d, e) {
-      return cljs.core.reduce.call(null, function(a, b) {
-        return cljs.core.assoc.call(null, a, b, cljs.core.reduce.call(null, cljs.core.conj, cljs.core.get.call(null, e, b, cljs.core.set([])), cljs.core.cons.call(null, d, e.call(null, d))))
-      }, a, cljs.core.cons.call(null, b, c.call(null, b)))
-    };
-    if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null, f.call(null, b), e))) {
-      b = null
-    }else {
-      if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null, h.call(null, b), e))) {
-        throw Error(cljs.core.str.call(null, b, "already has", e, "as ancestor"));
-      }
-      if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null, h.call(null, e), b))) {
-        throw Error(cljs.core.str.call(null, "Cyclic derivation:", e, "has", b, "as ancestor"));
-      }
-      b = cljs.core.ObjMap.fromObject(["\ufdd0'parents", "\ufdd0'ancestors", "\ufdd0'descendants"], {"\ufdd0'parents":cljs.core.assoc.call(null, "\ufdd0'parents".call(null, a), b, cljs.core.conj.call(null, cljs.core.get.call(null, f, b, cljs.core.set([])), e)), "\ufdd0'ancestors":i.call(null, "\ufdd0'ancestors".call(null, a), b, g, e, h), "\ufdd0'descendants":i.call(null, "\ufdd0'descendants".call(null, a), e, h, b, g)})
-    }
-    return cljs.core.truth_(b) ? b : a
-  };
-  return a = function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        if(!cljs.core.truth_(cljs.core.namespace.call(null, d))) {
-          throw Error(cljs.core.str.call(null, "Assert failed: ", cljs.core.pr_str.call(null, cljs.core.with_meta(cljs.core.list("\ufdd1'namespace", "\ufdd1'parent"), cljs.core.hash_map("\ufdd0'line", 3364)))));
-        }
-        cljs.core.swap_BANG_.call(null, cljs.core.global_hierarchy, a, c, d);
-        return null;
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.underive = function() {
-  var a = null, b = function(a, b, e) {
-    var f = "\ufdd0'parents".call(null, a), g = cljs.core.truth_(f.call(null, b)) ? cljs.core.disj.call(null, f.call(null, b), e) : cljs.core.set([]), g = cljs.core.truth_(cljs.core.not_empty.call(null, g)) ? cljs.core.assoc.call(null, f, b, g) : cljs.core.dissoc.call(null, f, b), g = cljs.core.flatten.call(null, cljs.core.map.call(null, function(a) {
-      return cljs.core.cons.call(null, cljs.core.first.call(null, a), cljs.core.interpose.call(null, cljs.core.first.call(null, a), cljs.core.second.call(null, a)))
-    }, cljs.core.seq.call(null, g)));
-    return cljs.core.truth_(cljs.core.contains_QMARK_.call(null, f.call(null, b), e)) ? cljs.core.reduce.call(null, function(a, b) {
-      return cljs.core.apply.call(null, cljs.core.derive, a, b)
-    }, cljs.core.make_hierarchy.call(null), cljs.core.partition.call(null, 2, g)) : a
-  };
-  return a = function(c, d, e) {
-    switch(arguments.length) {
-      case 2:
-        return cljs.core.swap_BANG_.call(null, cljs.core.global_hierarchy, a, c, d), null;
-      case 3:
-        return b.call(this, c, d, e)
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-cljs.core.reset_cache = function(a, b, c, d) {
-  cljs.core.swap_BANG_.call(null, a, function() {
-    return cljs.core.deref.call(null, b)
-  });
-  return cljs.core.swap_BANG_.call(null, c, function() {
-    return cljs.core.deref.call(null, d)
-  })
-};
-cljs.core.prefers_STAR_ = function prefers_STAR_(b, c, d) {
-  var e = cljs.core.deref.call(null, d).call(null, b), e = cljs.core.truth_(cljs.core.truth_(e) ? e.call(null, c) : e) ? !0 : null;
-  if(cljs.core.truth_(e)) {
-    return e
-  }
-  e = function() {
-    for(var e = cljs.core.parents.call(null, c);;) {
-      if(cljs.core.truth_(0 < cljs.core.count.call(null, e))) {
-        cljs.core.truth_(prefers_STAR_.call(null, b, cljs.core.first.call(null, e), d)), e = cljs.core.rest.call(null, e)
-      }else {
-        return null
-      }
-    }
-  }();
-  if(cljs.core.truth_(e)) {
-    return e
-  }
-  e = function() {
-    for(var e = cljs.core.parents.call(null, b);;) {
-      if(cljs.core.truth_(0 < cljs.core.count.call(null, e))) {
-        cljs.core.truth_(prefers_STAR_.call(null, cljs.core.first.call(null, e), c, d)), e = cljs.core.rest.call(null, e)
-      }else {
-        return null
-      }
-    }
-  }();
-  return cljs.core.truth_(e) ? e : !1
-};
-cljs.core.dominates = function(a, b, c) {
-  c = cljs.core.prefers_STAR_.call(null, a, b, c);
-  return cljs.core.truth_(c) ? c : cljs.core.isa_QMARK_.call(null, a, b)
-};
-cljs.core.find_and_cache_best_method = function find_and_cache_best_method(b, c, d, e, f, g, h) {
-  var i = cljs.core.reduce.call(null, function(d, e) {
-    var g = cljs.core.nth.call(null, e, 0, null);
-    cljs.core.nth.call(null, e, 1, null);
-    if(cljs.core.truth_(cljs.core.isa_QMARK_.call(null, c, g))) {
-      var h = cljs.core.truth_(function() {
-        var b = null === d;
-        return cljs.core.truth_(b) ? b : cljs.core.dominates.call(null, g, cljs.core.first.call(null, d), f)
-      }()) ? e : d;
-      if(!cljs.core.truth_(cljs.core.dominates.call(null, cljs.core.first.call(null, h), g, f))) {
-        throw Error(cljs.core.str.call(null, "Multiple methods in multimethod '", b, "' match dispatch value: ", c, " -> ", g, " and ", cljs.core.first.call(null, h), ", and neither is preferred"));
-      }
-      return h
-    }
-    return d
-  }, null, cljs.core.deref.call(null, e));
-  if(cljs.core.truth_(i)) {
-    if(cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.deref.call(null, h), cljs.core.deref.call(null, d)))) {
-      return cljs.core.swap_BANG_.call(null, g, cljs.core.assoc, c, cljs.core.second.call(null, i)), cljs.core.second.call(null, i)
-    }
-    cljs.core.reset_cache.call(null, g, e, h, d);
-    return find_and_cache_best_method.call(null, b, c, d, e, f, g, h)
-  }
-  return null
-};
-cljs.core.IMultiFn = {};
-cljs.core._reset = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_reset : a)) {
-    a = a.cljs$core$IMultiFn$_reset(a)
-  }else {
-    var b;
-    b = cljs.core._reset[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._reset._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-reset", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core._add_method = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_add_method : a)) {
-    a = a.cljs$core$IMultiFn$_add_method(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._add_method[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._add_method._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-add-method", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core._remove_method = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_remove_method : a)) {
-    c = a.cljs$core$IMultiFn$_remove_method(a, b)
-  }else {
-    c = cljs.core._remove_method[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._remove_method._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-remove-method", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core._prefer_method = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_prefer_method : a)) {
-    a = a.cljs$core$IMultiFn$_prefer_method(a, b, c)
-  }else {
-    var d;
-    d = cljs.core._prefer_method[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(d) && (d = cljs.core._prefer_method._, !cljs.core.truth_(d))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-prefer-method", a);
-    }
-    a = d.call(null, a, b, c)
-  }
-  return a
-};
-cljs.core._get_method = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_get_method : a)) {
-    c = a.cljs$core$IMultiFn$_get_method(a, b)
-  }else {
-    c = cljs.core._get_method[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._get_method._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-get-method", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core._methods = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_methods : a)) {
-    a = a.cljs$core$IMultiFn$_methods(a)
-  }else {
-    var b;
-    b = cljs.core._methods[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._methods._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-methods", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core._prefers = function(a) {
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_prefers : a)) {
-    a = a.cljs$core$IMultiFn$_prefers(a)
-  }else {
-    var b;
-    b = cljs.core._prefers[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(b) && (b = cljs.core._prefers._, !cljs.core.truth_(b))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-prefers", a);
-    }
-    a = b.call(null, a)
-  }
-  return a
-};
-cljs.core._dispatch = function(a, b) {
-  var c;
-  if(cljs.core.truth_(cljs.core.truth_(a) ? a.cljs$core$IMultiFn$_dispatch : a)) {
-    c = a.cljs$core$IMultiFn$_dispatch(a, b)
-  }else {
-    c = cljs.core._dispatch[goog.typeOf.call(null, a)];
-    if(!cljs.core.truth_(c) && (c = cljs.core._dispatch._, !cljs.core.truth_(c))) {
-      throw cljs.core.missing_protocol.call(null, "IMultiFn.-dispatch", a);
-    }
-    c = c.call(null, a, b)
-  }
-  return c
-};
-cljs.core.do_dispatch = function(a, b, c) {
-  b = cljs.core.apply.call(null, b, c);
-  a = cljs.core._get_method.call(null, a, b);
-  if(!cljs.core.truth_(a)) {
-    throw Error(cljs.core.str.call(null, "No method in multimethod '", cljs.core.name, "' for dispatch value: ", b));
-  }
-  return cljs.core.apply.call(null, a, c)
-};
-cljs.core.MultiFn = function(a, b, c, d, e, f, g, h) {
-  this.name = a;
-  this.dispatch_fn = b;
-  this.default_dispatch_val = c;
-  this.hierarchy = d;
-  this.method_table = e;
-  this.prefer_table = f;
-  this.method_cache = g;
-  this.cached_hierarchy = h
-};
-cljs.core.MultiFn.cljs$core$IPrintable$_pr_seq = function() {
-  return cljs.core.list.call(null, "cljs.core.MultiFn")
-};
-cljs.core.MultiFn.prototype.cljs$core$IHash$ = !0;
-cljs.core.MultiFn.prototype.cljs$core$IHash$_hash = function(a) {
-  return goog.getUid.call(null, a)
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$ = !0;
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_reset = function(a) {
-  cljs.core.swap_BANG_.call(null, this.method_table, function() {
-    return cljs.core.ObjMap.fromObject([], {})
-  });
-  cljs.core.swap_BANG_.call(null, this.method_cache, function() {
-    return cljs.core.ObjMap.fromObject([], {})
-  });
-  cljs.core.swap_BANG_.call(null, this.prefer_table, function() {
-    return cljs.core.ObjMap.fromObject([], {})
-  });
-  cljs.core.swap_BANG_.call(null, this.cached_hierarchy, function() {
-    return null
-  });
-  return a
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_add_method = function(a, b, c) {
-  cljs.core.swap_BANG_.call(null, this.method_table, cljs.core.assoc, b, c);
-  cljs.core.reset_cache.call(null, this.method_cache, this.method_table, this.cached_hierarchy, this.hierarchy);
-  return a
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_remove_method = function(a, b) {
-  cljs.core.swap_BANG_.call(null, this.method_table, cljs.core.dissoc, b);
-  cljs.core.reset_cache.call(null, this.method_cache, this.method_table, this.cached_hierarchy, this.hierarchy);
-  return a
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_get_method = function(a, b) {
-  cljs.core.truth_(cljs.core._EQ_.call(null, cljs.core.deref.call(null, this.cached_hierarchy), cljs.core.deref.call(null, this.hierarchy))) || cljs.core.reset_cache.call(null, this.method_cache, this.method_table, this.cached_hierarchy, this.hierarchy);
-  var c = cljs.core.deref.call(null, this.method_cache).call(null, b);
-  if(cljs.core.truth_(c)) {
-    return c
-  }
-  c = cljs.core.find_and_cache_best_method.call(null, this.name, b, this.hierarchy, this.method_table, this.prefer_table, this.method_cache, this.cached_hierarchy);
-  return cljs.core.truth_(c) ? c : cljs.core.deref.call(null, this.method_table).call(null, this.default_dispatch_val)
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_prefer_method = function(a, b, c) {
-  if(cljs.core.truth_(cljs.core.prefers_STAR_.call(null, b, c, this.prefer_table))) {
-    throw Error(cljs.core.str.call(null, "Preference conflict in multimethod '", this.name, "': ", c, " is already preferred to ", b));
-  }
-  cljs.core.swap_BANG_.call(null, this.prefer_table, function(a) {
-    return cljs.core.assoc.call(null, a, b, cljs.core.conj.call(null, cljs.core.get.call(null, a, b, cljs.core.set([])), c))
-  });
-  return cljs.core.reset_cache.call(null, this.method_cache, this.method_table, this.cached_hierarchy, this.hierarchy)
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_methods = function() {
-  return cljs.core.deref.call(null, this.method_table)
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_prefers = function() {
-  return cljs.core.deref.call(null, this.prefer_table)
-};
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_dispatch = function(a, b) {
-  return cljs.core.do_dispatch.call(null, a, this.dispatch_fn, b)
-};
-cljs.core.MultiFn;
-cljs.core.MultiFn.prototype.call = function() {
-  var a = function(a, c) {
-    var d = null;
-    goog.isDef(c) && (d = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1), 0));
-    return cljs.core._dispatch.call(null, this, d)
-  };
-  a.cljs$lang$maxFixedArity = 1;
-  a.cljs$lang$applyTo = function(a) {
-    cljs.core.first(a);
-    a = cljs.core.rest(a);
-    return cljs.core._dispatch.call(null, this, a)
-  };
-  return a
-}();
-cljs.core.MultiFn.prototype.apply = function(a, b) {
-  return cljs.core._dispatch.call(null, this, b)
-};
-cljs.core.remove_all_methods = function(a) {
-  return cljs.core._reset.call(null, a)
-};
-cljs.core.remove_method = function(a, b) {
-  return cljs.core._remove_method.call(null, a, b)
-};
-cljs.core.prefer_method = function(a, b, c) {
-  return cljs.core._prefer_method.call(null, a, b, c)
-};
-cljs.core.methods$ = function(a) {
-  return cljs.core._methods.call(null, a)
-};
-cljs.core.get_method = function(a, b) {
-  return cljs.core._get_method.call(null, a, b)
-};
-cljs.core.prefers = function(a) {
-  return cljs.core._prefers.call(null, a)
-};
-var tempest = {levels:{}};
-tempest.levels._STAR_default_line_length_STAR_ = 80;
-tempest.levels._STAR_default_length_fn_STAR_ = function(a) {
-  return 4 * a
-};
-tempest.levels.build_unlinked_segment_list = function(a) {
-  return cljs.core.vec.call(null, function(a, c) {
-    for(;;) {
-      if(cljs.core.truth_(cljs.core._EQ_.call(null, a, 0))) {
-        return c
-      }
-      var d = a - 1, e = cljs.core.cons.call(null, cljs.core.Vector.fromArray([a - 1, a]), c), a = d, c = e
-    }
-  }.call(null, a, cljs.core.Vector.fromArray([])))
-};
-tempest.levels.build_segment_list = function(a, b) {
-  var c = tempest.levels.build_unlinked_segment_list.call(null, a);
-  return cljs.core.truth_(!0 === b) ? cljs.core.conj.call(null, c, cljs.core.Vector.fromArray([cljs.core.last.call(null, cljs.core.last.call(null, c)), cljs.core.first.call(null, cljs.core.first.call(null, c))])) : c
-};
-tempest.levels._STAR_level1_lines_STAR_ = cljs.core.Vector.fromArray([cljs.core.Vector.fromArray([113, 225]), cljs.core.Vector.fromArray([99, 234]), cljs.core.Vector.fromArray([90, 243]), cljs.core.Vector.fromArray([84, 252]), cljs.core.Vector.fromArray([81, 261]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 270]), cljs.core.Vector.fromArray([81, 279]), cljs.core.Vector.fromArray([84, 288]), cljs.core.Vector.fromArray([90, 297]), cljs.core.Vector.fromArray([99, 306]), 
-cljs.core.Vector.fromArray([113, 315])]);
-tempest.levels._STAR_level2_lines_STAR_ = cljs.core.Vector.fromArray([cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 0]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 18]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 36]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 54]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 72]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 
-90]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 108]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 126]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 144]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 162]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 180]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 198]), 
-cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 216]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 234]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 252]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 270]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 288]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 306]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 
-324]), cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_, 342])]);
-tempest.levels._STAR_levels_STAR_ = cljs.core.Vector.fromArray([cljs.core.ObjMap.fromObject(["\ufdd0'lines", "\ufdd0'segments", "\ufdd0'length-fn"], {"\ufdd0'lines":tempest.levels._STAR_level1_lines_STAR_, "\ufdd0'segments":tempest.levels.build_segment_list.call(null, cljs.core.count.call(null, tempest.levels._STAR_level1_lines_STAR_) - 1, !1), "\ufdd0'length-fn":tempest.levels._STAR_default_length_fn_STAR_}), cljs.core.ObjMap.fromObject(["\ufdd0'lines", "\ufdd0'segments", "\ufdd0'length-fn"], {"\ufdd0'lines":tempest.levels._STAR_level2_lines_STAR_, 
-"\ufdd0'segments":tempest.levels.build_segment_list.call(null, cljs.core.count.call(null, tempest.levels._STAR_level2_lines_STAR_) - 1, !0), "\ufdd0'length-fn":tempest.levels._STAR_default_length_fn_STAR_})]);
-tempest.polar_to_cartesian_coords = function() {
-  return function(a, b) {
-    switch(arguments.length) {
-      case 1:
-        var c = cljs.core.nth.call(null, a, 0, null), d = cljs.core.nth.call(null, a, 1, null);
-        return cljs.core.Vector.fromArray([goog.math.angleDx.call(null, d, c), goog.math.angleDy.call(null, d, c)]);
-      case 2:
-        return d = cljs.core.nth.call(null, a, 0, null), c = cljs.core.nth.call(null, a, 1, null), d = b.call(null, d), cljs.core.Vector.fromArray([goog.math.angleDx.call(null, c, d), goog.math.angleDy.call(null, c, d)])
-    }
-    throw"Invalid arity: " + arguments.length;
-  }
-}();
-tempest.rectangle_for_segment = function(a, b) {
-  var c = cljs.core.get.call(null, "\ufdd0'segments".call(null, a), b), d = cljs.core.nth.call(null, c, 0, null), c = cljs.core.nth.call(null, c, 1, null), d = cljs.core.get.call(null, "\ufdd0'lines".call(null, a), d), c = cljs.core.get.call(null, "\ufdd0'lines".call(null, a), c);
-  return cljs.core.Vector.fromArray([tempest.polar_to_cartesian_coords.call(null, d), tempest.polar_to_cartesian_coords.call(null, d, "\ufdd0'length-fn".call(null, a)), tempest.polar_to_cartesian_coords.call(null, c, "\ufdd0'length-fn".call(null, a)), tempest.polar_to_cartesian_coords.call(null, c)])
-};
-tempest.point_to_canvas_coords = function(a, b) {
-  var c = cljs.core.truth_(cljs.core.seq_QMARK_.call(null, a)) ? cljs.core.apply.call(null, cljs.core.hash_map, a) : a, d = cljs.core.get.call(null, c, "\ufdd0'width"), c = cljs.core.get.call(null, c, "\ufdd0'height"), d = d / 2, c = c / 2;
-  console.log(cljs.core.str.call(null, cljs.core.pr_str.call(null, b), "->", cljs.core.pr_str.call(null, cljs.core.Vector.fromArray([cljs.core.first.call(null, b) + d, c - cljs.core.last.call(null, b)]))));
-  return cljs.core.Vector.fromArray([cljs.core.first.call(null, b) + d, c - cljs.core.last.call(null, b)])
-};
-tempest.rectangle_to_canvas_coords = function(a, b) {
-  return cljs.core.map.call(null, function(b) {
-    return tempest.point_to_canvas_coords.call(null, a, b)
-  }, b)
-};
-tempest.rand_coord = function(a) {
-  var b = cljs.core.truth_(cljs.core.seq_QMARK_.call(null, a)) ? cljs.core.apply.call(null, cljs.core.hash_map, a) : a, a = cljs.core.get.call(null, b, "\ufdd0'width"), b = cljs.core.get.call(null, b, "\ufdd0'height");
-  return cljs.core.Vector.fromArray([goog.math.randomInt.call(null, a), goog.math.randomInt.call(null, b)])
-};
-tempest.draw_random_line = function(a, b) {
-  var c = tempest.rand_coord.call(null, b), d = cljs.core.nth.call(null, c, 0, null), c = cljs.core.nth.call(null, c, 1, null), e = tempest.rand_coord.call(null, b), f = cljs.core.nth.call(null, e, 0, null), e = cljs.core.nth.call(null, e, 1, null);
-  a.moveTo(d, c);
-  a.lineTo(f, e);
-  return a.stroke()
-};
-tempest.draw_rectangle = function(a, b) {
-  var c = cljs.core.nth.call(null, b, 0, null), d = cljs.core.nthnext.call(null, b, 1);
-  console.log(cljs.core.str.call(null, "Points", cljs.core.pr_str.call(null, d)));
-  console.log(cljs.core.str.call(null, "Move to: ", cljs.core.pr_str.call(null, c)));
-  a.moveTo(cljs.core.first.call(null, c), cljs.core.last.call(null, c));
-  var e = cljs.core.seq.call(null, d);
-  if(cljs.core.truth_(e)) {
-    for(d = cljs.core.first.call(null, e);;) {
-      if(console.log(cljs.core.str.call(null, "Draw to: ", cljs.core.pr_str.call(null, d))), a.lineTo(cljs.core.first.call(null, d), cljs.core.last.call(null, d)), d = cljs.core.next.call(null, e), cljs.core.truth_(d)) {
-        e = d, d = cljs.core.first.call(null, e)
-      }else {
-        break
-      }
-    }
-  }
-  a.lineTo(cljs.core.first.call(null, c), cljs.core.last.call(null, c));
-  return a.stroke()
-};
-tempest.canvasDraw = function(a) {
-  var b = goog.dom.getElement.call(null, "canv1"), c = b.getContext("2d");
-  new goog.Timer(500);
-  var b = cljs.core.ObjMap.fromObject(["\ufdd0'width", "\ufdd0'height"], {"\ufdd0'width":b.width, "\ufdd0'height":b.height}), a = cljs.core.get.call(null, tempest.levels._STAR_levels_STAR_, parseInt.call(null, a) - 1), d = cljs.core.seq.call(null, cljs.core.range.call(null, cljs.core.count.call(null, "\ufdd0'segments".call(null, a))));
-  if(cljs.core.truth_(d)) {
-    for(var e = cljs.core.first.call(null, d);;) {
-      if(tempest.draw_rectangle.call(null, c, tempest.rectangle_to_canvas_coords.call(null, b, tempest.rectangle_for_segment.call(null, a, e))), e = cljs.core.next.call(null, d), cljs.core.truth_(e)) {
-        d = e, e = cljs.core.first.call(null, d)
-      }else {
-        return null
-      }
-    }
-  }else {
-    return null
-  }
-};
-goog.exportSymbol("tempest.canvasDraw", tempest.canvasDraw);
-

diff --git a/tempest/levels.cljs b/tempest/levels.cljs
line changes: +17/-15
index d7f73f3..88fede4
--- a/tempest/levels.cljs
+++ b/tempest/levels.cljs
@@ -1,5 +1,6 @@
 (ns tempest.levels
-  (:require [goog.dom :as dom]
+  (:require [tempest.util :as util]
+            [goog.dom :as dom]
             [goog.Timer :as timer]
             [goog.events :as events]
             [goog.events.EventType :as event-type]
@@ -30,6 +31,12 @@
 ;;;;
 ;;;; "width" is how wide, in pixels, the outer line segment is.
 ;;;;
+;;;;
+;;;; Enemies travel up segments in steps.  A level has the same number
+;;;; of steps per segment, but the size of the steps can vary depending
+;;;; on the dimensions of the segment.  Instead of keeping track of its
+;;;; coordinates, an enemy keeps track of which segment it is on, and
+;;;; how many steps up the segment.
 
 
 (def ^{:doc "Default length, in pixels, from origin to inner line."}
@@ -38,6 +45,8 @@
 (def ^{:doc "Default length function, returns argument*4"}
   *default-length-fn* #(* 4 %))
 
+(def *default-steps-per-segment* 100)
+
 (defn build-unlinked-segment-list [max-x]
   (vec ((fn [x segments]
     (if (= x 0)
@@ -53,11 +62,6 @@
     )
   )
 
-(defn rad-to-deg [rad]
-  (/ (* rad 180) 3.14159265358979))
-
-(defn deg-to-rad [deg]
-  (/ (* deg 3.14159265358979) 180))
 
 
 
@@ -79,18 +83,14 @@
 ;; (closer to the player) is uniform.
 ;;
 
-(comment (defn theta0 [width depth]
-  "Return theta0 in degrees."
-  (rad-to-deg (js/Math.atan (/ width depth)))))
-
 (defn theta-flat [n width depth]
   "Return theta for segment n.  Width is width of segment at the outer edge,
    closest to the player, and depth is the distance to origin."
-  (js/Math.round (rad-to-deg (js/Math.atan (/ (* (+ n 1) width) depth)))))
+  (js/Math.round (util/rad-to-deg (js/Math.atan (/ (* (+ n 1) width) depth)))))
 
 (defn r-flat [theta depth]
   "Return r for given theta (see theta-flat)."
-  (js/Math.round (/ depth (js/Math.cos (deg-to-rad theta)))))
+  (js/Math.round (/ depth (js/Math.cos (util/deg-to-rad theta)))))
 
 (defn r-theta-pair-flat [n width depth angle-center angle-multiplier]
   "Returns [r theta] for nth straight line segment.  angle-center is the
@@ -143,7 +143,7 @@
    (270 degrees)."
   (js/Math.sqrt (+ (js/Math.pow width 2)
                    (js/Math.pow r0 2)
-                   (* -2 width r0 (js/Math.cos (deg-to-rad gamma)))
+                   (* -2 width r0 (js/Math.cos (util/deg-to-rad gamma)))
                    )))
 
 (defn theta-oblong [width r1 r0 theta0 sumfn]
@@ -153,7 +153,7 @@
    theta theta0.  Provide a function, either + or -, to determine the
    direction.  - builds segments clockwise, + builds counterclockwise."
   (sumfn theta0
-     (rad-to-deg (js/Math.acos
+     (util/rad-to-deg (js/Math.acos
                   (/  (+ (js/Math.pow r1 2)
                          (js/Math.pow r0 2)
                          (* -1 (js/Math.pow width 2)))
@@ -247,7 +247,8 @@
    the level is a closed loop, or open."
   {:lines lines
    :segments (build-segment-list (- (count lines) 1) loops?)
-   :length-fn *default-length-fn*})
+   :length-fn *default-length-fn*
+   :steps *default-steps-per-segment*})
 
 (def *levels*
   [ (make-level-entry *level1_lines* false)
@@ -256,3 +257,4 @@
     (make-level-entry *level4_lines* false)
     (make-level-entry *level5_lines* false)
     (make-level-entry *level6_lines* true)])
+

diff --git a/tempest/out/cljs/core.js b/tempest/out/cljs/core.js
line changes: +0/-12144
index 3b38675..0000000
--- a/tempest/out/cljs/core.js
+++ /dev/null
@@ -1,12144 +0,0 @@
-goog.provide('cljs.core');
-goog.require('goog.string');
-goog.require('goog.string.StringBuffer');
-goog.require('goog.object');
-goog.require('goog.array');
-/**
-* Each runtime environment provides a diffenent way to print output.
-* Whatever function *print-fn* is bound to will be passed any
-* Strings which should be printed.
-*/
-cljs.core._STAR_print_fn_STAR_ = (function _STAR_print_fn_STAR_(_){
-throw (new Error("No *print-fn* fn set for evaluation environment"));
-});
-/**
-* Internal - do not use!
-*/
-cljs.core.truth_ = (function truth_(x){
-return (x != null && x !== false);
-});
-/**
-* Internal - do not use!
-*/
-cljs.core.type_satisfies_ = (function type_satisfies_(p,x){
-var or__3548__auto____2808 = (p[goog.typeOf.call(null,x)]);
-
-if(cljs.core.truth_(or__3548__auto____2808))
-{return or__3548__auto____2808;
-} else
-{var or__3548__auto____2809 = (p["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2809))
-{return or__3548__auto____2809;
-} else
-{return false;
-}
-}
-});
-cljs.core.is_proto_ = (function is_proto_(x){
-return (x).constructor.prototype === x;
-});
-/**
-* When compiled for a command-line target, whatever
-* function *main-fn* is set to will be called with the command-line
-* argv as arguments
-*/
-cljs.core._STAR_main_cli_fn_STAR_ = null;
-cljs.core.missing_protocol = (function missing_protocol(proto,obj){
-return Error.call(null,"No protocol method "+proto+" defined for type "+goog.typeOf.call(null,obj)+": "+obj);
-});
-/**
-* Returns a javascript array, cloned from the passed in array
-*/
-cljs.core.aclone = (function aclone(array_like){
-return Array.prototype.slice.call(array_like);
-});
-/**
-* Creates a new javascript array.
-* @param {...*} var_args
-*/
-cljs.core.array = (function array(var_args){
-return Array.prototype.slice.call(arguments);
-});
-/**
-* Returns the value at the index.
-*/
-cljs.core.aget = (function aget(array,i){
-return (array[i]);
-});
-/**
-* Sets the value at the index.
-*/
-cljs.core.aset = (function aset(array,i,val){
-return (array[i] = val);
-});
-/**
-* Returns the length of the Java array. Works on arrays of all types.
-*/
-cljs.core.alength = (function alength(array){
-return array.length;
-});
-cljs.core.IFn = {};
-cljs.core._invoke = (function() {
-var _invoke = null;
-var _invoke__2873 = (function (this$){
-if(cljs.core.truth_((function (){var and__3546__auto____2810 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2810))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2810;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$);
-} else
-{return (function (){var or__3548__auto____2811 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2811))
-{return or__3548__auto____2811;
-} else
-{var or__3548__auto____2812 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2812))
-{return or__3548__auto____2812;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$);
-}
-});
-var _invoke__2874 = (function (this$,a){
-if(cljs.core.truth_((function (){var and__3546__auto____2813 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2813))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2813;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a);
-} else
-{return (function (){var or__3548__auto____2814 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2814))
-{return or__3548__auto____2814;
-} else
-{var or__3548__auto____2815 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2815))
-{return or__3548__auto____2815;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a);
-}
-});
-var _invoke__2875 = (function (this$,a,b){
-if(cljs.core.truth_((function (){var and__3546__auto____2816 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2816))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2816;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b);
-} else
-{return (function (){var or__3548__auto____2817 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2817))
-{return or__3548__auto____2817;
-} else
-{var or__3548__auto____2818 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2818))
-{return or__3548__auto____2818;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b);
-}
-});
-var _invoke__2876 = (function (this$,a,b,c){
-if(cljs.core.truth_((function (){var and__3546__auto____2819 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2819))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2819;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c);
-} else
-{return (function (){var or__3548__auto____2820 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2820))
-{return or__3548__auto____2820;
-} else
-{var or__3548__auto____2821 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2821))
-{return or__3548__auto____2821;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c);
-}
-});
-var _invoke__2877 = (function (this$,a,b,c,d){
-if(cljs.core.truth_((function (){var and__3546__auto____2822 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2822))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2822;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d);
-} else
-{return (function (){var or__3548__auto____2823 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2823))
-{return or__3548__auto____2823;
-} else
-{var or__3548__auto____2824 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2824))
-{return or__3548__auto____2824;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d);
-}
-});
-var _invoke__2878 = (function (this$,a,b,c,d,e){
-if(cljs.core.truth_((function (){var and__3546__auto____2825 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2825))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2825;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e);
-} else
-{return (function (){var or__3548__auto____2826 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2826))
-{return or__3548__auto____2826;
-} else
-{var or__3548__auto____2827 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2827))
-{return or__3548__auto____2827;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e);
-}
-});
-var _invoke__2879 = (function (this$,a,b,c,d,e,f){
-if(cljs.core.truth_((function (){var and__3546__auto____2828 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2828))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2828;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f);
-} else
-{return (function (){var or__3548__auto____2829 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2829))
-{return or__3548__auto____2829;
-} else
-{var or__3548__auto____2830 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2830))
-{return or__3548__auto____2830;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f);
-}
-});
-var _invoke__2880 = (function (this$,a,b,c,d,e,f,g){
-if(cljs.core.truth_((function (){var and__3546__auto____2831 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2831))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2831;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g);
-} else
-{return (function (){var or__3548__auto____2832 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2832))
-{return or__3548__auto____2832;
-} else
-{var or__3548__auto____2833 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2833))
-{return or__3548__auto____2833;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g);
-}
-});
-var _invoke__2881 = (function (this$,a,b,c,d,e,f,g,h){
-if(cljs.core.truth_((function (){var and__3546__auto____2834 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2834))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2834;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h);
-} else
-{return (function (){var or__3548__auto____2835 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2835))
-{return or__3548__auto____2835;
-} else
-{var or__3548__auto____2836 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2836))
-{return or__3548__auto____2836;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h);
-}
-});
-var _invoke__2882 = (function (this$,a,b,c,d,e,f,g,h,i){
-if(cljs.core.truth_((function (){var and__3546__auto____2837 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2837))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2837;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i);
-} else
-{return (function (){var or__3548__auto____2838 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2838))
-{return or__3548__auto____2838;
-} else
-{var or__3548__auto____2839 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2839))
-{return or__3548__auto____2839;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i);
-}
-});
-var _invoke__2883 = (function (this$,a,b,c,d,e,f,g,h,i,j){
-if(cljs.core.truth_((function (){var and__3546__auto____2840 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2840))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2840;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j);
-} else
-{return (function (){var or__3548__auto____2841 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2841))
-{return or__3548__auto____2841;
-} else
-{var or__3548__auto____2842 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2842))
-{return or__3548__auto____2842;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j);
-}
-});
-var _invoke__2884 = (function (this$,a,b,c,d,e,f,g,h,i,j,k){
-if(cljs.core.truth_((function (){var and__3546__auto____2843 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2843))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2843;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k);
-} else
-{return (function (){var or__3548__auto____2844 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2844))
-{return or__3548__auto____2844;
-} else
-{var or__3548__auto____2845 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2845))
-{return or__3548__auto____2845;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k);
-}
-});
-var _invoke__2885 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l){
-if(cljs.core.truth_((function (){var and__3546__auto____2846 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2846))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2846;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l);
-} else
-{return (function (){var or__3548__auto____2847 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2847))
-{return or__3548__auto____2847;
-} else
-{var or__3548__auto____2848 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2848))
-{return or__3548__auto____2848;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l);
-}
-});
-var _invoke__2886 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m){
-if(cljs.core.truth_((function (){var and__3546__auto____2849 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2849))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2849;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m);
-} else
-{return (function (){var or__3548__auto____2850 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2850))
-{return or__3548__auto____2850;
-} else
-{var or__3548__auto____2851 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2851))
-{return or__3548__auto____2851;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m);
-}
-});
-var _invoke__2887 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n){
-if(cljs.core.truth_((function (){var and__3546__auto____2852 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2852))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2852;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n);
-} else
-{return (function (){var or__3548__auto____2853 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2853))
-{return or__3548__auto____2853;
-} else
-{var or__3548__auto____2854 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2854))
-{return or__3548__auto____2854;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n);
-}
-});
-var _invoke__2888 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o){
-if(cljs.core.truth_((function (){var and__3546__auto____2855 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2855))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2855;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o);
-} else
-{return (function (){var or__3548__auto____2856 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2856))
-{return or__3548__auto____2856;
-} else
-{var or__3548__auto____2857 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2857))
-{return or__3548__auto____2857;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o);
-}
-});
-var _invoke__2889 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p){
-if(cljs.core.truth_((function (){var and__3546__auto____2858 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2858))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2858;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
-} else
-{return (function (){var or__3548__auto____2859 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2859))
-{return or__3548__auto____2859;
-} else
-{var or__3548__auto____2860 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2860))
-{return or__3548__auto____2860;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
-}
-});
-var _invoke__2890 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q){
-if(cljs.core.truth_((function (){var and__3546__auto____2861 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2861))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2861;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q);
-} else
-{return (function (){var or__3548__auto____2862 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2862))
-{return or__3548__auto____2862;
-} else
-{var or__3548__auto____2863 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2863))
-{return or__3548__auto____2863;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q);
-}
-});
-var _invoke__2891 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s){
-if(cljs.core.truth_((function (){var and__3546__auto____2864 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2864))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2864;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s);
-} else
-{return (function (){var or__3548__auto____2865 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2865))
-{return or__3548__auto____2865;
-} else
-{var or__3548__auto____2866 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2866))
-{return or__3548__auto____2866;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s);
-}
-});
-var _invoke__2892 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t){
-if(cljs.core.truth_((function (){var and__3546__auto____2867 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2867))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2867;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t);
-} else
-{return (function (){var or__3548__auto____2868 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2868))
-{return or__3548__auto____2868;
-} else
-{var or__3548__auto____2869 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2869))
-{return or__3548__auto____2869;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t);
-}
-});
-var _invoke__2893 = (function (this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,rest){
-if(cljs.core.truth_((function (){var and__3546__auto____2870 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2870))
-{return this$.cljs$core$IFn$_invoke;
-} else
-{return and__3546__auto____2870;
-}
-})()))
-{return this$.cljs$core$IFn$_invoke(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,rest);
-} else
-{return (function (){var or__3548__auto____2871 = (cljs.core._invoke[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2871))
-{return or__3548__auto____2871;
-} else
-{var or__3548__auto____2872 = (cljs.core._invoke["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2872))
-{return or__3548__auto____2872;
-} else
-{throw cljs.core.missing_protocol.call(null,"IFn.-invoke",this$);
-}
-}
-})().call(null,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,rest);
-}
-});
-_invoke = function(this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,rest){
-switch(arguments.length){
-case  1 :
-return _invoke__2873.call(this,this$);
-case  2 :
-return _invoke__2874.call(this,this$,a);
-case  3 :
-return _invoke__2875.call(this,this$,a,b);
-case  4 :
-return _invoke__2876.call(this,this$,a,b,c);
-case  5 :
-return _invoke__2877.call(this,this$,a,b,c,d);
-case  6 :
-return _invoke__2878.call(this,this$,a,b,c,d,e);
-case  7 :
-return _invoke__2879.call(this,this$,a,b,c,d,e,f);
-case  8 :
-return _invoke__2880.call(this,this$,a,b,c,d,e,f,g);
-case  9 :
-return _invoke__2881.call(this,this$,a,b,c,d,e,f,g,h);
-case  10 :
-return _invoke__2882.call(this,this$,a,b,c,d,e,f,g,h,i);
-case  11 :
-return _invoke__2883.call(this,this$,a,b,c,d,e,f,g,h,i,j);
-case  12 :
-return _invoke__2884.call(this,this$,a,b,c,d,e,f,g,h,i,j,k);
-case  13 :
-return _invoke__2885.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l);
-case  14 :
-return _invoke__2886.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m);
-case  15 :
-return _invoke__2887.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n);
-case  16 :
-return _invoke__2888.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o);
-case  17 :
-return _invoke__2889.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p);
-case  18 :
-return _invoke__2890.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q);
-case  19 :
-return _invoke__2891.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s);
-case  20 :
-return _invoke__2892.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t);
-case  21 :
-return _invoke__2893.call(this,this$,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,s,t,rest);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return _invoke;
-})()
-;
-cljs.core.ICounted = {};
-cljs.core._count = (function _count(coll){
-if(cljs.core.truth_((function (){var and__3546__auto____2895 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2895))
-{return coll.cljs$core$ICounted$_count;
-} else
-{return and__3546__auto____2895;
-}
-})()))
-{return coll.cljs$core$ICounted$_count(coll);
-} else
-{return (function (){var or__3548__auto____2896 = (cljs.core._count[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2896))
-{return or__3548__auto____2896;
-} else
-{var or__3548__auto____2897 = (cljs.core._count["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2897))
-{return or__3548__auto____2897;
-} else
-{throw cljs.core.missing_protocol.call(null,"ICounted.-count",coll);
-}
-}
-})().call(null,coll);
-}
-});
-cljs.core.IEmptyableCollection = {};
-cljs.core._empty = (function _empty(coll){
-if(cljs.core.truth_((function (){var and__3546__auto____2898 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2898))
-{return coll.cljs$core$IEmptyableCollection$_empty;
-} else
-{return and__3546__auto____2898;
-}
-})()))
-{return coll.cljs$core$IEmptyableCollection$_empty(coll);
-} else
-{return (function (){var or__3548__auto____2899 = (cljs.core._empty[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2899))
-{return or__3548__auto____2899;
-} else
-{var or__3548__auto____2900 = (cljs.core._empty["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2900))
-{return or__3548__auto____2900;
-} else
-{throw cljs.core.missing_protocol.call(null,"IEmptyableCollection.-empty",coll);
-}
-}
-})().call(null,coll);
-}
-});
-cljs.core.ICollection = {};
-cljs.core._conj = (function _conj(coll,o){
-if(cljs.core.truth_((function (){var and__3546__auto____2901 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2901))
-{return coll.cljs$core$ICollection$_conj;
-} else
-{return and__3546__auto____2901;
-}
-})()))
-{return coll.cljs$core$ICollection$_conj(coll,o);
-} else
-{return (function (){var or__3548__auto____2902 = (cljs.core._conj[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2902))
-{return or__3548__auto____2902;
-} else
-{var or__3548__auto____2903 = (cljs.core._conj["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2903))
-{return or__3548__auto____2903;
-} else
-{throw cljs.core.missing_protocol.call(null,"ICollection.-conj",coll);
-}
-}
-})().call(null,coll,o);
-}
-});
-cljs.core.IIndexed = {};
-cljs.core._nth = (function() {
-var _nth = null;
-var _nth__2910 = (function (coll,n){
-if(cljs.core.truth_((function (){var and__3546__auto____2904 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2904))
-{return coll.cljs$core$IIndexed$_nth;
-} else
-{return and__3546__auto____2904;
-}
-})()))
-{return coll.cljs$core$IIndexed$_nth(coll,n);
-} else
-{return (function (){var or__3548__auto____2905 = (cljs.core._nth[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2905))
-{return or__3548__auto____2905;
-} else
-{var or__3548__auto____2906 = (cljs.core._nth["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2906))
-{return or__3548__auto____2906;
-} else
-{throw cljs.core.missing_protocol.call(null,"IIndexed.-nth",coll);
-}
-}
-})().call(null,coll,n);
-}
-});
-var _nth__2911 = (function (coll,n,not_found){
-if(cljs.core.truth_((function (){var and__3546__auto____2907 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2907))
-{return coll.cljs$core$IIndexed$_nth;
-} else
-{return and__3546__auto____2907;
-}
-})()))
-{return coll.cljs$core$IIndexed$_nth(coll,n,not_found);
-} else
-{return (function (){var or__3548__auto____2908 = (cljs.core._nth[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2908))
-{return or__3548__auto____2908;
-} else
-{var or__3548__auto____2909 = (cljs.core._nth["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2909))
-{return or__3548__auto____2909;
-} else
-{throw cljs.core.missing_protocol.call(null,"IIndexed.-nth",coll);
-}
-}
-})().call(null,coll,n,not_found);
-}
-});
-_nth = function(coll,n,not_found){
-switch(arguments.length){
-case  2 :
-return _nth__2910.call(this,coll,n);
-case  3 :
-return _nth__2911.call(this,coll,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return _nth;
-})()
-;
-cljs.core.ISeq = {};
-cljs.core._first = (function _first(coll){
-if(cljs.core.truth_((function (){var and__3546__auto____2913 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2913))
-{return coll.cljs$core$ISeq$_first;
-} else
-{return and__3546__auto____2913;
-}
-})()))
-{return coll.cljs$core$ISeq$_first(coll);
-} else
-{return (function (){var or__3548__auto____2914 = (cljs.core._first[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2914))
-{return or__3548__auto____2914;
-} else
-{var or__3548__auto____2915 = (cljs.core._first["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2915))
-{return or__3548__auto____2915;
-} else
-{throw cljs.core.missing_protocol.call(null,"ISeq.-first",coll);
-}
-}
-})().call(null,coll);
-}
-});
-cljs.core._rest = (function _rest(coll){
-if(cljs.core.truth_((function (){var and__3546__auto____2916 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2916))
-{return coll.cljs$core$ISeq$_rest;
-} else
-{return and__3546__auto____2916;
-}
-})()))
-{return coll.cljs$core$ISeq$_rest(coll);
-} else
-{return (function (){var or__3548__auto____2917 = (cljs.core._rest[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2917))
-{return or__3548__auto____2917;
-} else
-{var or__3548__auto____2918 = (cljs.core._rest["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2918))
-{return or__3548__auto____2918;
-} else
-{throw cljs.core.missing_protocol.call(null,"ISeq.-rest",coll);
-}
-}
-})().call(null,coll);
-}
-});
-cljs.core.ILookup = {};
-cljs.core._lookup = (function() {
-var _lookup = null;
-var _lookup__2925 = (function (o,k){
-if(cljs.core.truth_((function (){var and__3546__auto____2919 = o;
-
-if(cljs.core.truth_(and__3546__auto____2919))
-{return o.cljs$core$ILookup$_lookup;
-} else
-{return and__3546__auto____2919;
-}
-})()))
-{return o.cljs$core$ILookup$_lookup(o,k);
-} else
-{return (function (){var or__3548__auto____2920 = (cljs.core._lookup[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2920))
-{return or__3548__auto____2920;
-} else
-{var or__3548__auto____2921 = (cljs.core._lookup["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2921))
-{return or__3548__auto____2921;
-} else
-{throw cljs.core.missing_protocol.call(null,"ILookup.-lookup",o);
-}
-}
-})().call(null,o,k);
-}
-});
-var _lookup__2926 = (function (o,k,not_found){
-if(cljs.core.truth_((function (){var and__3546__auto____2922 = o;
-
-if(cljs.core.truth_(and__3546__auto____2922))
-{return o.cljs$core$ILookup$_lookup;
-} else
-{return and__3546__auto____2922;
-}
-})()))
-{return o.cljs$core$ILookup$_lookup(o,k,not_found);
-} else
-{return (function (){var or__3548__auto____2923 = (cljs.core._lookup[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2923))
-{return or__3548__auto____2923;
-} else
-{var or__3548__auto____2924 = (cljs.core._lookup["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2924))
-{return or__3548__auto____2924;
-} else
-{throw cljs.core.missing_protocol.call(null,"ILookup.-lookup",o);
-}
-}
-})().call(null,o,k,not_found);
-}
-});
-_lookup = function(o,k,not_found){
-switch(arguments.length){
-case  2 :
-return _lookup__2925.call(this,o,k);
-case  3 :
-return _lookup__2926.call(this,o,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return _lookup;
-})()
-;
-cljs.core.IAssociative = {};
-cljs.core._contains_key_QMARK_ = (function _contains_key_QMARK_(coll,k){
-if(cljs.core.truth_((function (){var and__3546__auto____2928 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2928))
-{return coll.cljs$core$IAssociative$_contains_key_QMARK_;
-} else
-{return and__3546__auto____2928;
-}
-})()))
-{return coll.cljs$core$IAssociative$_contains_key_QMARK_(coll,k);
-} else
-{return (function (){var or__3548__auto____2929 = (cljs.core._contains_key_QMARK_[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2929))
-{return or__3548__auto____2929;
-} else
-{var or__3548__auto____2930 = (cljs.core._contains_key_QMARK_["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2930))
-{return or__3548__auto____2930;
-} else
-{throw cljs.core.missing_protocol.call(null,"IAssociative.-contains-key?",coll);
-}
-}
-})().call(null,coll,k);
-}
-});
-cljs.core._assoc = (function _assoc(coll,k,v){
-if(cljs.core.truth_((function (){var and__3546__auto____2931 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2931))
-{return coll.cljs$core$IAssociative$_assoc;
-} else
-{return and__3546__auto____2931;
-}
-})()))
-{return coll.cljs$core$IAssociative$_assoc(coll,k,v);
-} else
-{return (function (){var or__3548__auto____2932 = (cljs.core._assoc[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2932))
-{return or__3548__auto____2932;
-} else
-{var or__3548__auto____2933 = (cljs.core._assoc["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2933))
-{return or__3548__auto____2933;
-} else
-{throw cljs.core.missing_protocol.call(null,"IAssociative.-assoc",coll);
-}
-}
-})().call(null,coll,k,v);
-}
-});
-cljs.core.IMap = {};
-cljs.core._dissoc = (function _dissoc(coll,k){
-if(cljs.core.truth_((function (){var and__3546__auto____2934 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2934))
-{return coll.cljs$core$IMap$_dissoc;
-} else
-{return and__3546__auto____2934;
-}
-})()))
-{return coll.cljs$core$IMap$_dissoc(coll,k);
-} else
-{return (function (){var or__3548__auto____2935 = (cljs.core._dissoc[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2935))
-{return or__3548__auto____2935;
-} else
-{var or__3548__auto____2936 = (cljs.core._dissoc["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2936))
-{return or__3548__auto____2936;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMap.-dissoc",coll);
-}
-}
-})().call(null,coll,k);
-}
-});
-cljs.core.ISet = {};
-cljs.core._disjoin = (function _disjoin(coll,v){
-if(cljs.core.truth_((function (){var and__3546__auto____2937 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2937))
-{return coll.cljs$core$ISet$_disjoin;
-} else
-{return and__3546__auto____2937;
-}
-})()))
-{return coll.cljs$core$ISet$_disjoin(coll,v);
-} else
-{return (function (){var or__3548__auto____2938 = (cljs.core._disjoin[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2938))
-{return or__3548__auto____2938;
-} else
-{var or__3548__auto____2939 = (cljs.core._disjoin["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2939))
-{return or__3548__auto____2939;
-} else
-{throw cljs.core.missing_protocol.call(null,"ISet.-disjoin",coll);
-}
-}
-})().call(null,coll,v);
-}
-});
-cljs.core.IStack = {};
-cljs.core._peek = (function _peek(coll){
-if(cljs.core.truth_((function (){var and__3546__auto____2940 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2940))
-{return coll.cljs$core$IStack$_peek;
-} else
-{return and__3546__auto____2940;
-}
-})()))
-{return coll.cljs$core$IStack$_peek(coll);
-} else
-{return (function (){var or__3548__auto____2941 = (cljs.core._peek[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2941))
-{return or__3548__auto____2941;
-} else
-{var or__3548__auto____2942 = (cljs.core._peek["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2942))
-{return or__3548__auto____2942;
-} else
-{throw cljs.core.missing_protocol.call(null,"IStack.-peek",coll);
-}
-}
-})().call(null,coll);
-}
-});
-cljs.core._pop = (function _pop(coll){
-if(cljs.core.truth_((function (){var and__3546__auto____2943 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2943))
-{return coll.cljs$core$IStack$_pop;
-} else
-{return and__3546__auto____2943;
-}
-})()))
-{return coll.cljs$core$IStack$_pop(coll);
-} else
-{return (function (){var or__3548__auto____2944 = (cljs.core._pop[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2944))
-{return or__3548__auto____2944;
-} else
-{var or__3548__auto____2945 = (cljs.core._pop["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2945))
-{return or__3548__auto____2945;
-} else
-{throw cljs.core.missing_protocol.call(null,"IStack.-pop",coll);
-}
-}
-})().call(null,coll);
-}
-});
-cljs.core.IVector = {};
-cljs.core._assoc_n = (function _assoc_n(coll,n,val){
-if(cljs.core.truth_((function (){var and__3546__auto____2946 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2946))
-{return coll.cljs$core$IVector$_assoc_n;
-} else
-{return and__3546__auto____2946;
-}
-})()))
-{return coll.cljs$core$IVector$_assoc_n(coll,n,val);
-} else
-{return (function (){var or__3548__auto____2947 = (cljs.core._assoc_n[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2947))
-{return or__3548__auto____2947;
-} else
-{var or__3548__auto____2948 = (cljs.core._assoc_n["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2948))
-{return or__3548__auto____2948;
-} else
-{throw cljs.core.missing_protocol.call(null,"IVector.-assoc-n",coll);
-}
-}
-})().call(null,coll,n,val);
-}
-});
-cljs.core.IDeref = {};
-cljs.core._deref = (function _deref(o){
-if(cljs.core.truth_((function (){var and__3546__auto____2949 = o;
-
-if(cljs.core.truth_(and__3546__auto____2949))
-{return o.cljs$core$IDeref$_deref;
-} else
-{return and__3546__auto____2949;
-}
-})()))
-{return o.cljs$core$IDeref$_deref(o);
-} else
-{return (function (){var or__3548__auto____2950 = (cljs.core._deref[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2950))
-{return or__3548__auto____2950;
-} else
-{var or__3548__auto____2951 = (cljs.core._deref["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2951))
-{return or__3548__auto____2951;
-} else
-{throw cljs.core.missing_protocol.call(null,"IDeref.-deref",o);
-}
-}
-})().call(null,o);
-}
-});
-cljs.core.IDerefWithTimeout = {};
-cljs.core._deref_with_timeout = (function _deref_with_timeout(o,msec,timeout_val){
-if(cljs.core.truth_((function (){var and__3546__auto____2952 = o;
-
-if(cljs.core.truth_(and__3546__auto____2952))
-{return o.cljs$core$IDerefWithTimeout$_deref_with_timeout;
-} else
-{return and__3546__auto____2952;
-}
-})()))
-{return o.cljs$core$IDerefWithTimeout$_deref_with_timeout(o,msec,timeout_val);
-} else
-{return (function (){var or__3548__auto____2953 = (cljs.core._deref_with_timeout[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2953))
-{return or__3548__auto____2953;
-} else
-{var or__3548__auto____2954 = (cljs.core._deref_with_timeout["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2954))
-{return or__3548__auto____2954;
-} else
-{throw cljs.core.missing_protocol.call(null,"IDerefWithTimeout.-deref-with-timeout",o);
-}
-}
-})().call(null,o,msec,timeout_val);
-}
-});
-cljs.core.IMeta = {};
-cljs.core._meta = (function _meta(o){
-if(cljs.core.truth_((function (){var and__3546__auto____2955 = o;
-
-if(cljs.core.truth_(and__3546__auto____2955))
-{return o.cljs$core$IMeta$_meta;
-} else
-{return and__3546__auto____2955;
-}
-})()))
-{return o.cljs$core$IMeta$_meta(o);
-} else
-{return (function (){var or__3548__auto____2956 = (cljs.core._meta[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2956))
-{return or__3548__auto____2956;
-} else
-{var or__3548__auto____2957 = (cljs.core._meta["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2957))
-{return or__3548__auto____2957;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMeta.-meta",o);
-}
-}
-})().call(null,o);
-}
-});
-cljs.core.IWithMeta = {};
-cljs.core._with_meta = (function _with_meta(o,meta){
-if(cljs.core.truth_((function (){var and__3546__auto____2958 = o;
-
-if(cljs.core.truth_(and__3546__auto____2958))
-{return o.cljs$core$IWithMeta$_with_meta;
-} else
-{return and__3546__auto____2958;
-}
-})()))
-{return o.cljs$core$IWithMeta$_with_meta(o,meta);
-} else
-{return (function (){var or__3548__auto____2959 = (cljs.core._with_meta[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2959))
-{return or__3548__auto____2959;
-} else
-{var or__3548__auto____2960 = (cljs.core._with_meta["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2960))
-{return or__3548__auto____2960;
-} else
-{throw cljs.core.missing_protocol.call(null,"IWithMeta.-with-meta",o);
-}
-}
-})().call(null,o,meta);
-}
-});
-cljs.core.IReduce = {};
-cljs.core._reduce = (function() {
-var _reduce = null;
-var _reduce__2967 = (function (coll,f){
-if(cljs.core.truth_((function (){var and__3546__auto____2961 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2961))
-{return coll.cljs$core$IReduce$_reduce;
-} else
-{return and__3546__auto____2961;
-}
-})()))
-{return coll.cljs$core$IReduce$_reduce(coll,f);
-} else
-{return (function (){var or__3548__auto____2962 = (cljs.core._reduce[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2962))
-{return or__3548__auto____2962;
-} else
-{var or__3548__auto____2963 = (cljs.core._reduce["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2963))
-{return or__3548__auto____2963;
-} else
-{throw cljs.core.missing_protocol.call(null,"IReduce.-reduce",coll);
-}
-}
-})().call(null,coll,f);
-}
-});
-var _reduce__2968 = (function (coll,f,start){
-if(cljs.core.truth_((function (){var and__3546__auto____2964 = coll;
-
-if(cljs.core.truth_(and__3546__auto____2964))
-{return coll.cljs$core$IReduce$_reduce;
-} else
-{return and__3546__auto____2964;
-}
-})()))
-{return coll.cljs$core$IReduce$_reduce(coll,f,start);
-} else
-{return (function (){var or__3548__auto____2965 = (cljs.core._reduce[goog.typeOf.call(null,coll)]);
-
-if(cljs.core.truth_(or__3548__auto____2965))
-{return or__3548__auto____2965;
-} else
-{var or__3548__auto____2966 = (cljs.core._reduce["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2966))
-{return or__3548__auto____2966;
-} else
-{throw cljs.core.missing_protocol.call(null,"IReduce.-reduce",coll);
-}
-}
-})().call(null,coll,f,start);
-}
-});
-_reduce = function(coll,f,start){
-switch(arguments.length){
-case  2 :
-return _reduce__2967.call(this,coll,f);
-case  3 :
-return _reduce__2968.call(this,coll,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return _reduce;
-})()
-;
-cljs.core.IEquiv = {};
-cljs.core._equiv = (function _equiv(o,other){
-if(cljs.core.truth_((function (){var and__3546__auto____2970 = o;
-
-if(cljs.core.truth_(and__3546__auto____2970))
-{return o.cljs$core$IEquiv$_equiv;
-} else
-{return and__3546__auto____2970;
-}
-})()))
-{return o.cljs$core$IEquiv$_equiv(o,other);
-} else
-{return (function (){var or__3548__auto____2971 = (cljs.core._equiv[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2971))
-{return or__3548__auto____2971;
-} else
-{var or__3548__auto____2972 = (cljs.core._equiv["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2972))
-{return or__3548__auto____2972;
-} else
-{throw cljs.core.missing_protocol.call(null,"IEquiv.-equiv",o);
-}
-}
-})().call(null,o,other);
-}
-});
-cljs.core.IHash = {};
-cljs.core._hash = (function _hash(o){
-if(cljs.core.truth_((function (){var and__3546__auto____2973 = o;
-
-if(cljs.core.truth_(and__3546__auto____2973))
-{return o.cljs$core$IHash$_hash;
-} else
-{return and__3546__auto____2973;
-}
-})()))
-{return o.cljs$core$IHash$_hash(o);
-} else
-{return (function (){var or__3548__auto____2974 = (cljs.core._hash[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2974))
-{return or__3548__auto____2974;
-} else
-{var or__3548__auto____2975 = (cljs.core._hash["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2975))
-{return or__3548__auto____2975;
-} else
-{throw cljs.core.missing_protocol.call(null,"IHash.-hash",o);
-}
-}
-})().call(null,o);
-}
-});
-cljs.core.ISeqable = {};
-cljs.core._seq = (function _seq(o){
-if(cljs.core.truth_((function (){var and__3546__auto____2976 = o;
-
-if(cljs.core.truth_(and__3546__auto____2976))
-{return o.cljs$core$ISeqable$_seq;
-} else
-{return and__3546__auto____2976;
-}
-})()))
-{return o.cljs$core$ISeqable$_seq(o);
-} else
-{return (function (){var or__3548__auto____2977 = (cljs.core._seq[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2977))
-{return or__3548__auto____2977;
-} else
-{var or__3548__auto____2978 = (cljs.core._seq["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2978))
-{return or__3548__auto____2978;
-} else
-{throw cljs.core.missing_protocol.call(null,"ISeqable.-seq",o);
-}
-}
-})().call(null,o);
-}
-});
-cljs.core.ISequential = {};
-cljs.core.IRecord = {};
-cljs.core.IPrintable = {};
-cljs.core._pr_seq = (function _pr_seq(o,opts){
-if(cljs.core.truth_((function (){var and__3546__auto____2979 = o;
-
-if(cljs.core.truth_(and__3546__auto____2979))
-{return o.cljs$core$IPrintable$_pr_seq;
-} else
-{return and__3546__auto____2979;
-}
-})()))
-{return o.cljs$core$IPrintable$_pr_seq(o,opts);
-} else
-{return (function (){var or__3548__auto____2980 = (cljs.core._pr_seq[goog.typeOf.call(null,o)]);
-
-if(cljs.core.truth_(or__3548__auto____2980))
-{return or__3548__auto____2980;
-} else
-{var or__3548__auto____2981 = (cljs.core._pr_seq["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2981))
-{return or__3548__auto____2981;
-} else
-{throw cljs.core.missing_protocol.call(null,"IPrintable.-pr-seq",o);
-}
-}
-})().call(null,o,opts);
-}
-});
-cljs.core.IPending = {};
-cljs.core._realized_QMARK_ = (function _realized_QMARK_(d){
-if(cljs.core.truth_((function (){var and__3546__auto____2982 = d;
-
-if(cljs.core.truth_(and__3546__auto____2982))
-{return d.cljs$core$IPending$_realized_QMARK_;
-} else
-{return and__3546__auto____2982;
-}
-})()))
-{return d.cljs$core$IPending$_realized_QMARK_(d);
-} else
-{return (function (){var or__3548__auto____2983 = (cljs.core._realized_QMARK_[goog.typeOf.call(null,d)]);
-
-if(cljs.core.truth_(or__3548__auto____2983))
-{return or__3548__auto____2983;
-} else
-{var or__3548__auto____2984 = (cljs.core._realized_QMARK_["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2984))
-{return or__3548__auto____2984;
-} else
-{throw cljs.core.missing_protocol.call(null,"IPending.-realized?",d);
-}
-}
-})().call(null,d);
-}
-});
-cljs.core.IWatchable = {};
-cljs.core._notify_watches = (function _notify_watches(this$,oldval,newval){
-if(cljs.core.truth_((function (){var and__3546__auto____2985 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2985))
-{return this$.cljs$core$IWatchable$_notify_watches;
-} else
-{return and__3546__auto____2985;
-}
-})()))
-{return this$.cljs$core$IWatchable$_notify_watches(this$,oldval,newval);
-} else
-{return (function (){var or__3548__auto____2986 = (cljs.core._notify_watches[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2986))
-{return or__3548__auto____2986;
-} else
-{var or__3548__auto____2987 = (cljs.core._notify_watches["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2987))
-{return or__3548__auto____2987;
-} else
-{throw cljs.core.missing_protocol.call(null,"IWatchable.-notify-watches",this$);
-}
-}
-})().call(null,this$,oldval,newval);
-}
-});
-cljs.core._add_watch = (function _add_watch(this$,key,f){
-if(cljs.core.truth_((function (){var and__3546__auto____2988 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2988))
-{return this$.cljs$core$IWatchable$_add_watch;
-} else
-{return and__3546__auto____2988;
-}
-})()))
-{return this$.cljs$core$IWatchable$_add_watch(this$,key,f);
-} else
-{return (function (){var or__3548__auto____2989 = (cljs.core._add_watch[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2989))
-{return or__3548__auto____2989;
-} else
-{var or__3548__auto____2990 = (cljs.core._add_watch["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2990))
-{return or__3548__auto____2990;
-} else
-{throw cljs.core.missing_protocol.call(null,"IWatchable.-add-watch",this$);
-}
-}
-})().call(null,this$,key,f);
-}
-});
-cljs.core._remove_watch = (function _remove_watch(this$,key){
-if(cljs.core.truth_((function (){var and__3546__auto____2991 = this$;
-
-if(cljs.core.truth_(and__3546__auto____2991))
-{return this$.cljs$core$IWatchable$_remove_watch;
-} else
-{return and__3546__auto____2991;
-}
-})()))
-{return this$.cljs$core$IWatchable$_remove_watch(this$,key);
-} else
-{return (function (){var or__3548__auto____2992 = (cljs.core._remove_watch[goog.typeOf.call(null,this$)]);
-
-if(cljs.core.truth_(or__3548__auto____2992))
-{return or__3548__auto____2992;
-} else
-{var or__3548__auto____2993 = (cljs.core._remove_watch["_"]);
-
-if(cljs.core.truth_(or__3548__auto____2993))
-{return or__3548__auto____2993;
-} else
-{throw cljs.core.missing_protocol.call(null,"IWatchable.-remove-watch",this$);
-}
-}
-})().call(null,this$,key);
-}
-});
-/**
-* Tests if 2 arguments are the same object
-*/
-cljs.core.identical_QMARK_ = (function identical_QMARK_(x,y){
-return (x === y);
-});
-/**
-* Equality. Returns true if x equals y, false if not. Compares
-* numbers and collections in a type-independent manner.  Clojure's immutable data
-* structures define -equiv (and thus =) as a value, not an identity,
-* comparison.
-*/
-cljs.core._EQ_ = (function _EQ_(x,y){
-return cljs.core._equiv.call(null,x,y);
-});
-/**
-* Returns true if x is nil, false otherwise.
-*/
-cljs.core.nil_QMARK_ = (function nil_QMARK_(x){
-return (x === null);
-});
-cljs.core.type = (function type(x){
-return (x).constructor;
-});
-(cljs.core.IHash["null"] = true);
-(cljs.core._hash["null"] = (function (o){
-return 0;
-}));
-(cljs.core.ILookup["null"] = true);
-(cljs.core._lookup["null"] = (function() {
-var G__2994 = null;
-var G__2994__2995 = (function (o,k){
-return null;
-});
-var G__2994__2996 = (function (o,k,not_found){
-return not_found;
-});
-G__2994 = function(o,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__2994__2995.call(this,o,k);
-case  3 :
-return G__2994__2996.call(this,o,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__2994;
-})()
-);
-(cljs.core.IAssociative["null"] = true);
-(cljs.core._assoc["null"] = (function (_,k,v){
-return cljs.core.hash_map.call(null,k,v);
-}));
-(cljs.core.ICollection["null"] = true);
-(cljs.core._conj["null"] = (function (_,o){
-return cljs.core.list.call(null,o);
-}));
-(cljs.core.IReduce["null"] = true);
-(cljs.core._reduce["null"] = (function() {
-var G__2998 = null;
-var G__2998__2999 = (function (_,f){
-return f.call(null);
-});
-var G__2998__3000 = (function (_,f,start){
-return start;
-});
-G__2998 = function(_,f,start){
-switch(arguments.length){
-case  2 :
-return G__2998__2999.call(this,_,f);
-case  3 :
-return G__2998__3000.call(this,_,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__2998;
-})()
-);
-(cljs.core.IPrintable["null"] = true);
-(cljs.core._pr_seq["null"] = (function (o){
-return cljs.core.list.call(null,"nil");
-}));
-(cljs.core.ISet["null"] = true);
-(cljs.core._disjoin["null"] = (function (_,v){
-return null;
-}));
-(cljs.core.ICounted["null"] = true);
-(cljs.core._count["null"] = (function (_){
-return 0;
-}));
-(cljs.core.IStack["null"] = true);
-(cljs.core._peek["null"] = (function (_){
-return null;
-}));
-(cljs.core._pop["null"] = (function (_){
-return null;
-}));
-(cljs.core.ISeq["null"] = true);
-(cljs.core._first["null"] = (function (_){
-return null;
-}));
-(cljs.core._rest["null"] = (function (_){
-return cljs.core.list.call(null);
-}));
-(cljs.core.IEquiv["null"] = true);
-(cljs.core._equiv["null"] = (function (_,o){
-return (o === null);
-}));
-(cljs.core.IWithMeta["null"] = true);
-(cljs.core._with_meta["null"] = (function (_,meta){
-return null;
-}));
-(cljs.core.IMeta["null"] = true);
-(cljs.core._meta["null"] = (function (_){
-return null;
-}));
-(cljs.core.IIndexed["null"] = true);
-(cljs.core._nth["null"] = (function() {
-var G__3002 = null;
-var G__3002__3003 = (function (_,n){
-return null;
-});
-var G__3002__3004 = (function (_,n,not_found){
-return not_found;
-});
-G__3002 = function(_,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3002__3003.call(this,_,n);
-case  3 :
-return G__3002__3004.call(this,_,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3002;
-})()
-);
-(cljs.core.IEmptyableCollection["null"] = true);
-(cljs.core._empty["null"] = (function (_){
-return null;
-}));
-(cljs.core.IMap["null"] = true);
-(cljs.core._dissoc["null"] = (function (_,k){
-return null;
-}));
-Date.prototype.cljs$core$IEquiv$ = true;
-Date.prototype.cljs$core$IEquiv$_equiv = (function (o,other){
-return (o.toString() === other.toString());
-});
-(cljs.core.IHash["number"] = true);
-(cljs.core._hash["number"] = (function (o){
-return o;
-}));
-(cljs.core.IEquiv["number"] = true);
-(cljs.core._equiv["number"] = (function (x,o){
-return (x === o);
-}));
-(cljs.core.IHash["boolean"] = true);
-(cljs.core._hash["boolean"] = (function (o){
-return ((o === true) ? 1 : 0);
-}));
-(cljs.core.IHash["function"] = true);
-(cljs.core._hash["function"] = (function (o){
-return goog.getUid.call(null,o);
-}));
-/**
-* Returns a number one greater than num.
-*/
-cljs.core.inc = (function inc(x){
-return (x + 1);
-});
-/**
-* Accepts any collection which satisfies the ICount and IIndexed protocols and
-* reduces them without incurring seq initialization
-*/
-cljs.core.ci_reduce = (function() {
-var ci_reduce = null;
-var ci_reduce__3012 = (function (cicoll,f){
-if(cljs.core.truth_(cljs.core._EQ_.call(null,0,cljs.core._count.call(null,cicoll))))
-{return f.call(null);
-} else
-{var val__3006 = cljs.core._nth.call(null,cicoll,0);
-var n__3007 = 1;
-
-while(true){
-if(cljs.core.truth_((n__3007 < cljs.core._count.call(null,cicoll))))
-{{
-var G__3016 = f.call(null,val__3006,cljs.core._nth.call(null,cicoll,n__3007));
-var G__3017 = (n__3007 + 1);
-val__3006 = G__3016;
-n__3007 = G__3017;
-continue;
-}
-} else
-{return val__3006;
-}
-break;
-}
-}
-});
-var ci_reduce__3013 = (function (cicoll,f,val){
-var val__3008 = val;
-var n__3009 = 0;
-
-while(true){
-if(cljs.core.truth_((n__3009 < cljs.core._count.call(null,cicoll))))
-{{
-var G__3018 = f.call(null,val__3008,cljs.core._nth.call(null,cicoll,n__3009));
-var G__3019 = (n__3009 + 1);
-val__3008 = G__3018;
-n__3009 = G__3019;
-continue;
-}
-} else
-{return val__3008;
-}
-break;
-}
-});
-var ci_reduce__3014 = (function (cicoll,f,val,idx){
-var val__3010 = val;
-var n__3011 = idx;
-
-while(true){
-if(cljs.core.truth_((n__3011 < cljs.core._count.call(null,cicoll))))
-{{
-var G__3020 = f.call(null,val__3010,cljs.core._nth.call(null,cicoll,n__3011));
-var G__3021 = (n__3011 + 1);
-val__3010 = G__3020;
-n__3011 = G__3021;
-continue;
-}
-} else
-{return val__3010;
-}
-break;
-}
-});
-ci_reduce = function(cicoll,f,val,idx){
-switch(arguments.length){
-case  2 :
-return ci_reduce__3012.call(this,cicoll,f);
-case  3 :
-return ci_reduce__3013.call(this,cicoll,f,val);
-case  4 :
-return ci_reduce__3014.call(this,cicoll,f,val,idx);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return ci_reduce;
-})()
-;
-
-/**
-* @constructor
-*/
-cljs.core.IndexedSeq = (function (a,i){
-this.a = a;
-this.i = i;
-})
-cljs.core.IndexedSeq.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.IndexedSeq");
-});
-cljs.core.IndexedSeq.prototype.cljs$core$IHash$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3022 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.IndexedSeq.prototype.cljs$core$IReduce$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$IReduce$_reduce = (function() {
-var G__3035 = null;
-var G__3035__3036 = (function (_,f){
-var this__3023 = this;
-return cljs.core.ci_reduce.call(null,this__3023.a,f,(this__3023.a[this__3023.i]),(this__3023.i + 1));
-});
-var G__3035__3037 = (function (_,f,start){
-var this__3024 = this;
-return cljs.core.ci_reduce.call(null,this__3024.a,f,start,this__3024.i);
-});
-G__3035 = function(_,f,start){
-switch(arguments.length){
-case  2 :
-return G__3035__3036.call(this,_,f);
-case  3 :
-return G__3035__3037.call(this,_,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3035;
-})()
-;
-cljs.core.IndexedSeq.prototype.cljs$core$ICollection$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3025 = this;
-return cljs.core.cons.call(null,o,coll);
-});
-cljs.core.IndexedSeq.prototype.cljs$core$IEquiv$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3026 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.IndexedSeq.prototype.cljs$core$ISequential$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$IIndexed$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$IIndexed$_nth = (function() {
-var G__3039 = null;
-var G__3039__3040 = (function (coll,n){
-var this__3027 = this;
-var i__3028 = (n + this__3027.i);
-
-if(cljs.core.truth_((i__3028 < this__3027.a.length)))
-{return (this__3027.a[i__3028]);
-} else
-{return null;
-}
-});
-var G__3039__3041 = (function (coll,n,not_found){
-var this__3029 = this;
-var i__3030 = (n + this__3029.i);
-
-if(cljs.core.truth_((i__3030 < this__3029.a.length)))
-{return (this__3029.a[i__3030]);
-} else
-{return not_found;
-}
-});
-G__3039 = function(coll,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3039__3040.call(this,coll,n);
-case  3 :
-return G__3039__3041.call(this,coll,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3039;
-})()
-;
-cljs.core.IndexedSeq.prototype.cljs$core$ICounted$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$ICounted$_count = (function (_){
-var this__3031 = this;
-return (this__3031.a.length - this__3031.i);
-});
-cljs.core.IndexedSeq.prototype.cljs$core$ISeq$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$ISeq$_first = (function (_){
-var this__3032 = this;
-return (this__3032.a[this__3032.i]);
-});
-cljs.core.IndexedSeq.prototype.cljs$core$ISeq$_rest = (function (_){
-var this__3033 = this;
-if(cljs.core.truth_(((this__3033.i + 1) < this__3033.a.length)))
-{return (new cljs.core.IndexedSeq(this__3033.a,(this__3033.i + 1)));
-} else
-{return cljs.core.list.call(null);
-}
-});
-cljs.core.IndexedSeq.prototype.cljs$core$ISeqable$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$ISeqable$_seq = (function (this$){
-var this__3034 = this;
-return this$;
-});
-cljs.core.IndexedSeq;
-cljs.core.prim_seq = (function prim_seq(prim,i){
-if(cljs.core.truth_(cljs.core._EQ_.call(null,0,prim.length)))
-{return null;
-} else
-{return (new cljs.core.IndexedSeq(prim,i));
-}
-});
-cljs.core.array_seq = (function array_seq(array,i){
-return cljs.core.prim_seq.call(null,array,i);
-});
-(cljs.core.IReduce["array"] = true);
-(cljs.core._reduce["array"] = (function() {
-var G__3043 = null;
-var G__3043__3044 = (function (array,f){
-return cljs.core.ci_reduce.call(null,array,f);
-});
-var G__3043__3045 = (function (array,f,start){
-return cljs.core.ci_reduce.call(null,array,f,start);
-});
-G__3043 = function(array,f,start){
-switch(arguments.length){
-case  2 :
-return G__3043__3044.call(this,array,f);
-case  3 :
-return G__3043__3045.call(this,array,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3043;
-})()
-);
-(cljs.core.ILookup["array"] = true);
-(cljs.core._lookup["array"] = (function() {
-var G__3047 = null;
-var G__3047__3048 = (function (array,k){
-return (array[k]);
-});
-var G__3047__3049 = (function (array,k,not_found){
-return cljs.core._nth.call(null,array,k,not_found);
-});
-G__3047 = function(array,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3047__3048.call(this,array,k);
-case  3 :
-return G__3047__3049.call(this,array,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3047;
-})()
-);
-(cljs.core.IIndexed["array"] = true);
-(cljs.core._nth["array"] = (function() {
-var G__3051 = null;
-var G__3051__3052 = (function (array,n){
-if(cljs.core.truth_((n < array.length)))
-{return (array[n]);
-} else
-{return null;
-}
-});
-var G__3051__3053 = (function (array,n,not_found){
-if(cljs.core.truth_((n < array.length)))
-{return (array[n]);
-} else
-{return not_found;
-}
-});
-G__3051 = function(array,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3051__3052.call(this,array,n);
-case  3 :
-return G__3051__3053.call(this,array,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3051;
-})()
-);
-(cljs.core.ICounted["array"] = true);
-(cljs.core._count["array"] = (function (a){
-return a.length;
-}));
-(cljs.core.ISeqable["array"] = true);
-(cljs.core._seq["array"] = (function (array){
-return cljs.core.array_seq.call(null,array,0);
-}));
-/**
-* Returns a seq on the collection. If the collection is
-* empty, returns nil.  (seq nil) returns nil. seq also works on
-* Strings.
-*/
-cljs.core.seq = (function seq(coll){
-if(cljs.core.truth_(coll))
-{return cljs.core._seq.call(null,coll);
-} else
-{return null;
-}
-});
-/**
-* Returns the first item in the collection. Calls seq on its
-* argument. If coll is nil, returns nil.
-*/
-cljs.core.first = (function first(coll){
-var temp__3698__auto____3055 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3055))
-{var s__3056 = temp__3698__auto____3055;
-
-return cljs.core._first.call(null,s__3056);
-} else
-{return null;
-}
-});
-/**
-* Returns a possibly empty seq of the items after the first. Calls seq on its
-* argument.
-*/
-cljs.core.rest = (function rest(coll){
-return cljs.core._rest.call(null,cljs.core.seq.call(null,coll));
-});
-/**
-* Returns a seq of the items after the first. Calls seq on its
-* argument.  If there are no more items, returns nil
-*/
-cljs.core.next = (function next(coll){
-if(cljs.core.truth_(coll))
-{return cljs.core.seq.call(null,cljs.core.rest.call(null,coll));
-} else
-{return null;
-}
-});
-/**
-* Same as (first (next x))
-*/
-cljs.core.second = (function second(coll){
-return cljs.core.first.call(null,cljs.core.next.call(null,coll));
-});
-/**
-* Same as (first (first x))
-*/
-cljs.core.ffirst = (function ffirst(coll){
-return cljs.core.first.call(null,cljs.core.first.call(null,coll));
-});
-/**
-* Same as (next (first x))
-*/
-cljs.core.nfirst = (function nfirst(coll){
-return cljs.core.next.call(null,cljs.core.first.call(null,coll));
-});
-/**
-* Same as (first (next x))
-*/
-cljs.core.fnext = (function fnext(coll){
-return cljs.core.first.call(null,cljs.core.next.call(null,coll));
-});
-/**
-* Same as (next (next x))
-*/
-cljs.core.nnext = (function nnext(coll){
-return cljs.core.next.call(null,cljs.core.next.call(null,coll));
-});
-/**
-* Return the last item in coll, in linear time
-*/
-cljs.core.last = (function last(s){
-while(true){
-if(cljs.core.truth_(cljs.core.next.call(null,s)))
-{{
-var G__3057 = cljs.core.next.call(null,s);
-s = G__3057;
-continue;
-}
-} else
-{return cljs.core.first.call(null,s);
-}
-break;
-}
-});
-(cljs.core.ICounted["_"] = true);
-(cljs.core._count["_"] = (function (x){
-var s__3058 = cljs.core.seq.call(null,x);
-var n__3059 = 0;
-
-while(true){
-if(cljs.core.truth_(s__3058))
-{{
-var G__3060 = cljs.core.next.call(null,s__3058);
-var G__3061 = (n__3059 + 1);
-s__3058 = G__3060;
-n__3059 = G__3061;
-continue;
-}
-} else
-{return n__3059;
-}
-break;
-}
-}));
-(cljs.core.IEquiv["_"] = true);
-(cljs.core._equiv["_"] = (function (x,o){
-return (x === o);
-}));
-/**
-* Returns true if x is logical false, false otherwise.
-*/
-cljs.core.not = (function not(x){
-if(cljs.core.truth_(x))
-{return false;
-} else
-{return true;
-}
-});
-/**
-* conj[oin]. Returns a new collection with the xs
-* 'added'. (conj nil item) returns (item).  The 'addition' may
-* happen at different 'places' depending on the concrete type.
-* @param {...*} var_args
-*/
-cljs.core.conj = (function() {
-var conj = null;
-var conj__3062 = (function (coll,x){
-return cljs.core._conj.call(null,coll,x);
-});
-var conj__3063 = (function() { 
-var G__3065__delegate = function (coll,x,xs){
-while(true){
-if(cljs.core.truth_(xs))
-{{
-var G__3066 = conj.call(null,coll,x);
-var G__3067 = cljs.core.first.call(null,xs);
-var G__3068 = cljs.core.next.call(null,xs);
-coll = G__3066;
-x = G__3067;
-xs = G__3068;
-continue;
-}
-} else
-{return conj.call(null,coll,x);
-}
-break;
-}
-};
-var G__3065 = function (coll,x,var_args){
-var xs = null;
-if (goog.isDef(var_args)) {
-  xs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3065__delegate.call(this, coll, x, xs);
-};
-G__3065.cljs$lang$maxFixedArity = 2;
-G__3065.cljs$lang$applyTo = (function (arglist__3069){
-var coll = cljs.core.first(arglist__3069);
-var x = cljs.core.first(cljs.core.next(arglist__3069));
-var xs = cljs.core.rest(cljs.core.next(arglist__3069));
-return G__3065__delegate.call(this, coll, x, xs);
-});
-return G__3065;
-})()
-;
-conj = function(coll,x,var_args){
-var xs = var_args;
-switch(arguments.length){
-case  2 :
-return conj__3062.call(this,coll,x);
-default:
-return conj__3063.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-conj.cljs$lang$maxFixedArity = 2;
-conj.cljs$lang$applyTo = conj__3063.cljs$lang$applyTo;
-return conj;
-})()
-;
-/**
-* Returns an empty collection of the same category as coll, or nil
-*/
-cljs.core.empty = (function empty(coll){
-return cljs.core._empty.call(null,coll);
-});
-/**
-* Returns the number of items in the collection. (count nil) returns
-* 0.  Also works on strings, arrays, and Maps
-*/
-cljs.core.count = (function count(coll){
-return cljs.core._count.call(null,coll);
-});
-/**
-* Returns the value at the index. get returns nil if index out of
-* bounds, nth throws an exception unless not-found is supplied.  nth
-* also works for strings, arrays, regex Matchers and Lists, and,
-* in O(n) time, for sequences.
-*/
-cljs.core.nth = (function() {
-var nth = null;
-var nth__3070 = (function (coll,n){
-return cljs.core._nth.call(null,coll,Math.floor(n));
-});
-var nth__3071 = (function (coll,n,not_found){
-return cljs.core._nth.call(null,coll,Math.floor(n),not_found);
-});
-nth = function(coll,n,not_found){
-switch(arguments.length){
-case  2 :
-return nth__3070.call(this,coll,n);
-case  3 :
-return nth__3071.call(this,coll,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return nth;
-})()
-;
-/**
-* Returns the value mapped to key, not-found or nil if key not present.
-*/
-cljs.core.get = (function() {
-var get = null;
-var get__3073 = (function (o,k){
-return cljs.core._lookup.call(null,o,k);
-});
-var get__3074 = (function (o,k,not_found){
-return cljs.core._lookup.call(null,o,k,not_found);
-});
-get = function(o,k,not_found){
-switch(arguments.length){
-case  2 :
-return get__3073.call(this,o,k);
-case  3 :
-return get__3074.call(this,o,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return get;
-})()
-;
-/**
-* assoc[iate]. When applied to a map, returns a new map of the
-* same (hashed/sorted) type, that contains the mapping of key(s) to
-* val(s). When applied to a vector, returns a new vector that
-* contains val at index.
-* @param {...*} var_args
-*/
-cljs.core.assoc = (function() {
-var assoc = null;
-var assoc__3077 = (function (coll,k,v){
-return cljs.core._assoc.call(null,coll,k,v);
-});
-var assoc__3078 = (function() { 
-var G__3080__delegate = function (coll,k,v,kvs){
-while(true){
-var ret__3076 = assoc.call(null,coll,k,v);
-
-if(cljs.core.truth_(kvs))
-{{
-var G__3081 = ret__3076;
-var G__3082 = cljs.core.first.call(null,kvs);
-var G__3083 = cljs.core.second.call(null,kvs);
-var G__3084 = cljs.core.nnext.call(null,kvs);
-coll = G__3081;
-k = G__3082;
-v = G__3083;
-kvs = G__3084;
-continue;
-}
-} else
-{return ret__3076;
-}
-break;
-}
-};
-var G__3080 = function (coll,k,v,var_args){
-var kvs = null;
-if (goog.isDef(var_args)) {
-  kvs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3080__delegate.call(this, coll, k, v, kvs);
-};
-G__3080.cljs$lang$maxFixedArity = 3;
-G__3080.cljs$lang$applyTo = (function (arglist__3085){
-var coll = cljs.core.first(arglist__3085);
-var k = cljs.core.first(cljs.core.next(arglist__3085));
-var v = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3085)));
-var kvs = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3085)));
-return G__3080__delegate.call(this, coll, k, v, kvs);
-});
-return G__3080;
-})()
-;
-assoc = function(coll,k,v,var_args){
-var kvs = var_args;
-switch(arguments.length){
-case  3 :
-return assoc__3077.call(this,coll,k,v);
-default:
-return assoc__3078.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-assoc.cljs$lang$maxFixedArity = 3;
-assoc.cljs$lang$applyTo = assoc__3078.cljs$lang$applyTo;
-return assoc;
-})()
-;
-/**
-* dissoc[iate]. Returns a new map of the same (hashed/sorted) type,
-* that does not contain a mapping for key(s).
-* @param {...*} var_args
-*/
-cljs.core.dissoc = (function() {
-var dissoc = null;
-var dissoc__3087 = (function (coll){
-return coll;
-});
-var dissoc__3088 = (function (coll,k){
-return cljs.core._dissoc.call(null,coll,k);
-});
-var dissoc__3089 = (function() { 
-var G__3091__delegate = function (coll,k,ks){
-while(true){
-var ret__3086 = dissoc.call(null,coll,k);
-
-if(cljs.core.truth_(ks))
-{{
-var G__3092 = ret__3086;
-var G__3093 = cljs.core.first.call(null,ks);
-var G__3094 = cljs.core.next.call(null,ks);
-coll = G__3092;
-k = G__3093;
-ks = G__3094;
-continue;
-}
-} else
-{return ret__3086;
-}
-break;
-}
-};
-var G__3091 = function (coll,k,var_args){
-var ks = null;
-if (goog.isDef(var_args)) {
-  ks = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3091__delegate.call(this, coll, k, ks);
-};
-G__3091.cljs$lang$maxFixedArity = 2;
-G__3091.cljs$lang$applyTo = (function (arglist__3095){
-var coll = cljs.core.first(arglist__3095);
-var k = cljs.core.first(cljs.core.next(arglist__3095));
-var ks = cljs.core.rest(cljs.core.next(arglist__3095));
-return G__3091__delegate.call(this, coll, k, ks);
-});
-return G__3091;
-})()
-;
-dissoc = function(coll,k,var_args){
-var ks = var_args;
-switch(arguments.length){
-case  1 :
-return dissoc__3087.call(this,coll);
-case  2 :
-return dissoc__3088.call(this,coll,k);
-default:
-return dissoc__3089.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-dissoc.cljs$lang$maxFixedArity = 2;
-dissoc.cljs$lang$applyTo = dissoc__3089.cljs$lang$applyTo;
-return dissoc;
-})()
-;
-/**
-* Returns an object of the same type and value as obj, with
-* map m as its metadata.
-*/
-cljs.core.with_meta = (function with_meta(o,meta){
-return cljs.core._with_meta.call(null,o,meta);
-});
-/**
-* Returns the metadata of obj, returns nil if there is no metadata.
-*/
-cljs.core.meta = (function meta(o){
-if(cljs.core.truth_((function (){var x__352__auto____3096 = o;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3097 = x__352__auto____3096;
-
-if(cljs.core.truth_(and__3546__auto____3097))
-{var and__3546__auto____3098 = x__352__auto____3096.cljs$core$IMeta$;
-
-if(cljs.core.truth_(and__3546__auto____3098))
-{return cljs.core.not.call(null,x__352__auto____3096.hasOwnProperty("cljs$core$IMeta$"));
-} else
-{return and__3546__auto____3098;
-}
-} else
-{return and__3546__auto____3097;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.IMeta,x__352__auto____3096);
-}
-})()))
-{return cljs.core._meta.call(null,o);
-} else
-{return null;
-}
-});
-/**
-* For a list or queue, same as first, for a vector, same as, but much
-* more efficient than, last. If the collection is empty, returns nil.
-*/
-cljs.core.peek = (function peek(coll){
-return cljs.core._peek.call(null,coll);
-});
-/**
-* For a list or queue, returns a new list/queue without the first
-* item, for a vector, returns a new vector without the last item.
-* Note - not the same as next/butlast.
-*/
-cljs.core.pop = (function pop(coll){
-return cljs.core._pop.call(null,coll);
-});
-/**
-* disj[oin]. Returns a new set of the same (hashed/sorted) type, that
-* does not contain key(s).
-* @param {...*} var_args
-*/
-cljs.core.disj = (function() {
-var disj = null;
-var disj__3100 = (function (coll){
-return coll;
-});
-var disj__3101 = (function (coll,k){
-return cljs.core._disjoin.call(null,coll,k);
-});
-var disj__3102 = (function() { 
-var G__3104__delegate = function (coll,k,ks){
-while(true){
-var ret__3099 = disj.call(null,coll,k);
-
-if(cljs.core.truth_(ks))
-{{
-var G__3105 = ret__3099;
-var G__3106 = cljs.core.first.call(null,ks);
-var G__3107 = cljs.core.next.call(null,ks);
-coll = G__3105;
-k = G__3106;
-ks = G__3107;
-continue;
-}
-} else
-{return ret__3099;
-}
-break;
-}
-};
-var G__3104 = function (coll,k,var_args){
-var ks = null;
-if (goog.isDef(var_args)) {
-  ks = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3104__delegate.call(this, coll, k, ks);
-};
-G__3104.cljs$lang$maxFixedArity = 2;
-G__3104.cljs$lang$applyTo = (function (arglist__3108){
-var coll = cljs.core.first(arglist__3108);
-var k = cljs.core.first(cljs.core.next(arglist__3108));
-var ks = cljs.core.rest(cljs.core.next(arglist__3108));
-return G__3104__delegate.call(this, coll, k, ks);
-});
-return G__3104;
-})()
-;
-disj = function(coll,k,var_args){
-var ks = var_args;
-switch(arguments.length){
-case  1 :
-return disj__3100.call(this,coll);
-case  2 :
-return disj__3101.call(this,coll,k);
-default:
-return disj__3102.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-disj.cljs$lang$maxFixedArity = 2;
-disj.cljs$lang$applyTo = disj__3102.cljs$lang$applyTo;
-return disj;
-})()
-;
-cljs.core.hash = (function hash(o){
-return cljs.core._hash.call(null,o);
-});
-/**
-* Returns true if coll has no items - same as (not (seq coll)).
-* Please use the idiom (seq x) rather than (not (empty? x))
-*/
-cljs.core.empty_QMARK_ = (function empty_QMARK_(coll){
-return cljs.core.not.call(null,cljs.core.seq.call(null,coll));
-});
-/**
-* Returns true if x satisfies ICollection
-*/
-cljs.core.coll_QMARK_ = (function coll_QMARK_(x){
-if(cljs.core.truth_((x === null)))
-{return false;
-} else
-{var x__352__auto____3109 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3110 = x__352__auto____3109;
-
-if(cljs.core.truth_(and__3546__auto____3110))
-{var and__3546__auto____3111 = x__352__auto____3109.cljs$core$ICollection$;
-
-if(cljs.core.truth_(and__3546__auto____3111))
-{return cljs.core.not.call(null,x__352__auto____3109.hasOwnProperty("cljs$core$ICollection$"));
-} else
-{return and__3546__auto____3111;
-}
-} else
-{return and__3546__auto____3110;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.ICollection,x__352__auto____3109);
-}
-}
-});
-/**
-* Returns true if x satisfies ISet
-*/
-cljs.core.set_QMARK_ = (function set_QMARK_(x){
-if(cljs.core.truth_((x === null)))
-{return false;
-} else
-{var x__352__auto____3112 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3113 = x__352__auto____3112;
-
-if(cljs.core.truth_(and__3546__auto____3113))
-{var and__3546__auto____3114 = x__352__auto____3112.cljs$core$ISet$;
-
-if(cljs.core.truth_(and__3546__auto____3114))
-{return cljs.core.not.call(null,x__352__auto____3112.hasOwnProperty("cljs$core$ISet$"));
-} else
-{return and__3546__auto____3114;
-}
-} else
-{return and__3546__auto____3113;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.ISet,x__352__auto____3112);
-}
-}
-});
-/**
-* Returns true if coll implements Associative
-*/
-cljs.core.associative_QMARK_ = (function associative_QMARK_(x){
-var x__352__auto____3115 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3116 = x__352__auto____3115;
-
-if(cljs.core.truth_(and__3546__auto____3116))
-{var and__3546__auto____3117 = x__352__auto____3115.cljs$core$IAssociative$;
-
-if(cljs.core.truth_(and__3546__auto____3117))
-{return cljs.core.not.call(null,x__352__auto____3115.hasOwnProperty("cljs$core$IAssociative$"));
-} else
-{return and__3546__auto____3117;
-}
-} else
-{return and__3546__auto____3116;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.IAssociative,x__352__auto____3115);
-}
-});
-/**
-* Returns true if coll satisfies ISequential
-*/
-cljs.core.sequential_QMARK_ = (function sequential_QMARK_(x){
-var x__352__auto____3118 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3119 = x__352__auto____3118;
-
-if(cljs.core.truth_(and__3546__auto____3119))
-{var and__3546__auto____3120 = x__352__auto____3118.cljs$core$ISequential$;
-
-if(cljs.core.truth_(and__3546__auto____3120))
-{return cljs.core.not.call(null,x__352__auto____3118.hasOwnProperty("cljs$core$ISequential$"));
-} else
-{return and__3546__auto____3120;
-}
-} else
-{return and__3546__auto____3119;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.ISequential,x__352__auto____3118);
-}
-});
-/**
-* Returns true if coll implements count in constant time
-*/
-cljs.core.counted_QMARK_ = (function counted_QMARK_(x){
-var x__352__auto____3121 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3122 = x__352__auto____3121;
-
-if(cljs.core.truth_(and__3546__auto____3122))
-{var and__3546__auto____3123 = x__352__auto____3121.cljs$core$ICounted$;
-
-if(cljs.core.truth_(and__3546__auto____3123))
-{return cljs.core.not.call(null,x__352__auto____3121.hasOwnProperty("cljs$core$ICounted$"));
-} else
-{return and__3546__auto____3123;
-}
-} else
-{return and__3546__auto____3122;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.ICounted,x__352__auto____3121);
-}
-});
-/**
-* Return true if x satisfies IMap
-*/
-cljs.core.map_QMARK_ = (function map_QMARK_(x){
-if(cljs.core.truth_((x === null)))
-{return false;
-} else
-{var x__352__auto____3124 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3125 = x__352__auto____3124;
-
-if(cljs.core.truth_(and__3546__auto____3125))
-{var and__3546__auto____3126 = x__352__auto____3124.cljs$core$IMap$;
-
-if(cljs.core.truth_(and__3546__auto____3126))
-{return cljs.core.not.call(null,x__352__auto____3124.hasOwnProperty("cljs$core$IMap$"));
-} else
-{return and__3546__auto____3126;
-}
-} else
-{return and__3546__auto____3125;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.IMap,x__352__auto____3124);
-}
-}
-});
-/**
-* Return true if x satisfies IVector
-*/
-cljs.core.vector_QMARK_ = (function vector_QMARK_(x){
-var x__352__auto____3127 = x;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3128 = x__352__auto____3127;
-
-if(cljs.core.truth_(and__3546__auto____3128))
-{var and__3546__auto____3129 = x__352__auto____3127.cljs$core$IVector$;
-
-if(cljs.core.truth_(and__3546__auto____3129))
-{return cljs.core.not.call(null,x__352__auto____3127.hasOwnProperty("cljs$core$IVector$"));
-} else
-{return and__3546__auto____3129;
-}
-} else
-{return and__3546__auto____3128;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.IVector,x__352__auto____3127);
-}
-});
-cljs.core.js_obj = (function js_obj(){
-return {};
-});
-cljs.core.js_keys = (function js_keys(obj){
-var keys__3130 = [];
-
-goog.object.forEach.call(null,obj,(function (val,key,obj){
-return keys__3130.push(key);
-}));
-return keys__3130;
-});
-cljs.core.js_delete = (function js_delete(obj,key){
-return delete obj[key];
-});
-cljs.core.lookup_sentinel = cljs.core.js_obj.call(null);
-/**
-* Returns true if x is the value false, false otherwise.
-*/
-cljs.core.false_QMARK_ = (function false_QMARK_(x){
-return x === false;
-});
-/**
-* Returns true if x is the value true, false otherwise.
-*/
-cljs.core.true_QMARK_ = (function true_QMARK_(x){
-return x === true;
-});
-cljs.core.undefined_QMARK_ = (function undefined_QMARK_(x){
-return (void 0 === x);
-});
-cljs.core.instance_QMARK_ = (function instance_QMARK_(t,o){
-return (o != null && (o instanceof t || o.constructor === t || t === Object));
-});
-/**
-* Return true if s satisfies ISeq
-*/
-cljs.core.seq_QMARK_ = (function seq_QMARK_(s){
-if(cljs.core.truth_((s === null)))
-{return false;
-} else
-{var x__352__auto____3131 = s;
-
-if(cljs.core.truth_((function (){var and__3546__auto____3132 = x__352__auto____3131;
-
-if(cljs.core.truth_(and__3546__auto____3132))
-{var and__3546__auto____3133 = x__352__auto____3131.cljs$core$ISeq$;
-
-if(cljs.core.truth_(and__3546__auto____3133))
-{return cljs.core.not.call(null,x__352__auto____3131.hasOwnProperty("cljs$core$ISeq$"));
-} else
-{return and__3546__auto____3133;
-}
-} else
-{return and__3546__auto____3132;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.ISeq,x__352__auto____3131);
-}
-}
-});
-cljs.core.boolean$ = (function boolean$(x){
-if(cljs.core.truth_(x))
-{return true;
-} else
-{return false;
-}
-});
-cljs.core.string_QMARK_ = (function string_QMARK_(x){
-var and__3546__auto____3134 = goog.isString.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3134))
-{return cljs.core.not.call(null,(function (){var or__3548__auto____3135 = cljs.core._EQ_.call(null,x.charAt(0),"\uFDD0");
-
-if(cljs.core.truth_(or__3548__auto____3135))
-{return or__3548__auto____3135;
-} else
-{return cljs.core._EQ_.call(null,x.charAt(0),"\uFDD1");
-}
-})());
-} else
-{return and__3546__auto____3134;
-}
-});
-cljs.core.keyword_QMARK_ = (function keyword_QMARK_(x){
-var and__3546__auto____3136 = goog.isString.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3136))
-{return cljs.core._EQ_.call(null,x.charAt(0),"\uFDD0");
-} else
-{return and__3546__auto____3136;
-}
-});
-cljs.core.symbol_QMARK_ = (function symbol_QMARK_(x){
-var and__3546__auto____3137 = goog.isString.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3137))
-{return cljs.core._EQ_.call(null,x.charAt(0),"\uFDD1");
-} else
-{return and__3546__auto____3137;
-}
-});
-cljs.core.number_QMARK_ = (function number_QMARK_(n){
-return goog.isNumber.call(null,n);
-});
-cljs.core.fn_QMARK_ = (function fn_QMARK_(f){
-return goog.isFunction.call(null,f);
-});
-/**
-* Returns true if n is an integer.  Warning: returns true on underflow condition.
-*/
-cljs.core.integer_QMARK_ = (function integer_QMARK_(n){
-var and__3546__auto____3138 = cljs.core.number_QMARK_.call(null,n);
-
-if(cljs.core.truth_(and__3546__auto____3138))
-{return (n == n.toFixed());
-} else
-{return and__3546__auto____3138;
-}
-});
-/**
-* Returns true if key is present in the given collection, otherwise
-* returns false.  Note that for numerically indexed collections like
-* vectors and arrays, this tests if the numeric key is within the
-* range of indexes. 'contains?' operates constant or logarithmic time;
-* it will not perform a linear search for a value.  See also 'some'.
-*/
-cljs.core.contains_QMARK_ = (function contains_QMARK_(coll,v){
-if(cljs.core.truth_((cljs.core._lookup.call(null,coll,v,cljs.core.lookup_sentinel) === cljs.core.lookup_sentinel)))
-{return false;
-} else
-{return true;
-}
-});
-/**
-* Returns the map entry for key, or nil if key not present.
-*/
-cljs.core.find = (function find(coll,k){
-if(cljs.core.truth_((function (){var and__3546__auto____3139 = coll;
-
-if(cljs.core.truth_(and__3546__auto____3139))
-{var and__3546__auto____3140 = cljs.core.associative_QMARK_.call(null,coll);
-
-if(cljs.core.truth_(and__3546__auto____3140))
-{return cljs.core.contains_QMARK_.call(null,coll,k);
-} else
-{return and__3546__auto____3140;
-}
-} else
-{return and__3546__auto____3139;
-}
-})()))
-{return cljs.core.Vector.fromArray([k,cljs.core._lookup.call(null,coll,k)]);
-} else
-{return null;
-}
-});
-/**
-* Returns true if no two of the arguments are =
-* @param {...*} var_args
-*/
-cljs.core.distinct_QMARK_ = (function() {
-var distinct_QMARK_ = null;
-var distinct_QMARK___3145 = (function (x){
-return true;
-});
-var distinct_QMARK___3146 = (function (x,y){
-return cljs.core.not.call(null,cljs.core._EQ_.call(null,x,y));
-});
-var distinct_QMARK___3147 = (function() { 
-var G__3149__delegate = function (x,y,more){
-if(cljs.core.truth_(cljs.core.not.call(null,cljs.core._EQ_.call(null,x,y))))
-{var s__3141 = cljs.core.set([y,x]);
-var xs__3142 = more;
-
-while(true){
-var x__3143 = cljs.core.first.call(null,xs__3142);
-var etc__3144 = cljs.core.next.call(null,xs__3142);
-
-if(cljs.core.truth_(xs__3142))
-{if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null,s__3141,x__3143)))
-{return false;
-} else
-{{
-var G__3150 = cljs.core.conj.call(null,s__3141,x__3143);
-var G__3151 = etc__3144;
-s__3141 = G__3150;
-xs__3142 = G__3151;
-continue;
-}
-}
-} else
-{return true;
-}
-break;
-}
-} else
-{return false;
-}
-};
-var G__3149 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3149__delegate.call(this, x, y, more);
-};
-G__3149.cljs$lang$maxFixedArity = 2;
-G__3149.cljs$lang$applyTo = (function (arglist__3152){
-var x = cljs.core.first(arglist__3152);
-var y = cljs.core.first(cljs.core.next(arglist__3152));
-var more = cljs.core.rest(cljs.core.next(arglist__3152));
-return G__3149__delegate.call(this, x, y, more);
-});
-return G__3149;
-})()
-;
-distinct_QMARK_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return distinct_QMARK___3145.call(this,x);
-case  2 :
-return distinct_QMARK___3146.call(this,x,y);
-default:
-return distinct_QMARK___3147.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-distinct_QMARK_.cljs$lang$maxFixedArity = 2;
-distinct_QMARK_.cljs$lang$applyTo = distinct_QMARK___3147.cljs$lang$applyTo;
-return distinct_QMARK_;
-})()
-;
-/**
-* Comparator. Returns a negative number, zero, or a positive number
-* when x is logically 'less than', 'equal to', or 'greater than'
-* y. Uses google.array.defaultCompare.
-*/
-cljs.core.compare = (function compare(x,y){
-return goog.array.defaultCompare.call(null,x,y);
-});
-/**
-* Given a fn that might be boolean valued or a comparator,
-* return a fn that is a comparator.
-*/
-cljs.core.fn__GT_comparator = (function fn__GT_comparator(f){
-if(cljs.core.truth_(cljs.core._EQ_.call(null,f,cljs.core.compare)))
-{return cljs.core.compare;
-} else
-{return (function (x,y){
-var r__3153 = f.call(null,x,y);
-
-if(cljs.core.truth_(cljs.core.number_QMARK_.call(null,r__3153)))
-{return r__3153;
-} else
-{if(cljs.core.truth_(r__3153))
-{return -1;
-} else
-{if(cljs.core.truth_(f.call(null,y,x)))
-{return 1;
-} else
-{return 0;
-}
-}
-}
-});
-}
-});
-/**
-* Returns a sorted sequence of the items in coll. Comp can be
-* boolean-valued comparison funcion, or a -/0/+ valued comparator.
-* Comp defaults to compare.
-*/
-cljs.core.sort = (function() {
-var sort = null;
-var sort__3155 = (function (coll){
-return sort.call(null,cljs.core.compare,coll);
-});
-var sort__3156 = (function (comp,coll){
-if(cljs.core.truth_(cljs.core.seq.call(null,coll)))
-{var a__3154 = cljs.core.to_array.call(null,coll);
-
-goog.array.stableSort.call(null,a__3154,cljs.core.fn__GT_comparator.call(null,comp));
-return cljs.core.seq.call(null,a__3154);
-} else
-{return cljs.core.List.EMPTY;
-}
-});
-sort = function(comp,coll){
-switch(arguments.length){
-case  1 :
-return sort__3155.call(this,comp);
-case  2 :
-return sort__3156.call(this,comp,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return sort;
-})()
-;
-/**
-* Returns a sorted sequence of the items in coll, where the sort
-* order is determined by comparing (keyfn item).  Comp can be
-* boolean-valued comparison funcion, or a -/0/+ valued comparator.
-* Comp defaults to compare.
-*/
-cljs.core.sort_by = (function() {
-var sort_by = null;
-var sort_by__3158 = (function (keyfn,coll){
-return sort_by.call(null,keyfn,cljs.core.compare,coll);
-});
-var sort_by__3159 = (function (keyfn,comp,coll){
-return cljs.core.sort.call(null,(function (x,y){
-return cljs.core.fn__GT_comparator.call(null,comp).call(null,keyfn.call(null,x),keyfn.call(null,y));
-}),coll);
-});
-sort_by = function(keyfn,comp,coll){
-switch(arguments.length){
-case  2 :
-return sort_by__3158.call(this,keyfn,comp);
-case  3 :
-return sort_by__3159.call(this,keyfn,comp,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return sort_by;
-})()
-;
-/**
-* f should be a function of 2 arguments. If val is not supplied,
-* returns the result of applying f to the first 2 items in coll, then
-* applying f to that result and the 3rd item, etc. If coll contains no
-* items, f must accept no arguments as well, and reduce returns the
-* result of calling f with no arguments.  If coll has only 1 item, it
-* is returned and f is not called.  If val is supplied, returns the
-* result of applying f to val and the first item in coll, then
-* applying f to that result and the 2nd item, etc. If coll contains no
-* items, returns val and f is not called.
-*/
-cljs.core.reduce = (function() {
-var reduce = null;
-var reduce__3161 = (function (f,coll){
-return cljs.core._reduce.call(null,coll,f);
-});
-var reduce__3162 = (function (f,val,coll){
-return cljs.core._reduce.call(null,coll,f,val);
-});
-reduce = function(f,val,coll){
-switch(arguments.length){
-case  2 :
-return reduce__3161.call(this,f,val);
-case  3 :
-return reduce__3162.call(this,f,val,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return reduce;
-})()
-;
-cljs.core.seq_reduce = (function() {
-var seq_reduce = null;
-var seq_reduce__3168 = (function (f,coll){
-var temp__3695__auto____3164 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3695__auto____3164))
-{var s__3165 = temp__3695__auto____3164;
-
-return cljs.core.reduce.call(null,f,cljs.core.first.call(null,s__3165),cljs.core.next.call(null,s__3165));
-} else
-{return f.call(null);
-}
-});
-var seq_reduce__3169 = (function (f,val,coll){
-var val__3166 = val;
-var coll__3167 = cljs.core.seq.call(null,coll);
-
-while(true){
-if(cljs.core.truth_(coll__3167))
-{{
-var G__3171 = f.call(null,val__3166,cljs.core.first.call(null,coll__3167));
-var G__3172 = cljs.core.next.call(null,coll__3167);
-val__3166 = G__3171;
-coll__3167 = G__3172;
-continue;
-}
-} else
-{return val__3166;
-}
-break;
-}
-});
-seq_reduce = function(f,val,coll){
-switch(arguments.length){
-case  2 :
-return seq_reduce__3168.call(this,f,val);
-case  3 :
-return seq_reduce__3169.call(this,f,val,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return seq_reduce;
-})()
-;
-(cljs.core.IReduce["_"] = true);
-(cljs.core._reduce["_"] = (function() {
-var G__3173 = null;
-var G__3173__3174 = (function (coll,f){
-return cljs.core.seq_reduce.call(null,f,coll);
-});
-var G__3173__3175 = (function (coll,f,start){
-return cljs.core.seq_reduce.call(null,f,start,coll);
-});
-G__3173 = function(coll,f,start){
-switch(arguments.length){
-case  2 :
-return G__3173__3174.call(this,coll,f);
-case  3 :
-return G__3173__3175.call(this,coll,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3173;
-})()
-);
-/**
-* Returns the sum of nums. (+) returns 0.
-* @param {...*} var_args
-*/
-cljs.core._PLUS_ = (function() {
-var _PLUS_ = null;
-var _PLUS___3177 = (function (){
-return 0;
-});
-var _PLUS___3178 = (function (x){
-return x;
-});
-var _PLUS___3179 = (function (x,y){
-return (x + y);
-});
-var _PLUS___3180 = (function() { 
-var G__3182__delegate = function (x,y,more){
-return cljs.core.reduce.call(null,_PLUS_,(x + y),more);
-};
-var G__3182 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3182__delegate.call(this, x, y, more);
-};
-G__3182.cljs$lang$maxFixedArity = 2;
-G__3182.cljs$lang$applyTo = (function (arglist__3183){
-var x = cljs.core.first(arglist__3183);
-var y = cljs.core.first(cljs.core.next(arglist__3183));
-var more = cljs.core.rest(cljs.core.next(arglist__3183));
-return G__3182__delegate.call(this, x, y, more);
-});
-return G__3182;
-})()
-;
-_PLUS_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  0 :
-return _PLUS___3177.call(this);
-case  1 :
-return _PLUS___3178.call(this,x);
-case  2 :
-return _PLUS___3179.call(this,x,y);
-default:
-return _PLUS___3180.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_PLUS_.cljs$lang$maxFixedArity = 2;
-_PLUS_.cljs$lang$applyTo = _PLUS___3180.cljs$lang$applyTo;
-return _PLUS_;
-})()
-;
-/**
-* If no ys are supplied, returns the negation of x, else subtracts
-* the ys from x and returns the result.
-* @param {...*} var_args
-*/
-cljs.core._ = (function() {
-var _ = null;
-var ___3184 = (function (x){
-return (- x);
-});
-var ___3185 = (function (x,y){
-return (x - y);
-});
-var ___3186 = (function() { 
-var G__3188__delegate = function (x,y,more){
-return cljs.core.reduce.call(null,_,(x - y),more);
-};
-var G__3188 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3188__delegate.call(this, x, y, more);
-};
-G__3188.cljs$lang$maxFixedArity = 2;
-G__3188.cljs$lang$applyTo = (function (arglist__3189){
-var x = cljs.core.first(arglist__3189);
-var y = cljs.core.first(cljs.core.next(arglist__3189));
-var more = cljs.core.rest(cljs.core.next(arglist__3189));
-return G__3188__delegate.call(this, x, y, more);
-});
-return G__3188;
-})()
-;
-_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return ___3184.call(this,x);
-case  2 :
-return ___3185.call(this,x,y);
-default:
-return ___3186.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_.cljs$lang$maxFixedArity = 2;
-_.cljs$lang$applyTo = ___3186.cljs$lang$applyTo;
-return _;
-})()
-;
-/**
-* Returns the product of nums. (*) returns 1.
-* @param {...*} var_args
-*/
-cljs.core._STAR_ = (function() {
-var _STAR_ = null;
-var _STAR___3190 = (function (){
-return 1;
-});
-var _STAR___3191 = (function (x){
-return x;
-});
-var _STAR___3192 = (function (x,y){
-return (x * y);
-});
-var _STAR___3193 = (function() { 
-var G__3195__delegate = function (x,y,more){
-return cljs.core.reduce.call(null,_STAR_,(x * y),more);
-};
-var G__3195 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3195__delegate.call(this, x, y, more);
-};
-G__3195.cljs$lang$maxFixedArity = 2;
-G__3195.cljs$lang$applyTo = (function (arglist__3196){
-var x = cljs.core.first(arglist__3196);
-var y = cljs.core.first(cljs.core.next(arglist__3196));
-var more = cljs.core.rest(cljs.core.next(arglist__3196));
-return G__3195__delegate.call(this, x, y, more);
-});
-return G__3195;
-})()
-;
-_STAR_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  0 :
-return _STAR___3190.call(this);
-case  1 :
-return _STAR___3191.call(this,x);
-case  2 :
-return _STAR___3192.call(this,x,y);
-default:
-return _STAR___3193.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_STAR_.cljs$lang$maxFixedArity = 2;
-_STAR_.cljs$lang$applyTo = _STAR___3193.cljs$lang$applyTo;
-return _STAR_;
-})()
-;
-/**
-* If no denominators are supplied, returns 1/numerator,
-* else returns numerator divided by all of the denominators.
-* @param {...*} var_args
-*/
-cljs.core._SLASH_ = (function() {
-var _SLASH_ = null;
-var _SLASH___3197 = (function (x){
-return _SLASH_.call(null,1,x);
-});
-var _SLASH___3198 = (function (x,y){
-return (x / y);
-});
-var _SLASH___3199 = (function() { 
-var G__3201__delegate = function (x,y,more){
-return cljs.core.reduce.call(null,_SLASH_,_SLASH_.call(null,x,y),more);
-};
-var G__3201 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3201__delegate.call(this, x, y, more);
-};
-G__3201.cljs$lang$maxFixedArity = 2;
-G__3201.cljs$lang$applyTo = (function (arglist__3202){
-var x = cljs.core.first(arglist__3202);
-var y = cljs.core.first(cljs.core.next(arglist__3202));
-var more = cljs.core.rest(cljs.core.next(arglist__3202));
-return G__3201__delegate.call(this, x, y, more);
-});
-return G__3201;
-})()
-;
-_SLASH_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return _SLASH___3197.call(this,x);
-case  2 :
-return _SLASH___3198.call(this,x,y);
-default:
-return _SLASH___3199.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_SLASH_.cljs$lang$maxFixedArity = 2;
-_SLASH_.cljs$lang$applyTo = _SLASH___3199.cljs$lang$applyTo;
-return _SLASH_;
-})()
-;
-/**
-* Returns non-nil if nums are in monotonically increasing order,
-* otherwise false.
-* @param {...*} var_args
-*/
-cljs.core._LT_ = (function() {
-var _LT_ = null;
-var _LT___3203 = (function (x){
-return true;
-});
-var _LT___3204 = (function (x,y){
-return (x < y);
-});
-var _LT___3205 = (function() { 
-var G__3207__delegate = function (x,y,more){
-while(true){
-if(cljs.core.truth_((x < y)))
-{if(cljs.core.truth_(cljs.core.next.call(null,more)))
-{{
-var G__3208 = y;
-var G__3209 = cljs.core.first.call(null,more);
-var G__3210 = cljs.core.next.call(null,more);
-x = G__3208;
-y = G__3209;
-more = G__3210;
-continue;
-}
-} else
-{return (y < cljs.core.first.call(null,more));
-}
-} else
-{return false;
-}
-break;
-}
-};
-var G__3207 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3207__delegate.call(this, x, y, more);
-};
-G__3207.cljs$lang$maxFixedArity = 2;
-G__3207.cljs$lang$applyTo = (function (arglist__3211){
-var x = cljs.core.first(arglist__3211);
-var y = cljs.core.first(cljs.core.next(arglist__3211));
-var more = cljs.core.rest(cljs.core.next(arglist__3211));
-return G__3207__delegate.call(this, x, y, more);
-});
-return G__3207;
-})()
-;
-_LT_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return _LT___3203.call(this,x);
-case  2 :
-return _LT___3204.call(this,x,y);
-default:
-return _LT___3205.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_LT_.cljs$lang$maxFixedArity = 2;
-_LT_.cljs$lang$applyTo = _LT___3205.cljs$lang$applyTo;
-return _LT_;
-})()
-;
-/**
-* Returns non-nil if nums are in monotonically non-decreasing order,
-* otherwise false.
-* @param {...*} var_args
-*/
-cljs.core._LT__EQ_ = (function() {
-var _LT__EQ_ = null;
-var _LT__EQ___3212 = (function (x){
-return true;
-});
-var _LT__EQ___3213 = (function (x,y){
-return (x <= y);
-});
-var _LT__EQ___3214 = (function() { 
-var G__3216__delegate = function (x,y,more){
-while(true){
-if(cljs.core.truth_((x <= y)))
-{if(cljs.core.truth_(cljs.core.next.call(null,more)))
-{{
-var G__3217 = y;
-var G__3218 = cljs.core.first.call(null,more);
-var G__3219 = cljs.core.next.call(null,more);
-x = G__3217;
-y = G__3218;
-more = G__3219;
-continue;
-}
-} else
-{return (y <= cljs.core.first.call(null,more));
-}
-} else
-{return false;
-}
-break;
-}
-};
-var G__3216 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3216__delegate.call(this, x, y, more);
-};
-G__3216.cljs$lang$maxFixedArity = 2;
-G__3216.cljs$lang$applyTo = (function (arglist__3220){
-var x = cljs.core.first(arglist__3220);
-var y = cljs.core.first(cljs.core.next(arglist__3220));
-var more = cljs.core.rest(cljs.core.next(arglist__3220));
-return G__3216__delegate.call(this, x, y, more);
-});
-return G__3216;
-})()
-;
-_LT__EQ_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return _LT__EQ___3212.call(this,x);
-case  2 :
-return _LT__EQ___3213.call(this,x,y);
-default:
-return _LT__EQ___3214.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_LT__EQ_.cljs$lang$maxFixedArity = 2;
-_LT__EQ_.cljs$lang$applyTo = _LT__EQ___3214.cljs$lang$applyTo;
-return _LT__EQ_;
-})()
-;
-/**
-* Returns non-nil if nums are in monotonically decreasing order,
-* otherwise false.
-* @param {...*} var_args
-*/
-cljs.core._GT_ = (function() {
-var _GT_ = null;
-var _GT___3221 = (function (x){
-return true;
-});
-var _GT___3222 = (function (x,y){
-return (x > y);
-});
-var _GT___3223 = (function() { 
-var G__3225__delegate = function (x,y,more){
-while(true){
-if(cljs.core.truth_((x > y)))
-{if(cljs.core.truth_(cljs.core.next.call(null,more)))
-{{
-var G__3226 = y;
-var G__3227 = cljs.core.first.call(null,more);
-var G__3228 = cljs.core.next.call(null,more);
-x = G__3226;
-y = G__3227;
-more = G__3228;
-continue;
-}
-} else
-{return (y > cljs.core.first.call(null,more));
-}
-} else
-{return false;
-}
-break;
-}
-};
-var G__3225 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3225__delegate.call(this, x, y, more);
-};
-G__3225.cljs$lang$maxFixedArity = 2;
-G__3225.cljs$lang$applyTo = (function (arglist__3229){
-var x = cljs.core.first(arglist__3229);
-var y = cljs.core.first(cljs.core.next(arglist__3229));
-var more = cljs.core.rest(cljs.core.next(arglist__3229));
-return G__3225__delegate.call(this, x, y, more);
-});
-return G__3225;
-})()
-;
-_GT_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return _GT___3221.call(this,x);
-case  2 :
-return _GT___3222.call(this,x,y);
-default:
-return _GT___3223.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_GT_.cljs$lang$maxFixedArity = 2;
-_GT_.cljs$lang$applyTo = _GT___3223.cljs$lang$applyTo;
-return _GT_;
-})()
-;
-/**
-* Returns non-nil if nums are in monotonically non-increasing order,
-* otherwise false.
-* @param {...*} var_args
-*/
-cljs.core._GT__EQ_ = (function() {
-var _GT__EQ_ = null;
-var _GT__EQ___3230 = (function (x){
-return true;
-});
-var _GT__EQ___3231 = (function (x,y){
-return (x >= y);
-});
-var _GT__EQ___3232 = (function() { 
-var G__3234__delegate = function (x,y,more){
-while(true){
-if(cljs.core.truth_((x >= y)))
-{if(cljs.core.truth_(cljs.core.next.call(null,more)))
-{{
-var G__3235 = y;
-var G__3236 = cljs.core.first.call(null,more);
-var G__3237 = cljs.core.next.call(null,more);
-x = G__3235;
-y = G__3236;
-more = G__3237;
-continue;
-}
-} else
-{return (y >= cljs.core.first.call(null,more));
-}
-} else
-{return false;
-}
-break;
-}
-};
-var G__3234 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3234__delegate.call(this, x, y, more);
-};
-G__3234.cljs$lang$maxFixedArity = 2;
-G__3234.cljs$lang$applyTo = (function (arglist__3238){
-var x = cljs.core.first(arglist__3238);
-var y = cljs.core.first(cljs.core.next(arglist__3238));
-var more = cljs.core.rest(cljs.core.next(arglist__3238));
-return G__3234__delegate.call(this, x, y, more);
-});
-return G__3234;
-})()
-;
-_GT__EQ_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return _GT__EQ___3230.call(this,x);
-case  2 :
-return _GT__EQ___3231.call(this,x,y);
-default:
-return _GT__EQ___3232.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_GT__EQ_.cljs$lang$maxFixedArity = 2;
-_GT__EQ_.cljs$lang$applyTo = _GT__EQ___3232.cljs$lang$applyTo;
-return _GT__EQ_;
-})()
-;
-/**
-* Returns a number one less than num.
-*/
-cljs.core.dec = (function dec(x){
-return (x - 1);
-});
-/**
-* Returns the greatest of the nums.
-* @param {...*} var_args
-*/
-cljs.core.max = (function() {
-var max = null;
-var max__3239 = (function (x){
-return x;
-});
-var max__3240 = (function (x,y){
-return ((x > y) ? x : y);
-});
-var max__3241 = (function() { 
-var G__3243__delegate = function (x,y,more){
-return cljs.core.reduce.call(null,max,((x > y) ? x : y),more);
-};
-var G__3243 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3243__delegate.call(this, x, y, more);
-};
-G__3243.cljs$lang$maxFixedArity = 2;
-G__3243.cljs$lang$applyTo = (function (arglist__3244){
-var x = cljs.core.first(arglist__3244);
-var y = cljs.core.first(cljs.core.next(arglist__3244));
-var more = cljs.core.rest(cljs.core.next(arglist__3244));
-return G__3243__delegate.call(this, x, y, more);
-});
-return G__3243;
-})()
-;
-max = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return max__3239.call(this,x);
-case  2 :
-return max__3240.call(this,x,y);
-default:
-return max__3241.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-max.cljs$lang$maxFixedArity = 2;
-max.cljs$lang$applyTo = max__3241.cljs$lang$applyTo;
-return max;
-})()
-;
-/**
-* Returns the least of the nums.
-* @param {...*} var_args
-*/
-cljs.core.min = (function() {
-var min = null;
-var min__3245 = (function (x){
-return x;
-});
-var min__3246 = (function (x,y){
-return ((x < y) ? x : y);
-});
-var min__3247 = (function() { 
-var G__3249__delegate = function (x,y,more){
-return cljs.core.reduce.call(null,min,((x < y) ? x : y),more);
-};
-var G__3249 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3249__delegate.call(this, x, y, more);
-};
-G__3249.cljs$lang$maxFixedArity = 2;
-G__3249.cljs$lang$applyTo = (function (arglist__3250){
-var x = cljs.core.first(arglist__3250);
-var y = cljs.core.first(cljs.core.next(arglist__3250));
-var more = cljs.core.rest(cljs.core.next(arglist__3250));
-return G__3249__delegate.call(this, x, y, more);
-});
-return G__3249;
-})()
-;
-min = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return min__3245.call(this,x);
-case  2 :
-return min__3246.call(this,x,y);
-default:
-return min__3247.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-min.cljs$lang$maxFixedArity = 2;
-min.cljs$lang$applyTo = min__3247.cljs$lang$applyTo;
-return min;
-})()
-;
-cljs.core.fix = (function fix(q){
-if(cljs.core.truth_((q >= 0)))
-{return Math.floor.call(null,q);
-} else
-{return Math.ceil.call(null,q);
-}
-});
-/**
-* Modulus of num and div. Truncates toward negative infinity.
-*/
-cljs.core.mod = (function mod(n,d){
-return (n % d);
-});
-/**
-* quot[ient] of dividing numerator by denominator.
-*/
-cljs.core.quot = (function quot(n,d){
-var rem__3251 = (n % d);
-
-return cljs.core.fix.call(null,((n - rem__3251) / d));
-});
-/**
-* remainder of dividing numerator by denominator.
-*/
-cljs.core.rem = (function rem(n,d){
-var q__3252 = cljs.core.quot.call(null,n,d);
-
-return (n - (d * q__3252));
-});
-/**
-* Returns a random floating point number between 0 (inclusive) and n (default 1) (exclusive).
-*/
-cljs.core.rand = (function() {
-var rand = null;
-var rand__3253 = (function (){
-return Math.random.call(null);
-});
-var rand__3254 = (function (n){
-return (n * rand.call(null));
-});
-rand = function(n){
-switch(arguments.length){
-case  0 :
-return rand__3253.call(this);
-case  1 :
-return rand__3254.call(this,n);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return rand;
-})()
-;
-/**
-* Returns a random integer between 0 (inclusive) and n (exclusive).
-*/
-cljs.core.rand_int = (function rand_int(n){
-return cljs.core.fix.call(null,cljs.core.rand.call(null,n));
-});
-/**
-* Bitwise exclusive or
-*/
-cljs.core.bit_xor = (function bit_xor(x,y){
-return (x ^ y);
-});
-/**
-* Bitwise and
-*/
-cljs.core.bit_and = (function bit_and(x,y){
-return (x & y);
-});
-/**
-* Bitwise or
-*/
-cljs.core.bit_or = (function bit_or(x,y){
-return (x | y);
-});
-/**
-* Bitwise and
-*/
-cljs.core.bit_and_not = (function bit_and_not(x,y){
-return (x & ~y);
-});
-/**
-* Clear bit at index n
-*/
-cljs.core.bit_clear = (function bit_clear(x,n){
-return (x & ~(1 << n));
-});
-/**
-* Flip bit at index n
-*/
-cljs.core.bit_flip = (function bit_flip(x,n){
-return (x ^ (1 << n));
-});
-/**
-* Bitwise complement
-*/
-cljs.core.bit_not = (function bit_not(x){
-return (~ x);
-});
-/**
-* Set bit at index n
-*/
-cljs.core.bit_set = (function bit_set(x,n){
-return (x | (1 << n));
-});
-/**
-* Test bit at index n
-*/
-cljs.core.bit_test = (function bit_test(x,n){
-return ((x & (1 << n)) != 0);
-});
-/**
-* Bitwise shift left
-*/
-cljs.core.bit_shift_left = (function bit_shift_left(x,n){
-return (x << n);
-});
-/**
-* Bitwise shift right
-*/
-cljs.core.bit_shift_right = (function bit_shift_right(x,n){
-return (x >> n);
-});
-/**
-* Returns non-nil if nums all have the equivalent
-* value (type-independent), otherwise false
-* @param {...*} var_args
-*/
-cljs.core._EQ__EQ_ = (function() {
-var _EQ__EQ_ = null;
-var _EQ__EQ___3256 = (function (x){
-return true;
-});
-var _EQ__EQ___3257 = (function (x,y){
-return cljs.core._equiv.call(null,x,y);
-});
-var _EQ__EQ___3258 = (function() { 
-var G__3260__delegate = function (x,y,more){
-while(true){
-if(cljs.core.truth_(_EQ__EQ_.call(null,x,y)))
-{if(cljs.core.truth_(cljs.core.next.call(null,more)))
-{{
-var G__3261 = y;
-var G__3262 = cljs.core.first.call(null,more);
-var G__3263 = cljs.core.next.call(null,more);
-x = G__3261;
-y = G__3262;
-more = G__3263;
-continue;
-}
-} else
-{return _EQ__EQ_.call(null,y,cljs.core.first.call(null,more));
-}
-} else
-{return false;
-}
-break;
-}
-};
-var G__3260 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3260__delegate.call(this, x, y, more);
-};
-G__3260.cljs$lang$maxFixedArity = 2;
-G__3260.cljs$lang$applyTo = (function (arglist__3264){
-var x = cljs.core.first(arglist__3264);
-var y = cljs.core.first(cljs.core.next(arglist__3264));
-var more = cljs.core.rest(cljs.core.next(arglist__3264));
-return G__3260__delegate.call(this, x, y, more);
-});
-return G__3260;
-})()
-;
-_EQ__EQ_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return _EQ__EQ___3256.call(this,x);
-case  2 :
-return _EQ__EQ___3257.call(this,x,y);
-default:
-return _EQ__EQ___3258.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-_EQ__EQ_.cljs$lang$maxFixedArity = 2;
-_EQ__EQ_.cljs$lang$applyTo = _EQ__EQ___3258.cljs$lang$applyTo;
-return _EQ__EQ_;
-})()
-;
-/**
-* Returns true if num is greater than zero, else false
-*/
-cljs.core.pos_QMARK_ = (function pos_QMARK_(n){
-return (n > 0);
-});
-cljs.core.zero_QMARK_ = (function zero_QMARK_(n){
-return (n === 0);
-});
-/**
-* Returns true if num is less than zero, else false
-*/
-cljs.core.neg_QMARK_ = (function neg_QMARK_(x){
-return (x < 0);
-});
-/**
-* Returns the nth next of coll, (seq coll) when n is 0.
-*/
-cljs.core.nthnext = (function nthnext(coll,n){
-var n__3265 = n;
-var xs__3266 = cljs.core.seq.call(null,coll);
-
-while(true){
-if(cljs.core.truth_((function (){var and__3546__auto____3267 = xs__3266;
-
-if(cljs.core.truth_(and__3546__auto____3267))
-{return (n__3265 > 0);
-} else
-{return and__3546__auto____3267;
-}
-})()))
-{{
-var G__3268 = (n__3265 - 1);
-var G__3269 = cljs.core.next.call(null,xs__3266);
-n__3265 = G__3268;
-xs__3266 = G__3269;
-continue;
-}
-} else
-{return xs__3266;
-}
-break;
-}
-});
-(cljs.core.IIndexed["_"] = true);
-(cljs.core._nth["_"] = (function() {
-var G__3274 = null;
-var G__3274__3275 = (function (coll,n){
-var temp__3695__auto____3270 = cljs.core.nthnext.call(null,coll,n);
-
-if(cljs.core.truth_(temp__3695__auto____3270))
-{var xs__3271 = temp__3695__auto____3270;
-
-return cljs.core.first.call(null,xs__3271);
-} else
-{throw (new Error("Index out of bounds"));
-}
-});
-var G__3274__3276 = (function (coll,n,not_found){
-var temp__3695__auto____3272 = cljs.core.nthnext.call(null,coll,n);
-
-if(cljs.core.truth_(temp__3695__auto____3272))
-{var xs__3273 = temp__3695__auto____3272;
-
-return cljs.core.first.call(null,xs__3273);
-} else
-{return not_found;
-}
-});
-G__3274 = function(coll,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3274__3275.call(this,coll,n);
-case  3 :
-return G__3274__3276.call(this,coll,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3274;
-})()
-);
-/**
-* Internal - do not use!
-* @param {...*} var_args
-*/
-cljs.core.str_STAR_ = (function() {
-var str_STAR_ = null;
-var str_STAR___3278 = (function (){
-return "";
-});
-var str_STAR___3279 = (function (x){
-if(cljs.core.truth_((x === null)))
-{return "";
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return x.toString();
-} else
-{return null;
-}
-}
-});
-var str_STAR___3280 = (function() { 
-var G__3282__delegate = function (x,ys){
-return (function (sb,more){
-while(true){
-if(cljs.core.truth_(more))
-{{
-var G__3283 = sb.append(str_STAR_.call(null,cljs.core.first.call(null,more)));
-var G__3284 = cljs.core.next.call(null,more);
-sb = G__3283;
-more = G__3284;
-continue;
-}
-} else
-{return str_STAR_.call(null,sb);
-}
-break;
-}
-}).call(null,(new goog.string.StringBuffer(str_STAR_.call(null,x))),ys);
-};
-var G__3282 = function (x,var_args){
-var ys = null;
-if (goog.isDef(var_args)) {
-  ys = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return G__3282__delegate.call(this, x, ys);
-};
-G__3282.cljs$lang$maxFixedArity = 1;
-G__3282.cljs$lang$applyTo = (function (arglist__3285){
-var x = cljs.core.first(arglist__3285);
-var ys = cljs.core.rest(arglist__3285);
-return G__3282__delegate.call(this, x, ys);
-});
-return G__3282;
-})()
-;
-str_STAR_ = function(x,var_args){
-var ys = var_args;
-switch(arguments.length){
-case  0 :
-return str_STAR___3278.call(this);
-case  1 :
-return str_STAR___3279.call(this,x);
-default:
-return str_STAR___3280.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-str_STAR_.cljs$lang$maxFixedArity = 1;
-str_STAR_.cljs$lang$applyTo = str_STAR___3280.cljs$lang$applyTo;
-return str_STAR_;
-})()
-;
-/**
-* With no args, returns the empty string. With one arg x, returns
-* x.toString().  (str nil) returns the empty string. With more than
-* one arg, returns the concatenation of the str values of the args.
-* @param {...*} var_args
-*/
-cljs.core.str = (function() {
-var str = null;
-var str__3286 = (function (){
-return "";
-});
-var str__3287 = (function (x){
-if(cljs.core.truth_(cljs.core.symbol_QMARK_.call(null,x)))
-{return x.substring(2,x.length);
-} else
-{if(cljs.core.truth_(cljs.core.keyword_QMARK_.call(null,x)))
-{return cljs.core.str_STAR_.call(null,":",x.substring(2,x.length));
-} else
-{if(cljs.core.truth_((x === null)))
-{return "";
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return x.toString();
-} else
-{return null;
-}
-}
-}
-}
-});
-var str__3288 = (function() { 
-var G__3290__delegate = function (x,ys){
-return cljs.core.apply.call(null,cljs.core.str_STAR_,x,ys);
-};
-var G__3290 = function (x,var_args){
-var ys = null;
-if (goog.isDef(var_args)) {
-  ys = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return G__3290__delegate.call(this, x, ys);
-};
-G__3290.cljs$lang$maxFixedArity = 1;
-G__3290.cljs$lang$applyTo = (function (arglist__3291){
-var x = cljs.core.first(arglist__3291);
-var ys = cljs.core.rest(arglist__3291);
-return G__3290__delegate.call(this, x, ys);
-});
-return G__3290;
-})()
-;
-str = function(x,var_args){
-var ys = var_args;
-switch(arguments.length){
-case  0 :
-return str__3286.call(this);
-case  1 :
-return str__3287.call(this,x);
-default:
-return str__3288.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-str.cljs$lang$maxFixedArity = 1;
-str.cljs$lang$applyTo = str__3288.cljs$lang$applyTo;
-return str;
-})()
-;
-/**
-* Returns the substring of s beginning at start inclusive, and ending
-* at end (defaults to length of string), exclusive.
-*/
-cljs.core.subs = (function() {
-var subs = null;
-var subs__3292 = (function (s,start){
-return s.substring(start);
-});
-var subs__3293 = (function (s,start,end){
-return s.substring(start,end);
-});
-subs = function(s,start,end){
-switch(arguments.length){
-case  2 :
-return subs__3292.call(this,s,start);
-case  3 :
-return subs__3293.call(this,s,start,end);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return subs;
-})()
-;
-/**
-* Returns a Symbol with the given namespace and name.
-*/
-cljs.core.symbol = (function() {
-var symbol = null;
-var symbol__3295 = (function (name){
-if(cljs.core.truth_(cljs.core.symbol_QMARK_.call(null,name)))
-{name;
-} else
-{if(cljs.core.truth_(cljs.core.keyword_QMARK_.call(null,name)))
-{cljs.core.str_STAR_.call(null,"\uFDD1","'",cljs.core.subs.call(null,name,2));
-} else
-{}
-}
-return cljs.core.str_STAR_.call(null,"\uFDD1","'",name);
-});
-var symbol__3296 = (function (ns,name){
-return symbol.call(null,cljs.core.str_STAR_.call(null,ns,"\/",name));
-});
-symbol = function(ns,name){
-switch(arguments.length){
-case  1 :
-return symbol__3295.call(this,ns);
-case  2 :
-return symbol__3296.call(this,ns,name);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return symbol;
-})()
-;
-/**
-* Returns a Keyword with the given namespace and name.  Do not use :
-* in the keyword strings, it will be added automatically.
-*/
-cljs.core.keyword = (function() {
-var keyword = null;
-var keyword__3298 = (function (name){
-if(cljs.core.truth_(cljs.core.keyword_QMARK_.call(null,name)))
-{return name;
-} else
-{if(cljs.core.truth_(cljs.core.symbol_QMARK_.call(null,name)))
-{return cljs.core.str_STAR_.call(null,"\uFDD0","'",cljs.core.subs.call(null,name,2));
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return cljs.core.str_STAR_.call(null,"\uFDD0","'",name);
-} else
-{return null;
-}
-}
-}
-});
-var keyword__3299 = (function (ns,name){
-return keyword.call(null,cljs.core.str_STAR_.call(null,ns,"\/",name));
-});
-keyword = function(ns,name){
-switch(arguments.length){
-case  1 :
-return keyword__3298.call(this,ns);
-case  2 :
-return keyword__3299.call(this,ns,name);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return keyword;
-})()
-;
-/**
-* Assumes x is sequential. Returns true if x equals y, otherwise
-* returns false.
-*/
-cljs.core.equiv_sequential = (function equiv_sequential(x,y){
-return cljs.core.boolean$.call(null,(cljs.core.truth_(cljs.core.sequential_QMARK_.call(null,y))?(function (){var xs__3301 = cljs.core.seq.call(null,x);
-var ys__3302 = cljs.core.seq.call(null,y);
-
-while(true){
-if(cljs.core.truth_((xs__3301 === null)))
-{return (ys__3302 === null);
-} else
-{if(cljs.core.truth_((ys__3302 === null)))
-{return false;
-} else
-{if(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.first.call(null,xs__3301),cljs.core.first.call(null,ys__3302))))
-{{
-var G__3303 = cljs.core.next.call(null,xs__3301);
-var G__3304 = cljs.core.next.call(null,ys__3302);
-xs__3301 = G__3303;
-ys__3302 = G__3304;
-continue;
-}
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return false;
-} else
-{return null;
-}
-}
-}
-}
-break;
-}
-})():null));
-});
-cljs.core.hash_combine = (function hash_combine(seed,hash){
-return (seed ^ (((hash + 2654435769) + (seed << 6)) + (seed >> 2)));
-});
-cljs.core.hash_coll = (function hash_coll(coll){
-return cljs.core.reduce.call(null,(function (p1__3305_SHARP_,p2__3306_SHARP_){
-return cljs.core.hash_combine.call(null,p1__3305_SHARP_,cljs.core.hash.call(null,p2__3306_SHARP_));
-}),cljs.core.hash.call(null,cljs.core.first.call(null,coll)),cljs.core.next.call(null,coll));
-});
-/**
-* Takes a JavaScript object and a map of names to functions and
-* attaches said functions as methods on the object.  Any references to
-* JavaScript's implict this (via the this-as macro) will resolve to the
-* object that the function is attached.
-*/
-cljs.core.extend_object_BANG_ = (function extend_object_BANG_(obj,fn_map){
-var G__3307__3308 = cljs.core.seq.call(null,fn_map);
-
-if(cljs.core.truth_(G__3307__3308))
-{var G__3310__3312 = cljs.core.first.call(null,G__3307__3308);
-var vec__3311__3313 = G__3310__3312;
-var key_name__3314 = cljs.core.nth.call(null,vec__3311__3313,0,null);
-var f__3315 = cljs.core.nth.call(null,vec__3311__3313,1,null);
-var G__3307__3316 = G__3307__3308;
-
-var G__3310__3317 = G__3310__3312;
-var G__3307__3318 = G__3307__3316;
-
-while(true){
-var vec__3319__3320 = G__3310__3317;
-var key_name__3321 = cljs.core.nth.call(null,vec__3319__3320,0,null);
-var f__3322 = cljs.core.nth.call(null,vec__3319__3320,1,null);
-var G__3307__3323 = G__3307__3318;
-
-var str_name__3324 = cljs.core.name.call(null,key_name__3321);
-
-obj[str_name__3324] = f__3322;
-var temp__3698__auto____3325 = cljs.core.next.call(null,G__3307__3323);
-
-if(cljs.core.truth_(temp__3698__auto____3325))
-{var G__3307__3326 = temp__3698__auto____3325;
-
-{
-var G__3327 = cljs.core.first.call(null,G__3307__3326);
-var G__3328 = G__3307__3326;
-G__3310__3317 = G__3327;
-G__3307__3318 = G__3328;
-continue;
-}
-} else
-{}
-break;
-}
-} else
-{}
-return obj;
-});
-
-/**
-* @constructor
-*/
-cljs.core.List = (function (meta,first,rest,count){
-this.meta = meta;
-this.first = first;
-this.rest = rest;
-this.count = count;
-})
-cljs.core.List.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.List");
-});
-cljs.core.List.prototype.cljs$core$IHash$ = true;
-cljs.core.List.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3329 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.List.prototype.cljs$core$ISequential$ = true;
-cljs.core.List.prototype.cljs$core$ICollection$ = true;
-cljs.core.List.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3330 = this;
-return (new cljs.core.List(this__3330.meta,o,coll,(this__3330.count + 1)));
-});
-cljs.core.List.prototype.cljs$core$ISeqable$ = true;
-cljs.core.List.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3331 = this;
-return coll;
-});
-cljs.core.List.prototype.cljs$core$ICounted$ = true;
-cljs.core.List.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__3332 = this;
-return this__3332.count;
-});
-cljs.core.List.prototype.cljs$core$IStack$ = true;
-cljs.core.List.prototype.cljs$core$IStack$_peek = (function (coll){
-var this__3333 = this;
-return this__3333.first;
-});
-cljs.core.List.prototype.cljs$core$IStack$_pop = (function (coll){
-var this__3334 = this;
-return cljs.core._rest.call(null,coll);
-});
-cljs.core.List.prototype.cljs$core$ISeq$ = true;
-cljs.core.List.prototype.cljs$core$ISeq$_first = (function (coll){
-var this__3335 = this;
-return this__3335.first;
-});
-cljs.core.List.prototype.cljs$core$ISeq$_rest = (function (coll){
-var this__3336 = this;
-return this__3336.rest;
-});
-cljs.core.List.prototype.cljs$core$IEquiv$ = true;
-cljs.core.List.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3337 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.List.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.List.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3338 = this;
-return (new cljs.core.List(meta,this__3338.first,this__3338.rest,this__3338.count));
-});
-cljs.core.List.prototype.cljs$core$IMeta$ = true;
-cljs.core.List.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3339 = this;
-return this__3339.meta;
-});
-cljs.core.List.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.List.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3340 = this;
-return cljs.core.List.EMPTY;
-});
-cljs.core.List;
-
-/**
-* @constructor
-*/
-cljs.core.EmptyList = (function (meta){
-this.meta = meta;
-})
-cljs.core.EmptyList.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.EmptyList");
-});
-cljs.core.EmptyList.prototype.cljs$core$IHash$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3341 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.EmptyList.prototype.cljs$core$ISequential$ = true;
-cljs.core.EmptyList.prototype.cljs$core$ICollection$ = true;
-cljs.core.EmptyList.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3342 = this;
-return (new cljs.core.List(this__3342.meta,o,null,1));
-});
-cljs.core.EmptyList.prototype.cljs$core$ISeqable$ = true;
-cljs.core.EmptyList.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3343 = this;
-return null;
-});
-cljs.core.EmptyList.prototype.cljs$core$ICounted$ = true;
-cljs.core.EmptyList.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__3344 = this;
-return 0;
-});
-cljs.core.EmptyList.prototype.cljs$core$IStack$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IStack$_peek = (function (coll){
-var this__3345 = this;
-return null;
-});
-cljs.core.EmptyList.prototype.cljs$core$IStack$_pop = (function (coll){
-var this__3346 = this;
-return null;
-});
-cljs.core.EmptyList.prototype.cljs$core$ISeq$ = true;
-cljs.core.EmptyList.prototype.cljs$core$ISeq$_first = (function (coll){
-var this__3347 = this;
-return null;
-});
-cljs.core.EmptyList.prototype.cljs$core$ISeq$_rest = (function (coll){
-var this__3348 = this;
-return null;
-});
-cljs.core.EmptyList.prototype.cljs$core$IEquiv$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3349 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.EmptyList.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3350 = this;
-return (new cljs.core.EmptyList(meta));
-});
-cljs.core.EmptyList.prototype.cljs$core$IMeta$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3351 = this;
-return this__3351.meta;
-});
-cljs.core.EmptyList.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3352 = this;
-return coll;
-});
-cljs.core.EmptyList;
-cljs.core.List.EMPTY = (new cljs.core.EmptyList(null));
-/**
-* Returns a seq of the items in coll in reverse order. Not lazy.
-*/
-cljs.core.reverse = (function reverse(coll){
-return cljs.core.reduce.call(null,cljs.core.conj,cljs.core.List.EMPTY,coll);
-});
-/**
-* @param {...*} var_args
-*/
-cljs.core.list = (function() { 
-var list__delegate = function (items){
-return cljs.core.reduce.call(null,cljs.core.conj,cljs.core.List.EMPTY,cljs.core.reverse.call(null,items));
-};
-var list = function (var_args){
-var items = null;
-if (goog.isDef(var_args)) {
-  items = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return list__delegate.call(this, items);
-};
-list.cljs$lang$maxFixedArity = 0;
-list.cljs$lang$applyTo = (function (arglist__3353){
-var items = cljs.core.seq( arglist__3353 );;
-return list__delegate.call(this, items);
-});
-return list;
-})()
-;
-
-/**
-* @constructor
-*/
-cljs.core.Cons = (function (meta,first,rest){
-this.meta = meta;
-this.first = first;
-this.rest = rest;
-})
-cljs.core.Cons.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Cons");
-});
-cljs.core.Cons.prototype.cljs$core$ISeqable$ = true;
-cljs.core.Cons.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3354 = this;
-return coll;
-});
-cljs.core.Cons.prototype.cljs$core$IHash$ = true;
-cljs.core.Cons.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3355 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.Cons.prototype.cljs$core$IEquiv$ = true;
-cljs.core.Cons.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3356 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.Cons.prototype.cljs$core$ISequential$ = true;
-cljs.core.Cons.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.Cons.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3357 = this;
-return cljs.core.with_meta.call(null,cljs.core.List.EMPTY,this__3357.meta);
-});
-cljs.core.Cons.prototype.cljs$core$ICollection$ = true;
-cljs.core.Cons.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3358 = this;
-return (new cljs.core.Cons(null,o,coll));
-});
-cljs.core.Cons.prototype.cljs$core$ISeq$ = true;
-cljs.core.Cons.prototype.cljs$core$ISeq$_first = (function (coll){
-var this__3359 = this;
-return this__3359.first;
-});
-cljs.core.Cons.prototype.cljs$core$ISeq$_rest = (function (coll){
-var this__3360 = this;
-if(cljs.core.truth_((this__3360.rest === null)))
-{return cljs.core.List.EMPTY;
-} else
-{return this__3360.rest;
-}
-});
-cljs.core.Cons.prototype.cljs$core$IMeta$ = true;
-cljs.core.Cons.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3361 = this;
-return this__3361.meta;
-});
-cljs.core.Cons.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.Cons.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3362 = this;
-return (new cljs.core.Cons(meta,this__3362.first,this__3362.rest));
-});
-cljs.core.Cons;
-/**
-* Returns a new seq where x is the first element and seq is the rest.
-*/
-cljs.core.cons = (function cons(x,seq){
-return (new cljs.core.Cons(null,x,seq));
-});
-(cljs.core.IReduce["string"] = true);
-(cljs.core._reduce["string"] = (function() {
-var G__3363 = null;
-var G__3363__3364 = (function (string,f){
-return cljs.core.ci_reduce.call(null,string,f);
-});
-var G__3363__3365 = (function (string,f,start){
-return cljs.core.ci_reduce.call(null,string,f,start);
-});
-G__3363 = function(string,f,start){
-switch(arguments.length){
-case  2 :
-return G__3363__3364.call(this,string,f);
-case  3 :
-return G__3363__3365.call(this,string,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3363;
-})()
-);
-(cljs.core.ILookup["string"] = true);
-(cljs.core._lookup["string"] = (function() {
-var G__3367 = null;
-var G__3367__3368 = (function (string,k){
-return cljs.core._nth.call(null,string,k);
-});
-var G__3367__3369 = (function (string,k,not_found){
-return cljs.core._nth.call(null,string,k,not_found);
-});
-G__3367 = function(string,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3367__3368.call(this,string,k);
-case  3 :
-return G__3367__3369.call(this,string,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3367;
-})()
-);
-(cljs.core.IIndexed["string"] = true);
-(cljs.core._nth["string"] = (function() {
-var G__3371 = null;
-var G__3371__3372 = (function (string,n){
-if(cljs.core.truth_((n < cljs.core._count.call(null,string))))
-{return string.charAt(n);
-} else
-{return null;
-}
-});
-var G__3371__3373 = (function (string,n,not_found){
-if(cljs.core.truth_((n < cljs.core._count.call(null,string))))
-{return string.charAt(n);
-} else
-{return not_found;
-}
-});
-G__3371 = function(string,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3371__3372.call(this,string,n);
-case  3 :
-return G__3371__3373.call(this,string,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3371;
-})()
-);
-(cljs.core.ICounted["string"] = true);
-(cljs.core._count["string"] = (function (s){
-return s.length;
-}));
-(cljs.core.ISeqable["string"] = true);
-(cljs.core._seq["string"] = (function (string){
-return cljs.core.prim_seq.call(null,string,0);
-}));
-(cljs.core.IHash["string"] = true);
-(cljs.core._hash["string"] = (function (o){
-return goog.string.hashCode.call(null,o);
-}));
-String.prototype.cljs$core$IFn$ = true;
-String.prototype.call = (function() {
-var G__3381 = null;
-var G__3381__3382 = (function (tsym3375,coll){
-var tsym3375__3377 = this;
-
-var this$__3378 = tsym3375__3377;
-
-return cljs.core.get.call(null,coll,this$__3378.toString());
-});
-var G__3381__3383 = (function (tsym3376,coll,not_found){
-var tsym3376__3379 = this;
-
-var this$__3380 = tsym3376__3379;
-
-return cljs.core.get.call(null,coll,this$__3380.toString(),not_found);
-});
-G__3381 = function(tsym3376,coll,not_found){
-switch(arguments.length){
-case  2 :
-return G__3381__3382.call(this,tsym3376,coll);
-case  3 :
-return G__3381__3383.call(this,tsym3376,coll,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3381;
-})()
-;
-String['prototype']['apply'] = (function (s,args){
-if(cljs.core.truth_((cljs.core.count.call(null,args) < 2)))
-{return cljs.core.get.call(null,(args[0]),s);
-} else
-{return cljs.core.get.call(null,(args[0]),s,(args[1]));
-}
-});
-cljs.core.lazy_seq_value = (function lazy_seq_value(lazy_seq){
-var x__3385 = lazy_seq.x;
-
-if(cljs.core.truth_(lazy_seq.realized))
-{return x__3385;
-} else
-{lazy_seq.x = x__3385.call(null);
-lazy_seq.realized = true;
-return lazy_seq.x;
-}
-});
-
-/**
-* @constructor
-*/
-cljs.core.LazySeq = (function (meta,realized,x){
-this.meta = meta;
-this.realized = realized;
-this.x = x;
-})
-cljs.core.LazySeq.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.LazySeq");
-});
-cljs.core.LazySeq.prototype.cljs$core$ISeqable$ = true;
-cljs.core.LazySeq.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3386 = this;
-return cljs.core.seq.call(null,cljs.core.lazy_seq_value.call(null,coll));
-});
-cljs.core.LazySeq.prototype.cljs$core$IHash$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3387 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.LazySeq.prototype.cljs$core$IEquiv$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3388 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.LazySeq.prototype.cljs$core$ISequential$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3389 = this;
-return cljs.core.with_meta.call(null,cljs.core.List.EMPTY,this__3389.meta);
-});
-cljs.core.LazySeq.prototype.cljs$core$ICollection$ = true;
-cljs.core.LazySeq.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3390 = this;
-return cljs.core.cons.call(null,o,coll);
-});
-cljs.core.LazySeq.prototype.cljs$core$ISeq$ = true;
-cljs.core.LazySeq.prototype.cljs$core$ISeq$_first = (function (coll){
-var this__3391 = this;
-return cljs.core.first.call(null,cljs.core.lazy_seq_value.call(null,coll));
-});
-cljs.core.LazySeq.prototype.cljs$core$ISeq$_rest = (function (coll){
-var this__3392 = this;
-return cljs.core.rest.call(null,cljs.core.lazy_seq_value.call(null,coll));
-});
-cljs.core.LazySeq.prototype.cljs$core$IMeta$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3393 = this;
-return this__3393.meta;
-});
-cljs.core.LazySeq.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3394 = this;
-return (new cljs.core.LazySeq(meta,this__3394.realized,this__3394.x));
-});
-cljs.core.LazySeq;
-/**
-* Naive impl of to-array as a start.
-*/
-cljs.core.to_array = (function to_array(s){
-var ary__3395 = [];
-
-var s__3396 = s;
-
-while(true){
-if(cljs.core.truth_(cljs.core.seq.call(null,s__3396)))
-{ary__3395.push(cljs.core.first.call(null,s__3396));
-{
-var G__3397 = cljs.core.next.call(null,s__3396);
-s__3396 = G__3397;
-continue;
-}
-} else
-{return ary__3395;
-}
-break;
-}
-});
-cljs.core.bounded_count = (function bounded_count(s,n){
-var s__3398 = s;
-var i__3399 = n;
-var sum__3400 = 0;
-
-while(true){
-if(cljs.core.truth_((function (){var and__3546__auto____3401 = (i__3399 > 0);
-
-if(cljs.core.truth_(and__3546__auto____3401))
-{return cljs.core.seq.call(null,s__3398);
-} else
-{return and__3546__auto____3401;
-}
-})()))
-{{
-var G__3402 = cljs.core.next.call(null,s__3398);
-var G__3403 = (i__3399 - 1);
-var G__3404 = (sum__3400 + 1);
-s__3398 = G__3402;
-i__3399 = G__3403;
-sum__3400 = G__3404;
-continue;
-}
-} else
-{return sum__3400;
-}
-break;
-}
-});
-cljs.core.spread = (function spread(arglist){
-if(cljs.core.truth_((arglist === null)))
-{return null;
-} else
-{if(cljs.core.truth_((cljs.core.next.call(null,arglist) === null)))
-{return cljs.core.seq.call(null,cljs.core.first.call(null,arglist));
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return cljs.core.cons.call(null,cljs.core.first.call(null,arglist),spread.call(null,cljs.core.next.call(null,arglist)));
-} else
-{return null;
-}
-}
-}
-});
-/**
-* Returns a lazy seq representing the concatenation of the elements in the supplied colls.
-* @param {...*} var_args
-*/
-cljs.core.concat = (function() {
-var concat = null;
-var concat__3408 = (function (){
-return (new cljs.core.LazySeq(null,false,(function (){
-return null;
-})));
-});
-var concat__3409 = (function (x){
-return (new cljs.core.LazySeq(null,false,(function (){
-return x;
-})));
-});
-var concat__3410 = (function (x,y){
-return (new cljs.core.LazySeq(null,false,(function (){
-var s__3405 = cljs.core.seq.call(null,x);
-
-if(cljs.core.truth_(s__3405))
-{return cljs.core.cons.call(null,cljs.core.first.call(null,s__3405),concat.call(null,cljs.core.rest.call(null,s__3405),y));
-} else
-{return y;
-}
-})));
-});
-var concat__3411 = (function() { 
-var G__3413__delegate = function (x,y,zs){
-var cat__3407 = (function cat(xys,zs){
-return (new cljs.core.LazySeq(null,false,(function (){
-var xys__3406 = cljs.core.seq.call(null,xys);
-
-if(cljs.core.truth_(xys__3406))
-{return cljs.core.cons.call(null,cljs.core.first.call(null,xys__3406),cat.call(null,cljs.core.rest.call(null,xys__3406),zs));
-} else
-{if(cljs.core.truth_(zs))
-{return cat.call(null,cljs.core.first.call(null,zs),cljs.core.next.call(null,zs));
-} else
-{return null;
-}
-}
-})));
-});
-
-return cat__3407.call(null,concat.call(null,x,y),zs);
-};
-var G__3413 = function (x,y,var_args){
-var zs = null;
-if (goog.isDef(var_args)) {
-  zs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3413__delegate.call(this, x, y, zs);
-};
-G__3413.cljs$lang$maxFixedArity = 2;
-G__3413.cljs$lang$applyTo = (function (arglist__3414){
-var x = cljs.core.first(arglist__3414);
-var y = cljs.core.first(cljs.core.next(arglist__3414));
-var zs = cljs.core.rest(cljs.core.next(arglist__3414));
-return G__3413__delegate.call(this, x, y, zs);
-});
-return G__3413;
-})()
-;
-concat = function(x,y,var_args){
-var zs = var_args;
-switch(arguments.length){
-case  0 :
-return concat__3408.call(this);
-case  1 :
-return concat__3409.call(this,x);
-case  2 :
-return concat__3410.call(this,x,y);
-default:
-return concat__3411.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-concat.cljs$lang$maxFixedArity = 2;
-concat.cljs$lang$applyTo = concat__3411.cljs$lang$applyTo;
-return concat;
-})()
-;
-/**
-* Creates a new list containing the items prepended to the rest, the
-* last of which will be treated as a sequence.
-* @param {...*} var_args
-*/
-cljs.core.list_STAR_ = (function() {
-var list_STAR_ = null;
-var list_STAR___3415 = (function (args){
-return cljs.core.seq.call(null,args);
-});
-var list_STAR___3416 = (function (a,args){
-return cljs.core.cons.call(null,a,args);
-});
-var list_STAR___3417 = (function (a,b,args){
-return cljs.core.cons.call(null,a,cljs.core.cons.call(null,b,args));
-});
-var list_STAR___3418 = (function (a,b,c,args){
-return cljs.core.cons.call(null,a,cljs.core.cons.call(null,b,cljs.core.cons.call(null,c,args)));
-});
-var list_STAR___3419 = (function() { 
-var G__3421__delegate = function (a,b,c,d,more){
-return cljs.core.cons.call(null,a,cljs.core.cons.call(null,b,cljs.core.cons.call(null,c,cljs.core.cons.call(null,d,cljs.core.spread.call(null,more)))));
-};
-var G__3421 = function (a,b,c,d,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 4),0);
-} 
-return G__3421__delegate.call(this, a, b, c, d, more);
-};
-G__3421.cljs$lang$maxFixedArity = 4;
-G__3421.cljs$lang$applyTo = (function (arglist__3422){
-var a = cljs.core.first(arglist__3422);
-var b = cljs.core.first(cljs.core.next(arglist__3422));
-var c = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3422)));
-var d = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3422))));
-var more = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3422))));
-return G__3421__delegate.call(this, a, b, c, d, more);
-});
-return G__3421;
-})()
-;
-list_STAR_ = function(a,b,c,d,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return list_STAR___3415.call(this,a);
-case  2 :
-return list_STAR___3416.call(this,a,b);
-case  3 :
-return list_STAR___3417.call(this,a,b,c);
-case  4 :
-return list_STAR___3418.call(this,a,b,c,d);
-default:
-return list_STAR___3419.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-list_STAR_.cljs$lang$maxFixedArity = 4;
-list_STAR_.cljs$lang$applyTo = list_STAR___3419.cljs$lang$applyTo;
-return list_STAR_;
-})()
-;
-/**
-* Applies fn f to the argument list formed by prepending intervening arguments to args.
-* First cut.  Not lazy.  Needs to use emitted toApply.
-* @param {...*} var_args
-*/
-cljs.core.apply = (function() {
-var apply = null;
-var apply__3432 = (function (f,args){
-var fixed_arity__3423 = f.cljs$lang$maxFixedArity;
-
-if(cljs.core.truth_(f.cljs$lang$applyTo))
-{if(cljs.core.truth_((cljs.core.bounded_count.call(null,args,(fixed_arity__3423 + 1)) <= fixed_arity__3423)))
-{return f.apply(f,cljs.core.to_array.call(null,args));
-} else
-{return f.cljs$lang$applyTo(args);
-}
-} else
-{return f.apply(f,cljs.core.to_array.call(null,args));
-}
-});
-var apply__3433 = (function (f,x,args){
-var arglist__3424 = cljs.core.list_STAR_.call(null,x,args);
-var fixed_arity__3425 = f.cljs$lang$maxFixedArity;
-
-if(cljs.core.truth_(f.cljs$lang$applyTo))
-{if(cljs.core.truth_((cljs.core.bounded_count.call(null,arglist__3424,fixed_arity__3425) <= fixed_arity__3425)))
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3424));
-} else
-{return f.cljs$lang$applyTo(arglist__3424);
-}
-} else
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3424));
-}
-});
-var apply__3434 = (function (f,x,y,args){
-var arglist__3426 = cljs.core.list_STAR_.call(null,x,y,args);
-var fixed_arity__3427 = f.cljs$lang$maxFixedArity;
-
-if(cljs.core.truth_(f.cljs$lang$applyTo))
-{if(cljs.core.truth_((cljs.core.bounded_count.call(null,arglist__3426,fixed_arity__3427) <= fixed_arity__3427)))
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3426));
-} else
-{return f.cljs$lang$applyTo(arglist__3426);
-}
-} else
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3426));
-}
-});
-var apply__3435 = (function (f,x,y,z,args){
-var arglist__3428 = cljs.core.list_STAR_.call(null,x,y,z,args);
-var fixed_arity__3429 = f.cljs$lang$maxFixedArity;
-
-if(cljs.core.truth_(f.cljs$lang$applyTo))
-{if(cljs.core.truth_((cljs.core.bounded_count.call(null,arglist__3428,fixed_arity__3429) <= fixed_arity__3429)))
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3428));
-} else
-{return f.cljs$lang$applyTo(arglist__3428);
-}
-} else
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3428));
-}
-});
-var apply__3436 = (function() { 
-var G__3438__delegate = function (f,a,b,c,d,args){
-var arglist__3430 = cljs.core.cons.call(null,a,cljs.core.cons.call(null,b,cljs.core.cons.call(null,c,cljs.core.cons.call(null,d,cljs.core.spread.call(null,args)))));
-var fixed_arity__3431 = f.cljs$lang$maxFixedArity;
-
-if(cljs.core.truth_(f.cljs$lang$applyTo))
-{if(cljs.core.truth_((cljs.core.bounded_count.call(null,arglist__3430,fixed_arity__3431) <= fixed_arity__3431)))
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3430));
-} else
-{return f.cljs$lang$applyTo(arglist__3430);
-}
-} else
-{return f.apply(f,cljs.core.to_array.call(null,arglist__3430));
-}
-};
-var G__3438 = function (f,a,b,c,d,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 5),0);
-} 
-return G__3438__delegate.call(this, f, a, b, c, d, args);
-};
-G__3438.cljs$lang$maxFixedArity = 5;
-G__3438.cljs$lang$applyTo = (function (arglist__3439){
-var f = cljs.core.first(arglist__3439);
-var a = cljs.core.first(cljs.core.next(arglist__3439));
-var b = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3439)));
-var c = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3439))));
-var d = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3439)))));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3439)))));
-return G__3438__delegate.call(this, f, a, b, c, d, args);
-});
-return G__3438;
-})()
-;
-apply = function(f,a,b,c,d,var_args){
-var args = var_args;
-switch(arguments.length){
-case  2 :
-return apply__3432.call(this,f,a);
-case  3 :
-return apply__3433.call(this,f,a,b);
-case  4 :
-return apply__3434.call(this,f,a,b,c);
-case  5 :
-return apply__3435.call(this,f,a,b,c,d);
-default:
-return apply__3436.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-apply.cljs$lang$maxFixedArity = 5;
-apply.cljs$lang$applyTo = apply__3436.cljs$lang$applyTo;
-return apply;
-})()
-;
-/**
-* Returns an object of the same type and value as obj, with
-* (apply f (meta obj) args) as its metadata.
-* @param {...*} var_args
-*/
-cljs.core.vary_meta = (function() { 
-var vary_meta__delegate = function (obj,f,args){
-return cljs.core.with_meta.call(null,obj,cljs.core.apply.call(null,f,cljs.core.meta.call(null,obj),args));
-};
-var vary_meta = function (obj,f,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return vary_meta__delegate.call(this, obj, f, args);
-};
-vary_meta.cljs$lang$maxFixedArity = 2;
-vary_meta.cljs$lang$applyTo = (function (arglist__3440){
-var obj = cljs.core.first(arglist__3440);
-var f = cljs.core.first(cljs.core.next(arglist__3440));
-var args = cljs.core.rest(cljs.core.next(arglist__3440));
-return vary_meta__delegate.call(this, obj, f, args);
-});
-return vary_meta;
-})()
-;
-/**
-* Same as (not (= obj1 obj2))
-* @param {...*} var_args
-*/
-cljs.core.not_EQ_ = (function() {
-var not_EQ_ = null;
-var not_EQ___3441 = (function (x){
-return false;
-});
-var not_EQ___3442 = (function (x,y){
-return cljs.core.not.call(null,cljs.core._EQ_.call(null,x,y));
-});
-var not_EQ___3443 = (function() { 
-var G__3445__delegate = function (x,y,more){
-return cljs.core.not.call(null,cljs.core.apply.call(null,cljs.core._EQ_,x,y,more));
-};
-var G__3445 = function (x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3445__delegate.call(this, x, y, more);
-};
-G__3445.cljs$lang$maxFixedArity = 2;
-G__3445.cljs$lang$applyTo = (function (arglist__3446){
-var x = cljs.core.first(arglist__3446);
-var y = cljs.core.first(cljs.core.next(arglist__3446));
-var more = cljs.core.rest(cljs.core.next(arglist__3446));
-return G__3445__delegate.call(this, x, y, more);
-});
-return G__3445;
-})()
-;
-not_EQ_ = function(x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  1 :
-return not_EQ___3441.call(this,x);
-case  2 :
-return not_EQ___3442.call(this,x,y);
-default:
-return not_EQ___3443.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-not_EQ_.cljs$lang$maxFixedArity = 2;
-not_EQ_.cljs$lang$applyTo = not_EQ___3443.cljs$lang$applyTo;
-return not_EQ_;
-})()
-;
-/**
-* If coll is empty, returns nil, else coll
-*/
-cljs.core.not_empty = (function not_empty(coll){
-if(cljs.core.truth_(cljs.core.seq.call(null,coll)))
-{return coll;
-} else
-{return null;
-}
-});
-/**
-* Returns true if (pred x) is logical true for every x in coll, else
-* false.
-*/
-cljs.core.every_QMARK_ = (function every_QMARK_(pred,coll){
-while(true){
-if(cljs.core.truth_((cljs.core.seq.call(null,coll) === null)))
-{return true;
-} else
-{if(cljs.core.truth_(pred.call(null,cljs.core.first.call(null,coll))))
-{{
-var G__3447 = pred;
-var G__3448 = cljs.core.next.call(null,coll);
-pred = G__3447;
-coll = G__3448;
-continue;
-}
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return false;
-} else
-{return null;
-}
-}
-}
-break;
-}
-});
-/**
-* Returns false if (pred x) is logical true for every x in
-* coll, else true.
-*/
-cljs.core.not_every_QMARK_ = (function not_every_QMARK_(pred,coll){
-return cljs.core.not.call(null,cljs.core.every_QMARK_.call(null,pred,coll));
-});
-/**
-* Returns the first logical true value of (pred x) for any x in coll,
-* else nil.  One common idiom is to use a set as pred, for example
-* this will return :fred if :fred is in the sequence, otherwise nil:
-* (some #{:fred} coll)
-*/
-cljs.core.some = (function some(pred,coll){
-while(true){
-if(cljs.core.truth_(cljs.core.seq.call(null,coll)))
-{var or__3548__auto____3449 = pred.call(null,cljs.core.first.call(null,coll));
-
-if(cljs.core.truth_(or__3548__auto____3449))
-{return or__3548__auto____3449;
-} else
-{{
-var G__3450 = pred;
-var G__3451 = cljs.core.next.call(null,coll);
-pred = G__3450;
-coll = G__3451;
-continue;
-}
-}
-} else
-{return null;
-}
-break;
-}
-});
-/**
-* Returns false if (pred x) is logical true for any x in coll,
-* else true.
-*/
-cljs.core.not_any_QMARK_ = (function not_any_QMARK_(pred,coll){
-return cljs.core.not.call(null,cljs.core.some.call(null,pred,coll));
-});
-/**
-* Returns true if n is even, throws an exception if n is not an integer
-*/
-cljs.core.even_QMARK_ = (function even_QMARK_(n){
-if(cljs.core.truth_(cljs.core.integer_QMARK_.call(null,n)))
-{return ((n & 1) === 0);
-} else
-{throw (new Error(cljs.core.str.call(null,"Argument must be an integer: ",n)));
-}
-});
-/**
-* Returns true if n is odd, throws an exception if n is not an integer
-*/
-cljs.core.odd_QMARK_ = (function odd_QMARK_(n){
-return cljs.core.not.call(null,cljs.core.even_QMARK_.call(null,n));
-});
-cljs.core.identity = (function identity(x){
-return x;
-});
-/**
-* Takes a fn f and returns a fn that takes the same arguments as f,
-* has the same effects, if any, and returns the opposite truth value.
-*/
-cljs.core.complement = (function complement(f){
-return (function() {
-var G__3452 = null;
-var G__3452__3453 = (function (){
-return cljs.core.not.call(null,f.call(null));
-});
-var G__3452__3454 = (function (x){
-return cljs.core.not.call(null,f.call(null,x));
-});
-var G__3452__3455 = (function (x,y){
-return cljs.core.not.call(null,f.call(null,x,y));
-});
-var G__3452__3456 = (function() { 
-var G__3458__delegate = function (x,y,zs){
-return cljs.core.not.call(null,cljs.core.apply.call(null,f,x,y,zs));
-};
-var G__3458 = function (x,y,var_args){
-var zs = null;
-if (goog.isDef(var_args)) {
-  zs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3458__delegate.call(this, x, y, zs);
-};
-G__3458.cljs$lang$maxFixedArity = 2;
-G__3458.cljs$lang$applyTo = (function (arglist__3459){
-var x = cljs.core.first(arglist__3459);
-var y = cljs.core.first(cljs.core.next(arglist__3459));
-var zs = cljs.core.rest(cljs.core.next(arglist__3459));
-return G__3458__delegate.call(this, x, y, zs);
-});
-return G__3458;
-})()
-;
-G__3452 = function(x,y,var_args){
-var zs = var_args;
-switch(arguments.length){
-case  0 :
-return G__3452__3453.call(this);
-case  1 :
-return G__3452__3454.call(this,x);
-case  2 :
-return G__3452__3455.call(this,x,y);
-default:
-return G__3452__3456.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__3452.cljs$lang$maxFixedArity = 2;
-G__3452.cljs$lang$applyTo = G__3452__3456.cljs$lang$applyTo;
-return G__3452;
-})()
-});
-/**
-* Returns a function that takes any number of arguments and returns x.
-*/
-cljs.core.constantly = (function constantly(x){
-return (function() { 
-var G__3460__delegate = function (args){
-return x;
-};
-var G__3460 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__3460__delegate.call(this, args);
-};
-G__3460.cljs$lang$maxFixedArity = 0;
-G__3460.cljs$lang$applyTo = (function (arglist__3461){
-var args = cljs.core.seq( arglist__3461 );;
-return G__3460__delegate.call(this, args);
-});
-return G__3460;
-})()
-;
-});
-/**
-* Takes a set of functions and returns a fn that is the composition
-* of those fns.  The returned fn takes a variable number of args,
-* applies the rightmost of fns to the args, the next
-* fn (right-to-left) to the result, etc.
-* @param {...*} var_args
-*/
-cljs.core.comp = (function() {
-var comp = null;
-var comp__3465 = (function (){
-return cljs.core.identity;
-});
-var comp__3466 = (function (f){
-return f;
-});
-var comp__3467 = (function (f,g){
-return (function() {
-var G__3471 = null;
-var G__3471__3472 = (function (){
-return f.call(null,g.call(null));
-});
-var G__3471__3473 = (function (x){
-return f.call(null,g.call(null,x));
-});
-var G__3471__3474 = (function (x,y){
-return f.call(null,g.call(null,x,y));
-});
-var G__3471__3475 = (function (x,y,z){
-return f.call(null,g.call(null,x,y,z));
-});
-var G__3471__3476 = (function() { 
-var G__3478__delegate = function (x,y,z,args){
-return f.call(null,cljs.core.apply.call(null,g,x,y,z,args));
-};
-var G__3478 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3478__delegate.call(this, x, y, z, args);
-};
-G__3478.cljs$lang$maxFixedArity = 3;
-G__3478.cljs$lang$applyTo = (function (arglist__3479){
-var x = cljs.core.first(arglist__3479);
-var y = cljs.core.first(cljs.core.next(arglist__3479));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3479)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3479)));
-return G__3478__delegate.call(this, x, y, z, args);
-});
-return G__3478;
-})()
-;
-G__3471 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return G__3471__3472.call(this);
-case  1 :
-return G__3471__3473.call(this,x);
-case  2 :
-return G__3471__3474.call(this,x,y);
-case  3 :
-return G__3471__3475.call(this,x,y,z);
-default:
-return G__3471__3476.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__3471.cljs$lang$maxFixedArity = 3;
-G__3471.cljs$lang$applyTo = G__3471__3476.cljs$lang$applyTo;
-return G__3471;
-})()
-});
-var comp__3468 = (function (f,g,h){
-return (function() {
-var G__3480 = null;
-var G__3480__3481 = (function (){
-return f.call(null,g.call(null,h.call(null)));
-});
-var G__3480__3482 = (function (x){
-return f.call(null,g.call(null,h.call(null,x)));
-});
-var G__3480__3483 = (function (x,y){
-return f.call(null,g.call(null,h.call(null,x,y)));
-});
-var G__3480__3484 = (function (x,y,z){
-return f.call(null,g.call(null,h.call(null,x,y,z)));
-});
-var G__3480__3485 = (function() { 
-var G__3487__delegate = function (x,y,z,args){
-return f.call(null,g.call(null,cljs.core.apply.call(null,h,x,y,z,args)));
-};
-var G__3487 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3487__delegate.call(this, x, y, z, args);
-};
-G__3487.cljs$lang$maxFixedArity = 3;
-G__3487.cljs$lang$applyTo = (function (arglist__3488){
-var x = cljs.core.first(arglist__3488);
-var y = cljs.core.first(cljs.core.next(arglist__3488));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3488)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3488)));
-return G__3487__delegate.call(this, x, y, z, args);
-});
-return G__3487;
-})()
-;
-G__3480 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return G__3480__3481.call(this);
-case  1 :
-return G__3480__3482.call(this,x);
-case  2 :
-return G__3480__3483.call(this,x,y);
-case  3 :
-return G__3480__3484.call(this,x,y,z);
-default:
-return G__3480__3485.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__3480.cljs$lang$maxFixedArity = 3;
-G__3480.cljs$lang$applyTo = G__3480__3485.cljs$lang$applyTo;
-return G__3480;
-})()
-});
-var comp__3469 = (function() { 
-var G__3489__delegate = function (f1,f2,f3,fs){
-var fs__3462 = cljs.core.reverse.call(null,cljs.core.list_STAR_.call(null,f1,f2,f3,fs));
-
-return (function() { 
-var G__3490__delegate = function (args){
-var ret__3463 = cljs.core.apply.call(null,cljs.core.first.call(null,fs__3462),args);
-var fs__3464 = cljs.core.next.call(null,fs__3462);
-
-while(true){
-if(cljs.core.truth_(fs__3464))
-{{
-var G__3491 = cljs.core.first.call(null,fs__3464).call(null,ret__3463);
-var G__3492 = cljs.core.next.call(null,fs__3464);
-ret__3463 = G__3491;
-fs__3464 = G__3492;
-continue;
-}
-} else
-{return ret__3463;
-}
-break;
-}
-};
-var G__3490 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__3490__delegate.call(this, args);
-};
-G__3490.cljs$lang$maxFixedArity = 0;
-G__3490.cljs$lang$applyTo = (function (arglist__3493){
-var args = cljs.core.seq( arglist__3493 );;
-return G__3490__delegate.call(this, args);
-});
-return G__3490;
-})()
-;
-};
-var G__3489 = function (f1,f2,f3,var_args){
-var fs = null;
-if (goog.isDef(var_args)) {
-  fs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3489__delegate.call(this, f1, f2, f3, fs);
-};
-G__3489.cljs$lang$maxFixedArity = 3;
-G__3489.cljs$lang$applyTo = (function (arglist__3494){
-var f1 = cljs.core.first(arglist__3494);
-var f2 = cljs.core.first(cljs.core.next(arglist__3494));
-var f3 = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3494)));
-var fs = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3494)));
-return G__3489__delegate.call(this, f1, f2, f3, fs);
-});
-return G__3489;
-})()
-;
-comp = function(f1,f2,f3,var_args){
-var fs = var_args;
-switch(arguments.length){
-case  0 :
-return comp__3465.call(this);
-case  1 :
-return comp__3466.call(this,f1);
-case  2 :
-return comp__3467.call(this,f1,f2);
-case  3 :
-return comp__3468.call(this,f1,f2,f3);
-default:
-return comp__3469.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-comp.cljs$lang$maxFixedArity = 3;
-comp.cljs$lang$applyTo = comp__3469.cljs$lang$applyTo;
-return comp;
-})()
-;
-/**
-* Takes a function f and fewer than the normal arguments to f, and
-* returns a fn that takes a variable number of additional args. When
-* called, the returned function calls f with args + additional args.
-* @param {...*} var_args
-*/
-cljs.core.partial = (function() {
-var partial = null;
-var partial__3495 = (function (f,arg1){
-return (function() { 
-var G__3500__delegate = function (args){
-return cljs.core.apply.call(null,f,arg1,args);
-};
-var G__3500 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__3500__delegate.call(this, args);
-};
-G__3500.cljs$lang$maxFixedArity = 0;
-G__3500.cljs$lang$applyTo = (function (arglist__3501){
-var args = cljs.core.seq( arglist__3501 );;
-return G__3500__delegate.call(this, args);
-});
-return G__3500;
-})()
-;
-});
-var partial__3496 = (function (f,arg1,arg2){
-return (function() { 
-var G__3502__delegate = function (args){
-return cljs.core.apply.call(null,f,arg1,arg2,args);
-};
-var G__3502 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__3502__delegate.call(this, args);
-};
-G__3502.cljs$lang$maxFixedArity = 0;
-G__3502.cljs$lang$applyTo = (function (arglist__3503){
-var args = cljs.core.seq( arglist__3503 );;
-return G__3502__delegate.call(this, args);
-});
-return G__3502;
-})()
-;
-});
-var partial__3497 = (function (f,arg1,arg2,arg3){
-return (function() { 
-var G__3504__delegate = function (args){
-return cljs.core.apply.call(null,f,arg1,arg2,arg3,args);
-};
-var G__3504 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__3504__delegate.call(this, args);
-};
-G__3504.cljs$lang$maxFixedArity = 0;
-G__3504.cljs$lang$applyTo = (function (arglist__3505){
-var args = cljs.core.seq( arglist__3505 );;
-return G__3504__delegate.call(this, args);
-});
-return G__3504;
-})()
-;
-});
-var partial__3498 = (function() { 
-var G__3506__delegate = function (f,arg1,arg2,arg3,more){
-return (function() { 
-var G__3507__delegate = function (args){
-return cljs.core.apply.call(null,f,arg1,arg2,arg3,cljs.core.concat.call(null,more,args));
-};
-var G__3507 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__3507__delegate.call(this, args);
-};
-G__3507.cljs$lang$maxFixedArity = 0;
-G__3507.cljs$lang$applyTo = (function (arglist__3508){
-var args = cljs.core.seq( arglist__3508 );;
-return G__3507__delegate.call(this, args);
-});
-return G__3507;
-})()
-;
-};
-var G__3506 = function (f,arg1,arg2,arg3,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 4),0);
-} 
-return G__3506__delegate.call(this, f, arg1, arg2, arg3, more);
-};
-G__3506.cljs$lang$maxFixedArity = 4;
-G__3506.cljs$lang$applyTo = (function (arglist__3509){
-var f = cljs.core.first(arglist__3509);
-var arg1 = cljs.core.first(cljs.core.next(arglist__3509));
-var arg2 = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3509)));
-var arg3 = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3509))));
-var more = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3509))));
-return G__3506__delegate.call(this, f, arg1, arg2, arg3, more);
-});
-return G__3506;
-})()
-;
-partial = function(f,arg1,arg2,arg3,var_args){
-var more = var_args;
-switch(arguments.length){
-case  2 :
-return partial__3495.call(this,f,arg1);
-case  3 :
-return partial__3496.call(this,f,arg1,arg2);
-case  4 :
-return partial__3497.call(this,f,arg1,arg2,arg3);
-default:
-return partial__3498.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-partial.cljs$lang$maxFixedArity = 4;
-partial.cljs$lang$applyTo = partial__3498.cljs$lang$applyTo;
-return partial;
-})()
-;
-/**
-* Takes a function f, and returns a function that calls f, replacing
-* a nil first argument to f with the supplied value x. Higher arity
-* versions can replace arguments in the second and third
-* positions (y, z). Note that the function f can take any number of
-* arguments, not just the one(s) being nil-patched.
-*/
-cljs.core.fnil = (function() {
-var fnil = null;
-var fnil__3510 = (function (f,x){
-return (function() {
-var G__3514 = null;
-var G__3514__3515 = (function (a){
-return f.call(null,(cljs.core.truth_((a === null))?x:a));
-});
-var G__3514__3516 = (function (a,b){
-return f.call(null,(cljs.core.truth_((a === null))?x:a),b);
-});
-var G__3514__3517 = (function (a,b,c){
-return f.call(null,(cljs.core.truth_((a === null))?x:a),b,c);
-});
-var G__3514__3518 = (function() { 
-var G__3520__delegate = function (a,b,c,ds){
-return cljs.core.apply.call(null,f,(cljs.core.truth_((a === null))?x:a),b,c,ds);
-};
-var G__3520 = function (a,b,c,var_args){
-var ds = null;
-if (goog.isDef(var_args)) {
-  ds = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3520__delegate.call(this, a, b, c, ds);
-};
-G__3520.cljs$lang$maxFixedArity = 3;
-G__3520.cljs$lang$applyTo = (function (arglist__3521){
-var a = cljs.core.first(arglist__3521);
-var b = cljs.core.first(cljs.core.next(arglist__3521));
-var c = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3521)));
-var ds = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3521)));
-return G__3520__delegate.call(this, a, b, c, ds);
-});
-return G__3520;
-})()
-;
-G__3514 = function(a,b,c,var_args){
-var ds = var_args;
-switch(arguments.length){
-case  1 :
-return G__3514__3515.call(this,a);
-case  2 :
-return G__3514__3516.call(this,a,b);
-case  3 :
-return G__3514__3517.call(this,a,b,c);
-default:
-return G__3514__3518.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__3514.cljs$lang$maxFixedArity = 3;
-G__3514.cljs$lang$applyTo = G__3514__3518.cljs$lang$applyTo;
-return G__3514;
-})()
-});
-var fnil__3511 = (function (f,x,y){
-return (function() {
-var G__3522 = null;
-var G__3522__3523 = (function (a,b){
-return f.call(null,(cljs.core.truth_((a === null))?x:a),(cljs.core.truth_((b === null))?y:b));
-});
-var G__3522__3524 = (function (a,b,c){
-return f.call(null,(cljs.core.truth_((a === null))?x:a),(cljs.core.truth_((b === null))?y:b),c);
-});
-var G__3522__3525 = (function() { 
-var G__3527__delegate = function (a,b,c,ds){
-return cljs.core.apply.call(null,f,(cljs.core.truth_((a === null))?x:a),(cljs.core.truth_((b === null))?y:b),c,ds);
-};
-var G__3527 = function (a,b,c,var_args){
-var ds = null;
-if (goog.isDef(var_args)) {
-  ds = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3527__delegate.call(this, a, b, c, ds);
-};
-G__3527.cljs$lang$maxFixedArity = 3;
-G__3527.cljs$lang$applyTo = (function (arglist__3528){
-var a = cljs.core.first(arglist__3528);
-var b = cljs.core.first(cljs.core.next(arglist__3528));
-var c = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3528)));
-var ds = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3528)));
-return G__3527__delegate.call(this, a, b, c, ds);
-});
-return G__3527;
-})()
-;
-G__3522 = function(a,b,c,var_args){
-var ds = var_args;
-switch(arguments.length){
-case  2 :
-return G__3522__3523.call(this,a,b);
-case  3 :
-return G__3522__3524.call(this,a,b,c);
-default:
-return G__3522__3525.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__3522.cljs$lang$maxFixedArity = 3;
-G__3522.cljs$lang$applyTo = G__3522__3525.cljs$lang$applyTo;
-return G__3522;
-})()
-});
-var fnil__3512 = (function (f,x,y,z){
-return (function() {
-var G__3529 = null;
-var G__3529__3530 = (function (a,b){
-return f.call(null,(cljs.core.truth_((a === null))?x:a),(cljs.core.truth_((b === null))?y:b));
-});
-var G__3529__3531 = (function (a,b,c){
-return f.call(null,(cljs.core.truth_((a === null))?x:a),(cljs.core.truth_((b === null))?y:b),(cljs.core.truth_((c === null))?z:c));
-});
-var G__3529__3532 = (function() { 
-var G__3534__delegate = function (a,b,c,ds){
-return cljs.core.apply.call(null,f,(cljs.core.truth_((a === null))?x:a),(cljs.core.truth_((b === null))?y:b),(cljs.core.truth_((c === null))?z:c),ds);
-};
-var G__3534 = function (a,b,c,var_args){
-var ds = null;
-if (goog.isDef(var_args)) {
-  ds = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3534__delegate.call(this, a, b, c, ds);
-};
-G__3534.cljs$lang$maxFixedArity = 3;
-G__3534.cljs$lang$applyTo = (function (arglist__3535){
-var a = cljs.core.first(arglist__3535);
-var b = cljs.core.first(cljs.core.next(arglist__3535));
-var c = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3535)));
-var ds = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3535)));
-return G__3534__delegate.call(this, a, b, c, ds);
-});
-return G__3534;
-})()
-;
-G__3529 = function(a,b,c,var_args){
-var ds = var_args;
-switch(arguments.length){
-case  2 :
-return G__3529__3530.call(this,a,b);
-case  3 :
-return G__3529__3531.call(this,a,b,c);
-default:
-return G__3529__3532.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__3529.cljs$lang$maxFixedArity = 3;
-G__3529.cljs$lang$applyTo = G__3529__3532.cljs$lang$applyTo;
-return G__3529;
-})()
-});
-fnil = function(f,x,y,z){
-switch(arguments.length){
-case  2 :
-return fnil__3510.call(this,f,x);
-case  3 :
-return fnil__3511.call(this,f,x,y);
-case  4 :
-return fnil__3512.call(this,f,x,y,z);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return fnil;
-})()
-;
-/**
-* Returns a lazy sequence consisting of the result of applying f to 0
-* and the first item of coll, followed by applying f to 1 and the second
-* item in coll, etc, until coll is exhausted. Thus function f should
-* accept 2 arguments, index and item.
-*/
-cljs.core.map_indexed = (function map_indexed(f,coll){
-var mapi__3538 = (function mpi(idx,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3536 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3536))
-{var s__3537 = temp__3698__auto____3536;
-
-return cljs.core.cons.call(null,f.call(null,idx,cljs.core.first.call(null,s__3537)),mpi.call(null,(idx + 1),cljs.core.rest.call(null,s__3537)));
-} else
-{return null;
-}
-})));
-});
-
-return mapi__3538.call(null,0,coll);
-});
-/**
-* Returns a lazy sequence of the non-nil results of (f item). Note,
-* this means false return values will be included.  f must be free of
-* side-effects.
-*/
-cljs.core.keep = (function keep(f,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3539 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3539))
-{var s__3540 = temp__3698__auto____3539;
-
-var x__3541 = f.call(null,cljs.core.first.call(null,s__3540));
-
-if(cljs.core.truth_((x__3541 === null)))
-{return keep.call(null,f,cljs.core.rest.call(null,s__3540));
-} else
-{return cljs.core.cons.call(null,x__3541,keep.call(null,f,cljs.core.rest.call(null,s__3540)));
-}
-} else
-{return null;
-}
-})));
-});
-/**
-* Returns a lazy sequence of the non-nil results of (f index item). Note,
-* this means false return values will be included.  f must be free of
-* side-effects.
-*/
-cljs.core.keep_indexed = (function keep_indexed(f,coll){
-var keepi__3551 = (function kpi(idx,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3548 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3548))
-{var s__3549 = temp__3698__auto____3548;
-
-var x__3550 = f.call(null,idx,cljs.core.first.call(null,s__3549));
-
-if(cljs.core.truth_((x__3550 === null)))
-{return kpi.call(null,(idx + 1),cljs.core.rest.call(null,s__3549));
-} else
-{return cljs.core.cons.call(null,x__3550,kpi.call(null,(idx + 1),cljs.core.rest.call(null,s__3549)));
-}
-} else
-{return null;
-}
-})));
-});
-
-return keepi__3551.call(null,0,coll);
-});
-/**
-* Takes a set of predicates and returns a function f that returns true if all of its
-* composing predicates return a logical true value against all of its arguments, else it returns
-* false. Note that f is short-circuiting in that it will stop execution on the first
-* argument that triggers a logical false result against the original predicates.
-* @param {...*} var_args
-*/
-cljs.core.every_pred = (function() {
-var every_pred = null;
-var every_pred__3596 = (function (p){
-return (function() {
-var ep1 = null;
-var ep1__3601 = (function (){
-return true;
-});
-var ep1__3602 = (function (x){
-return cljs.core.boolean$.call(null,p.call(null,x));
-});
-var ep1__3603 = (function (x,y){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3558 = p.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3558))
-{return p.call(null,y);
-} else
-{return and__3546__auto____3558;
-}
-})());
-});
-var ep1__3604 = (function (x,y,z){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3559 = p.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3559))
-{var and__3546__auto____3560 = p.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3560))
-{return p.call(null,z);
-} else
-{return and__3546__auto____3560;
-}
-} else
-{return and__3546__auto____3559;
-}
-})());
-});
-var ep1__3605 = (function() { 
-var G__3607__delegate = function (x,y,z,args){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3561 = ep1.call(null,x,y,z);
-
-if(cljs.core.truth_(and__3546__auto____3561))
-{return cljs.core.every_QMARK_.call(null,p,args);
-} else
-{return and__3546__auto____3561;
-}
-})());
-};
-var G__3607 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3607__delegate.call(this, x, y, z, args);
-};
-G__3607.cljs$lang$maxFixedArity = 3;
-G__3607.cljs$lang$applyTo = (function (arglist__3608){
-var x = cljs.core.first(arglist__3608);
-var y = cljs.core.first(cljs.core.next(arglist__3608));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3608)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3608)));
-return G__3607__delegate.call(this, x, y, z, args);
-});
-return G__3607;
-})()
-;
-ep1 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return ep1__3601.call(this);
-case  1 :
-return ep1__3602.call(this,x);
-case  2 :
-return ep1__3603.call(this,x,y);
-case  3 :
-return ep1__3604.call(this,x,y,z);
-default:
-return ep1__3605.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-ep1.cljs$lang$maxFixedArity = 3;
-ep1.cljs$lang$applyTo = ep1__3605.cljs$lang$applyTo;
-return ep1;
-})()
-});
-var every_pred__3597 = (function (p1,p2){
-return (function() {
-var ep2 = null;
-var ep2__3609 = (function (){
-return true;
-});
-var ep2__3610 = (function (x){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3562 = p1.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3562))
-{return p2.call(null,x);
-} else
-{return and__3546__auto____3562;
-}
-})());
-});
-var ep2__3611 = (function (x,y){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3563 = p1.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3563))
-{var and__3546__auto____3564 = p1.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3564))
-{var and__3546__auto____3565 = p2.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3565))
-{return p2.call(null,y);
-} else
-{return and__3546__auto____3565;
-}
-} else
-{return and__3546__auto____3564;
-}
-} else
-{return and__3546__auto____3563;
-}
-})());
-});
-var ep2__3612 = (function (x,y,z){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3566 = p1.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3566))
-{var and__3546__auto____3567 = p1.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3567))
-{var and__3546__auto____3568 = p1.call(null,z);
-
-if(cljs.core.truth_(and__3546__auto____3568))
-{var and__3546__auto____3569 = p2.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3569))
-{var and__3546__auto____3570 = p2.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3570))
-{return p2.call(null,z);
-} else
-{return and__3546__auto____3570;
-}
-} else
-{return and__3546__auto____3569;
-}
-} else
-{return and__3546__auto____3568;
-}
-} else
-{return and__3546__auto____3567;
-}
-} else
-{return and__3546__auto____3566;
-}
-})());
-});
-var ep2__3613 = (function() { 
-var G__3615__delegate = function (x,y,z,args){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3571 = ep2.call(null,x,y,z);
-
-if(cljs.core.truth_(and__3546__auto____3571))
-{return cljs.core.every_QMARK_.call(null,(function (p1__3542_SHARP_){
-var and__3546__auto____3572 = p1.call(null,p1__3542_SHARP_);
-
-if(cljs.core.truth_(and__3546__auto____3572))
-{return p2.call(null,p1__3542_SHARP_);
-} else
-{return and__3546__auto____3572;
-}
-}),args);
-} else
-{return and__3546__auto____3571;
-}
-})());
-};
-var G__3615 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3615__delegate.call(this, x, y, z, args);
-};
-G__3615.cljs$lang$maxFixedArity = 3;
-G__3615.cljs$lang$applyTo = (function (arglist__3616){
-var x = cljs.core.first(arglist__3616);
-var y = cljs.core.first(cljs.core.next(arglist__3616));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3616)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3616)));
-return G__3615__delegate.call(this, x, y, z, args);
-});
-return G__3615;
-})()
-;
-ep2 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return ep2__3609.call(this);
-case  1 :
-return ep2__3610.call(this,x);
-case  2 :
-return ep2__3611.call(this,x,y);
-case  3 :
-return ep2__3612.call(this,x,y,z);
-default:
-return ep2__3613.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-ep2.cljs$lang$maxFixedArity = 3;
-ep2.cljs$lang$applyTo = ep2__3613.cljs$lang$applyTo;
-return ep2;
-})()
-});
-var every_pred__3598 = (function (p1,p2,p3){
-return (function() {
-var ep3 = null;
-var ep3__3617 = (function (){
-return true;
-});
-var ep3__3618 = (function (x){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3573 = p1.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3573))
-{var and__3546__auto____3574 = p2.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3574))
-{return p3.call(null,x);
-} else
-{return and__3546__auto____3574;
-}
-} else
-{return and__3546__auto____3573;
-}
-})());
-});
-var ep3__3619 = (function (x,y){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3575 = p1.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3575))
-{var and__3546__auto____3576 = p2.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3576))
-{var and__3546__auto____3577 = p3.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3577))
-{var and__3546__auto____3578 = p1.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3578))
-{var and__3546__auto____3579 = p2.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3579))
-{return p3.call(null,y);
-} else
-{return and__3546__auto____3579;
-}
-} else
-{return and__3546__auto____3578;
-}
-} else
-{return and__3546__auto____3577;
-}
-} else
-{return and__3546__auto____3576;
-}
-} else
-{return and__3546__auto____3575;
-}
-})());
-});
-var ep3__3620 = (function (x,y,z){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3580 = p1.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3580))
-{var and__3546__auto____3581 = p2.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3581))
-{var and__3546__auto____3582 = p3.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3582))
-{var and__3546__auto____3583 = p1.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3583))
-{var and__3546__auto____3584 = p2.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3584))
-{var and__3546__auto____3585 = p3.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3585))
-{var and__3546__auto____3586 = p1.call(null,z);
-
-if(cljs.core.truth_(and__3546__auto____3586))
-{var and__3546__auto____3587 = p2.call(null,z);
-
-if(cljs.core.truth_(and__3546__auto____3587))
-{return p3.call(null,z);
-} else
-{return and__3546__auto____3587;
-}
-} else
-{return and__3546__auto____3586;
-}
-} else
-{return and__3546__auto____3585;
-}
-} else
-{return and__3546__auto____3584;
-}
-} else
-{return and__3546__auto____3583;
-}
-} else
-{return and__3546__auto____3582;
-}
-} else
-{return and__3546__auto____3581;
-}
-} else
-{return and__3546__auto____3580;
-}
-})());
-});
-var ep3__3621 = (function() { 
-var G__3623__delegate = function (x,y,z,args){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3588 = ep3.call(null,x,y,z);
-
-if(cljs.core.truth_(and__3546__auto____3588))
-{return cljs.core.every_QMARK_.call(null,(function (p1__3543_SHARP_){
-var and__3546__auto____3589 = p1.call(null,p1__3543_SHARP_);
-
-if(cljs.core.truth_(and__3546__auto____3589))
-{var and__3546__auto____3590 = p2.call(null,p1__3543_SHARP_);
-
-if(cljs.core.truth_(and__3546__auto____3590))
-{return p3.call(null,p1__3543_SHARP_);
-} else
-{return and__3546__auto____3590;
-}
-} else
-{return and__3546__auto____3589;
-}
-}),args);
-} else
-{return and__3546__auto____3588;
-}
-})());
-};
-var G__3623 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3623__delegate.call(this, x, y, z, args);
-};
-G__3623.cljs$lang$maxFixedArity = 3;
-G__3623.cljs$lang$applyTo = (function (arglist__3624){
-var x = cljs.core.first(arglist__3624);
-var y = cljs.core.first(cljs.core.next(arglist__3624));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3624)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3624)));
-return G__3623__delegate.call(this, x, y, z, args);
-});
-return G__3623;
-})()
-;
-ep3 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return ep3__3617.call(this);
-case  1 :
-return ep3__3618.call(this,x);
-case  2 :
-return ep3__3619.call(this,x,y);
-case  3 :
-return ep3__3620.call(this,x,y,z);
-default:
-return ep3__3621.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-ep3.cljs$lang$maxFixedArity = 3;
-ep3.cljs$lang$applyTo = ep3__3621.cljs$lang$applyTo;
-return ep3;
-})()
-});
-var every_pred__3599 = (function() { 
-var G__3625__delegate = function (p1,p2,p3,ps){
-var ps__3591 = cljs.core.list_STAR_.call(null,p1,p2,p3,ps);
-
-return (function() {
-var epn = null;
-var epn__3626 = (function (){
-return true;
-});
-var epn__3627 = (function (x){
-return cljs.core.every_QMARK_.call(null,(function (p1__3544_SHARP_){
-return p1__3544_SHARP_.call(null,x);
-}),ps__3591);
-});
-var epn__3628 = (function (x,y){
-return cljs.core.every_QMARK_.call(null,(function (p1__3545_SHARP_){
-var and__3546__auto____3592 = p1__3545_SHARP_.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3592))
-{return p1__3545_SHARP_.call(null,y);
-} else
-{return and__3546__auto____3592;
-}
-}),ps__3591);
-});
-var epn__3629 = (function (x,y,z){
-return cljs.core.every_QMARK_.call(null,(function (p1__3546_SHARP_){
-var and__3546__auto____3593 = p1__3546_SHARP_.call(null,x);
-
-if(cljs.core.truth_(and__3546__auto____3593))
-{var and__3546__auto____3594 = p1__3546_SHARP_.call(null,y);
-
-if(cljs.core.truth_(and__3546__auto____3594))
-{return p1__3546_SHARP_.call(null,z);
-} else
-{return and__3546__auto____3594;
-}
-} else
-{return and__3546__auto____3593;
-}
-}),ps__3591);
-});
-var epn__3630 = (function() { 
-var G__3632__delegate = function (x,y,z,args){
-return cljs.core.boolean$.call(null,(function (){var and__3546__auto____3595 = epn.call(null,x,y,z);
-
-if(cljs.core.truth_(and__3546__auto____3595))
-{return cljs.core.every_QMARK_.call(null,(function (p1__3547_SHARP_){
-return cljs.core.every_QMARK_.call(null,p1__3547_SHARP_,args);
-}),ps__3591);
-} else
-{return and__3546__auto____3595;
-}
-})());
-};
-var G__3632 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3632__delegate.call(this, x, y, z, args);
-};
-G__3632.cljs$lang$maxFixedArity = 3;
-G__3632.cljs$lang$applyTo = (function (arglist__3633){
-var x = cljs.core.first(arglist__3633);
-var y = cljs.core.first(cljs.core.next(arglist__3633));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3633)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3633)));
-return G__3632__delegate.call(this, x, y, z, args);
-});
-return G__3632;
-})()
-;
-epn = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return epn__3626.call(this);
-case  1 :
-return epn__3627.call(this,x);
-case  2 :
-return epn__3628.call(this,x,y);
-case  3 :
-return epn__3629.call(this,x,y,z);
-default:
-return epn__3630.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-epn.cljs$lang$maxFixedArity = 3;
-epn.cljs$lang$applyTo = epn__3630.cljs$lang$applyTo;
-return epn;
-})()
-};
-var G__3625 = function (p1,p2,p3,var_args){
-var ps = null;
-if (goog.isDef(var_args)) {
-  ps = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3625__delegate.call(this, p1, p2, p3, ps);
-};
-G__3625.cljs$lang$maxFixedArity = 3;
-G__3625.cljs$lang$applyTo = (function (arglist__3634){
-var p1 = cljs.core.first(arglist__3634);
-var p2 = cljs.core.first(cljs.core.next(arglist__3634));
-var p3 = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3634)));
-var ps = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3634)));
-return G__3625__delegate.call(this, p1, p2, p3, ps);
-});
-return G__3625;
-})()
-;
-every_pred = function(p1,p2,p3,var_args){
-var ps = var_args;
-switch(arguments.length){
-case  1 :
-return every_pred__3596.call(this,p1);
-case  2 :
-return every_pred__3597.call(this,p1,p2);
-case  3 :
-return every_pred__3598.call(this,p1,p2,p3);
-default:
-return every_pred__3599.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-every_pred.cljs$lang$maxFixedArity = 3;
-every_pred.cljs$lang$applyTo = every_pred__3599.cljs$lang$applyTo;
-return every_pred;
-})()
-;
-/**
-* Takes a set of predicates and returns a function f that returns the first logical true value
-* returned by one of its composing predicates against any of its arguments, else it returns
-* logical false. Note that f is short-circuiting in that it will stop execution on the first
-* argument that triggers a logical true result against the original predicates.
-* @param {...*} var_args
-*/
-cljs.core.some_fn = (function() {
-var some_fn = null;
-var some_fn__3674 = (function (p){
-return (function() {
-var sp1 = null;
-var sp1__3679 = (function (){
-return null;
-});
-var sp1__3680 = (function (x){
-return p.call(null,x);
-});
-var sp1__3681 = (function (x,y){
-var or__3548__auto____3636 = p.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3636))
-{return or__3548__auto____3636;
-} else
-{return p.call(null,y);
-}
-});
-var sp1__3682 = (function (x,y,z){
-var or__3548__auto____3637 = p.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3637))
-{return or__3548__auto____3637;
-} else
-{var or__3548__auto____3638 = p.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3638))
-{return or__3548__auto____3638;
-} else
-{return p.call(null,z);
-}
-}
-});
-var sp1__3683 = (function() { 
-var G__3685__delegate = function (x,y,z,args){
-var or__3548__auto____3639 = sp1.call(null,x,y,z);
-
-if(cljs.core.truth_(or__3548__auto____3639))
-{return or__3548__auto____3639;
-} else
-{return cljs.core.some.call(null,p,args);
-}
-};
-var G__3685 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3685__delegate.call(this, x, y, z, args);
-};
-G__3685.cljs$lang$maxFixedArity = 3;
-G__3685.cljs$lang$applyTo = (function (arglist__3686){
-var x = cljs.core.first(arglist__3686);
-var y = cljs.core.first(cljs.core.next(arglist__3686));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3686)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3686)));
-return G__3685__delegate.call(this, x, y, z, args);
-});
-return G__3685;
-})()
-;
-sp1 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return sp1__3679.call(this);
-case  1 :
-return sp1__3680.call(this,x);
-case  2 :
-return sp1__3681.call(this,x,y);
-case  3 :
-return sp1__3682.call(this,x,y,z);
-default:
-return sp1__3683.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-sp1.cljs$lang$maxFixedArity = 3;
-sp1.cljs$lang$applyTo = sp1__3683.cljs$lang$applyTo;
-return sp1;
-})()
-});
-var some_fn__3675 = (function (p1,p2){
-return (function() {
-var sp2 = null;
-var sp2__3687 = (function (){
-return null;
-});
-var sp2__3688 = (function (x){
-var or__3548__auto____3640 = p1.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3640))
-{return or__3548__auto____3640;
-} else
-{return p2.call(null,x);
-}
-});
-var sp2__3689 = (function (x,y){
-var or__3548__auto____3641 = p1.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3641))
-{return or__3548__auto____3641;
-} else
-{var or__3548__auto____3642 = p1.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3642))
-{return or__3548__auto____3642;
-} else
-{var or__3548__auto____3643 = p2.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3643))
-{return or__3548__auto____3643;
-} else
-{return p2.call(null,y);
-}
-}
-}
-});
-var sp2__3690 = (function (x,y,z){
-var or__3548__auto____3644 = p1.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3644))
-{return or__3548__auto____3644;
-} else
-{var or__3548__auto____3645 = p1.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3645))
-{return or__3548__auto____3645;
-} else
-{var or__3548__auto____3646 = p1.call(null,z);
-
-if(cljs.core.truth_(or__3548__auto____3646))
-{return or__3548__auto____3646;
-} else
-{var or__3548__auto____3647 = p2.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3647))
-{return or__3548__auto____3647;
-} else
-{var or__3548__auto____3648 = p2.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3648))
-{return or__3548__auto____3648;
-} else
-{return p2.call(null,z);
-}
-}
-}
-}
-}
-});
-var sp2__3691 = (function() { 
-var G__3693__delegate = function (x,y,z,args){
-var or__3548__auto____3649 = sp2.call(null,x,y,z);
-
-if(cljs.core.truth_(or__3548__auto____3649))
-{return or__3548__auto____3649;
-} else
-{return cljs.core.some.call(null,(function (p1__3552_SHARP_){
-var or__3548__auto____3650 = p1.call(null,p1__3552_SHARP_);
-
-if(cljs.core.truth_(or__3548__auto____3650))
-{return or__3548__auto____3650;
-} else
-{return p2.call(null,p1__3552_SHARP_);
-}
-}),args);
-}
-};
-var G__3693 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3693__delegate.call(this, x, y, z, args);
-};
-G__3693.cljs$lang$maxFixedArity = 3;
-G__3693.cljs$lang$applyTo = (function (arglist__3694){
-var x = cljs.core.first(arglist__3694);
-var y = cljs.core.first(cljs.core.next(arglist__3694));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3694)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3694)));
-return G__3693__delegate.call(this, x, y, z, args);
-});
-return G__3693;
-})()
-;
-sp2 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return sp2__3687.call(this);
-case  1 :
-return sp2__3688.call(this,x);
-case  2 :
-return sp2__3689.call(this,x,y);
-case  3 :
-return sp2__3690.call(this,x,y,z);
-default:
-return sp2__3691.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-sp2.cljs$lang$maxFixedArity = 3;
-sp2.cljs$lang$applyTo = sp2__3691.cljs$lang$applyTo;
-return sp2;
-})()
-});
-var some_fn__3676 = (function (p1,p2,p3){
-return (function() {
-var sp3 = null;
-var sp3__3695 = (function (){
-return null;
-});
-var sp3__3696 = (function (x){
-var or__3548__auto____3651 = p1.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3651))
-{return or__3548__auto____3651;
-} else
-{var or__3548__auto____3652 = p2.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3652))
-{return or__3548__auto____3652;
-} else
-{return p3.call(null,x);
-}
-}
-});
-var sp3__3697 = (function (x,y){
-var or__3548__auto____3653 = p1.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3653))
-{return or__3548__auto____3653;
-} else
-{var or__3548__auto____3654 = p2.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3654))
-{return or__3548__auto____3654;
-} else
-{var or__3548__auto____3655 = p3.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3655))
-{return or__3548__auto____3655;
-} else
-{var or__3548__auto____3656 = p1.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3656))
-{return or__3548__auto____3656;
-} else
-{var or__3548__auto____3657 = p2.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3657))
-{return or__3548__auto____3657;
-} else
-{return p3.call(null,y);
-}
-}
-}
-}
-}
-});
-var sp3__3698 = (function (x,y,z){
-var or__3548__auto____3658 = p1.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3658))
-{return or__3548__auto____3658;
-} else
-{var or__3548__auto____3659 = p2.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3659))
-{return or__3548__auto____3659;
-} else
-{var or__3548__auto____3660 = p3.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3660))
-{return or__3548__auto____3660;
-} else
-{var or__3548__auto____3661 = p1.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3661))
-{return or__3548__auto____3661;
-} else
-{var or__3548__auto____3662 = p2.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3662))
-{return or__3548__auto____3662;
-} else
-{var or__3548__auto____3663 = p3.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3663))
-{return or__3548__auto____3663;
-} else
-{var or__3548__auto____3664 = p1.call(null,z);
-
-if(cljs.core.truth_(or__3548__auto____3664))
-{return or__3548__auto____3664;
-} else
-{var or__3548__auto____3665 = p2.call(null,z);
-
-if(cljs.core.truth_(or__3548__auto____3665))
-{return or__3548__auto____3665;
-} else
-{return p3.call(null,z);
-}
-}
-}
-}
-}
-}
-}
-}
-});
-var sp3__3699 = (function() { 
-var G__3701__delegate = function (x,y,z,args){
-var or__3548__auto____3666 = sp3.call(null,x,y,z);
-
-if(cljs.core.truth_(or__3548__auto____3666))
-{return or__3548__auto____3666;
-} else
-{return cljs.core.some.call(null,(function (p1__3553_SHARP_){
-var or__3548__auto____3667 = p1.call(null,p1__3553_SHARP_);
-
-if(cljs.core.truth_(or__3548__auto____3667))
-{return or__3548__auto____3667;
-} else
-{var or__3548__auto____3668 = p2.call(null,p1__3553_SHARP_);
-
-if(cljs.core.truth_(or__3548__auto____3668))
-{return or__3548__auto____3668;
-} else
-{return p3.call(null,p1__3553_SHARP_);
-}
-}
-}),args);
-}
-};
-var G__3701 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3701__delegate.call(this, x, y, z, args);
-};
-G__3701.cljs$lang$maxFixedArity = 3;
-G__3701.cljs$lang$applyTo = (function (arglist__3702){
-var x = cljs.core.first(arglist__3702);
-var y = cljs.core.first(cljs.core.next(arglist__3702));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3702)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3702)));
-return G__3701__delegate.call(this, x, y, z, args);
-});
-return G__3701;
-})()
-;
-sp3 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return sp3__3695.call(this);
-case  1 :
-return sp3__3696.call(this,x);
-case  2 :
-return sp3__3697.call(this,x,y);
-case  3 :
-return sp3__3698.call(this,x,y,z);
-default:
-return sp3__3699.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-sp3.cljs$lang$maxFixedArity = 3;
-sp3.cljs$lang$applyTo = sp3__3699.cljs$lang$applyTo;
-return sp3;
-})()
-});
-var some_fn__3677 = (function() { 
-var G__3703__delegate = function (p1,p2,p3,ps){
-var ps__3669 = cljs.core.list_STAR_.call(null,p1,p2,p3,ps);
-
-return (function() {
-var spn = null;
-var spn__3704 = (function (){
-return null;
-});
-var spn__3705 = (function (x){
-return cljs.core.some.call(null,(function (p1__3554_SHARP_){
-return p1__3554_SHARP_.call(null,x);
-}),ps__3669);
-});
-var spn__3706 = (function (x,y){
-return cljs.core.some.call(null,(function (p1__3555_SHARP_){
-var or__3548__auto____3670 = p1__3555_SHARP_.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3670))
-{return or__3548__auto____3670;
-} else
-{return p1__3555_SHARP_.call(null,y);
-}
-}),ps__3669);
-});
-var spn__3707 = (function (x,y,z){
-return cljs.core.some.call(null,(function (p1__3556_SHARP_){
-var or__3548__auto____3671 = p1__3556_SHARP_.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____3671))
-{return or__3548__auto____3671;
-} else
-{var or__3548__auto____3672 = p1__3556_SHARP_.call(null,y);
-
-if(cljs.core.truth_(or__3548__auto____3672))
-{return or__3548__auto____3672;
-} else
-{return p1__3556_SHARP_.call(null,z);
-}
-}
-}),ps__3669);
-});
-var spn__3708 = (function() { 
-var G__3710__delegate = function (x,y,z,args){
-var or__3548__auto____3673 = spn.call(null,x,y,z);
-
-if(cljs.core.truth_(or__3548__auto____3673))
-{return or__3548__auto____3673;
-} else
-{return cljs.core.some.call(null,(function (p1__3557_SHARP_){
-return cljs.core.some.call(null,p1__3557_SHARP_,args);
-}),ps__3669);
-}
-};
-var G__3710 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3710__delegate.call(this, x, y, z, args);
-};
-G__3710.cljs$lang$maxFixedArity = 3;
-G__3710.cljs$lang$applyTo = (function (arglist__3711){
-var x = cljs.core.first(arglist__3711);
-var y = cljs.core.first(cljs.core.next(arglist__3711));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3711)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3711)));
-return G__3710__delegate.call(this, x, y, z, args);
-});
-return G__3710;
-})()
-;
-spn = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return spn__3704.call(this);
-case  1 :
-return spn__3705.call(this,x);
-case  2 :
-return spn__3706.call(this,x,y);
-case  3 :
-return spn__3707.call(this,x,y,z);
-default:
-return spn__3708.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-spn.cljs$lang$maxFixedArity = 3;
-spn.cljs$lang$applyTo = spn__3708.cljs$lang$applyTo;
-return spn;
-})()
-};
-var G__3703 = function (p1,p2,p3,var_args){
-var ps = null;
-if (goog.isDef(var_args)) {
-  ps = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__3703__delegate.call(this, p1, p2, p3, ps);
-};
-G__3703.cljs$lang$maxFixedArity = 3;
-G__3703.cljs$lang$applyTo = (function (arglist__3712){
-var p1 = cljs.core.first(arglist__3712);
-var p2 = cljs.core.first(cljs.core.next(arglist__3712));
-var p3 = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3712)));
-var ps = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3712)));
-return G__3703__delegate.call(this, p1, p2, p3, ps);
-});
-return G__3703;
-})()
-;
-some_fn = function(p1,p2,p3,var_args){
-var ps = var_args;
-switch(arguments.length){
-case  1 :
-return some_fn__3674.call(this,p1);
-case  2 :
-return some_fn__3675.call(this,p1,p2);
-case  3 :
-return some_fn__3676.call(this,p1,p2,p3);
-default:
-return some_fn__3677.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-some_fn.cljs$lang$maxFixedArity = 3;
-some_fn.cljs$lang$applyTo = some_fn__3677.cljs$lang$applyTo;
-return some_fn;
-})()
-;
-/**
-* Returns a lazy sequence consisting of the result of applying f to the
-* set of first items of each coll, followed by applying f to the set
-* of second items in each coll, until any one of the colls is
-* exhausted.  Any remaining items in other colls are ignored. Function
-* f should accept number-of-colls arguments.
-* @param {...*} var_args
-*/
-cljs.core.map = (function() {
-var map = null;
-var map__3725 = (function (f,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3713 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3713))
-{var s__3714 = temp__3698__auto____3713;
-
-return cljs.core.cons.call(null,f.call(null,cljs.core.first.call(null,s__3714)),map.call(null,f,cljs.core.rest.call(null,s__3714)));
-} else
-{return null;
-}
-})));
-});
-var map__3726 = (function (f,c1,c2){
-return (new cljs.core.LazySeq(null,false,(function (){
-var s1__3715 = cljs.core.seq.call(null,c1);
-var s2__3716 = cljs.core.seq.call(null,c2);
-
-if(cljs.core.truth_((function (){var and__3546__auto____3717 = s1__3715;
-
-if(cljs.core.truth_(and__3546__auto____3717))
-{return s2__3716;
-} else
-{return and__3546__auto____3717;
-}
-})()))
-{return cljs.core.cons.call(null,f.call(null,cljs.core.first.call(null,s1__3715),cljs.core.first.call(null,s2__3716)),map.call(null,f,cljs.core.rest.call(null,s1__3715),cljs.core.rest.call(null,s2__3716)));
-} else
-{return null;
-}
-})));
-});
-var map__3727 = (function (f,c1,c2,c3){
-return (new cljs.core.LazySeq(null,false,(function (){
-var s1__3718 = cljs.core.seq.call(null,c1);
-var s2__3719 = cljs.core.seq.call(null,c2);
-var s3__3720 = cljs.core.seq.call(null,c3);
-
-if(cljs.core.truth_((function (){var and__3546__auto____3721 = s1__3718;
-
-if(cljs.core.truth_(and__3546__auto____3721))
-{var and__3546__auto____3722 = s2__3719;
-
-if(cljs.core.truth_(and__3546__auto____3722))
-{return s3__3720;
-} else
-{return and__3546__auto____3722;
-}
-} else
-{return and__3546__auto____3721;
-}
-})()))
-{return cljs.core.cons.call(null,f.call(null,cljs.core.first.call(null,s1__3718),cljs.core.first.call(null,s2__3719),cljs.core.first.call(null,s3__3720)),map.call(null,f,cljs.core.rest.call(null,s1__3718),cljs.core.rest.call(null,s2__3719),cljs.core.rest.call(null,s3__3720)));
-} else
-{return null;
-}
-})));
-});
-var map__3728 = (function() { 
-var G__3730__delegate = function (f,c1,c2,c3,colls){
-var step__3724 = (function step(cs){
-return (new cljs.core.LazySeq(null,false,(function (){
-var ss__3723 = map.call(null,cljs.core.seq,cs);
-
-if(cljs.core.truth_(cljs.core.every_QMARK_.call(null,cljs.core.identity,ss__3723)))
-{return cljs.core.cons.call(null,map.call(null,cljs.core.first,ss__3723),step.call(null,map.call(null,cljs.core.rest,ss__3723)));
-} else
-{return null;
-}
-})));
-});
-
-return map.call(null,(function (p1__3635_SHARP_){
-return cljs.core.apply.call(null,f,p1__3635_SHARP_);
-}),step__3724.call(null,cljs.core.conj.call(null,colls,c3,c2,c1)));
-};
-var G__3730 = function (f,c1,c2,c3,var_args){
-var colls = null;
-if (goog.isDef(var_args)) {
-  colls = cljs.core.array_seq(Array.prototype.slice.call(arguments, 4),0);
-} 
-return G__3730__delegate.call(this, f, c1, c2, c3, colls);
-};
-G__3730.cljs$lang$maxFixedArity = 4;
-G__3730.cljs$lang$applyTo = (function (arglist__3731){
-var f = cljs.core.first(arglist__3731);
-var c1 = cljs.core.first(cljs.core.next(arglist__3731));
-var c2 = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3731)));
-var c3 = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3731))));
-var colls = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(arglist__3731))));
-return G__3730__delegate.call(this, f, c1, c2, c3, colls);
-});
-return G__3730;
-})()
-;
-map = function(f,c1,c2,c3,var_args){
-var colls = var_args;
-switch(arguments.length){
-case  2 :
-return map__3725.call(this,f,c1);
-case  3 :
-return map__3726.call(this,f,c1,c2);
-case  4 :
-return map__3727.call(this,f,c1,c2,c3);
-default:
-return map__3728.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-map.cljs$lang$maxFixedArity = 4;
-map.cljs$lang$applyTo = map__3728.cljs$lang$applyTo;
-return map;
-})()
-;
-/**
-* Returns a lazy sequence of the first n items in coll, or all items if
-* there are fewer than n.
-*/
-cljs.core.take = (function take(n,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-if(cljs.core.truth_((n > 0)))
-{var temp__3698__auto____3732 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3732))
-{var s__3733 = temp__3698__auto____3732;
-
-return cljs.core.cons.call(null,cljs.core.first.call(null,s__3733),take.call(null,(n - 1),cljs.core.rest.call(null,s__3733)));
-} else
-{return null;
-}
-} else
-{return null;
-}
-})));
-});
-/**
-* Returns a lazy sequence of all but the first n items in coll.
-*/
-cljs.core.drop = (function drop(n,coll){
-var step__3736 = (function (n,coll){
-while(true){
-var s__3734 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_((function (){var and__3546__auto____3735 = (n > 0);
-
-if(cljs.core.truth_(and__3546__auto____3735))
-{return s__3734;
-} else
-{return and__3546__auto____3735;
-}
-})()))
-{{
-var G__3737 = (n - 1);
-var G__3738 = cljs.core.rest.call(null,s__3734);
-n = G__3737;
-coll = G__3738;
-continue;
-}
-} else
-{return s__3734;
-}
-break;
-}
-});
-
-return (new cljs.core.LazySeq(null,false,(function (){
-return step__3736.call(null,n,coll);
-})));
-});
-/**
-* Return a lazy sequence of all but the last n (default 1) items in coll
-*/
-cljs.core.drop_last = (function() {
-var drop_last = null;
-var drop_last__3739 = (function (s){
-return drop_last.call(null,1,s);
-});
-var drop_last__3740 = (function (n,s){
-return cljs.core.map.call(null,(function (x,_){
-return x;
-}),s,cljs.core.drop.call(null,n,s));
-});
-drop_last = function(n,s){
-switch(arguments.length){
-case  1 :
-return drop_last__3739.call(this,n);
-case  2 :
-return drop_last__3740.call(this,n,s);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return drop_last;
-})()
-;
-/**
-* Returns a seq of the last n items in coll.  Depending on the type
-* of coll may be no better than linear time.  For vectors, see also subvec.
-*/
-cljs.core.take_last = (function take_last(n,coll){
-var s__3742 = cljs.core.seq.call(null,coll);
-var lead__3743 = cljs.core.seq.call(null,cljs.core.drop.call(null,n,coll));
-
-while(true){
-if(cljs.core.truth_(lead__3743))
-{{
-var G__3744 = cljs.core.next.call(null,s__3742);
-var G__3745 = cljs.core.next.call(null,lead__3743);
-s__3742 = G__3744;
-lead__3743 = G__3745;
-continue;
-}
-} else
-{return s__3742;
-}
-break;
-}
-});
-/**
-* Returns a lazy sequence of the items in coll starting from the first
-* item for which (pred item) returns nil.
-*/
-cljs.core.drop_while = (function drop_while(pred,coll){
-var step__3748 = (function (pred,coll){
-while(true){
-var s__3746 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_((function (){var and__3546__auto____3747 = s__3746;
-
-if(cljs.core.truth_(and__3546__auto____3747))
-{return pred.call(null,cljs.core.first.call(null,s__3746));
-} else
-{return and__3546__auto____3747;
-}
-})()))
-{{
-var G__3749 = pred;
-var G__3750 = cljs.core.rest.call(null,s__3746);
-pred = G__3749;
-coll = G__3750;
-continue;
-}
-} else
-{return s__3746;
-}
-break;
-}
-});
-
-return (new cljs.core.LazySeq(null,false,(function (){
-return step__3748.call(null,pred,coll);
-})));
-});
-/**
-* Returns a lazy (infinite!) sequence of repetitions of the items in coll.
-*/
-cljs.core.cycle = (function cycle(coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3751 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3751))
-{var s__3752 = temp__3698__auto____3751;
-
-return cljs.core.concat.call(null,s__3752,cycle.call(null,s__3752));
-} else
-{return null;
-}
-})));
-});
-/**
-* Returns a vector of [(take n coll) (drop n coll)]
-*/
-cljs.core.split_at = (function split_at(n,coll){
-return cljs.core.Vector.fromArray([cljs.core.take.call(null,n,coll),cljs.core.drop.call(null,n,coll)]);
-});
-/**
-* Returns a lazy (infinite!, or length n if supplied) sequence of xs.
-*/
-cljs.core.repeat = (function() {
-var repeat = null;
-var repeat__3753 = (function (x){
-return (new cljs.core.LazySeq(null,false,(function (){
-return cljs.core.cons.call(null,x,repeat.call(null,x));
-})));
-});
-var repeat__3754 = (function (n,x){
-return cljs.core.take.call(null,n,repeat.call(null,x));
-});
-repeat = function(n,x){
-switch(arguments.length){
-case  1 :
-return repeat__3753.call(this,n);
-case  2 :
-return repeat__3754.call(this,n,x);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return repeat;
-})()
-;
-/**
-* Returns a lazy seq of n xs.
-*/
-cljs.core.replicate = (function replicate(n,x){
-return cljs.core.take.call(null,n,cljs.core.repeat.call(null,x));
-});
-/**
-* Takes a function of no args, presumably with side effects, and
-* returns an infinite (or length n if supplied) lazy sequence of calls
-* to it
-*/
-cljs.core.repeatedly = (function() {
-var repeatedly = null;
-var repeatedly__3756 = (function (f){
-return (new cljs.core.LazySeq(null,false,(function (){
-return cljs.core.cons.call(null,f.call(null),repeatedly.call(null,f));
-})));
-});
-var repeatedly__3757 = (function (n,f){
-return cljs.core.take.call(null,n,repeatedly.call(null,f));
-});
-repeatedly = function(n,f){
-switch(arguments.length){
-case  1 :
-return repeatedly__3756.call(this,n);
-case  2 :
-return repeatedly__3757.call(this,n,f);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return repeatedly;
-})()
-;
-/**
-* Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects
-*/
-cljs.core.iterate = (function iterate(f,x){
-return cljs.core.cons.call(null,x,(new cljs.core.LazySeq(null,false,(function (){
-return iterate.call(null,f,f.call(null,x));
-}))));
-});
-/**
-* Returns a lazy seq of the first item in each coll, then the second etc.
-* @param {...*} var_args
-*/
-cljs.core.interleave = (function() {
-var interleave = null;
-var interleave__3763 = (function (c1,c2){
-return (new cljs.core.LazySeq(null,false,(function (){
-var s1__3759 = cljs.core.seq.call(null,c1);
-var s2__3760 = cljs.core.seq.call(null,c2);
-
-if(cljs.core.truth_((function (){var and__3546__auto____3761 = s1__3759;
-
-if(cljs.core.truth_(and__3546__auto____3761))
-{return s2__3760;
-} else
-{return and__3546__auto____3761;
-}
-})()))
-{return cljs.core.cons.call(null,cljs.core.first.call(null,s1__3759),cljs.core.cons.call(null,cljs.core.first.call(null,s2__3760),interleave.call(null,cljs.core.rest.call(null,s1__3759),cljs.core.rest.call(null,s2__3760))));
-} else
-{return null;
-}
-})));
-});
-var interleave__3764 = (function() { 
-var G__3766__delegate = function (c1,c2,colls){
-return (new cljs.core.LazySeq(null,false,(function (){
-var ss__3762 = cljs.core.map.call(null,cljs.core.seq,cljs.core.conj.call(null,colls,c2,c1));
-
-if(cljs.core.truth_(cljs.core.every_QMARK_.call(null,cljs.core.identity,ss__3762)))
-{return cljs.core.concat.call(null,cljs.core.map.call(null,cljs.core.first,ss__3762),cljs.core.apply.call(null,interleave,cljs.core.map.call(null,cljs.core.rest,ss__3762)));
-} else
-{return null;
-}
-})));
-};
-var G__3766 = function (c1,c2,var_args){
-var colls = null;
-if (goog.isDef(var_args)) {
-  colls = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3766__delegate.call(this, c1, c2, colls);
-};
-G__3766.cljs$lang$maxFixedArity = 2;
-G__3766.cljs$lang$applyTo = (function (arglist__3767){
-var c1 = cljs.core.first(arglist__3767);
-var c2 = cljs.core.first(cljs.core.next(arglist__3767));
-var colls = cljs.core.rest(cljs.core.next(arglist__3767));
-return G__3766__delegate.call(this, c1, c2, colls);
-});
-return G__3766;
-})()
-;
-interleave = function(c1,c2,var_args){
-var colls = var_args;
-switch(arguments.length){
-case  2 :
-return interleave__3763.call(this,c1,c2);
-default:
-return interleave__3764.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-interleave.cljs$lang$maxFixedArity = 2;
-interleave.cljs$lang$applyTo = interleave__3764.cljs$lang$applyTo;
-return interleave;
-})()
-;
-/**
-* Returns a lazy seq of the elements of coll separated by sep
-*/
-cljs.core.interpose = (function interpose(sep,coll){
-return cljs.core.drop.call(null,1,cljs.core.interleave.call(null,cljs.core.repeat.call(null,sep),coll));
-});
-/**
-* Take a collection of collections, and return a lazy seq
-* of items from the inner collection
-*/
-cljs.core.flatten1 = (function flatten1(colls){
-var cat__3770 = (function cat(coll,colls){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3695__auto____3768 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3695__auto____3768))
-{var coll__3769 = temp__3695__auto____3768;
-
-return cljs.core.cons.call(null,cljs.core.first.call(null,coll__3769),cat.call(null,cljs.core.rest.call(null,coll__3769),colls));
-} else
-{if(cljs.core.truth_(cljs.core.seq.call(null,colls)))
-{return cat.call(null,cljs.core.first.call(null,colls),cljs.core.rest.call(null,colls));
-} else
-{return null;
-}
-}
-})));
-});
-
-return cat__3770.call(null,null,colls);
-});
-/**
-* Returns the result of applying concat to the result of applying map
-* to f and colls.  Thus function f should return a collection.
-* @param {...*} var_args
-*/
-cljs.core.mapcat = (function() {
-var mapcat = null;
-var mapcat__3771 = (function (f,coll){
-return cljs.core.flatten1.call(null,cljs.core.map.call(null,f,coll));
-});
-var mapcat__3772 = (function() { 
-var G__3774__delegate = function (f,coll,colls){
-return cljs.core.flatten1.call(null,cljs.core.apply.call(null,cljs.core.map,f,coll,colls));
-};
-var G__3774 = function (f,coll,var_args){
-var colls = null;
-if (goog.isDef(var_args)) {
-  colls = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return G__3774__delegate.call(this, f, coll, colls);
-};
-G__3774.cljs$lang$maxFixedArity = 2;
-G__3774.cljs$lang$applyTo = (function (arglist__3775){
-var f = cljs.core.first(arglist__3775);
-var coll = cljs.core.first(cljs.core.next(arglist__3775));
-var colls = cljs.core.rest(cljs.core.next(arglist__3775));
-return G__3774__delegate.call(this, f, coll, colls);
-});
-return G__3774;
-})()
-;
-mapcat = function(f,coll,var_args){
-var colls = var_args;
-switch(arguments.length){
-case  2 :
-return mapcat__3771.call(this,f,coll);
-default:
-return mapcat__3772.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-mapcat.cljs$lang$maxFixedArity = 2;
-mapcat.cljs$lang$applyTo = mapcat__3772.cljs$lang$applyTo;
-return mapcat;
-})()
-;
-/**
-* Returns a lazy sequence of the items in coll for which
-* (pred item) returns true. pred must be free of side-effects.
-*/
-cljs.core.filter = (function filter(pred,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3776 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3776))
-{var s__3777 = temp__3698__auto____3776;
-
-var f__3778 = cljs.core.first.call(null,s__3777);
-var r__3779 = cljs.core.rest.call(null,s__3777);
-
-if(cljs.core.truth_(pred.call(null,f__3778)))
-{return cljs.core.cons.call(null,f__3778,filter.call(null,pred,r__3779));
-} else
-{return filter.call(null,pred,r__3779);
-}
-} else
-{return null;
-}
-})));
-});
-/**
-* Returns a lazy sequence of the items in coll for which
-* (pred item) returns false. pred must be free of side-effects.
-*/
-cljs.core.remove = (function remove(pred,coll){
-return cljs.core.filter.call(null,cljs.core.complement.call(null,pred),coll);
-});
-/**
-* Returns a lazy sequence of the nodes in a tree, via a depth-first walk.
-* branch? must be a fn of one arg that returns true if passed a node
-* that can have children (but may not).  children must be a fn of one
-* arg that returns a sequence of the children. Will only be called on
-* nodes for which branch? returns true. Root is the root node of the
-* tree.
-*/
-cljs.core.tree_seq = (function tree_seq(branch_QMARK_,children,root){
-var walk__3781 = (function walk(node){
-return (new cljs.core.LazySeq(null,false,(function (){
-return cljs.core.cons.call(null,node,(cljs.core.truth_(branch_QMARK_.call(null,node))?cljs.core.mapcat.call(null,walk,children.call(null,node)):null));
-})));
-});
-
-return walk__3781.call(null,root);
-});
-/**
-* Takes any nested combination of sequential things (lists, vectors,
-* etc.) and returns their contents as a single, flat sequence.
-* (flatten nil) returns nil.
-*/
-cljs.core.flatten = (function flatten(x){
-return cljs.core.filter.call(null,(function (p1__3780_SHARP_){
-return cljs.core.not.call(null,cljs.core.sequential_QMARK_.call(null,p1__3780_SHARP_));
-}),cljs.core.rest.call(null,cljs.core.tree_seq.call(null,cljs.core.sequential_QMARK_,cljs.core.seq,x)));
-});
-/**
-* Returns a new coll consisting of to-coll with all of the items of
-* from-coll conjoined.
-*/
-cljs.core.into = (function into(to,from){
-return cljs.core.reduce.call(null,cljs.core._conj,to,from);
-});
-/**
-* Returns a lazy sequence of lists of n items each, at offsets step
-* apart. If step is not supplied, defaults to n, i.e. the partitions
-* do not overlap. If a pad collection is supplied, use its elements as
-* necessary to complete last partition upto n items. In case there are
-* not enough padding elements, return a partition with less than n items.
-*/
-cljs.core.partition = (function() {
-var partition = null;
-var partition__3788 = (function (n,coll){
-return partition.call(null,n,n,coll);
-});
-var partition__3789 = (function (n,step,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3782 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3782))
-{var s__3783 = temp__3698__auto____3782;
-
-var p__3784 = cljs.core.take.call(null,n,s__3783);
-
-if(cljs.core.truth_(cljs.core._EQ_.call(null,n,cljs.core.count.call(null,p__3784))))
-{return cljs.core.cons.call(null,p__3784,partition.call(null,n,step,cljs.core.drop.call(null,step,s__3783)));
-} else
-{return null;
-}
-} else
-{return null;
-}
-})));
-});
-var partition__3790 = (function (n,step,pad,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____3785 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____3785))
-{var s__3786 = temp__3698__auto____3785;
-
-var p__3787 = cljs.core.take.call(null,n,s__3786);
-
-if(cljs.core.truth_(cljs.core._EQ_.call(null,n,cljs.core.count.call(null,p__3787))))
-{return cljs.core.cons.call(null,p__3787,partition.call(null,n,step,pad,cljs.core.drop.call(null,step,s__3786)));
-} else
-{return cljs.core.list.call(null,cljs.core.take.call(null,n,cljs.core.concat.call(null,p__3787,pad)));
-}
-} else
-{return null;
-}
-})));
-});
-partition = function(n,step,pad,coll){
-switch(arguments.length){
-case  2 :
-return partition__3788.call(this,n,step);
-case  3 :
-return partition__3789.call(this,n,step,pad);
-case  4 :
-return partition__3790.call(this,n,step,pad,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return partition;
-})()
-;
-/**
-* Returns the value in a nested associative structure,
-* where ks is a sequence of ke(ys. Returns nil if the key is not present,
-* or the not-found value if supplied.
-*/
-cljs.core.get_in = (function() {
-var get_in = null;
-var get_in__3796 = (function (m,ks){
-return cljs.core.reduce.call(null,cljs.core.get,m,ks);
-});
-var get_in__3797 = (function (m,ks,not_found){
-var sentinel__3792 = cljs.core.lookup_sentinel;
-var m__3793 = m;
-var ks__3794 = cljs.core.seq.call(null,ks);
-
-while(true){
-if(cljs.core.truth_(ks__3794))
-{var m__3795 = cljs.core.get.call(null,m__3793,cljs.core.first.call(null,ks__3794),sentinel__3792);
-
-if(cljs.core.truth_((sentinel__3792 === m__3795)))
-{return not_found;
-} else
-{{
-var G__3799 = sentinel__3792;
-var G__3800 = m__3795;
-var G__3801 = cljs.core.next.call(null,ks__3794);
-sentinel__3792 = G__3799;
-m__3793 = G__3800;
-ks__3794 = G__3801;
-continue;
-}
-}
-} else
-{return m__3793;
-}
-break;
-}
-});
-get_in = function(m,ks,not_found){
-switch(arguments.length){
-case  2 :
-return get_in__3796.call(this,m,ks);
-case  3 :
-return get_in__3797.call(this,m,ks,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return get_in;
-})()
-;
-/**
-* Associates a value in a nested associative structure, where ks is a
-* sequence of keys and v is the new value and returns a new nested structure.
-* If any levels do not exist, hash-maps will be created.
-*/
-cljs.core.assoc_in = (function assoc_in(m,p__3802,v){
-var vec__3803__3804 = p__3802;
-var k__3805 = cljs.core.nth.call(null,vec__3803__3804,0,null);
-var ks__3806 = cljs.core.nthnext.call(null,vec__3803__3804,1);
-
-if(cljs.core.truth_(ks__3806))
-{return cljs.core.assoc.call(null,m,k__3805,assoc_in.call(null,cljs.core.get.call(null,m,k__3805),ks__3806,v));
-} else
-{return cljs.core.assoc.call(null,m,k__3805,v);
-}
-});
-/**
-* 'Updates' a value in a nested associative structure, where ks is a
-* sequence of keys and f is a function that will take the old value
-* and any supplied args and return the new value, and returns a new
-* nested structure.  If any levels do not exist, hash-maps will be
-* created.
-* @param {...*} var_args
-*/
-cljs.core.update_in = (function() { 
-var update_in__delegate = function (m,p__3807,f,args){
-var vec__3808__3809 = p__3807;
-var k__3810 = cljs.core.nth.call(null,vec__3808__3809,0,null);
-var ks__3811 = cljs.core.nthnext.call(null,vec__3808__3809,1);
-
-if(cljs.core.truth_(ks__3811))
-{return cljs.core.assoc.call(null,m,k__3810,cljs.core.apply.call(null,update_in,cljs.core.get.call(null,m,k__3810),ks__3811,f,args));
-} else
-{return cljs.core.assoc.call(null,m,k__3810,cljs.core.apply.call(null,f,cljs.core.get.call(null,m,k__3810),args));
-}
-};
-var update_in = function (m,p__3807,f,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return update_in__delegate.call(this, m, p__3807, f, args);
-};
-update_in.cljs$lang$maxFixedArity = 3;
-update_in.cljs$lang$applyTo = (function (arglist__3812){
-var m = cljs.core.first(arglist__3812);
-var p__3807 = cljs.core.first(cljs.core.next(arglist__3812));
-var f = cljs.core.first(cljs.core.next(cljs.core.next(arglist__3812)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__3812)));
-return update_in__delegate.call(this, m, p__3807, f, args);
-});
-return update_in;
-})()
-;
-
-/**
-* @constructor
-*/
-cljs.core.Vector = (function (meta,array){
-this.meta = meta;
-this.array = array;
-})
-cljs.core.Vector.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Vector");
-});
-cljs.core.Vector.prototype.cljs$core$IHash$ = true;
-cljs.core.Vector.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3813 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.Vector.prototype.cljs$core$ILookup$ = true;
-cljs.core.Vector.prototype.cljs$core$ILookup$_lookup = (function() {
-var G__3846 = null;
-var G__3846__3847 = (function (coll,k){
-var this__3814 = this;
-return cljs.core._nth.call(null,coll,k,null);
-});
-var G__3846__3848 = (function (coll,k,not_found){
-var this__3815 = this;
-return cljs.core._nth.call(null,coll,k,not_found);
-});
-G__3846 = function(coll,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3846__3847.call(this,coll,k);
-case  3 :
-return G__3846__3848.call(this,coll,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3846;
-})()
-;
-cljs.core.Vector.prototype.cljs$core$IAssociative$ = true;
-cljs.core.Vector.prototype.cljs$core$IAssociative$_assoc = (function (coll,k,v){
-var this__3816 = this;
-var new_array__3817 = cljs.core.aclone.call(null,this__3816.array);
-
-(new_array__3817[k] = v);
-return (new cljs.core.Vector(this__3816.meta,new_array__3817));
-});
-cljs.core.Vector.prototype.cljs$core$IFn$ = true;
-cljs.core.Vector.prototype.call = (function() {
-var G__3850 = null;
-var G__3850__3851 = (function (tsym3818,k){
-var this__3820 = this;
-var tsym3818__3821 = this;
-
-var coll__3822 = tsym3818__3821;
-
-return cljs.core._lookup.call(null,coll__3822,k);
-});
-var G__3850__3852 = (function (tsym3819,k,not_found){
-var this__3823 = this;
-var tsym3819__3824 = this;
-
-var coll__3825 = tsym3819__3824;
-
-return cljs.core._lookup.call(null,coll__3825,k,not_found);
-});
-G__3850 = function(tsym3819,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3850__3851.call(this,tsym3819,k);
-case  3 :
-return G__3850__3852.call(this,tsym3819,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3850;
-})()
-;
-cljs.core.Vector.prototype.cljs$core$ISequential$ = true;
-cljs.core.Vector.prototype.cljs$core$ICollection$ = true;
-cljs.core.Vector.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3826 = this;
-var new_array__3827 = cljs.core.aclone.call(null,this__3826.array);
-
-new_array__3827.push(o);
-return (new cljs.core.Vector(this__3826.meta,new_array__3827));
-});
-cljs.core.Vector.prototype.cljs$core$IReduce$ = true;
-cljs.core.Vector.prototype.cljs$core$IReduce$_reduce = (function() {
-var G__3854 = null;
-var G__3854__3855 = (function (v,f){
-var this__3828 = this;
-return cljs.core.ci_reduce.call(null,this__3828.array,f);
-});
-var G__3854__3856 = (function (v,f,start){
-var this__3829 = this;
-return cljs.core.ci_reduce.call(null,this__3829.array,f,start);
-});
-G__3854 = function(v,f,start){
-switch(arguments.length){
-case  2 :
-return G__3854__3855.call(this,v,f);
-case  3 :
-return G__3854__3856.call(this,v,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3854;
-})()
-;
-cljs.core.Vector.prototype.cljs$core$ISeqable$ = true;
-cljs.core.Vector.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3830 = this;
-if(cljs.core.truth_((this__3830.array.length > 0)))
-{var vector_seq__3831 = (function vector_seq(i){
-return (new cljs.core.LazySeq(null,false,(function (){
-if(cljs.core.truth_((i < this__3830.array.length)))
-{return cljs.core.cons.call(null,(this__3830.array[i]),vector_seq.call(null,(i + 1)));
-} else
-{return null;
-}
-})));
-});
-
-return vector_seq__3831.call(null,0);
-} else
-{return null;
-}
-});
-cljs.core.Vector.prototype.cljs$core$ICounted$ = true;
-cljs.core.Vector.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__3832 = this;
-return this__3832.array.length;
-});
-cljs.core.Vector.prototype.cljs$core$IStack$ = true;
-cljs.core.Vector.prototype.cljs$core$IStack$_peek = (function (coll){
-var this__3833 = this;
-var count__3834 = this__3833.array.length;
-
-if(cljs.core.truth_((count__3834 > 0)))
-{return (this__3833.array[(count__3834 - 1)]);
-} else
-{return null;
-}
-});
-cljs.core.Vector.prototype.cljs$core$IStack$_pop = (function (coll){
-var this__3835 = this;
-if(cljs.core.truth_((this__3835.array.length > 0)))
-{var new_array__3836 = cljs.core.aclone.call(null,this__3835.array);
-
-new_array__3836.pop();
-return (new cljs.core.Vector(this__3835.meta,new_array__3836));
-} else
-{throw (new Error("Can't pop empty vector"));
-}
-});
-cljs.core.Vector.prototype.cljs$core$IVector$ = true;
-cljs.core.Vector.prototype.cljs$core$IVector$_assoc_n = (function (coll,n,val){
-var this__3837 = this;
-return cljs.core._assoc.call(null,coll,n,val);
-});
-cljs.core.Vector.prototype.cljs$core$IEquiv$ = true;
-cljs.core.Vector.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3838 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.Vector.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.Vector.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3839 = this;
-return (new cljs.core.Vector(meta,this__3839.array));
-});
-cljs.core.Vector.prototype.cljs$core$IMeta$ = true;
-cljs.core.Vector.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3840 = this;
-return this__3840.meta;
-});
-cljs.core.Vector.prototype.cljs$core$IIndexed$ = true;
-cljs.core.Vector.prototype.cljs$core$IIndexed$_nth = (function() {
-var G__3858 = null;
-var G__3858__3859 = (function (coll,n){
-var this__3841 = this;
-if(cljs.core.truth_((function (){var and__3546__auto____3842 = (0 <= n);
-
-if(cljs.core.truth_(and__3546__auto____3842))
-{return (n < this__3841.array.length);
-} else
-{return and__3546__auto____3842;
-}
-})()))
-{return (this__3841.array[n]);
-} else
-{return null;
-}
-});
-var G__3858__3860 = (function (coll,n,not_found){
-var this__3843 = this;
-if(cljs.core.truth_((function (){var and__3546__auto____3844 = (0 <= n);
-
-if(cljs.core.truth_(and__3546__auto____3844))
-{return (n < this__3843.array.length);
-} else
-{return and__3546__auto____3844;
-}
-})()))
-{return (this__3843.array[n]);
-} else
-{return not_found;
-}
-});
-G__3858 = function(coll,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3858__3859.call(this,coll,n);
-case  3 :
-return G__3858__3860.call(this,coll,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3858;
-})()
-;
-cljs.core.Vector.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.Vector.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3845 = this;
-return cljs.core.with_meta.call(null,cljs.core.Vector.EMPTY,this__3845.meta);
-});
-cljs.core.Vector;
-cljs.core.Vector.EMPTY = (new cljs.core.Vector(null,[]));
-cljs.core.Vector.fromArray = (function (xs){
-return (new cljs.core.Vector(null,xs));
-});
-cljs.core.vec = (function vec(coll){
-return cljs.core.reduce.call(null,cljs.core.conj,cljs.core.Vector.EMPTY,coll);
-});
-/**
-* @param {...*} var_args
-*/
-cljs.core.vector = (function() { 
-var vector__delegate = function (args){
-return cljs.core.vec.call(null,args);
-};
-var vector = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return vector__delegate.call(this, args);
-};
-vector.cljs$lang$maxFixedArity = 0;
-vector.cljs$lang$applyTo = (function (arglist__3862){
-var args = cljs.core.seq( arglist__3862 );;
-return vector__delegate.call(this, args);
-});
-return vector;
-})()
-;
-
-/**
-* @constructor
-*/
-cljs.core.Subvec = (function (meta,v,start,end){
-this.meta = meta;
-this.v = v;
-this.start = start;
-this.end = end;
-})
-cljs.core.Subvec.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Subvec");
-});
-cljs.core.Subvec.prototype.cljs$core$IHash$ = true;
-cljs.core.Subvec.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3863 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.Subvec.prototype.cljs$core$ILookup$ = true;
-cljs.core.Subvec.prototype.cljs$core$ILookup$_lookup = (function() {
-var G__3891 = null;
-var G__3891__3892 = (function (coll,k){
-var this__3864 = this;
-return cljs.core._nth.call(null,coll,k,null);
-});
-var G__3891__3893 = (function (coll,k,not_found){
-var this__3865 = this;
-return cljs.core._nth.call(null,coll,k,not_found);
-});
-G__3891 = function(coll,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3891__3892.call(this,coll,k);
-case  3 :
-return G__3891__3893.call(this,coll,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3891;
-})()
-;
-cljs.core.Subvec.prototype.cljs$core$IAssociative$ = true;
-cljs.core.Subvec.prototype.cljs$core$IAssociative$_assoc = (function (coll,key,val){
-var this__3866 = this;
-var v_pos__3867 = (this__3866.start + key);
-
-return (new cljs.core.Subvec(this__3866.meta,cljs.core._assoc.call(null,this__3866.v,v_pos__3867,val),this__3866.start,((this__3866.end > (v_pos__3867 + 1)) ? this__3866.end : (v_pos__3867 + 1))));
-});
-cljs.core.Subvec.prototype.cljs$core$IFn$ = true;
-cljs.core.Subvec.prototype.call = (function() {
-var G__3895 = null;
-var G__3895__3896 = (function (tsym3868,k){
-var this__3870 = this;
-var tsym3868__3871 = this;
-
-var coll__3872 = tsym3868__3871;
-
-return cljs.core._lookup.call(null,coll__3872,k);
-});
-var G__3895__3897 = (function (tsym3869,k,not_found){
-var this__3873 = this;
-var tsym3869__3874 = this;
-
-var coll__3875 = tsym3869__3874;
-
-return cljs.core._lookup.call(null,coll__3875,k,not_found);
-});
-G__3895 = function(tsym3869,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3895__3896.call(this,tsym3869,k);
-case  3 :
-return G__3895__3897.call(this,tsym3869,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3895;
-})()
-;
-cljs.core.Subvec.prototype.cljs$core$ISequential$ = true;
-cljs.core.Subvec.prototype.cljs$core$ICollection$ = true;
-cljs.core.Subvec.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3876 = this;
-return (new cljs.core.Subvec(this__3876.meta,cljs.core._assoc_n.call(null,this__3876.v,this__3876.end,o),this__3876.start,(this__3876.end + 1)));
-});
-cljs.core.Subvec.prototype.cljs$core$IReduce$ = true;
-cljs.core.Subvec.prototype.cljs$core$IReduce$_reduce = (function() {
-var G__3899 = null;
-var G__3899__3900 = (function (coll,f){
-var this__3877 = this;
-return cljs.core.ci_reduce.call(null,coll,f);
-});
-var G__3899__3901 = (function (coll,f,start){
-var this__3878 = this;
-return cljs.core.ci_reduce.call(null,coll,f,start);
-});
-G__3899 = function(coll,f,start){
-switch(arguments.length){
-case  2 :
-return G__3899__3900.call(this,coll,f);
-case  3 :
-return G__3899__3901.call(this,coll,f,start);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3899;
-})()
-;
-cljs.core.Subvec.prototype.cljs$core$ISeqable$ = true;
-cljs.core.Subvec.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3879 = this;
-var subvec_seq__3880 = (function subvec_seq(i){
-if(cljs.core.truth_(cljs.core._EQ_.call(null,i,this__3879.end)))
-{return null;
-} else
-{return cljs.core.cons.call(null,cljs.core._nth.call(null,this__3879.v,i),(new cljs.core.LazySeq(null,false,(function (){
-return subvec_seq.call(null,(i + 1));
-}))));
-}
-});
-
-return subvec_seq__3880.call(null,this__3879.start);
-});
-cljs.core.Subvec.prototype.cljs$core$ICounted$ = true;
-cljs.core.Subvec.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__3881 = this;
-return (this__3881.end - this__3881.start);
-});
-cljs.core.Subvec.prototype.cljs$core$IStack$ = true;
-cljs.core.Subvec.prototype.cljs$core$IStack$_peek = (function (coll){
-var this__3882 = this;
-return cljs.core._nth.call(null,this__3882.v,(this__3882.end - 1));
-});
-cljs.core.Subvec.prototype.cljs$core$IStack$_pop = (function (coll){
-var this__3883 = this;
-if(cljs.core.truth_(cljs.core._EQ_.call(null,this__3883.start,this__3883.end)))
-{throw (new Error("Can't pop empty vector"));
-} else
-{return (new cljs.core.Subvec(this__3883.meta,this__3883.v,this__3883.start,(this__3883.end - 1)));
-}
-});
-cljs.core.Subvec.prototype.cljs$core$IVector$ = true;
-cljs.core.Subvec.prototype.cljs$core$IVector$_assoc_n = (function (coll,n,val){
-var this__3884 = this;
-return cljs.core._assoc.call(null,coll,n,val);
-});
-cljs.core.Subvec.prototype.cljs$core$IEquiv$ = true;
-cljs.core.Subvec.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3885 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.Subvec.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.Subvec.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3886 = this;
-return (new cljs.core.Subvec(meta,this__3886.v,this__3886.start,this__3886.end));
-});
-cljs.core.Subvec.prototype.cljs$core$IMeta$ = true;
-cljs.core.Subvec.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3887 = this;
-return this__3887.meta;
-});
-cljs.core.Subvec.prototype.cljs$core$IIndexed$ = true;
-cljs.core.Subvec.prototype.cljs$core$IIndexed$_nth = (function() {
-var G__3903 = null;
-var G__3903__3904 = (function (coll,n){
-var this__3888 = this;
-return cljs.core._nth.call(null,this__3888.v,(this__3888.start + n));
-});
-var G__3903__3905 = (function (coll,n,not_found){
-var this__3889 = this;
-return cljs.core._nth.call(null,this__3889.v,(this__3889.start + n),not_found);
-});
-G__3903 = function(coll,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__3903__3904.call(this,coll,n);
-case  3 :
-return G__3903__3905.call(this,coll,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3903;
-})()
-;
-cljs.core.Subvec.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.Subvec.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3890 = this;
-return cljs.core.with_meta.call(null,cljs.core.Vector.EMPTY,this__3890.meta);
-});
-cljs.core.Subvec;
-/**
-* Returns a persistent vector of the items in vector from
-* start (inclusive) to end (exclusive).  If end is not supplied,
-* defaults to (count vector). This operation is O(1) and very fast, as
-* the resulting vector shares structure with the original and no
-* trimming is done.
-*/
-cljs.core.subvec = (function() {
-var subvec = null;
-var subvec__3907 = (function (v,start){
-return subvec.call(null,v,start,cljs.core.count.call(null,v));
-});
-var subvec__3908 = (function (v,start,end){
-return (new cljs.core.Subvec(null,v,start,end));
-});
-subvec = function(v,start,end){
-switch(arguments.length){
-case  2 :
-return subvec__3907.call(this,v,start);
-case  3 :
-return subvec__3908.call(this,v,start,end);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return subvec;
-})()
-;
-
-/**
-* @constructor
-*/
-cljs.core.PersistentQueueSeq = (function (meta,front,rear){
-this.meta = meta;
-this.front = front;
-this.rear = rear;
-})
-cljs.core.PersistentQueueSeq.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.PersistentQueueSeq");
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeqable$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3910 = this;
-return coll;
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IHash$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3911 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEquiv$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3912 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISequential$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3913 = this;
-return cljs.core.with_meta.call(null,cljs.core.List.EMPTY,this__3913.meta);
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ICollection$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3914 = this;
-return cljs.core.cons.call(null,o,coll);
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeq$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeq$_first = (function (coll){
-var this__3915 = this;
-return cljs.core._first.call(null,this__3915.front);
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$ISeq$_rest = (function (coll){
-var this__3916 = this;
-var temp__3695__auto____3917 = cljs.core.next.call(null,this__3916.front);
-
-if(cljs.core.truth_(temp__3695__auto____3917))
-{var f1__3918 = temp__3695__auto____3917;
-
-return (new cljs.core.PersistentQueueSeq(this__3916.meta,f1__3918,this__3916.rear));
-} else
-{if(cljs.core.truth_((this__3916.rear === null)))
-{return cljs.core._empty.call(null,coll);
-} else
-{return (new cljs.core.PersistentQueueSeq(this__3916.meta,this__3916.rear,null));
-}
-}
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IMeta$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3919 = this;
-return this__3919.meta;
-});
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3920 = this;
-return (new cljs.core.PersistentQueueSeq(meta,this__3920.front,this__3920.rear));
-});
-cljs.core.PersistentQueueSeq;
-
-/**
-* @constructor
-*/
-cljs.core.PersistentQueue = (function (meta,count,front,rear){
-this.meta = meta;
-this.count = count;
-this.front = front;
-this.rear = rear;
-})
-cljs.core.PersistentQueue.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.PersistentQueue");
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IHash$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3921 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.PersistentQueue.prototype.cljs$core$ISequential$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$ICollection$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__3922 = this;
-if(cljs.core.truth_(this__3922.front))
-{return (new cljs.core.PersistentQueue(this__3922.meta,(this__3922.count + 1),this__3922.front,cljs.core.conj.call(null,(function (){var or__3548__auto____3923 = this__3922.rear;
-
-if(cljs.core.truth_(or__3548__auto____3923))
-{return or__3548__auto____3923;
-} else
-{return cljs.core.Vector.fromArray([]);
-}
-})(),o)));
-} else
-{return (new cljs.core.PersistentQueue(this__3922.meta,(this__3922.count + 1),cljs.core.conj.call(null,this__3922.front,o),cljs.core.Vector.fromArray([])));
-}
-});
-cljs.core.PersistentQueue.prototype.cljs$core$ISeqable$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3924 = this;
-var rear__3925 = cljs.core.seq.call(null,this__3924.rear);
-
-if(cljs.core.truth_((function (){var or__3548__auto____3926 = this__3924.front;
-
-if(cljs.core.truth_(or__3548__auto____3926))
-{return or__3548__auto____3926;
-} else
-{return rear__3925;
-}
-})()))
-{return (new cljs.core.PersistentQueueSeq(null,this__3924.front,cljs.core.seq.call(null,rear__3925)));
-} else
-{return cljs.core.List.EMPTY;
-}
-});
-cljs.core.PersistentQueue.prototype.cljs$core$ICounted$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__3927 = this;
-return this__3927.count;
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IStack$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$IStack$_peek = (function (coll){
-var this__3928 = this;
-return cljs.core._first.call(null,this__3928.front);
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IStack$_pop = (function (coll){
-var this__3929 = this;
-if(cljs.core.truth_(this__3929.front))
-{var temp__3695__auto____3930 = cljs.core.next.call(null,this__3929.front);
-
-if(cljs.core.truth_(temp__3695__auto____3930))
-{var f1__3931 = temp__3695__auto____3930;
-
-return (new cljs.core.PersistentQueue(this__3929.meta,(this__3929.count - 1),f1__3931,this__3929.rear));
-} else
-{return (new cljs.core.PersistentQueue(this__3929.meta,(this__3929.count - 1),cljs.core.seq.call(null,this__3929.rear),cljs.core.Vector.fromArray([])));
-}
-} else
-{return coll;
-}
-});
-cljs.core.PersistentQueue.prototype.cljs$core$ISeq$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$ISeq$_first = (function (coll){
-var this__3932 = this;
-return cljs.core.first.call(null,this__3932.front);
-});
-cljs.core.PersistentQueue.prototype.cljs$core$ISeq$_rest = (function (coll){
-var this__3933 = this;
-return cljs.core.rest.call(null,cljs.core.seq.call(null,coll));
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IEquiv$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3934 = this;
-return cljs.core.equiv_sequential.call(null,coll,other);
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3935 = this;
-return (new cljs.core.PersistentQueue(meta,this__3935.count,this__3935.front,this__3935.rear));
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IMeta$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3936 = this;
-return this__3936.meta;
-});
-cljs.core.PersistentQueue.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.PersistentQueue.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3937 = this;
-return cljs.core.PersistentQueue.EMPTY;
-});
-cljs.core.PersistentQueue;
-cljs.core.PersistentQueue.EMPTY = (new cljs.core.PersistentQueue(null,0,null,cljs.core.Vector.fromArray([])));
-
-/**
-* @constructor
-*/
-cljs.core.NeverEquiv = (function (){
-})
-cljs.core.NeverEquiv.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.NeverEquiv");
-});
-cljs.core.NeverEquiv.prototype.cljs$core$IEquiv$ = true;
-cljs.core.NeverEquiv.prototype.cljs$core$IEquiv$_equiv = (function (o,other){
-var this__3938 = this;
-return false;
-});
-cljs.core.NeverEquiv;
-cljs.core.never_equiv = (new cljs.core.NeverEquiv());
-/**
-* Assumes y is a map. Returns true if x equals y, otherwise returns
-* false.
-*/
-cljs.core.equiv_map = (function equiv_map(x,y){
-return cljs.core.boolean$.call(null,(cljs.core.truth_(cljs.core.map_QMARK_.call(null,y))?(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.count.call(null,x),cljs.core.count.call(null,y)))?cljs.core.every_QMARK_.call(null,cljs.core.identity,cljs.core.map.call(null,(function (xkv){
-return cljs.core._EQ_.call(null,cljs.core.get.call(null,y,cljs.core.first.call(null,xkv),cljs.core.never_equiv),cljs.core.second.call(null,xkv));
-}),x)):null):null));
-});
-cljs.core.scan_array = (function scan_array(incr,k,array){
-var len__3939 = array.length;
-
-var i__3940 = 0;
-
-while(true){
-if(cljs.core.truth_((i__3940 < len__3939)))
-{if(cljs.core.truth_(cljs.core._EQ_.call(null,k,(array[i__3940]))))
-{return i__3940;
-} else
-{{
-var G__3941 = (i__3940 + incr);
-i__3940 = G__3941;
-continue;
-}
-}
-} else
-{return null;
-}
-break;
-}
-});
-cljs.core.obj_map_contains_key_QMARK_ = (function() {
-var obj_map_contains_key_QMARK_ = null;
-var obj_map_contains_key_QMARK___3943 = (function (k,strobj){
-return obj_map_contains_key_QMARK_.call(null,k,strobj,true,false);
-});
-var obj_map_contains_key_QMARK___3944 = (function (k,strobj,true_val,false_val){
-if(cljs.core.truth_((function (){var and__3546__auto____3942 = goog.isString.call(null,k);
-
-if(cljs.core.truth_(and__3546__auto____3942))
-{return strobj.hasOwnProperty(k);
-} else
-{return and__3546__auto____3942;
-}
-})()))
-{return true_val;
-} else
-{return false_val;
-}
-});
-obj_map_contains_key_QMARK_ = function(k,strobj,true_val,false_val){
-switch(arguments.length){
-case  2 :
-return obj_map_contains_key_QMARK___3943.call(this,k,strobj);
-case  4 :
-return obj_map_contains_key_QMARK___3944.call(this,k,strobj,true_val,false_val);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return obj_map_contains_key_QMARK_;
-})()
-;
-cljs.core.obj_map_compare_keys = (function obj_map_compare_keys(a,b){
-var a__3947 = cljs.core.hash.call(null,a);
-var b__3948 = cljs.core.hash.call(null,b);
-
-if(cljs.core.truth_((a__3947 < b__3948)))
-{return -1;
-} else
-{if(cljs.core.truth_((a__3947 > b__3948)))
-{return 1;
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return 0;
-} else
-{return null;
-}
-}
-}
-});
-
-/**
-* @constructor
-*/
-cljs.core.ObjMap = (function (meta,keys,strobj){
-this.meta = meta;
-this.keys = keys;
-this.strobj = strobj;
-})
-cljs.core.ObjMap.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.ObjMap");
-});
-cljs.core.ObjMap.prototype.cljs$core$IHash$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3949 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.ObjMap.prototype.cljs$core$ILookup$ = true;
-cljs.core.ObjMap.prototype.cljs$core$ILookup$_lookup = (function() {
-var G__3976 = null;
-var G__3976__3977 = (function (coll,k){
-var this__3950 = this;
-return cljs.core._lookup.call(null,coll,k,null);
-});
-var G__3976__3978 = (function (coll,k,not_found){
-var this__3951 = this;
-return cljs.core.obj_map_contains_key_QMARK_.call(null,k,this__3951.strobj,(this__3951.strobj[k]),not_found);
-});
-G__3976 = function(coll,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3976__3977.call(this,coll,k);
-case  3 :
-return G__3976__3978.call(this,coll,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3976;
-})()
-;
-cljs.core.ObjMap.prototype.cljs$core$IAssociative$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IAssociative$_assoc = (function (coll,k,v){
-var this__3952 = this;
-if(cljs.core.truth_(goog.isString.call(null,k)))
-{var new_strobj__3953 = goog.object.clone.call(null,this__3952.strobj);
-var overwrite_QMARK___3954 = new_strobj__3953.hasOwnProperty(k);
-
-(new_strobj__3953[k] = v);
-if(cljs.core.truth_(overwrite_QMARK___3954))
-{return (new cljs.core.ObjMap(this__3952.meta,this__3952.keys,new_strobj__3953));
-} else
-{var new_keys__3955 = cljs.core.aclone.call(null,this__3952.keys);
-
-new_keys__3955.push(k);
-return (new cljs.core.ObjMap(this__3952.meta,new_keys__3955,new_strobj__3953));
-}
-} else
-{return cljs.core.with_meta.call(null,cljs.core.into.call(null,cljs.core.hash_map.call(null,k,v),cljs.core.seq.call(null,coll)),this__3952.meta);
-}
-});
-cljs.core.ObjMap.prototype.cljs$core$IAssociative$_contains_key_QMARK_ = (function (coll,k){
-var this__3956 = this;
-return cljs.core.obj_map_contains_key_QMARK_.call(null,k,this__3956.strobj);
-});
-cljs.core.ObjMap.prototype.cljs$core$IFn$ = true;
-cljs.core.ObjMap.prototype.call = (function() {
-var G__3980 = null;
-var G__3980__3981 = (function (tsym3957,k){
-var this__3959 = this;
-var tsym3957__3960 = this;
-
-var coll__3961 = tsym3957__3960;
-
-return cljs.core._lookup.call(null,coll__3961,k);
-});
-var G__3980__3982 = (function (tsym3958,k,not_found){
-var this__3962 = this;
-var tsym3958__3963 = this;
-
-var coll__3964 = tsym3958__3963;
-
-return cljs.core._lookup.call(null,coll__3964,k,not_found);
-});
-G__3980 = function(tsym3958,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__3980__3981.call(this,tsym3958,k);
-case  3 :
-return G__3980__3982.call(this,tsym3958,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__3980;
-})()
-;
-cljs.core.ObjMap.prototype.cljs$core$ICollection$ = true;
-cljs.core.ObjMap.prototype.cljs$core$ICollection$_conj = (function (coll,entry){
-var this__3965 = this;
-if(cljs.core.truth_(cljs.core.vector_QMARK_.call(null,entry)))
-{return cljs.core._assoc.call(null,coll,cljs.core._nth.call(null,entry,0),cljs.core._nth.call(null,entry,1));
-} else
-{return cljs.core.reduce.call(null,cljs.core._conj,coll,entry);
-}
-});
-cljs.core.ObjMap.prototype.cljs$core$ISeqable$ = true;
-cljs.core.ObjMap.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__3966 = this;
-if(cljs.core.truth_((this__3966.keys.length > 0)))
-{return cljs.core.map.call(null,(function (p1__3946_SHARP_){
-return cljs.core.vector.call(null,p1__3946_SHARP_,(this__3966.strobj[p1__3946_SHARP_]));
-}),this__3966.keys.sort(cljs.core.obj_map_compare_keys));
-} else
-{return null;
-}
-});
-cljs.core.ObjMap.prototype.cljs$core$ICounted$ = true;
-cljs.core.ObjMap.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__3967 = this;
-return this__3967.keys.length;
-});
-cljs.core.ObjMap.prototype.cljs$core$IEquiv$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__3968 = this;
-return cljs.core.equiv_map.call(null,coll,other);
-});
-cljs.core.ObjMap.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__3969 = this;
-return (new cljs.core.ObjMap(meta,this__3969.keys,this__3969.strobj));
-});
-cljs.core.ObjMap.prototype.cljs$core$IMeta$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__3970 = this;
-return this__3970.meta;
-});
-cljs.core.ObjMap.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__3971 = this;
-return cljs.core.with_meta.call(null,cljs.core.ObjMap.EMPTY,this__3971.meta);
-});
-cljs.core.ObjMap.prototype.cljs$core$IMap$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IMap$_dissoc = (function (coll,k){
-var this__3972 = this;
-if(cljs.core.truth_((function (){var and__3546__auto____3973 = goog.isString.call(null,k);
-
-if(cljs.core.truth_(and__3546__auto____3973))
-{return this__3972.strobj.hasOwnProperty(k);
-} else
-{return and__3546__auto____3973;
-}
-})()))
-{var new_keys__3974 = cljs.core.aclone.call(null,this__3972.keys);
-var new_strobj__3975 = goog.object.clone.call(null,this__3972.strobj);
-
-new_keys__3974.splice(cljs.core.scan_array.call(null,1,k,new_keys__3974),1);
-cljs.core.js_delete.call(null,new_strobj__3975,k);
-return (new cljs.core.ObjMap(this__3972.meta,new_keys__3974,new_strobj__3975));
-} else
-{return coll;
-}
-});
-cljs.core.ObjMap;
-cljs.core.ObjMap.EMPTY = (new cljs.core.ObjMap(null,[],cljs.core.js_obj.call(null)));
-cljs.core.ObjMap.fromObject = (function (ks,obj){
-return (new cljs.core.ObjMap(null,ks,obj));
-});
-
-/**
-* @constructor
-*/
-cljs.core.HashMap = (function (meta,count,hashobj){
-this.meta = meta;
-this.count = count;
-this.hashobj = hashobj;
-})
-cljs.core.HashMap.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.HashMap");
-});
-cljs.core.HashMap.prototype.cljs$core$IHash$ = true;
-cljs.core.HashMap.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__3985 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.HashMap.prototype.cljs$core$ILookup$ = true;
-cljs.core.HashMap.prototype.cljs$core$ILookup$_lookup = (function() {
-var G__4023 = null;
-var G__4023__4024 = (function (coll,k){
-var this__3986 = this;
-return cljs.core._lookup.call(null,coll,k,null);
-});
-var G__4023__4025 = (function (coll,k,not_found){
-var this__3987 = this;
-var bucket__3988 = (this__3987.hashobj[cljs.core.hash.call(null,k)]);
-var i__3989 = (cljs.core.truth_(bucket__3988)?cljs.core.scan_array.call(null,2,k,bucket__3988):null);
-
-if(cljs.core.truth_(i__3989))
-{return (bucket__3988[(i__3989 + 1)]);
-} else
-{return not_found;
-}
-});
-G__4023 = function(coll,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__4023__4024.call(this,coll,k);
-case  3 :
-return G__4023__4025.call(this,coll,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__4023;
-})()
-;
-cljs.core.HashMap.prototype.cljs$core$IAssociative$ = true;
-cljs.core.HashMap.prototype.cljs$core$IAssociative$_assoc = (function (coll,k,v){
-var this__3990 = this;
-var h__3991 = cljs.core.hash.call(null,k);
-var bucket__3992 = (this__3990.hashobj[h__3991]);
-
-if(cljs.core.truth_(bucket__3992))
-{var new_bucket__3993 = cljs.core.aclone.call(null,bucket__3992);
-var new_hashobj__3994 = goog.object.clone.call(null,this__3990.hashobj);
-
-(new_hashobj__3994[h__3991] = new_bucket__3993);
-var temp__3695__auto____3995 = cljs.core.scan_array.call(null,2,k,new_bucket__3993);
-
-if(cljs.core.truth_(temp__3695__auto____3995))
-{var i__3996 = temp__3695__auto____3995;
-
-(new_bucket__3993[(i__3996 + 1)] = v);
-return (new cljs.core.HashMap(this__3990.meta,this__3990.count,new_hashobj__3994));
-} else
-{new_bucket__3993.push(k,v);
-return (new cljs.core.HashMap(this__3990.meta,(this__3990.count + 1),new_hashobj__3994));
-}
-} else
-{var new_hashobj__3997 = goog.object.clone.call(null,this__3990.hashobj);
-
-(new_hashobj__3997[h__3991] = [k,v]);
-return (new cljs.core.HashMap(this__3990.meta,(this__3990.count + 1),new_hashobj__3997));
-}
-});
-cljs.core.HashMap.prototype.cljs$core$IAssociative$_contains_key_QMARK_ = (function (coll,k){
-var this__3998 = this;
-var bucket__3999 = (this__3998.hashobj[cljs.core.hash.call(null,k)]);
-var i__4000 = (cljs.core.truth_(bucket__3999)?cljs.core.scan_array.call(null,2,k,bucket__3999):null);
-
-if(cljs.core.truth_(i__4000))
-{return true;
-} else
-{return false;
-}
-});
-cljs.core.HashMap.prototype.cljs$core$IFn$ = true;
-cljs.core.HashMap.prototype.call = (function() {
-var G__4027 = null;
-var G__4027__4028 = (function (tsym4001,k){
-var this__4003 = this;
-var tsym4001__4004 = this;
-
-var coll__4005 = tsym4001__4004;
-
-return cljs.core._lookup.call(null,coll__4005,k);
-});
-var G__4027__4029 = (function (tsym4002,k,not_found){
-var this__4006 = this;
-var tsym4002__4007 = this;
-
-var coll__4008 = tsym4002__4007;
-
-return cljs.core._lookup.call(null,coll__4008,k,not_found);
-});
-G__4027 = function(tsym4002,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__4027__4028.call(this,tsym4002,k);
-case  3 :
-return G__4027__4029.call(this,tsym4002,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__4027;
-})()
-;
-cljs.core.HashMap.prototype.cljs$core$ICollection$ = true;
-cljs.core.HashMap.prototype.cljs$core$ICollection$_conj = (function (coll,entry){
-var this__4009 = this;
-if(cljs.core.truth_(cljs.core.vector_QMARK_.call(null,entry)))
-{return cljs.core._assoc.call(null,coll,cljs.core._nth.call(null,entry,0),cljs.core._nth.call(null,entry,1));
-} else
-{return cljs.core.reduce.call(null,cljs.core._conj,coll,entry);
-}
-});
-cljs.core.HashMap.prototype.cljs$core$ISeqable$ = true;
-cljs.core.HashMap.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__4010 = this;
-if(cljs.core.truth_((this__4010.count > 0)))
-{var hashes__4011 = cljs.core.js_keys.call(null,this__4010.hashobj).sort();
-
-return cljs.core.mapcat.call(null,(function (p1__3984_SHARP_){
-return cljs.core.map.call(null,cljs.core.vec,cljs.core.partition.call(null,2,(this__4010.hashobj[p1__3984_SHARP_])));
-}),hashes__4011);
-} else
-{return null;
-}
-});
-cljs.core.HashMap.prototype.cljs$core$ICounted$ = true;
-cljs.core.HashMap.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__4012 = this;
-return this__4012.count;
-});
-cljs.core.HashMap.prototype.cljs$core$IEquiv$ = true;
-cljs.core.HashMap.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__4013 = this;
-return cljs.core.equiv_map.call(null,coll,other);
-});
-cljs.core.HashMap.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.HashMap.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__4014 = this;
-return (new cljs.core.HashMap(meta,this__4014.count,this__4014.hashobj));
-});
-cljs.core.HashMap.prototype.cljs$core$IMeta$ = true;
-cljs.core.HashMap.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__4015 = this;
-return this__4015.meta;
-});
-cljs.core.HashMap.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.HashMap.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__4016 = this;
-return cljs.core.with_meta.call(null,cljs.core.HashMap.EMPTY,this__4016.meta);
-});
-cljs.core.HashMap.prototype.cljs$core$IMap$ = true;
-cljs.core.HashMap.prototype.cljs$core$IMap$_dissoc = (function (coll,k){
-var this__4017 = this;
-var h__4018 = cljs.core.hash.call(null,k);
-var bucket__4019 = (this__4017.hashobj[h__4018]);
-var i__4020 = (cljs.core.truth_(bucket__4019)?cljs.core.scan_array.call(null,2,k,bucket__4019):null);
-
-if(cljs.core.truth_(cljs.core.not.call(null,i__4020)))
-{return coll;
-} else
-{var new_hashobj__4021 = goog.object.clone.call(null,this__4017.hashobj);
-
-if(cljs.core.truth_((3 > bucket__4019.length)))
-{cljs.core.js_delete.call(null,new_hashobj__4021,h__4018);
-} else
-{var new_bucket__4022 = cljs.core.aclone.call(null,bucket__4019);
-
-new_bucket__4022.splice(i__4020,2);
-(new_hashobj__4021[h__4018] = new_bucket__4022);
-}
-return (new cljs.core.HashMap(this__4017.meta,(this__4017.count - 1),new_hashobj__4021));
-}
-});
-cljs.core.HashMap;
-cljs.core.HashMap.EMPTY = (new cljs.core.HashMap(null,0,cljs.core.js_obj.call(null)));
-cljs.core.HashMap.fromArrays = (function (ks,vs){
-var len__4031 = ks.length;
-
-var i__4032 = 0;
-var out__4033 = cljs.core.HashMap.EMPTY;
-
-while(true){
-if(cljs.core.truth_((i__4032 < len__4031)))
-{{
-var G__4034 = (i__4032 + 1);
-var G__4035 = cljs.core.assoc.call(null,out__4033,(ks[i__4032]),(vs[i__4032]));
-i__4032 = G__4034;
-out__4033 = G__4035;
-continue;
-}
-} else
-{return out__4033;
-}
-break;
-}
-});
-/**
-* keyval => key val
-* Returns a new hash map with supplied mappings.
-* @param {...*} var_args
-*/
-cljs.core.hash_map = (function() { 
-var hash_map__delegate = function (keyvals){
-var in$__4036 = cljs.core.seq.call(null,keyvals);
-var out__4037 = cljs.core.HashMap.EMPTY;
-
-while(true){
-if(cljs.core.truth_(in$__4036))
-{{
-var G__4038 = cljs.core.nnext.call(null,in$__4036);
-var G__4039 = cljs.core.assoc.call(null,out__4037,cljs.core.first.call(null,in$__4036),cljs.core.second.call(null,in$__4036));
-in$__4036 = G__4038;
-out__4037 = G__4039;
-continue;
-}
-} else
-{return out__4037;
-}
-break;
-}
-};
-var hash_map = function (var_args){
-var keyvals = null;
-if (goog.isDef(var_args)) {
-  keyvals = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return hash_map__delegate.call(this, keyvals);
-};
-hash_map.cljs$lang$maxFixedArity = 0;
-hash_map.cljs$lang$applyTo = (function (arglist__4040){
-var keyvals = cljs.core.seq( arglist__4040 );;
-return hash_map__delegate.call(this, keyvals);
-});
-return hash_map;
-})()
-;
-/**
-* Returns a sequence of the map's keys.
-*/
-cljs.core.keys = (function keys(hash_map){
-return cljs.core.seq.call(null,cljs.core.map.call(null,cljs.core.first,hash_map));
-});
-/**
-* Returns a sequence of the map's values.
-*/
-cljs.core.vals = (function vals(hash_map){
-return cljs.core.seq.call(null,cljs.core.map.call(null,cljs.core.second,hash_map));
-});
-/**
-* Returns a map that consists of the rest of the maps conj-ed onto
-* the first.  If a key occurs in more than one map, the mapping from
-* the latter (left-to-right) will be the mapping in the result.
-* @param {...*} var_args
-*/
-cljs.core.merge = (function() { 
-var merge__delegate = function (maps){
-if(cljs.core.truth_(cljs.core.some.call(null,cljs.core.identity,maps)))
-{return cljs.core.reduce.call(null,(function (p1__4041_SHARP_,p2__4042_SHARP_){
-return cljs.core.conj.call(null,(function (){var or__3548__auto____4043 = p1__4041_SHARP_;
-
-if(cljs.core.truth_(or__3548__auto____4043))
-{return or__3548__auto____4043;
-} else
-{return cljs.core.ObjMap.fromObject([],{});
-}
-})(),p2__4042_SHARP_);
-}),maps);
-} else
-{return null;
-}
-};
-var merge = function (var_args){
-var maps = null;
-if (goog.isDef(var_args)) {
-  maps = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return merge__delegate.call(this, maps);
-};
-merge.cljs$lang$maxFixedArity = 0;
-merge.cljs$lang$applyTo = (function (arglist__4044){
-var maps = cljs.core.seq( arglist__4044 );;
-return merge__delegate.call(this, maps);
-});
-return merge;
-})()
-;
-/**
-* Returns a map that consists of the rest of the maps conj-ed onto
-* the first.  If a key occurs in more than one map, the mapping(s)
-* from the latter (left-to-right) will be combined with the mapping in
-* the result by calling (f val-in-result val-in-latter).
-* @param {...*} var_args
-*/
-cljs.core.merge_with = (function() { 
-var merge_with__delegate = function (f,maps){
-if(cljs.core.truth_(cljs.core.some.call(null,cljs.core.identity,maps)))
-{var merge_entry__4047 = (function (m,e){
-var k__4045 = cljs.core.first.call(null,e);
-var v__4046 = cljs.core.second.call(null,e);
-
-if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null,m,k__4045)))
-{return cljs.core.assoc.call(null,m,k__4045,f.call(null,cljs.core.get.call(null,m,k__4045),v__4046));
-} else
-{return cljs.core.assoc.call(null,m,k__4045,v__4046);
-}
-});
-var merge2__4049 = (function (m1,m2){
-return cljs.core.reduce.call(null,merge_entry__4047,(function (){var or__3548__auto____4048 = m1;
-
-if(cljs.core.truth_(or__3548__auto____4048))
-{return or__3548__auto____4048;
-} else
-{return cljs.core.ObjMap.fromObject([],{});
-}
-})(),cljs.core.seq.call(null,m2));
-});
-
-return cljs.core.reduce.call(null,merge2__4049,maps);
-} else
-{return null;
-}
-};
-var merge_with = function (f,var_args){
-var maps = null;
-if (goog.isDef(var_args)) {
-  maps = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return merge_with__delegate.call(this, f, maps);
-};
-merge_with.cljs$lang$maxFixedArity = 1;
-merge_with.cljs$lang$applyTo = (function (arglist__4050){
-var f = cljs.core.first(arglist__4050);
-var maps = cljs.core.rest(arglist__4050);
-return merge_with__delegate.call(this, f, maps);
-});
-return merge_with;
-})()
-;
-/**
-* Returns a map containing only those entries in map whose key is in keys
-*/
-cljs.core.select_keys = (function select_keys(map,keyseq){
-var ret__4052 = cljs.core.ObjMap.fromObject([],{});
-var keys__4053 = cljs.core.seq.call(null,keyseq);
-
-while(true){
-if(cljs.core.truth_(keys__4053))
-{var key__4054 = cljs.core.first.call(null,keys__4053);
-var entry__4055 = cljs.core.get.call(null,map,key__4054,"\uFDD0'user/not-found");
-
-{
-var G__4056 = (cljs.core.truth_(cljs.core.not_EQ_.call(null,entry__4055,"\uFDD0'user/not-found"))?cljs.core.assoc.call(null,ret__4052,key__4054,entry__4055):ret__4052);
-var G__4057 = cljs.core.next.call(null,keys__4053);
-ret__4052 = G__4056;
-keys__4053 = G__4057;
-continue;
-}
-} else
-{return ret__4052;
-}
-break;
-}
-});
-
-/**
-* @constructor
-*/
-cljs.core.Set = (function (meta,hash_map){
-this.meta = meta;
-this.hash_map = hash_map;
-})
-cljs.core.Set.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Set");
-});
-cljs.core.Set.prototype.cljs$core$IHash$ = true;
-cljs.core.Set.prototype.cljs$core$IHash$_hash = (function (coll){
-var this__4058 = this;
-return cljs.core.hash_coll.call(null,coll);
-});
-cljs.core.Set.prototype.cljs$core$ILookup$ = true;
-cljs.core.Set.prototype.cljs$core$ILookup$_lookup = (function() {
-var G__4079 = null;
-var G__4079__4080 = (function (coll,v){
-var this__4059 = this;
-return cljs.core._lookup.call(null,coll,v,null);
-});
-var G__4079__4081 = (function (coll,v,not_found){
-var this__4060 = this;
-if(cljs.core.truth_(cljs.core._contains_key_QMARK_.call(null,this__4060.hash_map,v)))
-{return v;
-} else
-{return not_found;
-}
-});
-G__4079 = function(coll,v,not_found){
-switch(arguments.length){
-case  2 :
-return G__4079__4080.call(this,coll,v);
-case  3 :
-return G__4079__4081.call(this,coll,v,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__4079;
-})()
-;
-cljs.core.Set.prototype.cljs$core$IFn$ = true;
-cljs.core.Set.prototype.call = (function() {
-var G__4083 = null;
-var G__4083__4084 = (function (tsym4061,k){
-var this__4063 = this;
-var tsym4061__4064 = this;
-
-var coll__4065 = tsym4061__4064;
-
-return cljs.core._lookup.call(null,coll__4065,k);
-});
-var G__4083__4085 = (function (tsym4062,k,not_found){
-var this__4066 = this;
-var tsym4062__4067 = this;
-
-var coll__4068 = tsym4062__4067;
-
-return cljs.core._lookup.call(null,coll__4068,k,not_found);
-});
-G__4083 = function(tsym4062,k,not_found){
-switch(arguments.length){
-case  2 :
-return G__4083__4084.call(this,tsym4062,k);
-case  3 :
-return G__4083__4085.call(this,tsym4062,k,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__4083;
-})()
-;
-cljs.core.Set.prototype.cljs$core$ICollection$ = true;
-cljs.core.Set.prototype.cljs$core$ICollection$_conj = (function (coll,o){
-var this__4069 = this;
-return (new cljs.core.Set(this__4069.meta,cljs.core.assoc.call(null,this__4069.hash_map,o,null)));
-});
-cljs.core.Set.prototype.cljs$core$ISeqable$ = true;
-cljs.core.Set.prototype.cljs$core$ISeqable$_seq = (function (coll){
-var this__4070 = this;
-return cljs.core.keys.call(null,this__4070.hash_map);
-});
-cljs.core.Set.prototype.cljs$core$ISet$ = true;
-cljs.core.Set.prototype.cljs$core$ISet$_disjoin = (function (coll,v){
-var this__4071 = this;
-return (new cljs.core.Set(this__4071.meta,cljs.core.dissoc.call(null,this__4071.hash_map,v)));
-});
-cljs.core.Set.prototype.cljs$core$ICounted$ = true;
-cljs.core.Set.prototype.cljs$core$ICounted$_count = (function (coll){
-var this__4072 = this;
-return cljs.core.count.call(null,cljs.core.seq.call(null,coll));
-});
-cljs.core.Set.prototype.cljs$core$IEquiv$ = true;
-cljs.core.Set.prototype.cljs$core$IEquiv$_equiv = (function (coll,other){
-var this__4073 = this;
-var and__3546__auto____4074 = cljs.core.set_QMARK_.call(null,other);
-
-if(cljs.core.truth_(and__3546__auto____4074))
-{var and__3546__auto____4075 = cljs.core._EQ_.call(null,cljs.core.count.call(null,coll),cljs.core.count.call(null,other));
-
-if(cljs.core.truth_(and__3546__auto____4075))
-{return cljs.core.every_QMARK_.call(null,(function (p1__4051_SHARP_){
-return cljs.core.contains_QMARK_.call(null,coll,p1__4051_SHARP_);
-}),other);
-} else
-{return and__3546__auto____4075;
-}
-} else
-{return and__3546__auto____4074;
-}
-});
-cljs.core.Set.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.Set.prototype.cljs$core$IWithMeta$_with_meta = (function (coll,meta){
-var this__4076 = this;
-return (new cljs.core.Set(meta,this__4076.hash_map));
-});
-cljs.core.Set.prototype.cljs$core$IMeta$ = true;
-cljs.core.Set.prototype.cljs$core$IMeta$_meta = (function (coll){
-var this__4077 = this;
-return this__4077.meta;
-});
-cljs.core.Set.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.Set.prototype.cljs$core$IEmptyableCollection$_empty = (function (coll){
-var this__4078 = this;
-return cljs.core.with_meta.call(null,cljs.core.Set.EMPTY,this__4078.meta);
-});
-cljs.core.Set;
-cljs.core.Set.EMPTY = (new cljs.core.Set(null,cljs.core.hash_map.call(null)));
-/**
-* Returns a set of the distinct elements of coll.
-*/
-cljs.core.set = (function set(coll){
-var in$__4088 = cljs.core.seq.call(null,coll);
-var out__4089 = cljs.core.Set.EMPTY;
-
-while(true){
-if(cljs.core.truth_(cljs.core.not.call(null,cljs.core.empty_QMARK_.call(null,in$__4088))))
-{{
-var G__4090 = cljs.core.rest.call(null,in$__4088);
-var G__4091 = cljs.core.conj.call(null,out__4089,cljs.core.first.call(null,in$__4088));
-in$__4088 = G__4090;
-out__4089 = G__4091;
-continue;
-}
-} else
-{return out__4089;
-}
-break;
-}
-});
-/**
-* Given a map of replacement pairs and a vector/collection, returns a
-* vector/seq with any elements = a key in smap replaced with the
-* corresponding val in smap
-*/
-cljs.core.replace = (function replace(smap,coll){
-if(cljs.core.truth_(cljs.core.vector_QMARK_.call(null,coll)))
-{var n__4092 = cljs.core.count.call(null,coll);
-
-return cljs.core.reduce.call(null,(function (v,i){
-var temp__3695__auto____4093 = cljs.core.find.call(null,smap,cljs.core.nth.call(null,v,i));
-
-if(cljs.core.truth_(temp__3695__auto____4093))
-{var e__4094 = temp__3695__auto____4093;
-
-return cljs.core.assoc.call(null,v,i,cljs.core.second.call(null,e__4094));
-} else
-{return v;
-}
-}),coll,cljs.core.take.call(null,n__4092,cljs.core.iterate.call(null,cljs.core.inc,0)));
-} else
-{return cljs.core.map.call(null,(function (p1__4087_SHARP_){
-var temp__3695__auto____4095 = cljs.core.find.call(null,smap,p1__4087_SHARP_);
-
-if(cljs.core.truth_(temp__3695__auto____4095))
-{var e__4096 = temp__3695__auto____4095;
-
-return cljs.core.second.call(null,e__4096);
-} else
-{return p1__4087_SHARP_;
-}
-}),coll);
-}
-});
-/**
-* Returns a lazy sequence of the elements of coll with duplicates removed
-*/
-cljs.core.distinct = (function distinct(coll){
-var step__4104 = (function step(xs,seen){
-return (new cljs.core.LazySeq(null,false,(function (){
-return (function (p__4097,seen){
-while(true){
-var vec__4098__4099 = p__4097;
-var f__4100 = cljs.core.nth.call(null,vec__4098__4099,0,null);
-var xs__4101 = vec__4098__4099;
-
-var temp__3698__auto____4102 = cljs.core.seq.call(null,xs__4101);
-
-if(cljs.core.truth_(temp__3698__auto____4102))
-{var s__4103 = temp__3698__auto____4102;
-
-if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null,seen,f__4100)))
-{{
-var G__4105 = cljs.core.rest.call(null,s__4103);
-var G__4106 = seen;
-p__4097 = G__4105;
-seen = G__4106;
-continue;
-}
-} else
-{return cljs.core.cons.call(null,f__4100,step.call(null,cljs.core.rest.call(null,s__4103),cljs.core.conj.call(null,seen,f__4100)));
-}
-} else
-{return null;
-}
-break;
-}
-}).call(null,xs,seen);
-})));
-});
-
-return step__4104.call(null,coll,cljs.core.set([]));
-});
-cljs.core.butlast = (function butlast(s){
-var ret__4107 = cljs.core.Vector.fromArray([]);
-var s__4108 = s;
-
-while(true){
-if(cljs.core.truth_(cljs.core.next.call(null,s__4108)))
-{{
-var G__4109 = cljs.core.conj.call(null,ret__4107,cljs.core.first.call(null,s__4108));
-var G__4110 = cljs.core.next.call(null,s__4108);
-ret__4107 = G__4109;
-s__4108 = G__4110;
-continue;
-}
-} else
-{return cljs.core.seq.call(null,ret__4107);
-}
-break;
-}
-});
-/**
-* Returns the name String of a string, symbol or keyword.
-*/
-cljs.core.name = (function name(x){
-if(cljs.core.truth_(cljs.core.string_QMARK_.call(null,x)))
-{return x;
-} else
-{if(cljs.core.truth_((function (){var or__3548__auto____4111 = cljs.core.keyword_QMARK_.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____4111))
-{return or__3548__auto____4111;
-} else
-{return cljs.core.symbol_QMARK_.call(null,x);
-}
-})()))
-{var i__4112 = x.lastIndexOf("\/");
-
-if(cljs.core.truth_((i__4112 < 0)))
-{return cljs.core.subs.call(null,x,2);
-} else
-{return cljs.core.subs.call(null,x,(i__4112 + 1));
-}
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{throw (new Error(cljs.core.str.call(null,"Doesn't support name: ",x)));
-} else
-{return null;
-}
-}
-}
-});
-/**
-* Returns the namespace String of a symbol or keyword, or nil if not present.
-*/
-cljs.core.namespace = (function namespace(x){
-if(cljs.core.truth_((function (){var or__3548__auto____4113 = cljs.core.keyword_QMARK_.call(null,x);
-
-if(cljs.core.truth_(or__3548__auto____4113))
-{return or__3548__auto____4113;
-} else
-{return cljs.core.symbol_QMARK_.call(null,x);
-}
-})()))
-{var i__4114 = x.lastIndexOf("\/");
-
-if(cljs.core.truth_((i__4114 > -1)))
-{return cljs.core.subs.call(null,x,2,i__4114);
-} else
-{return null;
-}
-} else
-{throw (new Error(cljs.core.str.call(null,"Doesn't support namespace: ",x)));
-}
-});
-/**
-* Returns a map with the keys mapped to the corresponding vals.
-*/
-cljs.core.zipmap = (function zipmap(keys,vals){
-var map__4117 = cljs.core.ObjMap.fromObject([],{});
-var ks__4118 = cljs.core.seq.call(null,keys);
-var vs__4119 = cljs.core.seq.call(null,vals);
-
-while(true){
-if(cljs.core.truth_((function (){var and__3546__auto____4120 = ks__4118;
-
-if(cljs.core.truth_(and__3546__auto____4120))
-{return vs__4119;
-} else
-{return and__3546__auto____4120;
-}
-})()))
-{{
-var G__4121 = cljs.core.assoc.call(null,map__4117,cljs.core.first.call(null,ks__4118),cljs.core.first.call(null,vs__4119));
-var G__4122 = cljs.core.next.call(null,ks__4118);
-var G__4123 = cljs.core.next.call(null,vs__4119);
-map__4117 = G__4121;
-ks__4118 = G__4122;
-vs__4119 = G__4123;
-continue;
-}
-} else
-{return map__4117;
-}
-break;
-}
-});
-/**
-* Returns the x for which (k x), a number, is greatest.
-* @param {...*} var_args
-*/
-cljs.core.max_key = (function() {
-var max_key = null;
-var max_key__4126 = (function (k,x){
-return x;
-});
-var max_key__4127 = (function (k,x,y){
-if(cljs.core.truth_((k.call(null,x) > k.call(null,y))))
-{return x;
-} else
-{return y;
-}
-});
-var max_key__4128 = (function() { 
-var G__4130__delegate = function (k,x,y,more){
-return cljs.core.reduce.call(null,(function (p1__4115_SHARP_,p2__4116_SHARP_){
-return max_key.call(null,k,p1__4115_SHARP_,p2__4116_SHARP_);
-}),max_key.call(null,k,x,y),more);
-};
-var G__4130 = function (k,x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4130__delegate.call(this, k, x, y, more);
-};
-G__4130.cljs$lang$maxFixedArity = 3;
-G__4130.cljs$lang$applyTo = (function (arglist__4131){
-var k = cljs.core.first(arglist__4131);
-var x = cljs.core.first(cljs.core.next(arglist__4131));
-var y = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4131)));
-var more = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4131)));
-return G__4130__delegate.call(this, k, x, y, more);
-});
-return G__4130;
-})()
-;
-max_key = function(k,x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  2 :
-return max_key__4126.call(this,k,x);
-case  3 :
-return max_key__4127.call(this,k,x,y);
-default:
-return max_key__4128.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-max_key.cljs$lang$maxFixedArity = 3;
-max_key.cljs$lang$applyTo = max_key__4128.cljs$lang$applyTo;
-return max_key;
-})()
-;
-/**
-* Returns the x for which (k x), a number, is least.
-* @param {...*} var_args
-*/
-cljs.core.min_key = (function() {
-var min_key = null;
-var min_key__4132 = (function (k,x){
-return x;
-});
-var min_key__4133 = (function (k,x,y){
-if(cljs.core.truth_((k.call(null,x) < k.call(null,y))))
-{return x;
-} else
-{return y;
-}
-});
-var min_key__4134 = (function() { 
-var G__4136__delegate = function (k,x,y,more){
-return cljs.core.reduce.call(null,(function (p1__4124_SHARP_,p2__4125_SHARP_){
-return min_key.call(null,k,p1__4124_SHARP_,p2__4125_SHARP_);
-}),min_key.call(null,k,x,y),more);
-};
-var G__4136 = function (k,x,y,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4136__delegate.call(this, k, x, y, more);
-};
-G__4136.cljs$lang$maxFixedArity = 3;
-G__4136.cljs$lang$applyTo = (function (arglist__4137){
-var k = cljs.core.first(arglist__4137);
-var x = cljs.core.first(cljs.core.next(arglist__4137));
-var y = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4137)));
-var more = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4137)));
-return G__4136__delegate.call(this, k, x, y, more);
-});
-return G__4136;
-})()
-;
-min_key = function(k,x,y,var_args){
-var more = var_args;
-switch(arguments.length){
-case  2 :
-return min_key__4132.call(this,k,x);
-case  3 :
-return min_key__4133.call(this,k,x,y);
-default:
-return min_key__4134.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-min_key.cljs$lang$maxFixedArity = 3;
-min_key.cljs$lang$applyTo = min_key__4134.cljs$lang$applyTo;
-return min_key;
-})()
-;
-/**
-* Returns a lazy sequence of lists like partition, but may include
-* partitions with fewer than n items at the end.
-*/
-cljs.core.partition_all = (function() {
-var partition_all = null;
-var partition_all__4140 = (function (n,coll){
-return partition_all.call(null,n,n,coll);
-});
-var partition_all__4141 = (function (n,step,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____4138 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____4138))
-{var s__4139 = temp__3698__auto____4138;
-
-return cljs.core.cons.call(null,cljs.core.take.call(null,n,s__4139),partition_all.call(null,n,step,cljs.core.drop.call(null,step,s__4139)));
-} else
-{return null;
-}
-})));
-});
-partition_all = function(n,step,coll){
-switch(arguments.length){
-case  2 :
-return partition_all__4140.call(this,n,step);
-case  3 :
-return partition_all__4141.call(this,n,step,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return partition_all;
-})()
-;
-/**
-* Returns a lazy sequence of successive items from coll while
-* (pred item) returns true. pred must be free of side-effects.
-*/
-cljs.core.take_while = (function take_while(pred,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____4143 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____4143))
-{var s__4144 = temp__3698__auto____4143;
-
-if(cljs.core.truth_(pred.call(null,cljs.core.first.call(null,s__4144))))
-{return cljs.core.cons.call(null,cljs.core.first.call(null,s__4144),take_while.call(null,pred,cljs.core.rest.call(null,s__4144)));
-} else
-{return null;
-}
-} else
-{return null;
-}
-})));
-});
-
-/**
-* @constructor
-*/
-cljs.core.Range = (function (meta,start,end,step){
-this.meta = meta;
-this.start = start;
-this.end = end;
-this.step = step;
-})
-cljs.core.Range.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Range");
-});
-cljs.core.Range.prototype.cljs$core$IHash$ = true;
-cljs.core.Range.prototype.cljs$core$IHash$_hash = (function (rng){
-var this__4145 = this;
-return cljs.core.hash_coll.call(null,rng);
-});
-cljs.core.Range.prototype.cljs$core$ISequential$ = true;
-cljs.core.Range.prototype.cljs$core$ICollection$ = true;
-cljs.core.Range.prototype.cljs$core$ICollection$_conj = (function (rng,o){
-var this__4146 = this;
-return cljs.core.cons.call(null,o,rng);
-});
-cljs.core.Range.prototype.cljs$core$IReduce$ = true;
-cljs.core.Range.prototype.cljs$core$IReduce$_reduce = (function() {
-var G__4162 = null;
-var G__4162__4163 = (function (rng,f){
-var this__4147 = this;
-return cljs.core.ci_reduce.call(null,rng,f);
-});
-var G__4162__4164 = (function (rng,f,s){
-var this__4148 = this;
-return cljs.core.ci_reduce.call(null,rng,f,s);
-});
-G__4162 = function(rng,f,s){
-switch(arguments.length){
-case  2 :
-return G__4162__4163.call(this,rng,f);
-case  3 :
-return G__4162__4164.call(this,rng,f,s);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__4162;
-})()
-;
-cljs.core.Range.prototype.cljs$core$ISeqable$ = true;
-cljs.core.Range.prototype.cljs$core$ISeqable$_seq = (function (rng){
-var this__4149 = this;
-var comp__4150 = (cljs.core.truth_((this__4149.step > 0))?cljs.core._LT_:cljs.core._GT_);
-
-if(cljs.core.truth_(comp__4150.call(null,this__4149.start,this__4149.end)))
-{return rng;
-} else
-{return null;
-}
-});
-cljs.core.Range.prototype.cljs$core$ICounted$ = true;
-cljs.core.Range.prototype.cljs$core$ICounted$_count = (function (rng){
-var this__4151 = this;
-if(cljs.core.truth_(cljs.core.not.call(null,cljs.core._seq.call(null,rng))))
-{return 0;
-} else
-{return Math['ceil'].call(null,((this__4151.end - this__4151.start) / this__4151.step));
-}
-});
-cljs.core.Range.prototype.cljs$core$ISeq$ = true;
-cljs.core.Range.prototype.cljs$core$ISeq$_first = (function (rng){
-var this__4152 = this;
-return this__4152.start;
-});
-cljs.core.Range.prototype.cljs$core$ISeq$_rest = (function (rng){
-var this__4153 = this;
-if(cljs.core.truth_(cljs.core._seq.call(null,rng)))
-{return (new cljs.core.Range(this__4153.meta,(this__4153.start + this__4153.step),this__4153.end,this__4153.step));
-} else
-{return cljs.core.list.call(null);
-}
-});
-cljs.core.Range.prototype.cljs$core$IEquiv$ = true;
-cljs.core.Range.prototype.cljs$core$IEquiv$_equiv = (function (rng,other){
-var this__4154 = this;
-return cljs.core.equiv_sequential.call(null,rng,other);
-});
-cljs.core.Range.prototype.cljs$core$IWithMeta$ = true;
-cljs.core.Range.prototype.cljs$core$IWithMeta$_with_meta = (function (rng,meta){
-var this__4155 = this;
-return (new cljs.core.Range(meta,this__4155.start,this__4155.end,this__4155.step));
-});
-cljs.core.Range.prototype.cljs$core$IMeta$ = true;
-cljs.core.Range.prototype.cljs$core$IMeta$_meta = (function (rng){
-var this__4156 = this;
-return this__4156.meta;
-});
-cljs.core.Range.prototype.cljs$core$IIndexed$ = true;
-cljs.core.Range.prototype.cljs$core$IIndexed$_nth = (function() {
-var G__4166 = null;
-var G__4166__4167 = (function (rng,n){
-var this__4157 = this;
-if(cljs.core.truth_((n < cljs.core._count.call(null,rng))))
-{return (this__4157.start + (n * this__4157.step));
-} else
-{if(cljs.core.truth_((function (){var and__3546__auto____4158 = (this__4157.start > this__4157.end);
-
-if(cljs.core.truth_(and__3546__auto____4158))
-{return cljs.core._EQ_.call(null,this__4157.step,0);
-} else
-{return and__3546__auto____4158;
-}
-})()))
-{return this__4157.start;
-} else
-{throw (new Error("Index out of bounds"));
-}
-}
-});
-var G__4166__4168 = (function (rng,n,not_found){
-var this__4159 = this;
-if(cljs.core.truth_((n < cljs.core._count.call(null,rng))))
-{return (this__4159.start + (n * this__4159.step));
-} else
-{if(cljs.core.truth_((function (){var and__3546__auto____4160 = (this__4159.start > this__4159.end);
-
-if(cljs.core.truth_(and__3546__auto____4160))
-{return cljs.core._EQ_.call(null,this__4159.step,0);
-} else
-{return and__3546__auto____4160;
-}
-})()))
-{return this__4159.start;
-} else
-{return not_found;
-}
-}
-});
-G__4166 = function(rng,n,not_found){
-switch(arguments.length){
-case  2 :
-return G__4166__4167.call(this,rng,n);
-case  3 :
-return G__4166__4168.call(this,rng,n,not_found);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return G__4166;
-})()
-;
-cljs.core.Range.prototype.cljs$core$IEmptyableCollection$ = true;
-cljs.core.Range.prototype.cljs$core$IEmptyableCollection$_empty = (function (rng){
-var this__4161 = this;
-return cljs.core.with_meta.call(null,cljs.core.List.EMPTY,this__4161.meta);
-});
-cljs.core.Range;
-/**
-* Returns a lazy seq of nums from start (inclusive) to end
-* (exclusive), by step, where start defaults to 0, step to 1,
-* and end to infinity.
-*/
-cljs.core.range = (function() {
-var range = null;
-var range__4170 = (function (){
-return range.call(null,0,Number['MAX_VALUE'],1);
-});
-var range__4171 = (function (end){
-return range.call(null,0,end,1);
-});
-var range__4172 = (function (start,end){
-return range.call(null,start,end,1);
-});
-var range__4173 = (function (start,end,step){
-return (new cljs.core.Range(null,start,end,step));
-});
-range = function(start,end,step){
-switch(arguments.length){
-case  0 :
-return range__4170.call(this);
-case  1 :
-return range__4171.call(this,start);
-case  2 :
-return range__4172.call(this,start,end);
-case  3 :
-return range__4173.call(this,start,end,step);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return range;
-})()
-;
-/**
-* Returns a lazy seq of every nth item in coll.
-*/
-cljs.core.take_nth = (function take_nth(n,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____4175 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____4175))
-{var s__4176 = temp__3698__auto____4175;
-
-return cljs.core.cons.call(null,cljs.core.first.call(null,s__4176),take_nth.call(null,n,cljs.core.drop.call(null,n,s__4176)));
-} else
-{return null;
-}
-})));
-});
-/**
-* Returns a vector of [(take-while pred coll) (drop-while pred coll)]
-*/
-cljs.core.split_with = (function split_with(pred,coll){
-return cljs.core.Vector.fromArray([cljs.core.take_while.call(null,pred,coll),cljs.core.drop_while.call(null,pred,coll)]);
-});
-/**
-* Applies f to each value in coll, splitting it each time f returns
-* a new value.  Returns a lazy seq of partitions.
-*/
-cljs.core.partition_by = (function partition_by(f,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____4178 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____4178))
-{var s__4179 = temp__3698__auto____4178;
-
-var fst__4180 = cljs.core.first.call(null,s__4179);
-var fv__4181 = f.call(null,fst__4180);
-var run__4182 = cljs.core.cons.call(null,fst__4180,cljs.core.take_while.call(null,(function (p1__4177_SHARP_){
-return cljs.core._EQ_.call(null,fv__4181,f.call(null,p1__4177_SHARP_));
-}),cljs.core.next.call(null,s__4179)));
-
-return cljs.core.cons.call(null,run__4182,partition_by.call(null,f,cljs.core.seq.call(null,cljs.core.drop.call(null,cljs.core.count.call(null,run__4182),s__4179))));
-} else
-{return null;
-}
-})));
-});
-/**
-* Returns a map from distinct items in coll to the number of times
-* they appear.
-*/
-cljs.core.frequencies = (function frequencies(coll){
-return cljs.core.reduce.call(null,(function (counts,x){
-return cljs.core.assoc.call(null,counts,x,(cljs.core.get.call(null,counts,x,0) + 1));
-}),cljs.core.ObjMap.fromObject([],{}),coll);
-});
-/**
-* Returns a lazy seq of the intermediate values of the reduction (as
-* per reduce) of coll by f, starting with init.
-*/
-cljs.core.reductions = (function() {
-var reductions = null;
-var reductions__4197 = (function (f,coll){
-return (new cljs.core.LazySeq(null,false,(function (){
-var temp__3695__auto____4193 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3695__auto____4193))
-{var s__4194 = temp__3695__auto____4193;
-
-return reductions.call(null,f,cljs.core.first.call(null,s__4194),cljs.core.rest.call(null,s__4194));
-} else
-{return cljs.core.list.call(null,f.call(null));
-}
-})));
-});
-var reductions__4198 = (function (f,init,coll){
-return cljs.core.cons.call(null,init,(new cljs.core.LazySeq(null,false,(function (){
-var temp__3698__auto____4195 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(temp__3698__auto____4195))
-{var s__4196 = temp__3698__auto____4195;
-
-return reductions.call(null,f,f.call(null,init,cljs.core.first.call(null,s__4196)),cljs.core.rest.call(null,s__4196));
-} else
-{return null;
-}
-}))));
-});
-reductions = function(f,init,coll){
-switch(arguments.length){
-case  2 :
-return reductions__4197.call(this,f,init);
-case  3 :
-return reductions__4198.call(this,f,init,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return reductions;
-})()
-;
-/**
-* Takes a set of functions and returns a fn that is the juxtaposition
-* of those fns.  The returned fn takes a variable number of args, and
-* returns a vector containing the result of applying each fn to the
-* args (left-to-right).
-* ((juxt a b c) x) => [(a x) (b x) (c x)]
-* @param {...*} var_args
-*/
-cljs.core.juxt = (function() {
-var juxt = null;
-var juxt__4201 = (function (f){
-return (function() {
-var G__4206 = null;
-var G__4206__4207 = (function (){
-return cljs.core.vector.call(null,f.call(null));
-});
-var G__4206__4208 = (function (x){
-return cljs.core.vector.call(null,f.call(null,x));
-});
-var G__4206__4209 = (function (x,y){
-return cljs.core.vector.call(null,f.call(null,x,y));
-});
-var G__4206__4210 = (function (x,y,z){
-return cljs.core.vector.call(null,f.call(null,x,y,z));
-});
-var G__4206__4211 = (function() { 
-var G__4213__delegate = function (x,y,z,args){
-return cljs.core.vector.call(null,cljs.core.apply.call(null,f,x,y,z,args));
-};
-var G__4213 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4213__delegate.call(this, x, y, z, args);
-};
-G__4213.cljs$lang$maxFixedArity = 3;
-G__4213.cljs$lang$applyTo = (function (arglist__4214){
-var x = cljs.core.first(arglist__4214);
-var y = cljs.core.first(cljs.core.next(arglist__4214));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4214)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4214)));
-return G__4213__delegate.call(this, x, y, z, args);
-});
-return G__4213;
-})()
-;
-G__4206 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return G__4206__4207.call(this);
-case  1 :
-return G__4206__4208.call(this,x);
-case  2 :
-return G__4206__4209.call(this,x,y);
-case  3 :
-return G__4206__4210.call(this,x,y,z);
-default:
-return G__4206__4211.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__4206.cljs$lang$maxFixedArity = 3;
-G__4206.cljs$lang$applyTo = G__4206__4211.cljs$lang$applyTo;
-return G__4206;
-})()
-});
-var juxt__4202 = (function (f,g){
-return (function() {
-var G__4215 = null;
-var G__4215__4216 = (function (){
-return cljs.core.vector.call(null,f.call(null),g.call(null));
-});
-var G__4215__4217 = (function (x){
-return cljs.core.vector.call(null,f.call(null,x),g.call(null,x));
-});
-var G__4215__4218 = (function (x,y){
-return cljs.core.vector.call(null,f.call(null,x,y),g.call(null,x,y));
-});
-var G__4215__4219 = (function (x,y,z){
-return cljs.core.vector.call(null,f.call(null,x,y,z),g.call(null,x,y,z));
-});
-var G__4215__4220 = (function() { 
-var G__4222__delegate = function (x,y,z,args){
-return cljs.core.vector.call(null,cljs.core.apply.call(null,f,x,y,z,args),cljs.core.apply.call(null,g,x,y,z,args));
-};
-var G__4222 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4222__delegate.call(this, x, y, z, args);
-};
-G__4222.cljs$lang$maxFixedArity = 3;
-G__4222.cljs$lang$applyTo = (function (arglist__4223){
-var x = cljs.core.first(arglist__4223);
-var y = cljs.core.first(cljs.core.next(arglist__4223));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4223)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4223)));
-return G__4222__delegate.call(this, x, y, z, args);
-});
-return G__4222;
-})()
-;
-G__4215 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return G__4215__4216.call(this);
-case  1 :
-return G__4215__4217.call(this,x);
-case  2 :
-return G__4215__4218.call(this,x,y);
-case  3 :
-return G__4215__4219.call(this,x,y,z);
-default:
-return G__4215__4220.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__4215.cljs$lang$maxFixedArity = 3;
-G__4215.cljs$lang$applyTo = G__4215__4220.cljs$lang$applyTo;
-return G__4215;
-})()
-});
-var juxt__4203 = (function (f,g,h){
-return (function() {
-var G__4224 = null;
-var G__4224__4225 = (function (){
-return cljs.core.vector.call(null,f.call(null),g.call(null),h.call(null));
-});
-var G__4224__4226 = (function (x){
-return cljs.core.vector.call(null,f.call(null,x),g.call(null,x),h.call(null,x));
-});
-var G__4224__4227 = (function (x,y){
-return cljs.core.vector.call(null,f.call(null,x,y),g.call(null,x,y),h.call(null,x,y));
-});
-var G__4224__4228 = (function (x,y,z){
-return cljs.core.vector.call(null,f.call(null,x,y,z),g.call(null,x,y,z),h.call(null,x,y,z));
-});
-var G__4224__4229 = (function() { 
-var G__4231__delegate = function (x,y,z,args){
-return cljs.core.vector.call(null,cljs.core.apply.call(null,f,x,y,z,args),cljs.core.apply.call(null,g,x,y,z,args),cljs.core.apply.call(null,h,x,y,z,args));
-};
-var G__4231 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4231__delegate.call(this, x, y, z, args);
-};
-G__4231.cljs$lang$maxFixedArity = 3;
-G__4231.cljs$lang$applyTo = (function (arglist__4232){
-var x = cljs.core.first(arglist__4232);
-var y = cljs.core.first(cljs.core.next(arglist__4232));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4232)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4232)));
-return G__4231__delegate.call(this, x, y, z, args);
-});
-return G__4231;
-})()
-;
-G__4224 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return G__4224__4225.call(this);
-case  1 :
-return G__4224__4226.call(this,x);
-case  2 :
-return G__4224__4227.call(this,x,y);
-case  3 :
-return G__4224__4228.call(this,x,y,z);
-default:
-return G__4224__4229.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__4224.cljs$lang$maxFixedArity = 3;
-G__4224.cljs$lang$applyTo = G__4224__4229.cljs$lang$applyTo;
-return G__4224;
-})()
-});
-var juxt__4204 = (function() { 
-var G__4233__delegate = function (f,g,h,fs){
-var fs__4200 = cljs.core.list_STAR_.call(null,f,g,h,fs);
-
-return (function() {
-var G__4234 = null;
-var G__4234__4235 = (function (){
-return cljs.core.reduce.call(null,(function (p1__4183_SHARP_,p2__4184_SHARP_){
-return cljs.core.conj.call(null,p1__4183_SHARP_,p2__4184_SHARP_.call(null));
-}),cljs.core.Vector.fromArray([]),fs__4200);
-});
-var G__4234__4236 = (function (x){
-return cljs.core.reduce.call(null,(function (p1__4185_SHARP_,p2__4186_SHARP_){
-return cljs.core.conj.call(null,p1__4185_SHARP_,p2__4186_SHARP_.call(null,x));
-}),cljs.core.Vector.fromArray([]),fs__4200);
-});
-var G__4234__4237 = (function (x,y){
-return cljs.core.reduce.call(null,(function (p1__4187_SHARP_,p2__4188_SHARP_){
-return cljs.core.conj.call(null,p1__4187_SHARP_,p2__4188_SHARP_.call(null,x,y));
-}),cljs.core.Vector.fromArray([]),fs__4200);
-});
-var G__4234__4238 = (function (x,y,z){
-return cljs.core.reduce.call(null,(function (p1__4189_SHARP_,p2__4190_SHARP_){
-return cljs.core.conj.call(null,p1__4189_SHARP_,p2__4190_SHARP_.call(null,x,y,z));
-}),cljs.core.Vector.fromArray([]),fs__4200);
-});
-var G__4234__4239 = (function() { 
-var G__4241__delegate = function (x,y,z,args){
-return cljs.core.reduce.call(null,(function (p1__4191_SHARP_,p2__4192_SHARP_){
-return cljs.core.conj.call(null,p1__4191_SHARP_,cljs.core.apply.call(null,p2__4192_SHARP_,x,y,z,args));
-}),cljs.core.Vector.fromArray([]),fs__4200);
-};
-var G__4241 = function (x,y,z,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4241__delegate.call(this, x, y, z, args);
-};
-G__4241.cljs$lang$maxFixedArity = 3;
-G__4241.cljs$lang$applyTo = (function (arglist__4242){
-var x = cljs.core.first(arglist__4242);
-var y = cljs.core.first(cljs.core.next(arglist__4242));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4242)));
-var args = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4242)));
-return G__4241__delegate.call(this, x, y, z, args);
-});
-return G__4241;
-})()
-;
-G__4234 = function(x,y,z,var_args){
-var args = var_args;
-switch(arguments.length){
-case  0 :
-return G__4234__4235.call(this);
-case  1 :
-return G__4234__4236.call(this,x);
-case  2 :
-return G__4234__4237.call(this,x,y);
-case  3 :
-return G__4234__4238.call(this,x,y,z);
-default:
-return G__4234__4239.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-G__4234.cljs$lang$maxFixedArity = 3;
-G__4234.cljs$lang$applyTo = G__4234__4239.cljs$lang$applyTo;
-return G__4234;
-})()
-};
-var G__4233 = function (f,g,h,var_args){
-var fs = null;
-if (goog.isDef(var_args)) {
-  fs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 3),0);
-} 
-return G__4233__delegate.call(this, f, g, h, fs);
-};
-G__4233.cljs$lang$maxFixedArity = 3;
-G__4233.cljs$lang$applyTo = (function (arglist__4243){
-var f = cljs.core.first(arglist__4243);
-var g = cljs.core.first(cljs.core.next(arglist__4243));
-var h = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4243)));
-var fs = cljs.core.rest(cljs.core.next(cljs.core.next(arglist__4243)));
-return G__4233__delegate.call(this, f, g, h, fs);
-});
-return G__4233;
-})()
-;
-juxt = function(f,g,h,var_args){
-var fs = var_args;
-switch(arguments.length){
-case  1 :
-return juxt__4201.call(this,f);
-case  2 :
-return juxt__4202.call(this,f,g);
-case  3 :
-return juxt__4203.call(this,f,g,h);
-default:
-return juxt__4204.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-juxt.cljs$lang$maxFixedArity = 3;
-juxt.cljs$lang$applyTo = juxt__4204.cljs$lang$applyTo;
-return juxt;
-})()
-;
-/**
-* When lazy sequences are produced via functions that have side
-* effects, any effects other than those needed to produce the first
-* element in the seq do not occur until the seq is consumed. dorun can
-* be used to force any effects. Walks through the successive nexts of
-* the seq, does not retain the head and returns nil.
-*/
-cljs.core.dorun = (function() {
-var dorun = null;
-var dorun__4245 = (function (coll){
-while(true){
-if(cljs.core.truth_(cljs.core.seq.call(null,coll)))
-{{
-var G__4248 = cljs.core.next.call(null,coll);
-coll = G__4248;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-});
-var dorun__4246 = (function (n,coll){
-while(true){
-if(cljs.core.truth_((function (){var and__3546__auto____4244 = cljs.core.seq.call(null,coll);
-
-if(cljs.core.truth_(and__3546__auto____4244))
-{return (n > 0);
-} else
-{return and__3546__auto____4244;
-}
-})()))
-{{
-var G__4249 = (n - 1);
-var G__4250 = cljs.core.next.call(null,coll);
-n = G__4249;
-coll = G__4250;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-});
-dorun = function(n,coll){
-switch(arguments.length){
-case  1 :
-return dorun__4245.call(this,n);
-case  2 :
-return dorun__4246.call(this,n,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return dorun;
-})()
-;
-/**
-* When lazy sequences are produced via functions that have side
-* effects, any effects other than those needed to produce the first
-* element in the seq do not occur until the seq is consumed. doall can
-* be used to force any effects. Walks through the successive nexts of
-* the seq, retains the head and returns it, thus causing the entire
-* seq to reside in memory at one time.
-*/
-cljs.core.doall = (function() {
-var doall = null;
-var doall__4251 = (function (coll){
-cljs.core.dorun.call(null,coll);
-return coll;
-});
-var doall__4252 = (function (n,coll){
-cljs.core.dorun.call(null,n,coll);
-return coll;
-});
-doall = function(n,coll){
-switch(arguments.length){
-case  1 :
-return doall__4251.call(this,n);
-case  2 :
-return doall__4252.call(this,n,coll);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return doall;
-})()
-;
-/**
-* Returns the result of (re-find re s) if re fully matches s.
-*/
-cljs.core.re_matches = (function re_matches(re,s){
-var matches__4254 = re.exec(s);
-
-if(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.first.call(null,matches__4254),s)))
-{if(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.count.call(null,matches__4254),1)))
-{return cljs.core.first.call(null,matches__4254);
-} else
-{return cljs.core.vec.call(null,matches__4254);
-}
-} else
-{return null;
-}
-});
-/**
-* Returns the first regex match, if any, of s to re, using
-* re.exec(s). Returns a vector, containing first the matching
-* substring, then any capturing groups if the regular expression contains
-* capturing groups.
-*/
-cljs.core.re_find = (function re_find(re,s){
-var matches__4255 = re.exec(s);
-
-if(cljs.core.truth_((matches__4255 === null)))
-{return null;
-} else
-{if(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.count.call(null,matches__4255),1)))
-{return cljs.core.first.call(null,matches__4255);
-} else
-{return cljs.core.vec.call(null,matches__4255);
-}
-}
-});
-/**
-* Returns a lazy sequence of successive matches of re in s.
-*/
-cljs.core.re_seq = (function re_seq(re,s){
-var match_data__4256 = cljs.core.re_find.call(null,re,s);
-var match_idx__4257 = s.search(re);
-var match_str__4258 = (cljs.core.truth_(cljs.core.coll_QMARK_.call(null,match_data__4256))?cljs.core.first.call(null,match_data__4256):match_data__4256);
-var post_match__4259 = cljs.core.subs.call(null,s,(match_idx__4257 + cljs.core.count.call(null,match_str__4258)));
-
-if(cljs.core.truth_(match_data__4256))
-{return (new cljs.core.LazySeq(null,false,(function (){
-return cljs.core.cons.call(null,match_data__4256,re_seq.call(null,re,post_match__4259));
-})));
-} else
-{return null;
-}
-});
-/**
-* Returns an instance of RegExp which has compiled the provided string.
-*/
-cljs.core.re_pattern = (function re_pattern(s){
-var vec__4261__4262 = cljs.core.re_find.call(null,/^(?:\(\?([idmsux]*)\))?(.*)/,s);
-var ___4263 = cljs.core.nth.call(null,vec__4261__4262,0,null);
-var flags__4264 = cljs.core.nth.call(null,vec__4261__4262,1,null);
-var pattern__4265 = cljs.core.nth.call(null,vec__4261__4262,2,null);
-
-return (new RegExp(pattern__4265,flags__4264));
-});
-cljs.core.pr_sequential = (function pr_sequential(print_one,begin,sep,end,opts,coll){
-return cljs.core.concat.call(null,cljs.core.Vector.fromArray([begin]),cljs.core.flatten1.call(null,cljs.core.interpose.call(null,cljs.core.Vector.fromArray([sep]),cljs.core.map.call(null,(function (p1__4260_SHARP_){
-return print_one.call(null,p1__4260_SHARP_,opts);
-}),coll))),cljs.core.Vector.fromArray([end]));
-});
-cljs.core.string_print = (function string_print(x){
-cljs.core._STAR_print_fn_STAR_.call(null,x);
-return null;
-});
-cljs.core.flush = (function flush(){
-return null;
-});
-cljs.core.pr_seq = (function pr_seq(obj,opts){
-if(cljs.core.truth_((obj === null)))
-{return cljs.core.list.call(null,"nil");
-} else
-{if(cljs.core.truth_((void 0 === obj)))
-{return cljs.core.list.call(null,"#<undefined>");
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return cljs.core.concat.call(null,(cljs.core.truth_((function (){var and__3546__auto____4266 = cljs.core.get.call(null,opts,"\uFDD0'meta");
-
-if(cljs.core.truth_(and__3546__auto____4266))
-{var and__3546__auto____4270 = (function (){var x__352__auto____4267 = obj;
-
-if(cljs.core.truth_((function (){var and__3546__auto____4268 = x__352__auto____4267;
-
-if(cljs.core.truth_(and__3546__auto____4268))
-{var and__3546__auto____4269 = x__352__auto____4267.cljs$core$IMeta$;
-
-if(cljs.core.truth_(and__3546__auto____4269))
-{return cljs.core.not.call(null,x__352__auto____4267.hasOwnProperty("cljs$core$IMeta$"));
-} else
-{return and__3546__auto____4269;
-}
-} else
-{return and__3546__auto____4268;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.IMeta,x__352__auto____4267);
-}
-})();
-
-if(cljs.core.truth_(and__3546__auto____4270))
-{return cljs.core.meta.call(null,obj);
-} else
-{return and__3546__auto____4270;
-}
-} else
-{return and__3546__auto____4266;
-}
-})())?cljs.core.concat.call(null,cljs.core.Vector.fromArray(["^"]),pr_seq.call(null,cljs.core.meta.call(null,obj),opts),cljs.core.Vector.fromArray([" "])):null),(cljs.core.truth_((function (){var x__352__auto____4271 = obj;
-
-if(cljs.core.truth_((function (){var and__3546__auto____4272 = x__352__auto____4271;
-
-if(cljs.core.truth_(and__3546__auto____4272))
-{var and__3546__auto____4273 = x__352__auto____4271.cljs$core$IPrintable$;
-
-if(cljs.core.truth_(and__3546__auto____4273))
-{return cljs.core.not.call(null,x__352__auto____4271.hasOwnProperty("cljs$core$IPrintable$"));
-} else
-{return and__3546__auto____4273;
-}
-} else
-{return and__3546__auto____4272;
-}
-})()))
-{return true;
-} else
-{return cljs.core.type_satisfies_.call(null,cljs.core.IPrintable,x__352__auto____4271);
-}
-})())?cljs.core._pr_seq.call(null,obj,opts):cljs.core.list.call(null,"#<",cljs.core.str.call(null,obj),">")));
-} else
-{return null;
-}
-}
-}
-});
-/**
-* Prints a sequence of objects to a string, observing all the
-* options given in opts
-*/
-cljs.core.pr_str_with_opts = (function pr_str_with_opts(objs,opts){
-var first_obj__4274 = cljs.core.first.call(null,objs);
-var sb__4275 = (new goog.string.StringBuffer());
-
-var G__4276__4277 = cljs.core.seq.call(null,objs);
-
-if(cljs.core.truth_(G__4276__4277))
-{var obj__4278 = cljs.core.first.call(null,G__4276__4277);
-var G__4276__4279 = G__4276__4277;
-
-while(true){
-if(cljs.core.truth_((obj__4278 === first_obj__4274)))
-{} else
-{sb__4275.append(" ");
-}
-var G__4280__4281 = cljs.core.seq.call(null,cljs.core.pr_seq.call(null,obj__4278,opts));
-
-if(cljs.core.truth_(G__4280__4281))
-{var string__4282 = cljs.core.first.call(null,G__4280__4281);
-var G__4280__4283 = G__4280__4281;
-
-while(true){
-sb__4275.append(string__4282);
-var temp__3698__auto____4284 = cljs.core.next.call(null,G__4280__4283);
-
-if(cljs.core.truth_(temp__3698__auto____4284))
-{var G__4280__4285 = temp__3698__auto____4284;
-
-{
-var G__4288 = cljs.core.first.call(null,G__4280__4285);
-var G__4289 = G__4280__4285;
-string__4282 = G__4288;
-G__4280__4283 = G__4289;
-continue;
-}
-} else
-{}
-break;
-}
-} else
-{}
-var temp__3698__auto____4286 = cljs.core.next.call(null,G__4276__4279);
-
-if(cljs.core.truth_(temp__3698__auto____4286))
-{var G__4276__4287 = temp__3698__auto____4286;
-
-{
-var G__4290 = cljs.core.first.call(null,G__4276__4287);
-var G__4291 = G__4276__4287;
-obj__4278 = G__4290;
-G__4276__4279 = G__4291;
-continue;
-}
-} else
-{}
-break;
-}
-} else
-{}
-return cljs.core.str.call(null,sb__4275);
-});
-/**
-* Prints a sequence of objects using string-print, observing all
-* the options given in opts
-*/
-cljs.core.pr_with_opts = (function pr_with_opts(objs,opts){
-var first_obj__4292 = cljs.core.first.call(null,objs);
-
-var G__4293__4294 = cljs.core.seq.call(null,objs);
-
-if(cljs.core.truth_(G__4293__4294))
-{var obj__4295 = cljs.core.first.call(null,G__4293__4294);
-var G__4293__4296 = G__4293__4294;
-
-while(true){
-if(cljs.core.truth_((obj__4295 === first_obj__4292)))
-{} else
-{cljs.core.string_print.call(null," ");
-}
-var G__4297__4298 = cljs.core.seq.call(null,cljs.core.pr_seq.call(null,obj__4295,opts));
-
-if(cljs.core.truth_(G__4297__4298))
-{var string__4299 = cljs.core.first.call(null,G__4297__4298);
-var G__4297__4300 = G__4297__4298;
-
-while(true){
-cljs.core.string_print.call(null,string__4299);
-var temp__3698__auto____4301 = cljs.core.next.call(null,G__4297__4300);
-
-if(cljs.core.truth_(temp__3698__auto____4301))
-{var G__4297__4302 = temp__3698__auto____4301;
-
-{
-var G__4305 = cljs.core.first.call(null,G__4297__4302);
-var G__4306 = G__4297__4302;
-string__4299 = G__4305;
-G__4297__4300 = G__4306;
-continue;
-}
-} else
-{}
-break;
-}
-} else
-{}
-var temp__3698__auto____4303 = cljs.core.next.call(null,G__4293__4296);
-
-if(cljs.core.truth_(temp__3698__auto____4303))
-{var G__4293__4304 = temp__3698__auto____4303;
-
-{
-var G__4307 = cljs.core.first.call(null,G__4293__4304);
-var G__4308 = G__4293__4304;
-obj__4295 = G__4307;
-G__4293__4296 = G__4308;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-} else
-{return null;
-}
-});
-cljs.core.newline = (function newline(opts){
-cljs.core.string_print.call(null,"\n");
-if(cljs.core.truth_(cljs.core.get.call(null,opts,"\uFDD0'flush-on-newline")))
-{return cljs.core.flush.call(null);
-} else
-{return null;
-}
-});
-cljs.core._STAR_flush_on_newline_STAR_ = true;
-cljs.core._STAR_print_readably_STAR_ = true;
-cljs.core._STAR_print_meta_STAR_ = false;
-cljs.core._STAR_print_dup_STAR_ = false;
-cljs.core.pr_opts = (function pr_opts(){
-return cljs.core.ObjMap.fromObject(["\uFDD0'flush-on-newline","\uFDD0'readably","\uFDD0'meta","\uFDD0'dup"],{"\uFDD0'flush-on-newline":cljs.core._STAR_flush_on_newline_STAR_,"\uFDD0'readably":cljs.core._STAR_print_readably_STAR_,"\uFDD0'meta":cljs.core._STAR_print_meta_STAR_,"\uFDD0'dup":cljs.core._STAR_print_dup_STAR_});
-});
-/**
-* pr to a string, returning it. Fundamental entrypoint to IPrintable.
-* @param {...*} var_args
-*/
-cljs.core.pr_str = (function() { 
-var pr_str__delegate = function (objs){
-return cljs.core.pr_str_with_opts.call(null,objs,cljs.core.pr_opts.call(null));
-};
-var pr_str = function (var_args){
-var objs = null;
-if (goog.isDef(var_args)) {
-  objs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return pr_str__delegate.call(this, objs);
-};
-pr_str.cljs$lang$maxFixedArity = 0;
-pr_str.cljs$lang$applyTo = (function (arglist__4309){
-var objs = cljs.core.seq( arglist__4309 );;
-return pr_str__delegate.call(this, objs);
-});
-return pr_str;
-})()
-;
-/**
-* Prints the object(s) using string-print.  Prints the
-* object(s), separated by spaces if there is more than one.
-* By default, pr and prn print in a way that objects can be
-* read by the reader
-* @param {...*} var_args
-*/
-cljs.core.pr = (function() { 
-var pr__delegate = function (objs){
-return cljs.core.pr_with_opts.call(null,objs,cljs.core.pr_opts.call(null));
-};
-var pr = function (var_args){
-var objs = null;
-if (goog.isDef(var_args)) {
-  objs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return pr__delegate.call(this, objs);
-};
-pr.cljs$lang$maxFixedArity = 0;
-pr.cljs$lang$applyTo = (function (arglist__4310){
-var objs = cljs.core.seq( arglist__4310 );;
-return pr__delegate.call(this, objs);
-});
-return pr;
-})()
-;
-/**
-* Prints the object(s) using string-print.
-* print and println produce output for human consumption.
-* @param {...*} var_args
-*/
-cljs.core.print = (function() { 
-var cljs_core_print__delegate = function (objs){
-return cljs.core.pr_with_opts.call(null,objs,cljs.core.assoc.call(null,cljs.core.pr_opts.call(null),"\uFDD0'readably",false));
-};
-var cljs_core_print = function (var_args){
-var objs = null;
-if (goog.isDef(var_args)) {
-  objs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return cljs_core_print__delegate.call(this, objs);
-};
-cljs_core_print.cljs$lang$maxFixedArity = 0;
-cljs_core_print.cljs$lang$applyTo = (function (arglist__4311){
-var objs = cljs.core.seq( arglist__4311 );;
-return cljs_core_print__delegate.call(this, objs);
-});
-return cljs_core_print;
-})()
-;
-/**
-* Same as print followed by (newline)
-* @param {...*} var_args
-*/
-cljs.core.println = (function() { 
-var println__delegate = function (objs){
-cljs.core.pr_with_opts.call(null,objs,cljs.core.assoc.call(null,cljs.core.pr_opts.call(null),"\uFDD0'readably",false));
-return cljs.core.newline.call(null,cljs.core.pr_opts.call(null));
-};
-var println = function (var_args){
-var objs = null;
-if (goog.isDef(var_args)) {
-  objs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return println__delegate.call(this, objs);
-};
-println.cljs$lang$maxFixedArity = 0;
-println.cljs$lang$applyTo = (function (arglist__4312){
-var objs = cljs.core.seq( arglist__4312 );;
-return println__delegate.call(this, objs);
-});
-return println;
-})()
-;
-/**
-* Same as pr followed by (newline).
-* @param {...*} var_args
-*/
-cljs.core.prn = (function() { 
-var prn__delegate = function (objs){
-cljs.core.pr_with_opts.call(null,objs,cljs.core.pr_opts.call(null));
-return cljs.core.newline.call(null,cljs.core.pr_opts.call(null));
-};
-var prn = function (var_args){
-var objs = null;
-if (goog.isDef(var_args)) {
-  objs = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return prn__delegate.call(this, objs);
-};
-prn.cljs$lang$maxFixedArity = 0;
-prn.cljs$lang$applyTo = (function (arglist__4313){
-var objs = cljs.core.seq( arglist__4313 );;
-return prn__delegate.call(this, objs);
-});
-return prn;
-})()
-;
-cljs.core.HashMap.prototype.cljs$core$IPrintable$ = true;
-cljs.core.HashMap.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-var pr_pair__4314 = (function (keyval){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,""," ","",opts,keyval);
-});
-
-return cljs.core.pr_sequential.call(null,pr_pair__4314,"{",", ","}",opts,coll);
-});
-(cljs.core.IPrintable["number"] = true);
-(cljs.core._pr_seq["number"] = (function (n,opts){
-return cljs.core.list.call(null,cljs.core.str.call(null,n));
-}));
-cljs.core.IndexedSeq.prototype.cljs$core$IPrintable$ = true;
-cljs.core.IndexedSeq.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"("," ",")",opts,coll);
-});
-cljs.core.Subvec.prototype.cljs$core$IPrintable$ = true;
-cljs.core.Subvec.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"["," ","]",opts,coll);
-});
-cljs.core.LazySeq.prototype.cljs$core$IPrintable$ = true;
-cljs.core.LazySeq.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"("," ",")",opts,coll);
-});
-(cljs.core.IPrintable["boolean"] = true);
-(cljs.core._pr_seq["boolean"] = (function (bool,opts){
-return cljs.core.list.call(null,cljs.core.str.call(null,bool));
-}));
-cljs.core.Set.prototype.cljs$core$IPrintable$ = true;
-cljs.core.Set.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"#{"," ","}",opts,coll);
-});
-(cljs.core.IPrintable["string"] = true);
-(cljs.core._pr_seq["string"] = (function (obj,opts){
-if(cljs.core.truth_(cljs.core.keyword_QMARK_.call(null,obj)))
-{return cljs.core.list.call(null,cljs.core.str.call(null,":",(function (){var temp__3698__auto____4315 = cljs.core.namespace.call(null,obj);
-
-if(cljs.core.truth_(temp__3698__auto____4315))
-{var nspc__4316 = temp__3698__auto____4315;
-
-return cljs.core.str.call(null,nspc__4316,"\/");
-} else
-{return null;
-}
-})(),cljs.core.name.call(null,obj)));
-} else
-{if(cljs.core.truth_(cljs.core.symbol_QMARK_.call(null,obj)))
-{return cljs.core.list.call(null,cljs.core.str.call(null,(function (){var temp__3698__auto____4317 = cljs.core.namespace.call(null,obj);
-
-if(cljs.core.truth_(temp__3698__auto____4317))
-{var nspc__4318 = temp__3698__auto____4317;
-
-return cljs.core.str.call(null,nspc__4318,"\/");
-} else
-{return null;
-}
-})(),cljs.core.name.call(null,obj)));
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return cljs.core.list.call(null,(cljs.core.truth_("\uFDD0'readably".call(null,opts))?goog.string.quote.call(null,obj):obj));
-} else
-{return null;
-}
-}
-}
-}));
-cljs.core.Vector.prototype.cljs$core$IPrintable$ = true;
-cljs.core.Vector.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"["," ","]",opts,coll);
-});
-cljs.core.List.prototype.cljs$core$IPrintable$ = true;
-cljs.core.List.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"("," ",")",opts,coll);
-});
-(cljs.core.IPrintable["array"] = true);
-(cljs.core._pr_seq["array"] = (function (a,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"#<Array [",", ","]>",opts,a);
-}));
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IPrintable$ = true;
-cljs.core.PersistentQueueSeq.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"("," ",")",opts,coll);
-});
-(cljs.core.IPrintable["function"] = true);
-(cljs.core._pr_seq["function"] = (function (this$){
-return cljs.core.list.call(null,"#<",cljs.core.str.call(null,this$),">");
-}));
-cljs.core.EmptyList.prototype.cljs$core$IPrintable$ = true;
-cljs.core.EmptyList.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.list.call(null,"()");
-});
-cljs.core.Cons.prototype.cljs$core$IPrintable$ = true;
-cljs.core.Cons.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"("," ",")",opts,coll);
-});
-cljs.core.Range.prototype.cljs$core$IPrintable$ = true;
-cljs.core.Range.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,"("," ",")",opts,coll);
-});
-cljs.core.ObjMap.prototype.cljs$core$IPrintable$ = true;
-cljs.core.ObjMap.prototype.cljs$core$IPrintable$_pr_seq = (function (coll,opts){
-var pr_pair__4319 = (function (keyval){
-return cljs.core.pr_sequential.call(null,cljs.core.pr_seq,""," ","",opts,keyval);
-});
-
-return cljs.core.pr_sequential.call(null,pr_pair__4319,"{",", ","}",opts,coll);
-});
-
-/**
-* @constructor
-*/
-cljs.core.Atom = (function (state,meta,validator,watches){
-this.state = state;
-this.meta = meta;
-this.validator = validator;
-this.watches = watches;
-})
-cljs.core.Atom.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Atom");
-});
-cljs.core.Atom.prototype.cljs$core$IHash$ = true;
-cljs.core.Atom.prototype.cljs$core$IHash$_hash = (function (this$){
-var this__4320 = this;
-return goog.getUid.call(null,this$);
-});
-cljs.core.Atom.prototype.cljs$core$IWatchable$ = true;
-cljs.core.Atom.prototype.cljs$core$IWatchable$_notify_watches = (function (this$,oldval,newval){
-var this__4321 = this;
-var G__4322__4323 = cljs.core.seq.call(null,this__4321.watches);
-
-if(cljs.core.truth_(G__4322__4323))
-{var G__4325__4327 = cljs.core.first.call(null,G__4322__4323);
-var vec__4326__4328 = G__4325__4327;
-var key__4329 = cljs.core.nth.call(null,vec__4326__4328,0,null);
-var f__4330 = cljs.core.nth.call(null,vec__4326__4328,1,null);
-var G__4322__4331 = G__4322__4323;
-
-var G__4325__4332 = G__4325__4327;
-var G__4322__4333 = G__4322__4331;
-
-while(true){
-var vec__4334__4335 = G__4325__4332;
-var key__4336 = cljs.core.nth.call(null,vec__4334__4335,0,null);
-var f__4337 = cljs.core.nth.call(null,vec__4334__4335,1,null);
-var G__4322__4338 = G__4322__4333;
-
-f__4337.call(null,key__4336,this$,oldval,newval);
-var temp__3698__auto____4339 = cljs.core.next.call(null,G__4322__4338);
-
-if(cljs.core.truth_(temp__3698__auto____4339))
-{var G__4322__4340 = temp__3698__auto____4339;
-
-{
-var G__4347 = cljs.core.first.call(null,G__4322__4340);
-var G__4348 = G__4322__4340;
-G__4325__4332 = G__4347;
-G__4322__4333 = G__4348;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-} else
-{return null;
-}
-});
-cljs.core.Atom.prototype.cljs$core$IWatchable$_add_watch = (function (this$,key,f){
-var this__4341 = this;
-return this$.watches = cljs.core.assoc.call(null,this__4341.watches,key,f);
-});
-cljs.core.Atom.prototype.cljs$core$IWatchable$_remove_watch = (function (this$,key){
-var this__4342 = this;
-return this$.watches = cljs.core.dissoc.call(null,this__4342.watches,key);
-});
-cljs.core.Atom.prototype.cljs$core$IPrintable$ = true;
-cljs.core.Atom.prototype.cljs$core$IPrintable$_pr_seq = (function (a,opts){
-var this__4343 = this;
-return cljs.core.concat.call(null,cljs.core.Vector.fromArray(["#<Atom: "]),cljs.core._pr_seq.call(null,this__4343.state,opts),">");
-});
-cljs.core.Atom.prototype.cljs$core$IMeta$ = true;
-cljs.core.Atom.prototype.cljs$core$IMeta$_meta = (function (_){
-var this__4344 = this;
-return this__4344.meta;
-});
-cljs.core.Atom.prototype.cljs$core$IDeref$ = true;
-cljs.core.Atom.prototype.cljs$core$IDeref$_deref = (function (_){
-var this__4345 = this;
-return this__4345.state;
-});
-cljs.core.Atom.prototype.cljs$core$IEquiv$ = true;
-cljs.core.Atom.prototype.cljs$core$IEquiv$_equiv = (function (o,other){
-var this__4346 = this;
-return (o === other);
-});
-cljs.core.Atom;
-/**
-* Creates and returns an Atom with an initial value of x and zero or
-* more options (in any order):
-* 
-* :meta metadata-map
-* 
-* :validator validate-fn
-* 
-* If metadata-map is supplied, it will be come the metadata on the
-* atom. validate-fn must be nil or a side-effect-free fn of one
-* argument, which will be passed the intended new state on any state
-* change. If the new state is unacceptable, the validate-fn should
-* return false or throw an Error.  If either of these error conditions
-* occur, then the value of the atom will not change.
-* @param {...*} var_args
-*/
-cljs.core.atom = (function() {
-var atom = null;
-var atom__4355 = (function (x){
-return (new cljs.core.Atom(x,null,null,null));
-});
-var atom__4356 = (function() { 
-var G__4358__delegate = function (x,p__4349){
-var map__4350__4351 = p__4349;
-var map__4350__4352 = (cljs.core.truth_(cljs.core.seq_QMARK_.call(null,map__4350__4351))?cljs.core.apply.call(null,cljs.core.hash_map,map__4350__4351):map__4350__4351);
-var validator__4353 = cljs.core.get.call(null,map__4350__4352,"\uFDD0'validator");
-var meta__4354 = cljs.core.get.call(null,map__4350__4352,"\uFDD0'meta");
-
-return (new cljs.core.Atom(x,meta__4354,validator__4353,null));
-};
-var G__4358 = function (x,var_args){
-var p__4349 = null;
-if (goog.isDef(var_args)) {
-  p__4349 = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return G__4358__delegate.call(this, x, p__4349);
-};
-G__4358.cljs$lang$maxFixedArity = 1;
-G__4358.cljs$lang$applyTo = (function (arglist__4359){
-var x = cljs.core.first(arglist__4359);
-var p__4349 = cljs.core.rest(arglist__4359);
-return G__4358__delegate.call(this, x, p__4349);
-});
-return G__4358;
-})()
-;
-atom = function(x,var_args){
-var p__4349 = var_args;
-switch(arguments.length){
-case  1 :
-return atom__4355.call(this,x);
-default:
-return atom__4356.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-atom.cljs$lang$maxFixedArity = 1;
-atom.cljs$lang$applyTo = atom__4356.cljs$lang$applyTo;
-return atom;
-})()
-;
-/**
-* Sets the value of atom to newval without regard for the
-* current value. Returns newval.
-*/
-cljs.core.reset_BANG_ = (function reset_BANG_(a,new_value){
-var temp__3698__auto____4360 = a.validator;
-
-if(cljs.core.truth_(temp__3698__auto____4360))
-{var validate__4361 = temp__3698__auto____4360;
-
-if(cljs.core.truth_(validate__4361.call(null,new_value)))
-{} else
-{throw (new Error(cljs.core.str.call(null,"Assert failed: ","Validator rejected reference state","\n",cljs.core.pr_str.call(null,cljs.core.with_meta(cljs.core.list("\uFDD1'validate","\uFDD1'new-value"),cljs.core.hash_map("\uFDD0'line",3072))))));
-}
-} else
-{}
-var old_value__4362 = a.state;
-
-a.state = new_value;
-cljs.core._notify_watches.call(null,a,old_value__4362,new_value);
-return new_value;
-});
-/**
-* Atomically swaps the value of atom to be:
-* (apply f current-value-of-atom args). Note that f may be called
-* multiple times, and thus should be free of side effects.  Returns
-* the value that was swapped in.
-* @param {...*} var_args
-*/
-cljs.core.swap_BANG_ = (function() {
-var swap_BANG_ = null;
-var swap_BANG___4363 = (function (a,f){
-return cljs.core.reset_BANG_.call(null,a,f.call(null,a.state));
-});
-var swap_BANG___4364 = (function (a,f,x){
-return cljs.core.reset_BANG_.call(null,a,f.call(null,a.state,x));
-});
-var swap_BANG___4365 = (function (a,f,x,y){
-return cljs.core.reset_BANG_.call(null,a,f.call(null,a.state,x,y));
-});
-var swap_BANG___4366 = (function (a,f,x,y,z){
-return cljs.core.reset_BANG_.call(null,a,f.call(null,a.state,x,y,z));
-});
-var swap_BANG___4367 = (function() { 
-var G__4369__delegate = function (a,f,x,y,z,more){
-return cljs.core.reset_BANG_.call(null,a,cljs.core.apply.call(null,f,a.state,x,y,z,more));
-};
-var G__4369 = function (a,f,x,y,z,var_args){
-var more = null;
-if (goog.isDef(var_args)) {
-  more = cljs.core.array_seq(Array.prototype.slice.call(arguments, 5),0);
-} 
-return G__4369__delegate.call(this, a, f, x, y, z, more);
-};
-G__4369.cljs$lang$maxFixedArity = 5;
-G__4369.cljs$lang$applyTo = (function (arglist__4370){
-var a = cljs.core.first(arglist__4370);
-var f = cljs.core.first(cljs.core.next(arglist__4370));
-var x = cljs.core.first(cljs.core.next(cljs.core.next(arglist__4370)));
-var y = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(arglist__4370))));
-var z = cljs.core.first(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(arglist__4370)))));
-var more = cljs.core.rest(cljs.core.next(cljs.core.next(cljs.core.next(cljs.core.next(arglist__4370)))));
-return G__4369__delegate.call(this, a, f, x, y, z, more);
-});
-return G__4369;
-})()
-;
-swap_BANG_ = function(a,f,x,y,z,var_args){
-var more = var_args;
-switch(arguments.length){
-case  2 :
-return swap_BANG___4363.call(this,a,f);
-case  3 :
-return swap_BANG___4364.call(this,a,f,x);
-case  4 :
-return swap_BANG___4365.call(this,a,f,x,y);
-case  5 :
-return swap_BANG___4366.call(this,a,f,x,y,z);
-default:
-return swap_BANG___4367.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-swap_BANG_.cljs$lang$maxFixedArity = 5;
-swap_BANG_.cljs$lang$applyTo = swap_BANG___4367.cljs$lang$applyTo;
-return swap_BANG_;
-})()
-;
-/**
-* Atomically sets the value of atom to newval if and only if the
-* current value of the atom is identical to oldval. Returns true if
-* set happened, else false.
-*/
-cljs.core.compare_and_set_BANG_ = (function compare_and_set_BANG_(a,oldval,newval){
-if(cljs.core.truth_(cljs.core._EQ_.call(null,a.state,oldval)))
-{cljs.core.reset_BANG_.call(null,a,newval);
-return true;
-} else
-{return false;
-}
-});
-cljs.core.deref = (function deref(o){
-return cljs.core._deref.call(null,o);
-});
-/**
-* Sets the validator-fn for an atom. validator-fn must be nil or a
-* side-effect-free fn of one argument, which will be passed the intended
-* new state on any state change. If the new state is unacceptable, the
-* validator-fn should return false or throw an Error. If the current state
-* is not acceptable to the new validator, an Error will be thrown and the
-* validator will not be changed.
-*/
-cljs.core.set_validator_BANG_ = (function set_validator_BANG_(iref,val){
-return iref.validator = val;
-});
-/**
-* Gets the validator-fn for a var/ref/agent/atom.
-*/
-cljs.core.get_validator = (function get_validator(iref){
-return iref.validator;
-});
-/**
-* Atomically sets the metadata for a namespace/var/ref/agent/atom to be:
-* 
-* (apply f its-current-meta args)
-* 
-* f must be free of side-effects
-* @param {...*} var_args
-*/
-cljs.core.alter_meta_BANG_ = (function() { 
-var alter_meta_BANG___delegate = function (iref,f,args){
-return iref.meta = cljs.core.apply.call(null,f,iref.meta,args);
-};
-var alter_meta_BANG_ = function (iref,f,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 2),0);
-} 
-return alter_meta_BANG___delegate.call(this, iref, f, args);
-};
-alter_meta_BANG_.cljs$lang$maxFixedArity = 2;
-alter_meta_BANG_.cljs$lang$applyTo = (function (arglist__4371){
-var iref = cljs.core.first(arglist__4371);
-var f = cljs.core.first(cljs.core.next(arglist__4371));
-var args = cljs.core.rest(cljs.core.next(arglist__4371));
-return alter_meta_BANG___delegate.call(this, iref, f, args);
-});
-return alter_meta_BANG_;
-})()
-;
-/**
-* Atomically resets the metadata for an atom
-*/
-cljs.core.reset_meta_BANG_ = (function reset_meta_BANG_(iref,m){
-return iref.meta = m;
-});
-/**
-* Alpha - subject to change.
-* 
-* Adds a watch function to an atom reference. The watch fn must be a
-* fn of 4 args: a key, the reference, its old-state, its
-* new-state. Whenever the reference's state might have been changed,
-* any registered watches will have their functions called. The watch
-* fn will be called synchronously. Note that an atom's state
-* may have changed again prior to the fn call, so use old/new-state
-* rather than derefing the reference. Keys must be unique per
-* reference, and can be used to remove the watch with remove-watch,
-* but are otherwise considered opaque by the watch mechanism.  Bear in
-* mind that regardless of the result or action of the watch fns the
-* atom's value will change.  Example:
-* 
-* (def a (atom 0))
-* (add-watch a :inc (fn [k r o n] (assert (== 0 n))))
-* (swap! a inc)
-* ;; Assertion Error
-* (deref a)
-* ;=> 1
-*/
-cljs.core.add_watch = (function add_watch(iref,key,f){
-return cljs.core._add_watch.call(null,iref,key,f);
-});
-/**
-* Alpha - subject to change.
-* 
-* Removes a watch (set by add-watch) from a reference
-*/
-cljs.core.remove_watch = (function remove_watch(iref,key){
-return cljs.core._remove_watch.call(null,iref,key);
-});
-cljs.core.gensym_counter = null;
-/**
-* Returns a new symbol with a unique name. If a prefix string is
-* supplied, the name is prefix# where # is some unique number. If
-* prefix is not supplied, the prefix is 'G__'.
-*/
-cljs.core.gensym = (function() {
-var gensym = null;
-var gensym__4372 = (function (){
-return gensym.call(null,"G__");
-});
-var gensym__4373 = (function (prefix_string){
-if(cljs.core.truth_((cljs.core.gensym_counter === null)))
-{cljs.core.gensym_counter = cljs.core.atom.call(null,0);
-} else
-{}
-return cljs.core.symbol.call(null,cljs.core.str.call(null,prefix_string,cljs.core.swap_BANG_.call(null,cljs.core.gensym_counter,cljs.core.inc)));
-});
-gensym = function(prefix_string){
-switch(arguments.length){
-case  0 :
-return gensym__4372.call(this);
-case  1 :
-return gensym__4373.call(this,prefix_string);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return gensym;
-})()
-;
-cljs.core.fixture1 = 1;
-cljs.core.fixture2 = 2;
-
-/**
-* @constructor
-*/
-cljs.core.Delay = (function (f,state){
-this.f = f;
-this.state = state;
-})
-cljs.core.Delay.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.Delay");
-});
-cljs.core.Delay.prototype.cljs$core$IPending$ = true;
-cljs.core.Delay.prototype.cljs$core$IPending$_realized_QMARK_ = (function (d){
-var this__4375 = this;
-return cljs.core.not.call(null,(cljs.core.deref.call(null,this__4375.state) === null));
-});
-cljs.core.Delay.prototype.cljs$core$IDeref$ = true;
-cljs.core.Delay.prototype.cljs$core$IDeref$_deref = (function (_){
-var this__4376 = this;
-if(cljs.core.truth_(cljs.core.deref.call(null,this__4376.state)))
-{} else
-{cljs.core.swap_BANG_.call(null,this__4376.state,this__4376.f);
-}
-return cljs.core.deref.call(null,this__4376.state);
-});
-cljs.core.Delay;
-/**
-* Takes a body of expressions and yields a Delay object that will
-* invoke the body only the first time it is forced (with force or deref/@), and
-* will cache the result and return it on all subsequent force
-* calls.
-* @param {...*} var_args
-*/
-cljs.core.delay = (function() { 
-var delay__delegate = function (body){
-return (new cljs.core.Delay((function (){
-return cljs.core.apply.call(null,cljs.core.identity,body);
-}),cljs.core.atom.call(null,null)));
-};
-var delay = function (var_args){
-var body = null;
-if (goog.isDef(var_args)) {
-  body = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return delay__delegate.call(this, body);
-};
-delay.cljs$lang$maxFixedArity = 0;
-delay.cljs$lang$applyTo = (function (arglist__4377){
-var body = cljs.core.seq( arglist__4377 );;
-return delay__delegate.call(this, body);
-});
-return delay;
-})()
-;
-/**
-* returns true if x is a Delay created with delay
-*/
-cljs.core.delay_QMARK_ = (function delay_QMARK_(x){
-return cljs.core.instance_QMARK_.call(null,cljs.core.Delay,x);
-});
-/**
-* If x is a Delay, returns the (possibly cached) value of its expression, else returns x
-*/
-cljs.core.force = (function force(x){
-if(cljs.core.truth_(cljs.core.delay_QMARK_.call(null,x)))
-{return cljs.core.deref.call(null,x);
-} else
-{return x;
-}
-});
-/**
-* Returns true if a value has been produced for a promise, delay, future or lazy sequence.
-*/
-cljs.core.realized_QMARK_ = (function realized_QMARK_(d){
-return cljs.core._realized_QMARK_.call(null,d);
-});
-/**
-* Recursively transforms JavaScript arrays into ClojureScript
-* vectors, and JavaScript objects into ClojureScript maps.  With
-* option ':keywordize-keys true' will convert object fields from
-* strings to keywords.
-* @param {...*} var_args
-*/
-cljs.core.js__GT_clj = (function() { 
-var js__GT_clj__delegate = function (x,options){
-var map__4378__4379 = options;
-var map__4378__4380 = (cljs.core.truth_(cljs.core.seq_QMARK_.call(null,map__4378__4379))?cljs.core.apply.call(null,cljs.core.hash_map,map__4378__4379):map__4378__4379);
-var keywordize_keys__4381 = cljs.core.get.call(null,map__4378__4380,"\uFDD0'keywordize-keys");
-var keyfn__4382 = (cljs.core.truth_(keywordize_keys__4381)?cljs.core.keyword:cljs.core.str);
-var f__4388 = (function thisfn(x){
-if(cljs.core.truth_(cljs.core.seq_QMARK_.call(null,x)))
-{return cljs.core.doall.call(null,cljs.core.map.call(null,thisfn,x));
-} else
-{if(cljs.core.truth_(cljs.core.coll_QMARK_.call(null,x)))
-{return cljs.core.into.call(null,cljs.core.empty.call(null,x),cljs.core.map.call(null,thisfn,x));
-} else
-{if(cljs.core.truth_(goog.isArray.call(null,x)))
-{return cljs.core.vec.call(null,cljs.core.map.call(null,thisfn,x));
-} else
-{if(cljs.core.truth_(goog.isObject.call(null,x)))
-{return cljs.core.into.call(null,cljs.core.ObjMap.fromObject([],{}),(function (){var iter__416__auto____4387 = (function iter__4383(s__4384){
-return (new cljs.core.LazySeq(null,false,(function (){
-var s__4384__4385 = s__4384;
-
-while(true){
-if(cljs.core.truth_(cljs.core.seq.call(null,s__4384__4385)))
-{var k__4386 = cljs.core.first.call(null,s__4384__4385);
-
-return cljs.core.cons.call(null,cljs.core.Vector.fromArray([keyfn__4382.call(null,k__4386),thisfn.call(null,(x[k__4386]))]),iter__4383.call(null,cljs.core.rest.call(null,s__4384__4385)));
-} else
-{return null;
-}
-break;
-}
-})));
-});
-
-return iter__416__auto____4387.call(null,cljs.core.js_keys.call(null,x));
-})());
-} else
-{if(cljs.core.truth_("\uFDD0'else"))
-{return x;
-} else
-{return null;
-}
-}
-}
-}
-}
-});
-
-return f__4388.call(null,x);
-};
-var js__GT_clj = function (x,var_args){
-var options = null;
-if (goog.isDef(var_args)) {
-  options = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return js__GT_clj__delegate.call(this, x, options);
-};
-js__GT_clj.cljs$lang$maxFixedArity = 1;
-js__GT_clj.cljs$lang$applyTo = (function (arglist__4389){
-var x = cljs.core.first(arglist__4389);
-var options = cljs.core.rest(arglist__4389);
-return js__GT_clj__delegate.call(this, x, options);
-});
-return js__GT_clj;
-})()
-;
-/**
-* Returns a memoized version of a referentially transparent function. The
-* memoized version of the function keeps a cache of the mapping from arguments
-* to results and, when calls with the same arguments are repeated often, has
-* higher performance at the expense of higher memory use.
-*/
-cljs.core.memoize = (function memoize(f){
-var mem__4390 = cljs.core.atom.call(null,cljs.core.ObjMap.fromObject([],{}));
-
-return (function() { 
-var G__4394__delegate = function (args){
-var temp__3695__auto____4391 = cljs.core.get.call(null,cljs.core.deref.call(null,mem__4390),args);
-
-if(cljs.core.truth_(temp__3695__auto____4391))
-{var v__4392 = temp__3695__auto____4391;
-
-return v__4392;
-} else
-{var ret__4393 = cljs.core.apply.call(null,f,args);
-
-cljs.core.swap_BANG_.call(null,mem__4390,cljs.core.assoc,args,ret__4393);
-return ret__4393;
-}
-};
-var G__4394 = function (var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 0),0);
-} 
-return G__4394__delegate.call(this, args);
-};
-G__4394.cljs$lang$maxFixedArity = 0;
-G__4394.cljs$lang$applyTo = (function (arglist__4395){
-var args = cljs.core.seq( arglist__4395 );;
-return G__4394__delegate.call(this, args);
-});
-return G__4394;
-})()
-;
-});
-/**
-* trampoline can be used to convert algorithms requiring mutual
-* recursion without stack consumption. Calls f with supplied args, if
-* any. If f returns a fn, calls that fn with no arguments, and
-* continues to repeat, until the return value is not a fn, then
-* returns that non-fn value. Note that if you want to return a fn as a
-* final value, you must wrap it in some data structure and unpack it
-* after trampoline returns.
-* @param {...*} var_args
-*/
-cljs.core.trampoline = (function() {
-var trampoline = null;
-var trampoline__4397 = (function (f){
-while(true){
-var ret__4396 = f.call(null);
-
-if(cljs.core.truth_(cljs.core.fn_QMARK_.call(null,ret__4396)))
-{{
-var G__4400 = ret__4396;
-f = G__4400;
-continue;
-}
-} else
-{return ret__4396;
-}
-break;
-}
-});
-var trampoline__4398 = (function() { 
-var G__4401__delegate = function (f,args){
-return trampoline.call(null,(function (){
-return cljs.core.apply.call(null,f,args);
-}));
-};
-var G__4401 = function (f,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return G__4401__delegate.call(this, f, args);
-};
-G__4401.cljs$lang$maxFixedArity = 1;
-G__4401.cljs$lang$applyTo = (function (arglist__4402){
-var f = cljs.core.first(arglist__4402);
-var args = cljs.core.rest(arglist__4402);
-return G__4401__delegate.call(this, f, args);
-});
-return G__4401;
-})()
-;
-trampoline = function(f,var_args){
-var args = var_args;
-switch(arguments.length){
-case  1 :
-return trampoline__4397.call(this,f);
-default:
-return trampoline__4398.apply(this,arguments);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-trampoline.cljs$lang$maxFixedArity = 1;
-trampoline.cljs$lang$applyTo = trampoline__4398.cljs$lang$applyTo;
-return trampoline;
-})()
-;
-/**
-* Returns a random floating point number between 0 (inclusive) and
-* n (default 1) (exclusive).
-*/
-cljs.core.rand = (function() {
-var rand = null;
-var rand__4403 = (function (){
-return rand.call(null,1);
-});
-var rand__4404 = (function (n){
-return Math.random() * n;
-});
-rand = function(n){
-switch(arguments.length){
-case  0 :
-return rand__4403.call(this);
-case  1 :
-return rand__4404.call(this,n);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return rand;
-})()
-;
-/**
-* Returns a random integer between 0 (inclusive) and n (exclusive).
-*/
-cljs.core.rand_int = (function rand_int(n){
-return Math.floor(Math.random() * n);
-});
-/**
-* Return a random element of the (sequential) collection. Will have
-* the same performance characteristics as nth for the given
-* collection.
-*/
-cljs.core.rand_nth = (function rand_nth(coll){
-return cljs.core.nth.call(null,coll,cljs.core.rand_int.call(null,cljs.core.count.call(null,coll)));
-});
-/**
-* Returns a map of the elements of coll keyed by the result of
-* f on each element. The value at each key will be a vector of the
-* corresponding elements, in the order they appeared in coll.
-*/
-cljs.core.group_by = (function group_by(f,coll){
-return cljs.core.reduce.call(null,(function (ret,x){
-var k__4406 = f.call(null,x);
-
-return cljs.core.assoc.call(null,ret,k__4406,cljs.core.conj.call(null,cljs.core.get.call(null,ret,k__4406,cljs.core.Vector.fromArray([])),x));
-}),cljs.core.ObjMap.fromObject([],{}),coll);
-});
-/**
-* Creates a hierarchy object for use with derive, isa? etc.
-*/
-cljs.core.make_hierarchy = (function make_hierarchy(){
-return cljs.core.ObjMap.fromObject(["\uFDD0'parents","\uFDD0'descendants","\uFDD0'ancestors"],{"\uFDD0'parents":cljs.core.ObjMap.fromObject([],{}),"\uFDD0'descendants":cljs.core.ObjMap.fromObject([],{}),"\uFDD0'ancestors":cljs.core.ObjMap.fromObject([],{})});
-});
-cljs.core.global_hierarchy = cljs.core.atom.call(null,cljs.core.make_hierarchy.call(null));
-/**
-* Returns true if (= child parent), or child is directly or indirectly derived from
-* parent, either via a Java type inheritance relationship or a
-* relationship established via derive. h must be a hierarchy obtained
-* from make-hierarchy, if not supplied defaults to the global
-* hierarchy
-*/
-cljs.core.isa_QMARK_ = (function() {
-var isa_QMARK_ = null;
-var isa_QMARK___4415 = (function (child,parent){
-return isa_QMARK_.call(null,cljs.core.deref.call(null,cljs.core.global_hierarchy),child,parent);
-});
-var isa_QMARK___4416 = (function (h,child,parent){
-var or__3548__auto____4407 = cljs.core._EQ_.call(null,child,parent);
-
-if(cljs.core.truth_(or__3548__auto____4407))
-{return or__3548__auto____4407;
-} else
-{var or__3548__auto____4408 = cljs.core.contains_QMARK_.call(null,"\uFDD0'ancestors".call(null,h).call(null,child),parent);
-
-if(cljs.core.truth_(or__3548__auto____4408))
-{return or__3548__auto____4408;
-} else
-{var and__3546__auto____4409 = cljs.core.vector_QMARK_.call(null,parent);
-
-if(cljs.core.truth_(and__3546__auto____4409))
-{var and__3546__auto____4410 = cljs.core.vector_QMARK_.call(null,child);
-
-if(cljs.core.truth_(and__3546__auto____4410))
-{var and__3546__auto____4411 = cljs.core._EQ_.call(null,cljs.core.count.call(null,parent),cljs.core.count.call(null,child));
-
-if(cljs.core.truth_(and__3546__auto____4411))
-{var ret__4412 = true;
-var i__4413 = 0;
-
-while(true){
-if(cljs.core.truth_((function (){var or__3548__auto____4414 = cljs.core.not.call(null,ret__4412);
-
-if(cljs.core.truth_(or__3548__auto____4414))
-{return or__3548__auto____4414;
-} else
-{return cljs.core._EQ_.call(null,i__4413,cljs.core.count.call(null,parent));
-}
-})()))
-{return ret__4412;
-} else
-{{
-var G__4418 = isa_QMARK_.call(null,h,child.call(null,i__4413),parent.call(null,i__4413));
-var G__4419 = (i__4413 + 1);
-ret__4412 = G__4418;
-i__4413 = G__4419;
-continue;
-}
-}
-break;
-}
-} else
-{return and__3546__auto____4411;
-}
-} else
-{return and__3546__auto____4410;
-}
-} else
-{return and__3546__auto____4409;
-}
-}
-}
-});
-isa_QMARK_ = function(h,child,parent){
-switch(arguments.length){
-case  2 :
-return isa_QMARK___4415.call(this,h,child);
-case  3 :
-return isa_QMARK___4416.call(this,h,child,parent);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return isa_QMARK_;
-})()
-;
-/**
-* Returns the immediate parents of tag, either via a Java type
-* inheritance relationship or a relationship established via derive. h
-* must be a hierarchy obtained from make-hierarchy, if not supplied
-* defaults to the global hierarchy
-*/
-cljs.core.parents = (function() {
-var parents = null;
-var parents__4420 = (function (tag){
-return parents.call(null,cljs.core.deref.call(null,cljs.core.global_hierarchy),tag);
-});
-var parents__4421 = (function (h,tag){
-return cljs.core.not_empty.call(null,cljs.core.get.call(null,"\uFDD0'parents".call(null,h),tag));
-});
-parents = function(h,tag){
-switch(arguments.length){
-case  1 :
-return parents__4420.call(this,h);
-case  2 :
-return parents__4421.call(this,h,tag);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return parents;
-})()
-;
-/**
-* Returns the immediate and indirect parents of tag, either via a Java type
-* inheritance relationship or a relationship established via derive. h
-* must be a hierarchy obtained from make-hierarchy, if not supplied
-* defaults to the global hierarchy
-*/
-cljs.core.ancestors = (function() {
-var ancestors = null;
-var ancestors__4423 = (function (tag){
-return ancestors.call(null,cljs.core.deref.call(null,cljs.core.global_hierarchy),tag);
-});
-var ancestors__4424 = (function (h,tag){
-return cljs.core.not_empty.call(null,cljs.core.get.call(null,"\uFDD0'ancestors".call(null,h),tag));
-});
-ancestors = function(h,tag){
-switch(arguments.length){
-case  1 :
-return ancestors__4423.call(this,h);
-case  2 :
-return ancestors__4424.call(this,h,tag);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return ancestors;
-})()
-;
-/**
-* Returns the immediate and indirect children of tag, through a
-* relationship established via derive. h must be a hierarchy obtained
-* from make-hierarchy, if not supplied defaults to the global
-* hierarchy. Note: does not work on Java type inheritance
-* relationships.
-*/
-cljs.core.descendants = (function() {
-var descendants = null;
-var descendants__4426 = (function (tag){
-return descendants.call(null,cljs.core.deref.call(null,cljs.core.global_hierarchy),tag);
-});
-var descendants__4427 = (function (h,tag){
-return cljs.core.not_empty.call(null,cljs.core.get.call(null,"\uFDD0'descendants".call(null,h),tag));
-});
-descendants = function(h,tag){
-switch(arguments.length){
-case  1 :
-return descendants__4426.call(this,h);
-case  2 :
-return descendants__4427.call(this,h,tag);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return descendants;
-})()
-;
-/**
-* Establishes a parent/child relationship between parent and
-* tag. Parent must be a namespace-qualified symbol or keyword and
-* child can be either a namespace-qualified symbol or keyword or a
-* class. h must be a hierarchy obtained from make-hierarchy, if not
-* supplied defaults to, and modifies, the global hierarchy.
-*/
-cljs.core.derive = (function() {
-var derive = null;
-var derive__4437 = (function (tag,parent){
-if(cljs.core.truth_(cljs.core.namespace.call(null,parent)))
-{} else
-{throw (new Error(cljs.core.str.call(null,"Assert failed: ",cljs.core.pr_str.call(null,cljs.core.with_meta(cljs.core.list("\uFDD1'namespace","\uFDD1'parent"),cljs.core.hash_map("\uFDD0'line",3364))))));
-}
-cljs.core.swap_BANG_.call(null,cljs.core.global_hierarchy,derive,tag,parent);
-return null;
-});
-var derive__4438 = (function (h,tag,parent){
-if(cljs.core.truth_(cljs.core.not_EQ_.call(null,tag,parent)))
-{} else
-{throw (new Error(cljs.core.str.call(null,"Assert failed: ",cljs.core.pr_str.call(null,cljs.core.with_meta(cljs.core.list("\uFDD1'not=","\uFDD1'tag","\uFDD1'parent"),cljs.core.hash_map("\uFDD0'line",3368))))));
-}
-var tp__4432 = "\uFDD0'parents".call(null,h);
-var td__4433 = "\uFDD0'descendants".call(null,h);
-var ta__4434 = "\uFDD0'ancestors".call(null,h);
-var tf__4435 = (function (m,source,sources,target,targets){
-return cljs.core.reduce.call(null,(function (ret,k){
-return cljs.core.assoc.call(null,ret,k,cljs.core.reduce.call(null,cljs.core.conj,cljs.core.get.call(null,targets,k,cljs.core.set([])),cljs.core.cons.call(null,target,targets.call(null,target))));
-}),m,cljs.core.cons.call(null,source,sources.call(null,source)));
-});
-
-var or__3548__auto____4436 = (cljs.core.truth_(cljs.core.contains_QMARK_.call(null,tp__4432.call(null,tag),parent))?null:(function (){if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null,ta__4434.call(null,tag),parent)))
-{throw (new Error(cljs.core.str.call(null,tag,"already has",parent,"as ancestor")));
-} else
-{}
-if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null,ta__4434.call(null,parent),tag)))
-{throw (new Error(cljs.core.str.call(null,"Cyclic derivation:",parent,"has",tag,"as ancestor")));
-} else
-{}
-return cljs.core.ObjMap.fromObject(["\uFDD0'parents","\uFDD0'ancestors","\uFDD0'descendants"],{"\uFDD0'parents":cljs.core.assoc.call(null,"\uFDD0'parents".call(null,h),tag,cljs.core.conj.call(null,cljs.core.get.call(null,tp__4432,tag,cljs.core.set([])),parent)),"\uFDD0'ancestors":tf__4435.call(null,"\uFDD0'ancestors".call(null,h),tag,td__4433,parent,ta__4434),"\uFDD0'descendants":tf__4435.call(null,"\uFDD0'descendants".call(null,h),parent,ta__4434,tag,td__4433)});
-})());
-
-if(cljs.core.truth_(or__3548__auto____4436))
-{return or__3548__auto____4436;
-} else
-{return h;
-}
-});
-derive = function(h,tag,parent){
-switch(arguments.length){
-case  2 :
-return derive__4437.call(this,h,tag);
-case  3 :
-return derive__4438.call(this,h,tag,parent);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return derive;
-})()
-;
-/**
-* Removes a parent/child relationship between parent and
-* tag. h must be a hierarchy obtained from make-hierarchy, if not
-* supplied defaults to, and modifies, the global hierarchy.
-*/
-cljs.core.underive = (function() {
-var underive = null;
-var underive__4444 = (function (tag,parent){
-cljs.core.swap_BANG_.call(null,cljs.core.global_hierarchy,underive,tag,parent);
-return null;
-});
-var underive__4445 = (function (h,tag,parent){
-var parentMap__4440 = "\uFDD0'parents".call(null,h);
-var childsParents__4441 = (cljs.core.truth_(parentMap__4440.call(null,tag))?cljs.core.disj.call(null,parentMap__4440.call(null,tag),parent):cljs.core.set([]));
-var newParents__4442 = (cljs.core.truth_(cljs.core.not_empty.call(null,childsParents__4441))?cljs.core.assoc.call(null,parentMap__4440,tag,childsParents__4441):cljs.core.dissoc.call(null,parentMap__4440,tag));
-var deriv_seq__4443 = cljs.core.flatten.call(null,cljs.core.map.call(null,(function (p1__4429_SHARP_){
-return cljs.core.cons.call(null,cljs.core.first.call(null,p1__4429_SHARP_),cljs.core.interpose.call(null,cljs.core.first.call(null,p1__4429_SHARP_),cljs.core.second.call(null,p1__4429_SHARP_)));
-}),cljs.core.seq.call(null,newParents__4442)));
-
-if(cljs.core.truth_(cljs.core.contains_QMARK_.call(null,parentMap__4440.call(null,tag),parent)))
-{return cljs.core.reduce.call(null,(function (p1__4430_SHARP_,p2__4431_SHARP_){
-return cljs.core.apply.call(null,cljs.core.derive,p1__4430_SHARP_,p2__4431_SHARP_);
-}),cljs.core.make_hierarchy.call(null),cljs.core.partition.call(null,2,deriv_seq__4443));
-} else
-{return h;
-}
-});
-underive = function(h,tag,parent){
-switch(arguments.length){
-case  2 :
-return underive__4444.call(this,h,tag);
-case  3 :
-return underive__4445.call(this,h,tag,parent);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return underive;
-})()
-;
-cljs.core.reset_cache = (function reset_cache(method_cache,method_table,cached_hierarchy,hierarchy){
-cljs.core.swap_BANG_.call(null,method_cache,(function (_){
-return cljs.core.deref.call(null,method_table);
-}));
-return cljs.core.swap_BANG_.call(null,cached_hierarchy,(function (_){
-return cljs.core.deref.call(null,hierarchy);
-}));
-});
-cljs.core.prefers_STAR_ = (function prefers_STAR_(x,y,prefer_table){
-var xprefs__4447 = cljs.core.deref.call(null,prefer_table).call(null,x);
-
-var or__3548__auto____4449 = (cljs.core.truth_((function (){var and__3546__auto____4448 = xprefs__4447;
-
-if(cljs.core.truth_(and__3546__auto____4448))
-{return xprefs__4447.call(null,y);
-} else
-{return and__3546__auto____4448;
-}
-})())?true:null);
-
-if(cljs.core.truth_(or__3548__auto____4449))
-{return or__3548__auto____4449;
-} else
-{var or__3548__auto____4451 = (function (){var ps__4450 = cljs.core.parents.call(null,y);
-
-while(true){
-if(cljs.core.truth_((cljs.core.count.call(null,ps__4450) > 0)))
-{if(cljs.core.truth_(prefers_STAR_.call(null,x,cljs.core.first.call(null,ps__4450),prefer_table)))
-{} else
-{}
-{
-var G__4454 = cljs.core.rest.call(null,ps__4450);
-ps__4450 = G__4454;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-})();
-
-if(cljs.core.truth_(or__3548__auto____4451))
-{return or__3548__auto____4451;
-} else
-{var or__3548__auto____4453 = (function (){var ps__4452 = cljs.core.parents.call(null,x);
-
-while(true){
-if(cljs.core.truth_((cljs.core.count.call(null,ps__4452) > 0)))
-{if(cljs.core.truth_(prefers_STAR_.call(null,cljs.core.first.call(null,ps__4452),y,prefer_table)))
-{} else
-{}
-{
-var G__4455 = cljs.core.rest.call(null,ps__4452);
-ps__4452 = G__4455;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-})();
-
-if(cljs.core.truth_(or__3548__auto____4453))
-{return or__3548__auto____4453;
-} else
-{return false;
-}
-}
-}
-});
-cljs.core.dominates = (function dominates(x,y,prefer_table){
-var or__3548__auto____4456 = cljs.core.prefers_STAR_.call(null,x,y,prefer_table);
-
-if(cljs.core.truth_(or__3548__auto____4456))
-{return or__3548__auto____4456;
-} else
-{return cljs.core.isa_QMARK_.call(null,x,y);
-}
-});
-cljs.core.find_and_cache_best_method = (function find_and_cache_best_method(name,dispatch_val,hierarchy,method_table,prefer_table,method_cache,cached_hierarchy){
-var best_entry__4465 = cljs.core.reduce.call(null,(function (be,p__4457){
-var vec__4458__4459 = p__4457;
-var k__4460 = cljs.core.nth.call(null,vec__4458__4459,0,null);
-var ___4461 = cljs.core.nth.call(null,vec__4458__4459,1,null);
-var e__4462 = vec__4458__4459;
-
-if(cljs.core.truth_(cljs.core.isa_QMARK_.call(null,dispatch_val,k__4460)))
-{var be2__4464 = (cljs.core.truth_((function (){var or__3548__auto____4463 = (be === null);
-
-if(cljs.core.truth_(or__3548__auto____4463))
-{return or__3548__auto____4463;
-} else
-{return cljs.core.dominates.call(null,k__4460,cljs.core.first.call(null,be),prefer_table);
-}
-})())?e__4462:be);
-
-if(cljs.core.truth_(cljs.core.dominates.call(null,cljs.core.first.call(null,be2__4464),k__4460,prefer_table)))
-{} else
-{throw (new Error(cljs.core.str.call(null,"Multiple methods in multimethod '",name,"' match dispatch value: ",dispatch_val," -> ",k__4460," and ",cljs.core.first.call(null,be2__4464),", and neither is preferred")));
-}
-return be2__4464;
-} else
-{return be;
-}
-}),null,cljs.core.deref.call(null,method_table));
-
-if(cljs.core.truth_(best_entry__4465))
-{if(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.deref.call(null,cached_hierarchy),cljs.core.deref.call(null,hierarchy))))
-{cljs.core.swap_BANG_.call(null,method_cache,cljs.core.assoc,dispatch_val,cljs.core.second.call(null,best_entry__4465));
-return cljs.core.second.call(null,best_entry__4465);
-} else
-{cljs.core.reset_cache.call(null,method_cache,method_table,cached_hierarchy,hierarchy);
-return find_and_cache_best_method.call(null,name,dispatch_val,hierarchy,method_table,prefer_table,method_cache,cached_hierarchy);
-}
-} else
-{return null;
-}
-});
-cljs.core.IMultiFn = {};
-cljs.core._reset = (function _reset(mf){
-if(cljs.core.truth_((function (){var and__3546__auto____4466 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4466))
-{return mf.cljs$core$IMultiFn$_reset;
-} else
-{return and__3546__auto____4466;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_reset(mf);
-} else
-{return (function (){var or__3548__auto____4467 = (cljs.core._reset[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4467))
-{return or__3548__auto____4467;
-} else
-{var or__3548__auto____4468 = (cljs.core._reset["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4468))
-{return or__3548__auto____4468;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-reset",mf);
-}
-}
-})().call(null,mf);
-}
-});
-cljs.core._add_method = (function _add_method(mf,dispatch_val,method){
-if(cljs.core.truth_((function (){var and__3546__auto____4469 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4469))
-{return mf.cljs$core$IMultiFn$_add_method;
-} else
-{return and__3546__auto____4469;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_add_method(mf,dispatch_val,method);
-} else
-{return (function (){var or__3548__auto____4470 = (cljs.core._add_method[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4470))
-{return or__3548__auto____4470;
-} else
-{var or__3548__auto____4471 = (cljs.core._add_method["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4471))
-{return or__3548__auto____4471;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-add-method",mf);
-}
-}
-})().call(null,mf,dispatch_val,method);
-}
-});
-cljs.core._remove_method = (function _remove_method(mf,dispatch_val){
-if(cljs.core.truth_((function (){var and__3546__auto____4472 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4472))
-{return mf.cljs$core$IMultiFn$_remove_method;
-} else
-{return and__3546__auto____4472;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_remove_method(mf,dispatch_val);
-} else
-{return (function (){var or__3548__auto____4473 = (cljs.core._remove_method[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4473))
-{return or__3548__auto____4473;
-} else
-{var or__3548__auto____4474 = (cljs.core._remove_method["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4474))
-{return or__3548__auto____4474;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-remove-method",mf);
-}
-}
-})().call(null,mf,dispatch_val);
-}
-});
-cljs.core._prefer_method = (function _prefer_method(mf,dispatch_val,dispatch_val_y){
-if(cljs.core.truth_((function (){var and__3546__auto____4475 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4475))
-{return mf.cljs$core$IMultiFn$_prefer_method;
-} else
-{return and__3546__auto____4475;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_prefer_method(mf,dispatch_val,dispatch_val_y);
-} else
-{return (function (){var or__3548__auto____4476 = (cljs.core._prefer_method[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4476))
-{return or__3548__auto____4476;
-} else
-{var or__3548__auto____4477 = (cljs.core._prefer_method["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4477))
-{return or__3548__auto____4477;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-prefer-method",mf);
-}
-}
-})().call(null,mf,dispatch_val,dispatch_val_y);
-}
-});
-cljs.core._get_method = (function _get_method(mf,dispatch_val){
-if(cljs.core.truth_((function (){var and__3546__auto____4478 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4478))
-{return mf.cljs$core$IMultiFn$_get_method;
-} else
-{return and__3546__auto____4478;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_get_method(mf,dispatch_val);
-} else
-{return (function (){var or__3548__auto____4479 = (cljs.core._get_method[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4479))
-{return or__3548__auto____4479;
-} else
-{var or__3548__auto____4480 = (cljs.core._get_method["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4480))
-{return or__3548__auto____4480;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-get-method",mf);
-}
-}
-})().call(null,mf,dispatch_val);
-}
-});
-cljs.core._methods = (function _methods(mf){
-if(cljs.core.truth_((function (){var and__3546__auto____4481 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4481))
-{return mf.cljs$core$IMultiFn$_methods;
-} else
-{return and__3546__auto____4481;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_methods(mf);
-} else
-{return (function (){var or__3548__auto____4482 = (cljs.core._methods[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4482))
-{return or__3548__auto____4482;
-} else
-{var or__3548__auto____4483 = (cljs.core._methods["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4483))
-{return or__3548__auto____4483;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-methods",mf);
-}
-}
-})().call(null,mf);
-}
-});
-cljs.core._prefers = (function _prefers(mf){
-if(cljs.core.truth_((function (){var and__3546__auto____4484 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4484))
-{return mf.cljs$core$IMultiFn$_prefers;
-} else
-{return and__3546__auto____4484;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_prefers(mf);
-} else
-{return (function (){var or__3548__auto____4485 = (cljs.core._prefers[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4485))
-{return or__3548__auto____4485;
-} else
-{var or__3548__auto____4486 = (cljs.core._prefers["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4486))
-{return or__3548__auto____4486;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-prefers",mf);
-}
-}
-})().call(null,mf);
-}
-});
-cljs.core._dispatch = (function _dispatch(mf,args){
-if(cljs.core.truth_((function (){var and__3546__auto____4487 = mf;
-
-if(cljs.core.truth_(and__3546__auto____4487))
-{return mf.cljs$core$IMultiFn$_dispatch;
-} else
-{return and__3546__auto____4487;
-}
-})()))
-{return mf.cljs$core$IMultiFn$_dispatch(mf,args);
-} else
-{return (function (){var or__3548__auto____4488 = (cljs.core._dispatch[goog.typeOf.call(null,mf)]);
-
-if(cljs.core.truth_(or__3548__auto____4488))
-{return or__3548__auto____4488;
-} else
-{var or__3548__auto____4489 = (cljs.core._dispatch["_"]);
-
-if(cljs.core.truth_(or__3548__auto____4489))
-{return or__3548__auto____4489;
-} else
-{throw cljs.core.missing_protocol.call(null,"IMultiFn.-dispatch",mf);
-}
-}
-})().call(null,mf,args);
-}
-});
-cljs.core.do_dispatch = (function do_dispatch(mf,dispatch_fn,args){
-var dispatch_val__4490 = cljs.core.apply.call(null,dispatch_fn,args);
-var target_fn__4491 = cljs.core._get_method.call(null,mf,dispatch_val__4490);
-
-if(cljs.core.truth_(target_fn__4491))
-{} else
-{throw (new Error(cljs.core.str.call(null,"No method in multimethod '",cljs.core.name,"' for dispatch value: ",dispatch_val__4490)));
-}
-return cljs.core.apply.call(null,target_fn__4491,args);
-});
-
-/**
-* @constructor
-*/
-cljs.core.MultiFn = (function (name,dispatch_fn,default_dispatch_val,hierarchy,method_table,prefer_table,method_cache,cached_hierarchy){
-this.name = name;
-this.dispatch_fn = dispatch_fn;
-this.default_dispatch_val = default_dispatch_val;
-this.hierarchy = hierarchy;
-this.method_table = method_table;
-this.prefer_table = prefer_table;
-this.method_cache = method_cache;
-this.cached_hierarchy = cached_hierarchy;
-})
-cljs.core.MultiFn.cljs$core$IPrintable$_pr_seq = (function (this__267__auto__){
-return cljs.core.list.call(null,"cljs.core.MultiFn");
-});
-cljs.core.MultiFn.prototype.cljs$core$IHash$ = true;
-cljs.core.MultiFn.prototype.cljs$core$IHash$_hash = (function (this$){
-var this__4492 = this;
-return goog.getUid.call(null,this$);
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$ = true;
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_reset = (function (mf){
-var this__4493 = this;
-cljs.core.swap_BANG_.call(null,this__4493.method_table,(function (mf){
-return cljs.core.ObjMap.fromObject([],{});
-}));
-cljs.core.swap_BANG_.call(null,this__4493.method_cache,(function (mf){
-return cljs.core.ObjMap.fromObject([],{});
-}));
-cljs.core.swap_BANG_.call(null,this__4493.prefer_table,(function (mf){
-return cljs.core.ObjMap.fromObject([],{});
-}));
-cljs.core.swap_BANG_.call(null,this__4493.cached_hierarchy,(function (mf){
-return null;
-}));
-return mf;
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_add_method = (function (mf,dispatch_val,method){
-var this__4494 = this;
-cljs.core.swap_BANG_.call(null,this__4494.method_table,cljs.core.assoc,dispatch_val,method);
-cljs.core.reset_cache.call(null,this__4494.method_cache,this__4494.method_table,this__4494.cached_hierarchy,this__4494.hierarchy);
-return mf;
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_remove_method = (function (mf,dispatch_val){
-var this__4495 = this;
-cljs.core.swap_BANG_.call(null,this__4495.method_table,cljs.core.dissoc,dispatch_val);
-cljs.core.reset_cache.call(null,this__4495.method_cache,this__4495.method_table,this__4495.cached_hierarchy,this__4495.hierarchy);
-return mf;
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_get_method = (function (mf,dispatch_val){
-var this__4496 = this;
-if(cljs.core.truth_(cljs.core._EQ_.call(null,cljs.core.deref.call(null,this__4496.cached_hierarchy),cljs.core.deref.call(null,this__4496.hierarchy))))
-{} else
-{cljs.core.reset_cache.call(null,this__4496.method_cache,this__4496.method_table,this__4496.cached_hierarchy,this__4496.hierarchy);
-}
-var temp__3695__auto____4497 = cljs.core.deref.call(null,this__4496.method_cache).call(null,dispatch_val);
-
-if(cljs.core.truth_(temp__3695__auto____4497))
-{var target_fn__4498 = temp__3695__auto____4497;
-
-return target_fn__4498;
-} else
-{var temp__3695__auto____4499 = cljs.core.find_and_cache_best_method.call(null,this__4496.name,dispatch_val,this__4496.hierarchy,this__4496.method_table,this__4496.prefer_table,this__4496.method_cache,this__4496.cached_hierarchy);
-
-if(cljs.core.truth_(temp__3695__auto____4499))
-{var target_fn__4500 = temp__3695__auto____4499;
-
-return target_fn__4500;
-} else
-{return cljs.core.deref.call(null,this__4496.method_table).call(null,this__4496.default_dispatch_val);
-}
-}
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_prefer_method = (function (mf,dispatch_val_x,dispatch_val_y){
-var this__4501 = this;
-if(cljs.core.truth_(cljs.core.prefers_STAR_.call(null,dispatch_val_x,dispatch_val_y,this__4501.prefer_table)))
-{throw (new Error(cljs.core.str.call(null,"Preference conflict in multimethod '",this__4501.name,"': ",dispatch_val_y," is already preferred to ",dispatch_val_x)));
-} else
-{}
-cljs.core.swap_BANG_.call(null,this__4501.prefer_table,(function (old){
-return cljs.core.assoc.call(null,old,dispatch_val_x,cljs.core.conj.call(null,cljs.core.get.call(null,old,dispatch_val_x,cljs.core.set([])),dispatch_val_y));
-}));
-return cljs.core.reset_cache.call(null,this__4501.method_cache,this__4501.method_table,this__4501.cached_hierarchy,this__4501.hierarchy);
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_methods = (function (mf){
-var this__4502 = this;
-return cljs.core.deref.call(null,this__4502.method_table);
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_prefers = (function (mf){
-var this__4503 = this;
-return cljs.core.deref.call(null,this__4503.prefer_table);
-});
-cljs.core.MultiFn.prototype.cljs$core$IMultiFn$_dispatch = (function (mf,args){
-var this__4504 = this;
-return cljs.core.do_dispatch.call(null,mf,this__4504.dispatch_fn,args);
-});
-cljs.core.MultiFn;
-cljs.core.MultiFn.prototype.call = (function() { 
-var G__4505__delegate = function (_,args){
-return cljs.core._dispatch.call(null,this,args);
-};
-var G__4505 = function (_,var_args){
-var args = null;
-if (goog.isDef(var_args)) {
-  args = cljs.core.array_seq(Array.prototype.slice.call(arguments, 1),0);
-} 
-return G__4505__delegate.call(this, _, args);
-};
-G__4505.cljs$lang$maxFixedArity = 1;
-G__4505.cljs$lang$applyTo = (function (arglist__4506){
-var _ = cljs.core.first(arglist__4506);
-var args = cljs.core.rest(arglist__4506);
-return G__4505__delegate.call(this, _, args);
-});
-return G__4505;
-})()
-;
-cljs.core.MultiFn.prototype.apply = (function (_,args){
-return cljs.core._dispatch.call(null,this,args);
-});
-/**
-* Removes all of the methods of multimethod.
-*/
-cljs.core.remove_all_methods = (function remove_all_methods(multifn){
-return cljs.core._reset.call(null,multifn);
-});
-/**
-* Removes the method of multimethod associated with dispatch-value.
-*/
-cljs.core.remove_method = (function remove_method(multifn,dispatch_val){
-return cljs.core._remove_method.call(null,multifn,dispatch_val);
-});
-/**
-* Causes the multimethod to prefer matches of dispatch-val-x over dispatch-val-y
-* when there is a conflict
-*/
-cljs.core.prefer_method = (function prefer_method(multifn,dispatch_val_x,dispatch_val_y){
-return cljs.core._prefer_method.call(null,multifn,dispatch_val_x,dispatch_val_y);
-});
-/**
-* Given a multimethod, returns a map of dispatch values -> dispatch fns
-*/
-cljs.core.methods$ = (function methods$(multifn){
-return cljs.core._methods.call(null,multifn);
-});
-/**
-* Given a multimethod and a dispatch value, returns the dispatch fn
-* that would apply to that value, or nil if none apply and no default
-*/
-cljs.core.get_method = (function get_method(multifn,dispatch_val){
-return cljs.core._get_method.call(null,multifn,dispatch_val);
-});
-/**
-* Given a multimethod, returns a map of preferred value -> set of other values
-*/
-cljs.core.prefers = (function prefers(multifn){
-return cljs.core._prefers.call(null,multifn);
-});

diff --git a/tempest/out/levels.js b/tempest/out/levels.js
line changes: +0/-41
index 16ba756..0000000
--- a/tempest/out/levels.js
+++ /dev/null
@@ -1,41 +0,0 @@
-goog.provide('tempest.levels');
-goog.require('cljs.core');
-goog.require('goog.dom');
-goog.require('goog.Timer');
-goog.require('goog.events');
-goog.require('goog.events.EventType');
-goog.require('goog.math');
-tempest.levels._STAR_default_line_length_STAR_ = 80;
-tempest.levels._STAR_default_length_fn_STAR_ = (function _STAR_default_length_fn_STAR_(p1__2735_SHARP_){
-return (4 * p1__2735_SHARP_);
-});
-tempest.levels.build_unlinked_segment_list = (function build_unlinked_segment_list(max_x){
-return cljs.core.vec.call(null,(function (x,segments){
-while(true){
-if(cljs.core.truth_(cljs.core._EQ_.call(null,x,0)))
-{return segments;
-} else
-{{
-var G__2736 = (x - 1);
-var G__2737 = cljs.core.cons.call(null,cljs.core.Vector.fromArray([(x - 1),x]),segments);
-x = G__2736;
-segments = G__2737;
-continue;
-}
-}
-break;
-}
-}).call(null,max_x,cljs.core.Vector.fromArray([])));
-});
-tempest.levels.build_segment_list = (function build_segment_list(max_x,linked_QMARK_){
-var segments__2738 = tempest.levels.build_unlinked_segment_list.call(null,max_x);
-
-if(cljs.core.truth_(linked_QMARK_ === true))
-{return cljs.core.conj.call(null,segments__2738,cljs.core.Vector.fromArray([cljs.core.last.call(null,cljs.core.last.call(null,segments__2738)),cljs.core.first.call(null,cljs.core.first.call(null,segments__2738))]));
-} else
-{return segments__2738;
-}
-});
-tempest.levels._STAR_level1_lines_STAR_ = cljs.core.Vector.fromArray([cljs.core.Vector.fromArray([113,225]),cljs.core.Vector.fromArray([99,234]),cljs.core.Vector.fromArray([90,243]),cljs.core.Vector.fromArray([84,252]),cljs.core.Vector.fromArray([81,261]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,270]),cljs.core.Vector.fromArray([81,279]),cljs.core.Vector.fromArray([84,288]),cljs.core.Vector.fromArray([90,297]),cljs.core.Vector.fromArray([99,306]),cljs.core.Vector.fromArray([113,315])]);
-tempest.levels._STAR_level2_lines_STAR_ = cljs.core.Vector.fromArray([cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,0]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,18]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,36]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,54]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,72]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,90]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,108]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,126]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,144]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,162]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,180]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,198]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,216]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,234]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,252]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,270]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,288]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,306]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,324]),cljs.core.Vector.fromArray([tempest.levels._STAR_default_line_length_STAR_,342])]);
-tempest.levels._STAR_levels_STAR_ = cljs.core.Vector.fromArray([cljs.core.ObjMap.fromObject(["\uFDD0'lines","\uFDD0'segments","\uFDD0'length-fn"],{"\uFDD0'lines":tempest.levels._STAR_level1_lines_STAR_,"\uFDD0'segments":tempest.levels.build_segment_list.call(null,(cljs.core.count.call(null,tempest.levels._STAR_level1_lines_STAR_) - 1),false),"\uFDD0'length-fn":tempest.levels._STAR_default_length_fn_STAR_}),cljs.core.ObjMap.fromObject(["\uFDD0'lines","\uFDD0'segments","\uFDD0'length-fn"],{"\uFDD0'lines":tempest.levels._STAR_level2_lines_STAR_,"\uFDD0'segments":tempest.levels.build_segment_list.call(null,(cljs.core.count.call(null,tempest.levels._STAR_level2_lines_STAR_) - 1),true),"\uFDD0'length-fn":tempest.levels._STAR_default_length_fn_STAR_})]);

diff --git a/tempest/out/tempest.js b/tempest/out/tempest.js
line changes: +0/-159
index 14827b5..0000000
--- a/tempest/out/tempest.js
+++ /dev/null
@@ -1,159 +0,0 @@
-goog.provide('tempest');
-goog.require('cljs.core');
-goog.require('tempest.levels');
-goog.require('goog.dom');
-goog.require('goog.Timer');
-goog.require('goog.events');
-goog.require('goog.events.EventType');
-goog.require('goog.math');
-tempest.polar_to_cartesian_coords = (function() {
-var polar_to_cartesian_coords = null;
-var polar_to_cartesian_coords__2750 = (function (p__2739){
-var vec__2741__2742 = p__2739;
-var r__2743 = cljs.core.nth.call(null,vec__2741__2742,0,null);
-var angle__2744 = cljs.core.nth.call(null,vec__2741__2742,1,null);
-
-return cljs.core.Vector.fromArray([goog.math.angleDx.call(null,angle__2744,r__2743),goog.math.angleDy.call(null,angle__2744,r__2743)]);
-});
-var polar_to_cartesian_coords__2751 = (function (p__2740,length_fn){
-var vec__2745__2746 = p__2740;
-var r__2747 = cljs.core.nth.call(null,vec__2745__2746,0,null);
-var angle__2748 = cljs.core.nth.call(null,vec__2745__2746,1,null);
-
-var newr__2749 = length_fn.call(null,r__2747);
-
-return cljs.core.Vector.fromArray([goog.math.angleDx.call(null,angle__2748,newr__2749),goog.math.angleDy.call(null,angle__2748,newr__2749)]);
-});
-polar_to_cartesian_coords = function(p__2740,length_fn){
-switch(arguments.length){
-case  1 :
-return polar_to_cartesian_coords__2750.call(this,p__2740);
-case  2 :
-return polar_to_cartesian_coords__2751.call(this,p__2740,length_fn);
-}
-throw('Invalid arity: ' + arguments.length);
-};
-return polar_to_cartesian_coords;
-})()
-;
-tempest.rectangle_for_segment = (function rectangle_for_segment(level,seg_idx){
-var vec__2753__2754 = cljs.core.get.call(null,"\uFDD0'segments".call(null,level),seg_idx);
-var seg0__2755 = cljs.core.nth.call(null,vec__2753__2754,0,null);
-var seg1__2756 = cljs.core.nth.call(null,vec__2753__2754,1,null);
-var line0__2757 = cljs.core.get.call(null,"\uFDD0'lines".call(null,level),seg0__2755);
-var line1__2758 = cljs.core.get.call(null,"\uFDD0'lines".call(null,level),seg1__2756);
-
-return cljs.core.Vector.fromArray([tempest.polar_to_cartesian_coords.call(null,line0__2757),tempest.polar_to_cartesian_coords.call(null,line0__2757,"\uFDD0'length-fn".call(null,level)),tempest.polar_to_cartesian_coords.call(null,line1__2758,"\uFDD0'length-fn".call(null,level)),tempest.polar_to_cartesian_coords.call(null,line1__2758)]);
-});
-tempest.point_to_canvas_coords = (function point_to_canvas_coords(p__2760,p){
-var map__2761__2762 = p__2760;
-var map__2761__2763 = (cljs.core.truth_(cljs.core.seq_QMARK_.call(null,map__2761__2762))?cljs.core.apply.call(null,cljs.core.hash_map,map__2761__2762):map__2761__2762);
-var width__2764 = cljs.core.get.call(null,map__2761__2763,"\uFDD0'width");
-var height__2765 = cljs.core.get.call(null,map__2761__2763,"\uFDD0'height");
-
-var xmid__2766 = (width__2764 / 2);
-var ymid__2767 = (height__2765 / 2);
-
-console.log(cljs.core.str.call(null,cljs.core.pr_str.call(null,p),"->",cljs.core.pr_str.call(null,cljs.core.Vector.fromArray([(cljs.core.first.call(null,p) + xmid__2766),(ymid__2767 - cljs.core.last.call(null,p))]))));
-return cljs.core.Vector.fromArray([(cljs.core.first.call(null,p) + xmid__2766),(ymid__2767 - cljs.core.last.call(null,p))]);
-});
-tempest.rectangle_to_canvas_coords = (function rectangle_to_canvas_coords(dims,rect){
-return cljs.core.map.call(null,(function (p1__2759_SHARP_){
-return tempest.point_to_canvas_coords.call(null,dims,p1__2759_SHARP_);
-}),rect);
-});
-tempest.rand_coord = (function rand_coord(p__2768){
-var map__2769__2770 = p__2768;
-var map__2769__2771 = (cljs.core.truth_(cljs.core.seq_QMARK_.call(null,map__2769__2770))?cljs.core.apply.call(null,cljs.core.hash_map,map__2769__2770):map__2769__2770);
-var width__2772 = cljs.core.get.call(null,map__2769__2771,"\uFDD0'width");
-var height__2773 = cljs.core.get.call(null,map__2769__2771,"\uFDD0'height");
-
-return cljs.core.Vector.fromArray([goog.math.randomInt.call(null,width__2772),goog.math.randomInt.call(null,height__2773)]);
-});
-tempest.draw_random_line = (function draw_random_line(context,dims){
-var vec__2774__2776 = tempest.rand_coord.call(null,dims);
-var x1__2777 = cljs.core.nth.call(null,vec__2774__2776,0,null);
-var y1__2778 = cljs.core.nth.call(null,vec__2774__2776,1,null);
-var vec__2775__2779 = tempest.rand_coord.call(null,dims);
-var x2__2780 = cljs.core.nth.call(null,vec__2775__2779,0,null);
-var y2__2781 = cljs.core.nth.call(null,vec__2775__2779,1,null);
-
-context.moveTo(x1__2777,y1__2778);
-context.lineTo(x2__2780,y2__2781);
-return context.stroke();
-});
-tempest.draw_rectangle = (function draw_rectangle(context,p__2782){
-var vec__2783__2784 = p__2782;
-var p0__2785 = cljs.core.nth.call(null,vec__2783__2784,0,null);
-var points__2786 = cljs.core.nthnext.call(null,vec__2783__2784,1);
-
-console.log(cljs.core.str.call(null,"Points",cljs.core.pr_str.call(null,points__2786)));
-console.log(cljs.core.str.call(null,"Move to: ",cljs.core.pr_str.call(null,p0__2785)));
-context.moveTo(cljs.core.first.call(null,p0__2785),cljs.core.last.call(null,p0__2785));
-var G__2787__2788 = cljs.core.seq.call(null,points__2786);
-
-if(cljs.core.truth_(G__2787__2788))
-{var p__2789 = cljs.core.first.call(null,G__2787__2788);
-var G__2787__2790 = G__2787__2788;
-
-while(true){
-console.log(cljs.core.str.call(null,"Draw to: ",cljs.core.pr_str.call(null,p__2789)));
-context.lineTo(cljs.core.first.call(null,p__2789),cljs.core.last.call(null,p__2789));
-var temp__3698__auto____2791 = cljs.core.next.call(null,G__2787__2790);
-
-if(cljs.core.truth_(temp__3698__auto____2791))
-{var G__2787__2792 = temp__3698__auto____2791;
-
-{
-var G__2793 = cljs.core.first.call(null,G__2787__2792);
-var G__2794 = G__2787__2792;
-p__2789 = G__2793;
-G__2787__2790 = G__2794;
-continue;
-}
-} else
-{}
-break;
-}
-} else
-{}
-context.lineTo(cljs.core.first.call(null,p0__2785),cljs.core.last.call(null,p0__2785));
-return context.stroke();
-});
-tempest.canvasDraw = (function canvasDraw(level){
-var canvas__2795 = goog.dom.getElement.call(null,"canv1");
-var context__2796 = canvas__2795.getContext("2d");
-var timer__2797 = (new goog.Timer(500));
-var dims__2798 = cljs.core.ObjMap.fromObject(["\uFDD0'width","\uFDD0'height"],{"\uFDD0'width":canvas__2795.width,"\uFDD0'height":canvas__2795.height});
-var level__2799 = cljs.core.get.call(null,tempest.levels._STAR_levels_STAR_,(parseInt.call(null,level) - 1));
-
-var G__2800__2801 = cljs.core.seq.call(null,cljs.core.range.call(null,cljs.core.count.call(null,"\uFDD0'segments".call(null,level__2799))));
-
-if(cljs.core.truth_(G__2800__2801))
-{var idx__2802 = cljs.core.first.call(null,G__2800__2801);
-var G__2800__2803 = G__2800__2801;
-
-while(true){
-tempest.draw_rectangle.call(null,context__2796,tempest.rectangle_to_canvas_coords.call(null,dims__2798,tempest.rectangle_for_segment.call(null,level__2799,idx__2802)));
-var temp__3698__auto____2804 = cljs.core.next.call(null,G__2800__2803);
-
-if(cljs.core.truth_(temp__3698__auto____2804))
-{var G__2800__2805 = temp__3698__auto____2804;
-
-{
-var G__2806 = cljs.core.first.call(null,G__2800__2805);
-var G__2807 = G__2800__2805;
-idx__2802 = G__2806;
-G__2800__2803 = G__2807;
-continue;
-}
-} else
-{return null;
-}
-break;
-}
-} else
-{return null;
-}
-});
-goog.exportSymbol('tempest.canvasDraw', tempest.canvasDraw);

diff --git a/tempest/tempest.cljs b/tempest/tempest.cljs
line changes: +118/-24
index 5403041..30662b8
--- a/tempest/tempest.cljs
+++ b/tempest/tempest.cljs
@@ -1,5 +1,6 @@
 (ns tempest
   (:require [tempest.levels :as levels]
+            [tempest.util :as util]
             [goog.dom :as dom]
             [goog.Timer :as timer]
             [goog.events :as events]
@@ -30,17 +31,7 @@
 ;; left claw: (5, 265 deg)
 ;; left arm: (10, 315 deg)
 
-(def player-vectors
-  [[10 45]
-   [5 95]
-   [6 270]
-   [8 220]
-   [8 140]
-   [6 90]
-   [5 265]
-   [10 315]])
-
-(def player-vectors
+(def player-path
   [[20 225]
    [10 275]
    [12 90]
@@ -50,13 +41,52 @@
    [10 85]
    [20 135]])
 
+(def flipper-path
+  [[32 16]
+   [16 214]
+   [16 326]
+   [64 164]
+   [16 326]
+   [16 214]
+   [32 16]])
+
+(defn round-path [path]
+  (map (fn [coords]
+         [(js/Math.round (first coords))
+          (js/Math.round (last coords))])
+       path))
+
+(defn flipper-path-with-width [width]
+  (let [r (/ width (js/Math.cos (util/deg-to-rad 16)))]
+    (round-path
+     [[(/ r 2) 16]
+      [(/ r 4) 214]
+      [(/ r 4) 326]
+      [r 164]
+      [(/ r 4) 326]
+      [(/ r 4) 214]
+      [(/ r 2) 16]])))
+  
+
+(defn scale-polar-coord [scalefn coord]
+  [(scalefn (first coord)) (last coord)])
+
 (defn rotate-path [angle path]
+  "Add angle to all polar coordinates in path."
   (map (fn [coords]
          [(first coords)
           (mod (+ angle (last coords)) 360)])
        path))
 
+(defn scale-path [scale path]
+  "Multiply all lengths of polar coordinates in path by scale."
+  (map (fn [coords]
+         [(* scale (first coords))
+          (last coords)])
+       path))
+
 (defn rebase-origin [point origin]
+  "Return cartesian coordinate 'point' in relation to 'origin'."
   (map + point origin))
 
 (defn draw-path [context origin vecs]
@@ -67,9 +97,6 @@
          nil
          (let [line (first vecs)
                point (rebase-origin (polar-to-cartesian-coords line) origin)]
-           (.log js/console (str "Draw vector: " (pr-str (first vecs))))
-           ;;(println (str "Draw vector: " (pr-str (first vecs))))
-           ;;(println (str "From point: " (pr-str origin)))
            (.lineTo context (first point) (last point))
            (recur point (next vecs)))))
      origin vecs)
@@ -85,6 +112,58 @@
      )
   )
 
+(defn polar-distance [[r0 theta0] [r1 theta1]]
+  (js/Math.sqrt
+   (+
+    (js/Math.pow r0 2)
+    (js/Math.pow r1 2)
+    (* -2 r0 r1 (js/Math.cos (util/deg-to-rad (- theta1 theta0)))))))
+
+(defn polar-midpoint-r [[r0 theta0] [r1 theta1]]
+  (js/Math.round
+   (/
+    (js/Math.sqrt 
+     (+
+      (js/Math.pow r0 2)
+      (js/Math.pow r1 2)
+      (* 2 r0 r1 (js/Math.cos (util/deg-to-rad (- theta1 theta0))))))
+    2)))
+
+(defn polar-midpoint-theta  [[r0 theta0] [r1 theta1]]
+  (js/Math.round
+   (mod
+    (+ (util/rad-to-deg
+        (js/Math.atan2
+         (+
+          (* r0 (js/Math.sin (util/deg-to-rad theta0)))
+          (* r1 (js/Math.sin (util/deg-to-rad theta1))))
+         (+
+          (* r0 (js/Math.cos (util/deg-to-rad theta0)))
+          (* r1 (js/Math.cos (util/deg-to-rad theta1))))
+         ))
+       360) 360)))
+
+(defn polar-midpoint [line0 line1]
+  [(polar-midpoint-r line0 line1)
+   (polar-midpoint-theta line0 line1)]
+  )
+
+(defn segment-midpoint [level seg-idx scaled?]
+  (apply polar-midpoint
+         (polar-lines-for-segment level seg-idx scaled?)))
+
+;; Returns vector [line0 line1], where lineN is the polar coordinates
+;; describing an edge line of a segment.
+(defn polar-lines-for-segment [level seg-idx scaled?]
+  (let [[seg0 seg1] (get (:segments level) seg-idx)
+        line0 (get (:lines level) seg0)
+        line1 (get (:lines level) seg1)]
+    (if (true? scaled?)
+      [(scale-polar-coord (:length-fn level) line0)
+       (scale-polar-coord (:length-fn level) line1)]
+      [line0 line1]
+    )))
+
 ;; Returns vector [[x0 y0] [x1 y1] [x2 y2] [x3 y3]] describing segment rectangle
 ;; in cartesian coordinates.
 (defn rectangle-for-segment [level seg-idx]
@@ -100,7 +179,6 @@
 (defn point-to-canvas-coords [{width :width height :height} p]
   (let [xmid (/ width 2)
         ymid (/ height 2)]
-    (.log js/console (str (pr-str p) "->" (pr-str [(+ (first p) xmid) (- ymid (last p))])))
     [(+ (first p) xmid) (- ymid (last p))]
   ))
 
@@ -120,16 +198,20 @@
     (.stroke context)))  
 
 (defn draw-rectangle [context [p0 & points]]
-  (.log js/console (str "Points" (pr-str points)))
-  (.log js/console (str "Move to: " (pr-str p0)))
   (.moveTo context (first p0) (last p0))
   (doseq [p points]
-    (.log js/console (str "Draw to: " (pr-str p)))
     (.lineTo context (first p) (last p)))
   (.lineTo context (first p0) (last p0))
   (.stroke context)
   )
 
+(defn steps-per-segment [level seg-idx]
+  (/
+   (-
+    (first (segment-midpoint level seg-idx true))
+    (first (segment-midpoint level seg-idx false)))
+   (:steps level)))
+
 
 (defn ^:export canvasDraw [level]
   (let [canvas (dom/getElement "canv1")
@@ -137,13 +219,25 @@
         timer (goog.Timer. 500)
         dims {:width (.-width canvas) :height (.-height canvas)}
         level (get levels/*levels* (- (js/parseInt level) 1))]
-    (draw-path context [200 200] player-vectors)
-    (draw-path context [250 250] (rotate-path 45 player-vectors))
-    (draw-path context [300 300] (rotate-path 90 player-vectors))
-    (draw-path context [350 350] (rotate-path 135 player-vectors))
-    (draw-path context [400 400] (rotate-path 180 player-vectors))
+    (draw-path context [600 200] (scale-path 0.5 flipper-path))
+    (draw-path context [600 250] (scale-path 0.75 flipper-path))
+    (draw-path context [600 300] (scale-path 1.0 flipper-path))
+    (draw-path context [600 350] (scale-path 1.25 flipper-path))
+    (draw-path context [600 400] (scale-path 1.5 flipper-path))
+    
+    (draw-path context [200 200] player-path)
+    (draw-path context [250 250] (rotate-path 45 player-path))
+    (draw-path context [300 300] (rotate-path 90 player-path))
+    (draw-path context [350 350] (rotate-path 135 player-path))
+    (draw-path context [400 400] (rotate-path 180 player-path))
     (doseq [idx (range (count (:segments level)))]
-      (draw-rectangle context(rectangle-to-canvas-coords dims (rectangle-for-segment level idx))))
+      (.log js/console (str "Index: " (pr-str idx)))
+      (.log js/console (str "Midpoint: " (pr-str (segment-midpoint level idx false))))
+      (.log js/console (str "Length: " (pr-str
+      (-
+       (first (segment-midpoint level idx true))
+       (first (segment-midpoint level idx false))))))
+      (draw-rectangle context (rectangle-to-canvas-coords dims (rectangle-for-segment level idx))))
   ))
 
 (comment (defn ^:export canvasDraw []

diff --git a/tempest/util.cljs b/tempest/util.cljs
line changes: +14/-0
index 0000000..7b22e16
--- /dev/null
+++ b/tempest/util.cljs
@@ -0,0 +1,14 @@
+(ns tempest.util
+  (:require [goog.dom :as dom]
+            [goog.Timer :as timer]
+            [goog.events :as events]
+            [goog.events.EventType :as event-type]
+            [goog.math :as math]))
+
+(defn rad-to-deg [rad]
+  (/ (* rad 180) 3.14159265358979))
+
+(defn deg-to-rad [deg]
+  (/ (* deg 3.14159265358979) 180))
+
+