["^ ","~:resource-id",["~:shadow.build.classpath/resource","com/cognitect/transit/impl/decoder.js"],"~:js","goog.provide(\"com.cognitect.transit.impl.decoder\");\ngoog.require(\"com.cognitect.transit.util\");\ngoog.require(\"com.cognitect.transit.delimiters\");\ngoog.require(\"com.cognitect.transit.caching\");\ngoog.require(\"com.cognitect.transit.types\");\ngoog.scope(function() {\n var decoder = com.cognitect.transit.impl.decoder, util = com.cognitect.transit.util, d = com.cognitect.transit.delimiters, caching = com.cognitect.transit.caching, types = com.cognitect.transit.types;\n decoder.Tag = function Transit$Tag(s) {\n this.str = s;\n };\n decoder.tag = function(s) {\n return new decoder.Tag(s);\n };\n decoder.isTag = function(x) {\n return x && x instanceof decoder.Tag;\n };\n decoder.isGroundHandler = function(handler) {\n switch(handler) {\n case \"_\":\n case \"s\":\n case \"?\":\n case \"i\":\n case \"d\":\n case \"b\":\n case \"'\":\n case \"array\":\n case \"map\":\n return true;\n }\n return false;\n };\n decoder.Decoder = function Transit$Decoder(options) {\n this.options = options || {};\n this.handlers = {};\n for (var h in this.defaults.handlers) {\n this.handlers[h] = this.defaults.handlers[h];\n }\n for (var h in this.options[\"handlers\"]) {\n if (decoder.isGroundHandler(h)) {\n throw new Error('Cannot override handler for ground type \"' + h + '\"');\n }\n this.handlers[h] = this.options[\"handlers\"][h];\n }\n this.preferStrings = this.options[\"preferStrings\"] != null ? this.options[\"preferStrings\"] : this.defaults.preferStrings;\n this.preferBuffers = this.options[\"preferBuffers\"] != null ? this.options[\"preferBuffers\"] : this.defaults.preferBuffers;\n this.defaultHandler = this.options[\"defaultHandler\"] || this.defaults.defaultHandler;\n this.mapBuilder = this.options[\"mapBuilder\"];\n this.arrayBuilder = this.options[\"arrayBuilder\"];\n };\n decoder.Decoder.prototype.defaults = {handlers:{\"_\":function(v, d) {\n return types.nullValue();\n }, \"?\":function(v, d) {\n return types.boolValue(v);\n }, \"b\":function(v, d) {\n return types.binary(v, d);\n }, \"i\":function(v, d) {\n return types.intValue(v);\n }, \"n\":function(v, d) {\n return types.bigInteger(v);\n }, \"d\":function(v, d) {\n return types.floatValue(v);\n }, \"f\":function(v, d) {\n return types.bigDecimalValue(v);\n }, \"c\":function(v, d) {\n return types.charValue(v);\n }, \":\":function(v, d) {\n return types.keyword(v);\n }, \"$\":function(v, d) {\n return types.symbol(v);\n }, \"r\":function(v, d) {\n return types.uri(v);\n }, \"z\":function(v, d) {\n return types.specialDouble(v);\n }, \"'\":function(v, d) {\n return v;\n }, \"m\":function(v, d) {\n return types.date(v);\n }, \"t\":function(v, d) {\n return types.verboseDate(v);\n }, \"u\":function(v, d) {\n return types.uuid(v);\n }, \"set\":function(v, d) {\n return types.set(v);\n }, \"list\":function(v, d) {\n return types.list(v);\n }, \"link\":function(v, d) {\n return types.link(v);\n }, \"cmap\":function(v, d) {\n return types.map(v, false);\n }}, defaultHandler:function(c, val) {\n return types.taggedValue(c, val);\n }, preferStrings:true, preferBuffers:true};\n decoder.Decoder.prototype.decode = function(node, cache, asMapKey, tagValue) {\n if (node == null) {\n return null;\n }\n var t = typeof node;\n switch(t) {\n case \"string\":\n return this.decodeString(node, cache, asMapKey, tagValue);\n break;\n case \"object\":\n if (util.isArray(node)) {\n if (node[0] === \"^ \") {\n return this.decodeArrayHash(node, cache, asMapKey, tagValue);\n } else {\n return this.decodeArray(node, cache, asMapKey, tagValue);\n }\n } else {\n return this.decodeHash(node, cache, asMapKey, tagValue);\n }\n break;\n }\n return node;\n };\n decoder.Decoder.prototype[\"decode\"] = decoder.Decoder.prototype.decode;\n decoder.Decoder.prototype.decodeString = function(string, cache, asMapKey, tagValue) {\n if (caching.isCacheable(string, asMapKey)) {\n var val = this.parseString(string, cache, false);\n if (cache) {\n cache.write(val, asMapKey);\n }\n return val;\n } else if (caching.isCacheCode(string)) {\n return cache.read(string, asMapKey);\n } else {\n return this.parseString(string, cache, asMapKey);\n }\n };\n decoder.Decoder.prototype.decodeHash = function(hash, cache, asMapKey, tagValue) {\n var ks = util.objectKeys(hash), key = ks[0], tag = ks.length == 1 ? this.decode(key, cache, false, false) : null;\n if (decoder.isTag(tag)) {\n var val = hash[key], handler = this.handlers[tag.str];\n if (handler != null) {\n return handler(this.decode(val, cache, false, true), this);\n } else {\n return types.taggedValue(tag.str, this.decode(val, cache, false, false));\n }\n } else if (this.mapBuilder) {\n if (ks.length < types.SMALL_ARRAY_MAP_THRESHOLD * 2 && this.mapBuilder.fromArray) {\n var nodep = [];\n for (var i = 0; i < ks.length; i++) {\n var strKey = ks[i];\n nodep.push(this.decode(strKey, cache, true, false));\n nodep.push(this.decode(hash[strKey], cache, false, false));\n }\n return this.mapBuilder.fromArray(nodep, hash);\n } else {\n var ret = this.mapBuilder.init(hash);\n for (var i = 0; i < ks.length; i++) {\n var strKey = ks[i];\n ret = this.mapBuilder.add(ret, this.decode(strKey, cache, true, false), this.decode(hash[strKey], cache, false, false), hash);\n }\n return this.mapBuilder.finalize(ret, hash);\n }\n } else {\n var nodep = [];\n for (var i = 0; i < ks.length; i++) {\n var strKey = ks[i];\n nodep.push(this.decode(strKey, cache, true, false));\n nodep.push(this.decode(hash[strKey], cache, false, false));\n }\n return types.map(nodep, false);\n }\n };\n decoder.Decoder.prototype.decodeArrayHash = function(node, cache, asMapKey, tagValue) {\n if (this.mapBuilder) {\n if (node.length < types.SMALL_ARRAY_MAP_THRESHOLD * 2 + 1 && this.mapBuilder.fromArray) {\n var nodep = [];\n for (var i = 1; i < node.length; i += 2) {\n nodep.push(this.decode(node[i], cache, true, false));\n nodep.push(this.decode(node[i + 1], cache, false, false));\n }\n return this.mapBuilder.fromArray(nodep, node);\n } else {\n var ret = this.mapBuilder.init(node);\n for (var i = 1; i < node.length; i += 2) {\n ret = this.mapBuilder.add(ret, this.decode(node[i], cache, true, false), this.decode(node[i + 1], cache, false, false), node);\n }\n return this.mapBuilder.finalize(ret, node);\n }\n } else {\n var nodep = [];\n for (var i = 1; i < node.length; i += 2) {\n nodep.push(this.decode(node[i], cache, true, false));\n nodep.push(this.decode(node[i + 1], cache, false, false));\n }\n return types.map(nodep, false);\n }\n };\n decoder.Decoder.prototype.decodeArray = function(node, cache, asMapKey, tagValue) {\n if (tagValue) {\n var ret = [];\n for (var i = 0; i < node.length; i++) {\n ret.push(this.decode(node[i], cache, asMapKey, false));\n }\n return ret;\n } else {\n var cacheIdx = cache && cache.idx;\n if (node.length === 2 && typeof node[0] === \"string\") {\n var tag = this.decode(node[0], cache, false, false);\n if (decoder.isTag(tag)) {\n var val = node[1], handler = this.handlers[tag.str];\n if (handler != null) {\n var ret = handler(this.decode(val, cache, asMapKey, true), this);\n return ret;\n } else {\n return types.taggedValue(tag.str, this.decode(val, cache, asMapKey, false));\n }\n }\n }\n if (cache && cacheIdx != cache.idx) {\n cache.idx = cacheIdx;\n }\n if (this.arrayBuilder) {\n if (node.length <= 32 && this.arrayBuilder.fromArray) {\n var arr = [];\n for (var i = 0; i < node.length; i++) {\n arr.push(this.decode(node[i], cache, asMapKey, false));\n }\n return this.arrayBuilder.fromArray(arr, node);\n } else {\n var ret = this.arrayBuilder.init(node);\n for (var i = 0; i < node.length; i++) {\n ret = this.arrayBuilder.add(ret, this.decode(node[i], cache, asMapKey, false), node);\n }\n return this.arrayBuilder.finalize(ret, node);\n }\n } else {\n var ret = [];\n for (var i = 0; i < node.length; i++) {\n ret.push(this.decode(node[i], cache, asMapKey, false));\n }\n return ret;\n }\n }\n };\n decoder.Decoder.prototype.parseString = function(string, cache, asMapKey) {\n if (string.charAt(0) === d.ESC) {\n var c = string.charAt(1);\n if (c === d.ESC || c === d.SUB || c === d.RES) {\n return string.substring(1);\n } else if (c === d.TAG) {\n return decoder.tag(string.substring(2));\n } else {\n var handler = this.handlers[c];\n if (handler == null) {\n return this.defaultHandler(c, string.substring(2));\n } else {\n return handler(string.substring(2), this);\n }\n }\n } else {\n return string;\n }\n };\n decoder.decoder = function(options) {\n return new decoder.Decoder(options);\n };\n});\n","~:source","// Copyright 2014 Cognitect. All Rights Reserved.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS-IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\ngoog.provide(\"com.cognitect.transit.impl.decoder\");\ngoog.require(\"com.cognitect.transit.util\");\ngoog.require(\"com.cognitect.transit.delimiters\");\ngoog.require(\"com.cognitect.transit.caching\");\ngoog.require(\"com.cognitect.transit.types\");\n\ngoog.scope(function () {\n\n var decoder = com.cognitect.transit.impl.decoder,\n util = com.cognitect.transit.util,\n d = com.cognitect.transit.delimiters,\n caching = com.cognitect.transit.caching,\n types = com.cognitect.transit.types;\n\n // =========================================================================\n // Decoder\n\n /**\n * @constructor\n */\n decoder.Tag = function Transit$Tag(s) {\n this.str = s;\n };\n\n decoder.tag = function (s) {\n return new decoder.Tag(s);\n };\n\n decoder.isTag = function (x) {\n return x && (x instanceof decoder.Tag);\n };\n\n decoder.isGroundHandler = function (handler) {\n switch (handler) {\n case \"_\":\n case \"s\":\n case \"?\":\n case \"i\":\n case \"d\":\n case \"b\":\n case \"'\":\n case \"array\":\n case \"map\":\n return true;\n }\n return false;\n };\n\n /**\n * A transit decoder\n * @constructor\n */\n decoder.Decoder = function Transit$Decoder(options) {\n this.options = options || {};\n this.handlers = {};\n for (var h in this.defaults.handlers) {\n this.handlers[h] = this.defaults.handlers[h];\n }\n for (var h in this.options[\"handlers\"]) {\n if (decoder.isGroundHandler(h)) {\n throw new Error(\"Cannot override handler for ground type \\\"\" + h + \"\\\"\");\n }\n this.handlers[h] = this.options[\"handlers\"][h];\n }\n this.preferStrings = this.options[\"preferStrings\"] != null ? this.options[\"preferStrings\"] : this.defaults.preferStrings;\n this.preferBuffers = this.options[\"preferBuffers\"] != null ? this.options[\"preferBuffers\"] : this.defaults.preferBuffers;\n this.defaultHandler = this.options[\"defaultHandler\"] || this.defaults.defaultHandler;\n /* NOT PUBLIC */\n this.mapBuilder = this.options[\"mapBuilder\"];\n this.arrayBuilder = this.options[\"arrayBuilder\"];\n };\n\n\n decoder.Decoder.prototype.defaults = {\n handlers: {\n \"_\": function (v, d) {\n return types.nullValue();\n },\n \"?\": function (v, d) {\n return types.boolValue(v);\n },\n \"b\": function (v, d) {\n return types.binary(v, d);\n },\n \"i\": function (v, d) {\n return types.intValue(v);\n },\n \"n\": function (v, d) {\n return types.bigInteger(v);\n },\n \"d\": function (v, d) {\n return types.floatValue(v);\n },\n \"f\": function (v, d) {\n return types.bigDecimalValue(v);\n },\n \"c\": function (v, d) {\n return types.charValue(v);\n },\n \":\": function (v, d) {\n return types.keyword(v);\n },\n \"$\": function (v, d) {\n return types.symbol(v);\n },\n \"r\": function (v, d) {\n return types.uri(v);\n },\n \"z\": function (v, d) {\n return types.specialDouble(v);\n },\n\n // tagged\n \"'\": function (v, d) {\n return v;\n },\n \"m\": function (v, d) {\n return types.date(v);\n },\n \"t\": function (v, d) {\n return types.verboseDate(v);\n },\n \"u\": function (v, d) {\n return types.uuid(v);\n },\n \"set\": function (v, d) {\n return types.set(v);\n },\n \"list\": function (v, d) {\n return types.list(v);\n },\n \"link\": function (v, d) {\n return types.link(v);\n },\n \"cmap\": function (v, d) {\n return types.map(v, false);\n }\n },\n defaultHandler: function (c, val) {\n return types.taggedValue(c, val);\n },\n preferStrings: true,\n preferBuffers: true\n };\n\n /**\n * @param {*} node\n * @param {*} cache\n * @param {boolean=} asMapKey\n * @param {boolean=} tagValue\n * @returns {*}\n */\n decoder.Decoder.prototype.decode = function (node, cache, asMapKey, tagValue) {\n if (node == null) return null;\n\n var t = typeof node;\n\n switch (t) {\n case \"string\":\n return this.decodeString(node, cache, asMapKey, tagValue);\n break;\n case \"object\":\n if (util.isArray(node)) {\n if (node[0] === \"^ \") {\n return this.decodeArrayHash(node, cache, asMapKey, tagValue);\n } else {\n return this.decodeArray(node, cache, asMapKey, tagValue);\n }\n } else {\n return this.decodeHash(node, cache, asMapKey, tagValue);\n }\n break;\n }\n\n return node;\n };\n decoder.Decoder.prototype[\"decode\"] = decoder.Decoder.prototype.decode;\n\n decoder.Decoder.prototype.decodeString = function (string, cache, asMapKey, tagValue) {\n if (caching.isCacheable(string, asMapKey)) {\n var val = this.parseString(string, cache, false);\n if (cache) {\n cache.write(val, asMapKey);\n }\n return val;\n } else if (caching.isCacheCode(string)) {\n return cache.read(string, asMapKey);\n } else {\n return this.parseString(string, cache, asMapKey);\n }\n };\n\n decoder.Decoder.prototype.decodeHash = function (hash, cache, asMapKey, tagValue) {\n var ks = util.objectKeys(hash),\n key = ks[0],\n tag = ks.length == 1 ? this.decode(key, cache, false, false) : null;\n\n if (decoder.isTag(tag)) {\n var val = hash[key],\n handler = this.handlers[tag.str];\n if (handler != null) {\n return handler(this.decode(val, cache, false, true), this);\n } else {\n return types.taggedValue(tag.str, this.decode(val, cache, false, false));\n }\n } else if (this.mapBuilder) {\n if ((ks.length < (types.SMALL_ARRAY_MAP_THRESHOLD * 2)) && this.mapBuilder.fromArray) {\n var nodep = [];\n for (var i = 0; i < ks.length; i++) {\n var strKey = ks[i];\n nodep.push(this.decode(strKey, cache, true, false));\n nodep.push(this.decode(hash[strKey], cache, false, false));\n }\n return this.mapBuilder.fromArray(nodep, hash);\n } else {\n var ret = this.mapBuilder.init(hash);\n for (var i = 0; i < ks.length; i++) {\n var strKey = ks[i];\n ret = this.mapBuilder.add(ret,\n this.decode(strKey, cache, true, false),\n this.decode(hash[strKey], cache, false, false),\n hash);\n }\n return this.mapBuilder.finalize(ret, hash);\n }\n } else {\n var nodep = [];\n\n for (var i = 0; i < ks.length; i++) {\n var strKey = ks[i];\n nodep.push(this.decode(strKey, cache, true, false));\n nodep.push(this.decode(hash[strKey], cache, false, false));\n }\n\n return types.map(nodep, false);\n }\n };\n\n decoder.Decoder.prototype.decodeArrayHash = function (node, cache, asMapKey, tagValue) {\n if (this.mapBuilder) {\n if ((node.length < ((types.SMALL_ARRAY_MAP_THRESHOLD * 2) + 1)) && this.mapBuilder.fromArray) {\n var nodep = [];\n for (var i = 1; i < node.length; i += 2) {\n nodep.push(this.decode(node[i], cache, true, false));\n nodep.push(this.decode(node[i + 1], cache, false, false));\n }\n return this.mapBuilder.fromArray(nodep, node);\n } else {\n var ret = this.mapBuilder.init(node);\n for (var i = 1; i < node.length; i += 2) {\n ret = this.mapBuilder.add(ret,\n this.decode(node[i], cache, true, false),\n this.decode(node[i + 1], cache, false, false),\n node)\n }\n return this.mapBuilder.finalize(ret, node);\n }\n } else {\n var nodep = [];\n\n // collect keys\n for (var i = 1; i < node.length; i += 2) {\n nodep.push(this.decode(node[i], cache, true, false));\n nodep.push(this.decode(node[i + 1], cache, false, false));\n }\n\n return types.map(nodep, false);\n }\n };\n\n decoder.Decoder.prototype.decodeArray = function (node, cache, asMapKey, tagValue) {\n if (tagValue) {\n var ret = [];\n for (var i = 0; i < node.length; i++) {\n ret.push(this.decode(node[i], cache, asMapKey, false));\n }\n return ret;\n } else {\n var cacheIdx = cache && cache.idx;\n // tagged value as 2-array case\n if ((node.length === 2) &&\n (typeof node[0] === \"string\")) {\n var tag = this.decode(node[0], cache, false, false);\n if (decoder.isTag(tag)) {\n var val = node[1],\n handler = this.handlers[tag.str];\n if (handler != null) {\n var ret = handler(this.decode(val, cache, asMapKey, true), this);\n return ret;\n } else {\n return types.taggedValue(tag.str, this.decode(val, cache, asMapKey, false))\n }\n }\n }\n\n // rewind cache\n if (cache && (cacheIdx != cache.idx)) {\n cache.idx = cacheIdx;\n }\n\n if (this.arrayBuilder) {\n // NOTE: hard coded for ClojureScript for now - David\n if (node.length <= 32 && this.arrayBuilder.fromArray) {\n var arr = [];\n for (var i = 0; i < node.length; i++) {\n arr.push(this.decode(node[i], cache, asMapKey, false));\n }\n return this.arrayBuilder.fromArray(arr, node);\n } else {\n var ret = this.arrayBuilder.init(node);\n for (var i = 0; i < node.length; i++) {\n ret = this.arrayBuilder.add(ret, this.decode(node[i], cache, asMapKey, false), node);\n }\n return this.arrayBuilder.finalize(ret, node);\n }\n } else {\n var ret = [];\n for (var i = 0; i < node.length; i++) {\n ret.push(this.decode(node[i], cache, asMapKey, false));\n }\n return ret;\n }\n }\n };\n\n decoder.Decoder.prototype.parseString = function (string, cache, asMapKey) {\n if (string.charAt(0) === d.ESC) {\n var c = string.charAt(1);\n if (c === d.ESC || c === d.SUB || c === d.RES) {\n return string.substring(1);\n } else if (c === d.TAG) {\n return decoder.tag(string.substring(2));\n } else {\n var handler = this.handlers[c];\n if (handler == null) {\n return this.defaultHandler(c, string.substring(2));\n } else {\n return handler(string.substring(2), this);\n }\n }\n } else {\n return string;\n }\n };\n\n decoder.decoder = function (options) {\n return new decoder.Decoder(options);\n };\n\n});\n","~:compiled-at",1684858198113,"~:source-map-json","{\n\"version\":3,\n\"file\":\"com.cognitect.transit.impl.decoder.js\",\n\"lineCount\":261,\n\"mappings\":\"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\",\n\"sources\":[\"com/cognitect/transit/impl/decoder.js\"],\n\"sourcesContent\":[\"// Copyright 2014 Cognitect. All Rights Reserved.\\n//\\n// Licensed under the Apache License, Version 2.0 (the \\\"License\\\");\\n// you may not use this file except in compliance with the License.\\n// You may obtain a copy of the License at\\n//\\n// http://www.apache.org/licenses/LICENSE-2.0\\n//\\n// Unless required by applicable law or agreed to in writing, software\\n// distributed under the License is distributed on an \\\"AS-IS\\\" BASIS,\\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\\n// See the License for the specific language governing permissions and\\n// limitations under the License.\\n\\ngoog.provide(\\\"com.cognitect.transit.impl.decoder\\\");\\ngoog.require(\\\"com.cognitect.transit.util\\\");\\ngoog.require(\\\"com.cognitect.transit.delimiters\\\");\\ngoog.require(\\\"com.cognitect.transit.caching\\\");\\ngoog.require(\\\"com.cognitect.transit.types\\\");\\n\\ngoog.scope(function () {\\n\\n var decoder = com.cognitect.transit.impl.decoder,\\n util = com.cognitect.transit.util,\\n d = com.cognitect.transit.delimiters,\\n caching = com.cognitect.transit.caching,\\n types = com.cognitect.transit.types;\\n\\n // =========================================================================\\n // Decoder\\n\\n /**\\n * @constructor\\n */\\n decoder.Tag = function Transit$Tag(s) {\\n this.str = s;\\n };\\n\\n decoder.tag = function (s) {\\n return new decoder.Tag(s);\\n };\\n\\n decoder.isTag = function (x) {\\n return x && (x instanceof decoder.Tag);\\n };\\n\\n decoder.isGroundHandler = function (handler) {\\n switch (handler) {\\n case \\\"_\\\":\\n case \\\"s\\\":\\n case \\\"?\\\":\\n case \\\"i\\\":\\n case \\\"d\\\":\\n case \\\"b\\\":\\n case \\\"'\\\":\\n case \\\"array\\\":\\n case \\\"map\\\":\\n return true;\\n }\\n return false;\\n };\\n\\n /**\\n * A transit decoder\\n * @constructor\\n */\\n decoder.Decoder = function Transit$Decoder(options) {\\n this.options = options || {};\\n this.handlers = {};\\n for (var h in this.defaults.handlers) {\\n this.handlers[h] = this.defaults.handlers[h];\\n }\\n for (var h in this.options[\\\"handlers\\\"]) {\\n if (decoder.isGroundHandler(h)) {\\n throw new Error(\\\"Cannot override handler for ground type \\\\\\\"\\\" + h + \\\"\\\\\\\"\\\");\\n }\\n this.handlers[h] = this.options[\\\"handlers\\\"][h];\\n }\\n this.preferStrings = this.options[\\\"preferStrings\\\"] != null ? this.options[\\\"preferStrings\\\"] : this.defaults.preferStrings;\\n this.preferBuffers = this.options[\\\"preferBuffers\\\"] != null ? this.options[\\\"preferBuffers\\\"] : this.defaults.preferBuffers;\\n this.defaultHandler = this.options[\\\"defaultHandler\\\"] || this.defaults.defaultHandler;\\n /* NOT PUBLIC */\\n this.mapBuilder = this.options[\\\"mapBuilder\\\"];\\n this.arrayBuilder = this.options[\\\"arrayBuilder\\\"];\\n };\\n\\n\\n decoder.Decoder.prototype.defaults = {\\n handlers: {\\n \\\"_\\\": function (v, d) {\\n return types.nullValue();\\n },\\n \\\"?\\\": function (v, d) {\\n return types.boolValue(v);\\n },\\n \\\"b\\\": function (v, d) {\\n return types.binary(v, d);\\n },\\n \\\"i\\\": function (v, d) {\\n return types.intValue(v);\\n },\\n \\\"n\\\": function (v, d) {\\n return types.bigInteger(v);\\n },\\n \\\"d\\\": function (v, d) {\\n return types.floatValue(v);\\n },\\n \\\"f\\\": function (v, d) {\\n return types.bigDecimalValue(v);\\n },\\n \\\"c\\\": function (v, d) {\\n return types.charValue(v);\\n },\\n \\\":\\\": function (v, d) {\\n return types.keyword(v);\\n },\\n \\\"$\\\": function (v, d) {\\n return types.symbol(v);\\n },\\n \\\"r\\\": function (v, d) {\\n return types.uri(v);\\n },\\n \\\"z\\\": function (v, d) {\\n return types.specialDouble(v);\\n },\\n\\n // tagged\\n \\\"'\\\": function (v, d) {\\n return v;\\n },\\n \\\"m\\\": function (v, d) {\\n return types.date(v);\\n },\\n \\\"t\\\": function (v, d) {\\n return types.verboseDate(v);\\n },\\n \\\"u\\\": function (v, d) {\\n return types.uuid(v);\\n },\\n \\\"set\\\": function (v, d) {\\n return types.set(v);\\n },\\n \\\"list\\\": function (v, d) {\\n return types.list(v);\\n },\\n \\\"link\\\": function (v, d) {\\n return types.link(v);\\n },\\n \\\"cmap\\\": function (v, d) {\\n return types.map(v, false);\\n }\\n },\\n defaultHandler: function (c, val) {\\n return types.taggedValue(c, val);\\n },\\n preferStrings: true,\\n preferBuffers: true\\n };\\n\\n /**\\n * @param {*} node\\n * @param {*} cache\\n * @param {boolean=} asMapKey\\n * @param {boolean=} tagValue\\n * @returns {*}\\n */\\n decoder.Decoder.prototype.decode = function (node, cache, asMapKey, tagValue) {\\n if (node == null) return null;\\n\\n var t = typeof node;\\n\\n switch (t) {\\n case \\\"string\\\":\\n return this.decodeString(node, cache, asMapKey, tagValue);\\n break;\\n case \\\"object\\\":\\n if (util.isArray(node)) {\\n if (node[0] === \\\"^ \\\") {\\n return this.decodeArrayHash(node, cache, asMapKey, tagValue);\\n } else {\\n return this.decodeArray(node, cache, asMapKey, tagValue);\\n }\\n } else {\\n return this.decodeHash(node, cache, asMapKey, tagValue);\\n }\\n break;\\n }\\n\\n return node;\\n };\\n decoder.Decoder.prototype[\\\"decode\\\"] = decoder.Decoder.prototype.decode;\\n\\n decoder.Decoder.prototype.decodeString = function (string, cache, asMapKey, tagValue) {\\n if (caching.isCacheable(string, asMapKey)) {\\n var val = this.parseString(string, cache, false);\\n if (cache) {\\n cache.write(val, asMapKey);\\n }\\n return val;\\n } else if (caching.isCacheCode(string)) {\\n return cache.read(string, asMapKey);\\n } else {\\n return this.parseString(string, cache, asMapKey);\\n }\\n };\\n\\n decoder.Decoder.prototype.decodeHash = function (hash, cache, asMapKey, tagValue) {\\n var ks = util.objectKeys(hash),\\n key = ks[0],\\n tag = ks.length == 1 ? this.decode(key, cache, false, false) : null;\\n\\n if (decoder.isTag(tag)) {\\n var val = hash[key],\\n handler = this.handlers[tag.str];\\n if (handler != null) {\\n return handler(this.decode(val, cache, false, true), this);\\n } else {\\n return types.taggedValue(tag.str, this.decode(val, cache, false, false));\\n }\\n } else if (this.mapBuilder) {\\n if ((ks.length < (types.SMALL_ARRAY_MAP_THRESHOLD * 2)) && this.mapBuilder.fromArray) {\\n var nodep = [];\\n for (var i = 0; i < ks.length; i++) {\\n var strKey = ks[i];\\n nodep.push(this.decode(strKey, cache, true, false));\\n nodep.push(this.decode(hash[strKey], cache, false, false));\\n }\\n return this.mapBuilder.fromArray(nodep, hash);\\n } else {\\n var ret = this.mapBuilder.init(hash);\\n for (var i = 0; i < ks.length; i++) {\\n var strKey = ks[i];\\n ret = this.mapBuilder.add(ret,\\n this.decode(strKey, cache, true, false),\\n this.decode(hash[strKey], cache, false, false),\\n hash);\\n }\\n return this.mapBuilder.finalize(ret, hash);\\n }\\n } else {\\n var nodep = [];\\n\\n for (var i = 0; i < ks.length; i++) {\\n var strKey = ks[i];\\n nodep.push(this.decode(strKey, cache, true, false));\\n nodep.push(this.decode(hash[strKey], cache, false, false));\\n }\\n\\n return types.map(nodep, false);\\n }\\n };\\n\\n decoder.Decoder.prototype.decodeArrayHash = function (node, cache, asMapKey, tagValue) {\\n if (this.mapBuilder) {\\n if ((node.length < ((types.SMALL_ARRAY_MAP_THRESHOLD * 2) + 1)) && this.mapBuilder.fromArray) {\\n var nodep = [];\\n for (var i = 1; i < node.length; i += 2) {\\n nodep.push(this.decode(node[i], cache, true, false));\\n nodep.push(this.decode(node[i + 1], cache, false, false));\\n }\\n return this.mapBuilder.fromArray(nodep, node);\\n } else {\\n var ret = this.mapBuilder.init(node);\\n for (var i = 1; i < node.length; i += 2) {\\n ret = this.mapBuilder.add(ret,\\n this.decode(node[i], cache, true, false),\\n this.decode(node[i + 1], cache, false, false),\\n node)\\n }\\n return this.mapBuilder.finalize(ret, node);\\n }\\n } else {\\n var nodep = [];\\n\\n // collect keys\\n for (var i = 1; i < node.length; i += 2) {\\n nodep.push(this.decode(node[i], cache, true, false));\\n nodep.push(this.decode(node[i + 1], cache, false, false));\\n }\\n\\n return types.map(nodep, false);\\n }\\n };\\n\\n decoder.Decoder.prototype.decodeArray = function (node, cache, asMapKey, tagValue) {\\n if (tagValue) {\\n var ret = [];\\n for (var i = 0; i < node.length; i++) {\\n ret.push(this.decode(node[i], cache, asMapKey, false));\\n }\\n return ret;\\n } else {\\n var cacheIdx = cache && cache.idx;\\n // tagged value as 2-array case\\n if ((node.length === 2) &&\\n (typeof node[0] === \\\"string\\\")) {\\n var tag = this.decode(node[0], cache, false, false);\\n if (decoder.isTag(tag)) {\\n var val = node[1],\\n handler = this.handlers[tag.str];\\n if (handler != null) {\\n var ret = handler(this.decode(val, cache, asMapKey, true), this);\\n return ret;\\n } else {\\n return types.taggedValue(tag.str, this.decode(val, cache, asMapKey, false))\\n }\\n }\\n }\\n\\n // rewind cache\\n if (cache && (cacheIdx != cache.idx)) {\\n cache.idx = cacheIdx;\\n }\\n\\n if (this.arrayBuilder) {\\n // NOTE: hard coded for ClojureScript for now - David\\n if (node.length <= 32 && this.arrayBuilder.fromArray) {\\n var arr = [];\\n for (var i = 0; i < node.length; i++) {\\n arr.push(this.decode(node[i], cache, asMapKey, false));\\n }\\n return this.arrayBuilder.fromArray(arr, node);\\n } else {\\n var ret = this.arrayBuilder.init(node);\\n for (var i = 0; i < node.length; i++) {\\n ret = this.arrayBuilder.add(ret, this.decode(node[i], cache, asMapKey, false), node);\\n }\\n return this.arrayBuilder.finalize(ret, node);\\n }\\n } else {\\n var ret = [];\\n for (var i = 0; i < node.length; i++) {\\n ret.push(this.decode(node[i], cache, asMapKey, false));\\n }\\n return ret;\\n }\\n }\\n };\\n\\n decoder.Decoder.prototype.parseString = function (string, cache, asMapKey) {\\n if (string.charAt(0) === d.ESC) {\\n var c = string.charAt(1);\\n if (c === d.ESC || c === d.SUB || c === d.RES) {\\n return string.substring(1);\\n } else if (c === d.TAG) {\\n return decoder.tag(string.substring(2));\\n } else {\\n var handler = this.handlers[c];\\n if (handler == null) {\\n return this.defaultHandler(c, string.substring(2));\\n } else {\\n return handler(string.substring(2), this);\\n }\\n }\\n } else {\\n return string;\\n }\\n };\\n\\n decoder.decoder = function (options) {\\n return new decoder.Decoder(options);\\n };\\n\\n});\\n\"],\n\"names\":[\"goog\",\"provide\",\"require\",\"scope\",\"decoder\",\"com\",\"cognitect\",\"transit\",\"impl\",\"util\",\"d\",\"delimiters\",\"caching\",\"types\",\"Tag\",\"decoder.Tag\",\"Transit$Tag\",\"s\",\"str\",\"tag\",\"decoder.tag\",\"isTag\",\"decoder.isTag\",\"x\",\"isGroundHandler\",\"decoder.isGroundHandler\",\"handler\",\"Decoder\",\"decoder.Decoder\",\"Transit$Decoder\",\"options\",\"handlers\",\"h\",\"defaults\",\"Error\",\"preferStrings\",\"preferBuffers\",\"defaultHandler\",\"mapBuilder\",\"arrayBuilder\",\"prototype\",\"_\",\"v\",\"nullValue\",\"?\",\"boolValue\",\"b\",\"binary\",\"i\",\"intValue\",\"n\",\"bigInteger\",\"floatValue\",\"f\",\"bigDecimalValue\",\"c\",\"charValue\",\":\",\"keyword\",\"$\",\"symbol\",\"r\",\"uri\",\"z\",\"specialDouble\",\"'\",\"m\",\"date\",\"t\",\"verboseDate\",\"u\",\"uuid\",\"set\",\"list\",\"link\",\"cmap\",\"map\",\"val\",\"taggedValue\",\"decode\",\"decoder.Decoder.prototype.decode\",\"node\",\"cache\",\"asMapKey\",\"tagValue\",\"decodeString\",\"isArray\",\"decodeArrayHash\",\"decodeArray\",\"decodeHash\",\"decoder.Decoder.prototype.decodeString\",\"string\",\"isCacheable\",\"parseString\",\"write\",\"isCacheCode\",\"read\",\"decoder.Decoder.prototype.decodeHash\",\"hash\",\"ks\",\"objectKeys\",\"key\",\"length\",\"SMALL_ARRAY_MAP_THRESHOLD\",\"fromArray\",\"nodep\",\"strKey\",\"push\",\"ret\",\"init\",\"add\",\"finalize\",\"decoder.Decoder.prototype.decodeArrayHash\",\"decoder.Decoder.prototype.decodeArray\",\"cacheIdx\",\"idx\",\"arr\",\"decoder.Decoder.prototype.parseString\",\"charAt\",\"ESC\",\"SUB\",\"RES\",\"substring\",\"TAG\",\"decoder.decoder\"]\n}\n"]