You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by kx...@apache.org on 2015/07/13 20:45:15 UTC
[16/43] jiffy commit: updated refs/heads/upstream to 446e284
http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/009-reg-issue-24.t
----------------------------------------------------------------------
diff --git a/test/009-reg-issue-24.t b/test/009-reg-issue-24.t
deleted file mode 100755
index 8c50247..0000000
--- a/test/009-reg-issue-24.t
+++ /dev/null
@@ -1,3459 +0,0 @@
-#! /usr/bin/env escript
-% This file is part of Jiffy released under the MIT license.
-% See the LICENSE file for more information.
-
-main([]) ->
- code:add_pathz("ebin"),
- code:add_pathz("test"),
-
- etap:plan(1),
- jiffy:encode(big_doc(), [uescape]),
- etap:is(1, 1, "No segfault encoding large doc with uescapes."),
- etap:end_tests().
-
-
-big_doc() ->
- {[{<<"_id">>,<<"_design/bookmarks">>},
- {<<"_rev">>,<<"1-1794a8236590d2fc6c288115dc539a3d">>},
- {<<"lib">>,
- {[{<<"app">>,
- <<"\nmodule.exports = {\n\n views: require('./views'),\n shows : require('./shows'),\n rewrites: require('./rewrites'),\n updates: require('./updates')\n};\n\n// Bind event handlers\n// require('./events')\n">>},
- {<<"rewrites">>,
- <<"/**\n * Rewrite settings to be exported from the design doc\n */\n\nmodule.exports = [\n {from: '/static/*', to: 'static/*'},\n {from: '/bootstrap/*', to: 'bootstrap/*'},\n {from: '/modules.js', to: 'modules.js' },\n {\"from\": \"/_db/*\", \"to\": \"../../*\" },\n {\"from\": \"/_db\", \"to\": \"../..\" },\n {\"from\": \"/bookmark_lite\", \"to\" : \"_show/bookmark_lite\"},\n {\"from\": \"/bookmark\", \"to\" : \"_show/bookmark\"},\n {\"from\": \"/save\", \"to\" : \"_update/bookmark\"},\n {\"from\": \"/click/*\", \"to\" : \"_update/click/*\"},\n {\"from\": \"/archive/*\", \"to\" : \"_update/archive/*\"},\n {from: '/', to: 'index.html'}\n];">>},
- {<<"shows">>,
- <<"var templates = require('handlebars').templates;\n\nexports.bookmark_lite = function(doc, req) {\n\n return {\n code: 200,\n headers: {'content-type' : 'text/html'},\n body: templates['newBookmark.html']({\n title : req.query.title,\n url : req.query.url\n })\n };\n\n}\n\nexports.bookmark = function(doc, req) {\n return {\n code: 200,\n headers: {'content-type' : 'text/html'},\n body: '<h2>Hellp</h2>'\n };\n}\n\n">>},
- {<<"updates">>,
- <<"\nvar md5 = require('md5');\nvar querystring = require('querystring');\n\nexports.bookmark = function(doc, req) {\n\n var details = {};\n if (req.body && req.body.length > 0) {\n details = querystring.parse(req.body);\n }\n if (req.query.title) details.title = req.query.title;\n if (req.query.url) details.url = req.query.url;\n\n if (!doc) {\n var id = md5.hex(details.url);\n var doc = {\n _id : id,\n type: 'com.eckoit.bookmark',\n title : decodeURIComponent(details.title),\n url : decodeURIComponent(details.url),\n timestamp: new Date().getTime()\n };\n if (details.short_text) doc.short_text = details.short_text;\n log(doc);\n return [doc, 'SUCCESS']\n\n } else {\n\n }\n}\n\nexports.click = function(doc, req) {\n if (!doc.clicks) doc.clicks = 0;\n doc.clicks++;\n return [doc, 'SUCCESS'];\n}\n\nexports.archive = function(doc, req) {\
n doc.archive = true;\n return [doc, 'SUCCESS'];\n}">>},
- {<<"views">>,
- <<"\n\nexports.by_date = {\n map : function(doc) {\n\n if (doc.archive) return;\n\n if (doc.type && doc.type === 'com.eckoit.bookmark' ) {\n var timestamp = doc.timestamp;\n if (!timestamp) timestamp = new Date(0);\n emit(timestamp, null);\n }\n }\n}\n\nexports.by_views = {\n map : function(doc) {\n\n if (doc.archive) return;\n\n if (doc.type && doc.type === 'com.eckoit.bookmark' ) {\n var clicks = doc.clicks;\n if (!clicks) clicks = 0;\n\n var timestamp = doc.timestamp;\n if (!timestamp) timestamp = new Date(0);\n\n emit([clicks, timestamp], null);\n }\n }\n}\n\nexports.all_tags = {\n map : function(doc) {\n if (doc.type && doc.type == 'garden.tag') {\n emit(doc.hash, null);\n }\n }\n}\n">>}]}},
- {<<"underscore">>,
- <<"// Underscore.js 1.3.1\n// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.\n// Underscore is freely distributable under the MIT license.\n// Portions of Underscore are inspired or borrowed from Prototype,\n// Oliver Steele's Functional, and John Resig's Micro-Templating.\n// For all details and documentation:\n// http://documentcloud.github.com/underscore\n\n(function() {\n\n // Baseline setup\n // --------------\n\n // Establish the root object, `window` in the browser, or `global` on the server.\n var root = this;\n\n // Save the previous value of the `_` variable.\n var previousUnderscore = root._;\n\n // Establish the object that gets returned to break out of a loop iteration.\n var breaker = {};\n\n // Save bytes in the minified (but not gzipped) version:\n var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;\n\n // Create quick reference variables for speed access to core prototypes.\n
var slice = ArrayProto.slice,\n unshift = ArrayProto.unshift,\n toString = ObjProto.toString,\n hasOwnProperty = ObjProto.hasOwnProperty;\n\n // All **ECMAScript 5** native function implementations that we hope to use\n // are declared here.\n var\n nativeForEach = ArrayProto.forEach,\n nativeMap = ArrayProto.map,\n nativeReduce = ArrayProto.reduce,\n nativeReduceRight = ArrayProto.reduceRight,\n nativeFilter = ArrayProto.filter,\n nativeEvery = ArrayProto.every,\n nativeSome = ArrayProto.some,\n nativeIndexOf = ArrayProto.indexOf,\n nativeLastIndexOf = ArrayProto.lastIndexOf,\n nativeIsArray = Array.isArray,\n nativeKeys = Object.keys,\n nativeBind = FuncProto.bind;\n\n // Create a safe reference to the Underscore object for use below.\n var _ = function(obj) { return new wrapper(obj); };\n\n // Export the Underscore object fo
r **Node.js**, with\n // backwards-compatibility for the old `require()` API. If we're in\n // the browser, add `_` as a global object via a string identifier,\n // for Closure Compiler \"advanced\" mode.\n if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n exports = module.exports = _;\n }\n exports._ = _;\n } else {\n root['_'] = _;\n }\n\n // Current version.\n _.VERSION = '1.3.1';\n\n // Collection Functions\n // --------------------\n\n // The cornerstone, an `each` implementation, aka `forEach`.\n // Handles objects with the built-in `forEach`, arrays, and raw objects.\n // Delegates to **ECMAScript 5**'s native `forEach` if available.\n var each = _.each = _.forEach = function(obj, iterator, context) {\n if (obj == null) return;\n if (nativeForEach && obj.forEach === nativeForEach) {\n obj.forEach(iterator, context);\n } else if (obj.length === +obj.length) {\n for (var i = 0, l =
obj.length; i < l; i++) {\n if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;\n }\n } else {\n for (var key in obj) {\n if (_.has(obj, key)) {\n if (iterator.call(context, obj[key], key, obj) === breaker) return;\n }\n }\n }\n };\n\n // Return the results of applying the iterator to each element.\n // Delegates to **ECMAScript 5**'s native `map` if available.\n _.map = _.collect = function(obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);\n each(obj, function(value, index, list) {\n results[results.length] = iterator.call(context, value, index, list);\n });\n if (obj.length === +obj.length) results.length = obj.length;\n return results;\n };\n\n // **Reduce** builds up a single result from a list of values, aka `inject`,\n // or `foldl`. Delegates to **ECMAScript 5**'s
native `reduce` if available.\n _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n if (nativeReduce && obj.reduce === nativeReduce) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n }\n each(obj, function(value, index, list) {\n if (!initial) {\n memo = value;\n initial = true;\n } else {\n memo = iterator.call(context, memo, value, index, list);\n }\n });\n if (!initial) throw new TypeError('Reduce of empty array with no initial value');\n return memo;\n };\n\n // The right-associative version of reduce, also known as `foldr`.\n // Delegates to **ECMAScript 5**'s native `reduceRight` if available.\n _.reduceRight = _.foldr = function(obj, iterator, memo, context) {\n var initial = arguments.length > 2;\n if (obj == null) obj = [];\n
if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n if (context) iterator = _.bind(iterator, context);\n return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n }\n var reversed = _.toArray(obj).reverse();\n if (context && !initial) iterator = _.bind(iterator, context);\n return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);\n };\n\n // Return the first value which passes a truth test. Aliased as `detect`.\n _.find = _.detect = function(obj, iterator, context) {\n var result;\n any(obj, function(value, index, list) {\n if (iterator.call(context, value, index, list)) {\n result = value;\n return true;\n }\n });\n return result;\n };\n\n // Return all the elements that pass a truth test.\n // Delegates to **ECMAScript 5**'s native `filter` if available.\n // Aliased as `select`.\n _.filter = _.select = function(obj, iterator, context) {\n
var results = [];\n if (obj == null) return results;\n if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);\n each(obj, function(value, index, list) {\n if (iterator.call(context, value, index, list)) results[results.length] = value;\n });\n return results;\n };\n\n // Return all the elements for which a truth test fails.\n _.reject = function(obj, iterator, context) {\n var results = [];\n if (obj == null) return results;\n each(obj, function(value, index, list) {\n if (!iterator.call(context, value, index, list)) results[results.length] = value;\n });\n return results;\n };\n\n // Determine whether all of the elements match a truth test.\n // Delegates to **ECMAScript 5**'s native `every` if available.\n // Aliased as `all`.\n _.every = _.all = function(obj, iterator, context) {\n var result = true;\n if (obj == null) return result;\n if (nativeEvery && obj.every === nativeEvery) return obj.
every(iterator, context);\n each(obj, function(value, index, list) {\n if (!(result = result && iterator.call(context, value, index, list))) return breaker;\n });\n return result;\n };\n\n // Determine if at least one element in the object matches a truth test.\n // Delegates to **ECMAScript 5**'s native `some` if available.\n // Aliased as `any`.\n var any = _.some = _.any = function(obj, iterator, context) {\n iterator || (iterator = _.identity);\n var result = false;\n if (obj == null) return result;\n if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);\n each(obj, function(value, index, list) {\n if (result || (result = iterator.call(context, value, index, list))) return breaker;\n });\n return !!result;\n };\n\n // Determine if a given value is included in the array or object using `===`.\n // Aliased as `contains`.\n _.include = _.contains = function(obj, target) {\n var found = false;\n if (obj
== null) return found;\n if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;\n found = any(obj, function(value) {\n return value === target;\n });\n return found;\n };\n\n // Invoke a method (with arguments) on every item in a collection.\n _.invoke = function(obj, method) {\n var args = slice.call(arguments, 2);\n return _.map(obj, function(value) {\n return (_.isFunction(method) ? method || value : value[method]).apply(value, args);\n });\n };\n\n // Convenience version of a common use case of `map`: fetching a property.\n _.pluck = function(obj, key) {\n return _.map(obj, function(value){ return value[key]; });\n };\n\n // Return the maximum element or (element-based computation).\n _.max = function(obj, iterator, context) {\n if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);\n if (!iterator && _.isEmpty(obj)) return -Infinity;\n var result = {computed : -Infinity};\n each(ob
j, function(value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed >= result.computed && (result = {value : value, computed : computed});\n });\n return result.value;\n };\n\n // Return the minimum element (or element-based computation).\n _.min = function(obj, iterator, context) {\n if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);\n if (!iterator && _.isEmpty(obj)) return Infinity;\n var result = {computed : Infinity};\n each(obj, function(value, index, list) {\n var computed = iterator ? iterator.call(context, value, index, list) : value;\n computed < result.computed && (result = {value : value, computed : computed});\n });\n return result.value;\n };\n\n // Shuffle an array.\n _.shuffle = function(obj) {\n var shuffled = [], rand;\n each(obj, function(value, index, list) {\n if (index == 0) {\n shuffled[0] = value;\n } else {\n
rand = Math.floor(Math.random() * (index + 1));\n shuffled[index] = shuffled[rand];\n shuffled[rand] = value;\n }\n });\n return shuffled;\n };\n\n // Sort the object's values by a criterion produced by an iterator.\n _.sortBy = function(obj, iterator, context) {\n return _.pluck(_.map(obj, function(value, index, list) {\n return {\n value : value,\n criteria : iterator.call(context, value, index, list)\n };\n }).sort(function(left, right) {\n var a = left.criteria, b = right.criteria;\n return a < b ? -1 : a > b ? 1 : 0;\n }), 'value');\n };\n\n // Groups the object's values by a criterion. Pass either a string attribute\n // to group by, or a function that returns the criterion.\n _.groupBy = function(obj, val) {\n var result = {};\n var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };\n each(obj, function(value, index) {\n var key = iterator(value, index);\n (re
sult[key] || (result[key] = [])).push(value);\n });\n return result;\n };\n\n // Use a comparator function to figure out at what index an object should\n // be inserted so as to maintain order. Uses binary search.\n _.sortedIndex = function(array, obj, iterator) {\n iterator || (iterator = _.identity);\n var low = 0, high = array.length;\n while (low < high) {\n var mid = (low + high) >> 1;\n iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;\n }\n return low;\n };\n\n // Safely convert anything iterable into a real, live array.\n _.toArray = function(iterable) {\n if (!iterable) return [];\n if (iterable.toArray) return iterable.toArray();\n if (_.isArray(iterable)) return slice.call(iterable);\n if (_.isArguments(iterable)) return slice.call(iterable);\n return _.values(iterable);\n };\n\n // Return the number of elements in an object.\n _.size = function(obj) {\n return _.toArr
ay(obj).length;\n };\n\n // Array Functions\n // ---------------\n\n // Get the first element of an array. Passing **n** will return the first N\n // values in the array. Aliased as `head`. The **guard** check allows it to work\n // with `_.map`.\n _.first = _.head = function(array, n, guard) {\n return (n != null) && !guard ? slice.call(array, 0, n) : array[0];\n };\n\n // Returns everything but the last entry of the array. Especcialy useful on\n // the arguments object. Passing **n** will return all the values in\n // the array, excluding the last N. The **guard** check allows it to work with\n // `_.map`.\n _.initial = function(array, n, guard) {\n return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n };\n\n // Get the last element of an array. Passing **n** will return the last N\n // values in the array. The **guard** check allows it to work with `_.map`.\n _.last = function(array, n, guard) {\n if ((n != null) && !guard) {\n
return slice.call(array, Math.max(array.length - n, 0));\n } else {\n return array[array.length - 1];\n }\n };\n\n // Returns everything but the first entry of the array. Aliased as `tail`.\n // Especially useful on the arguments object. Passing an **index** will return\n // the rest of the values in the array from that index onward. The **guard**\n // check allows it to work with `_.map`.\n _.rest = _.tail = function(array, index, guard) {\n return slice.call(array, (index == null) || guard ? 1 : index);\n };\n\n // Trim out all falsy values from an array.\n _.compact = function(array) {\n return _.filter(array, function(value){ return !!value; });\n };\n\n // Return a completely flattened version of an array.\n _.flatten = function(array, shallow) {\n return _.reduce(array, function(memo, value) {\n if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));\n memo[memo.length] = value;\n return memo;\n }, []);
\n };\n\n // Return a version of the array that does not contain the specified value(s).\n _.without = function(array) {\n return _.difference(array, slice.call(arguments, 1));\n };\n\n // Produce a duplicate-free version of the array. If the array has already\n // been sorted, you have the option of using a faster algorithm.\n // Aliased as `unique`.\n _.uniq = _.unique = function(array, isSorted, iterator) {\n var initial = iterator ? _.map(array, iterator) : array;\n var result = [];\n _.reduce(initial, function(memo, el, i) {\n if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {\n memo[memo.length] = el;\n result[result.length] = array[i];\n }\n return memo;\n }, []);\n return result;\n };\n\n // Produce an array that contains the union: each distinct element from all of\n // the passed-in arrays.\n _.union = function() {\n return _.uniq(_.flatten(arguments, true));\n };\n\n // Produce a
n array that contains every item shared between all the\n // passed-in arrays. (Aliased as \"intersect\" for back-compat.)\n _.intersection = _.intersect = function(array) {\n var rest = slice.call(arguments, 1);\n return _.filter(_.uniq(array), function(item) {\n return _.every(rest, function(other) {\n return _.indexOf(other, item) >= 0;\n });\n });\n };\n\n // Take the difference between one array and a number of other arrays.\n // Only the elements present in just the first array will remain.\n _.difference = function(array) {\n var rest = _.flatten(slice.call(arguments, 1));\n return _.filter(array, function(value){ return !_.include(rest, value); });\n };\n\n // Zip together multiple lists into a single array -- elements that share\n // an index go together.\n _.zip = function() {\n var args = slice.call(arguments);\n var length = _.max(_.pluck(args, 'length'));\n var results = new Array(length);\n for (var i = 0; i < lengt
h; i++) results[i] = _.pluck(args, \"\" + i);\n return results;\n };\n\n // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),\n // we need this function. Return the position of the first occurrence of an\n // item in an array, or -1 if the item is not included in the array.\n // Delegates to **ECMAScript 5**'s native `indexOf` if available.\n // If the array is large and already in sort order, pass `true`\n // for **isSorted** to use binary search.\n _.indexOf = function(array, item, isSorted) {\n if (array == null) return -1;\n var i, l;\n if (isSorted) {\n i = _.sortedIndex(array, item);\n return array[i] === item ? i : -1;\n }\n if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);\n for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;\n return -1;\n };\n\n // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n _.lastIndexOf = f
unction(array, item) {\n if (array == null) return -1;\n if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);\n var i = array.length;\n while (i--) if (i in array && array[i] === item) return i;\n return -1;\n };\n\n // Generate an integer Array containing an arithmetic progression. A port of\n // the native Python `range()` function. See\n // [the Python documentation](http://docs.python.org/library/functions.html#range).\n _.range = function(start, stop, step) {\n if (arguments.length <= 1) {\n stop = start || 0;\n start = 0;\n }\n step = arguments[2] || 1;\n\n var len = Math.max(Math.ceil((stop - start) / step), 0);\n var idx = 0;\n var range = new Array(len);\n\n while(idx < len) {\n range[idx++] = start;\n start += step;\n }\n\n return range;\n };\n\n // Function (ahem) Functions\n // ------------------\n\n // Reusable constructor function for prototype setting.\n
var ctor = function(){};\n\n // Create a function bound to a given object (assigning `this`, and arguments,\n // optionally). Binding with arguments is also known as `curry`.\n // Delegates to **ECMAScript 5**'s native `Function.bind` if available.\n // We check for `func.bind` first, to fail fast when `func` is undefined.\n _.bind = function bind(func, context) {\n var bound, args;\n if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));\n if (!_.isFunction(func)) throw new TypeError;\n args = slice.call(arguments, 2);\n return bound = function() {\n if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));\n ctor.prototype = func.prototype;\n var self = new ctor;\n var result = func.apply(self, args.concat(slice.call(arguments)));\n if (Object(result) === result) return result;\n return self;\n };\n };\n\n // Bind all of an object's methods to
that object. Useful for ensuring that\n // all callbacks defined on an object belong to it.\n _.bindAll = function(obj) {\n var funcs = slice.call(arguments, 1);\n if (funcs.length == 0) funcs = _.functions(obj);\n each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });\n return obj;\n };\n\n // Memoize an expensive function by storing its results.\n _.memoize = function(func, hasher) {\n var memo = {};\n hasher || (hasher = _.identity);\n return function() {\n var key = hasher.apply(this, arguments);\n return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));\n };\n };\n\n // Delays a function for the given number of milliseconds, and then calls\n // it with the arguments supplied.\n _.delay = function(func, wait) {\n var args = slice.call(arguments, 2);\n return setTimeout(function(){ return func.apply(func, args); }, wait);\n };\n\n // Defers a function, scheduling it to run after the current call stack
has\n // cleared.\n _.defer = function(func) {\n return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));\n };\n\n // Returns a function, that, when invoked, will only be triggered at most once\n // during a given window of time.\n _.throttle = function(func, wait) {\n var context, args, timeout, throttling, more;\n var whenDone = _.debounce(function(){ more = throttling = false; }, wait);\n return function() {\n context = this; args = arguments;\n var later = function() {\n timeout = null;\n if (more) func.apply(context, args);\n whenDone();\n };\n if (!timeout) timeout = setTimeout(later, wait);\n if (throttling) {\n more = true;\n } else {\n func.apply(context, args);\n }\n whenDone();\n throttling = true;\n };\n };\n\n // Returns a function, that, as long as it continues to be invoked, will not\n // be triggered. The function will be called after it stops being ca
lled for\n // N milliseconds.\n _.debounce = function(func, wait) {\n var timeout;\n return function() {\n var context = this, args = arguments;\n var later = function() {\n timeout = null;\n func.apply(context, args);\n };\n clearTimeout(timeout);\n timeout = setTimeout(later, wait);\n };\n };\n\n // Returns a function that will be executed at most one time, no matter how\n // often you call it. Useful for lazy initialization.\n _.once = function(func) {\n var ran = false, memo;\n return function() {\n if (ran) return memo;\n ran = true;\n return memo = func.apply(this, arguments);\n };\n };\n\n // Returns the first function passed as an argument to the second,\n // allowing you to adjust arguments, run code before and after, and\n // conditionally execute the original function.\n _.wrap = function(func, wrapper) {\n return function() {\n var args = [func].concat(slice.call(arguments, 0));\n
return wrapper.apply(this, args);\n };\n };\n\n // Returns a function that is the composition of a list of functions, each\n // consuming the return value of the function that follows.\n _.compose = function() {\n var funcs = arguments;\n return function() {\n var args = arguments;\n for (var i = funcs.length - 1; i >= 0; i--) {\n args = [funcs[i].apply(this, args)];\n }\n return args[0];\n };\n };\n\n // Returns a function that will only be executed after being called N times.\n _.after = function(times, func) {\n if (times <= 0) return func();\n return function() {\n if (--times < 1) { return func.apply(this, arguments); }\n };\n };\n\n // Object Functions\n // ----------------\n\n // Retrieve the names of an object's properties.\n // Delegates to **ECMAScript 5**'s native `Object.keys`\n _.keys = nativeKeys || function(obj) {\n if (obj !== Object(obj)) throw new TypeError('Invalid object');\n var keys =
[];\n for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n return keys;\n };\n\n // Retrieve the values of an object's properties.\n _.values = function(obj) {\n return _.map(obj, _.identity);\n };\n\n // Return a sorted list of the function names available on the object.\n // Aliased as `methods`\n _.functions = _.methods = function(obj) {\n var names = [];\n for (var key in obj) {\n if (_.isFunction(obj[key])) names.push(key);\n }\n return names.sort();\n };\n\n // Extend a given object with all the properties in passed-in object(s).\n _.extend = function(obj) {\n each(slice.call(arguments, 1), function(source) {\n for (var prop in source) {\n obj[prop] = source[prop];\n }\n });\n return obj;\n };\n\n // Fill in a given object with default properties.\n _.defaults = function(obj) {\n each(slice.call(arguments, 1), function(source) {\n for (var prop in source) {\n if (obj[prop] == null)
obj[prop] = source[prop];\n }\n });\n return obj;\n };\n\n // Create a (shallow-cloned) duplicate of an object.\n _.clone = function(obj) {\n if (!_.isObject(obj)) return obj;\n return _.isArray(obj) ? obj.slice() : _.extend({}, obj);\n };\n\n // Invokes interceptor with the obj, and then returns obj.\n // The primary purpose of this method is to \"tap into\" a method chain, in\n // order to perform operations on intermediate results within the chain.\n _.tap = function(obj, interceptor) {\n interceptor(obj);\n return obj;\n };\n\n // Internal recursive comparison function.\n function eq(a, b, stack) {\n // Identical objects are equal. `0 === -0`, but they aren't identical.\n // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n if (a === b) return a !== 0 || 1 / a == 1 / b;\n // A strict comparison is necessary because `null == undefined`.\n if (a == null || b == null) return a === b;\n // Unwr
ap any wrapped objects.\n if (a._chain) a = a._wrapped;\n if (b._chain) b = b._wrapped;\n // Invoke a custom `isEqual` method if one is provided.\n if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);\n if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);\n // Compare `[[Class]]` names.\n var className = toString.call(a);\n if (className != toString.call(b)) return false;\n switch (className) {\n // Strings, numbers, dates, and booleans are compared by value.\n case '[object String]':\n // Primitives and their corresponding object wrappers are equivalent; thus, `\"5\"` is\n // equivalent to `new String(\"5\")`.\n return a == String(b);\n case '[object Number]':\n // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for\n // other numeric values.\n return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);\n case '[object Date]':\n case '[ob
ject Boolean]':\n // Coerce dates and booleans to numeric primitive values. Dates are compared by their\n // millisecond representations. Note that invalid dates with millisecond representations\n // of `NaN` are not equivalent.\n return +a == +b;\n // RegExps are compared by their source patterns and flags.\n case '[object RegExp]':\n return a.source == b.source &&\n a.global == b.global &&\n a.multiline == b.multiline &&\n a.ignoreCase == b.ignoreCase;\n }\n if (typeof a != 'object' || typeof b != 'object') return false;\n // Assume equality for cyclic structures. The algorithm for detecting cyclic\n // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.\n var length = stack.length;\n while (length--) {\n // Linear search. Performance is inversely proportional to the number of\n // unique nested structures.\n if (stack[length] == a) return
true;\n }\n // Add the first object to the stack of traversed objects.\n stack.push(a);\n var size = 0, result = true;\n // Recursively compare objects and arrays.\n if (className == '[object Array]') {\n // Compare array lengths to determine if a deep comparison is necessary.\n size = a.length;\n result = size == b.length;\n if (result) {\n // Deep compare the contents, ignoring non-numeric properties.\n while (size--) {\n // Ensure commutative equality for sparse arrays.\n if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;\n }\n }\n } else {\n // Objects with different constructors are not equivalent.\n if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;\n // Deep compare objects.\n for (var key in a) {\n if (_.has(a, key)) {\n // Count the expected number of properties.\n size++;\n
// Deep compare each member.\n if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;\n }\n }\n // Ensure that both objects contain the same number of properties.\n if (result) {\n for (key in b) {\n if (_.has(b, key) && !(size--)) break;\n }\n result = !size;\n }\n }\n // Remove the first object from the stack of traversed objects.\n stack.pop();\n return result;\n }\n\n // Perform a deep comparison to check if two objects are equal.\n _.isEqual = function(a, b) {\n return eq(a, b, []);\n };\n\n // Is a given array, string, or object empty?\n // An \"empty\" object has no enumerable own-properties.\n _.isEmpty = function(obj) {\n if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;\n for (var key in obj) if (_.has(obj, key)) return false;\n return true;\n };\n\n // Is a given value a DOM element?\n _.isElement = function(obj) {\n return !!(obj && obj
.nodeType == 1);\n };\n\n // Is a given value an array?\n // Delegates to ECMA5's native Array.isArray\n _.isArray = nativeIsArray || function(obj) {\n return toString.call(obj) == '[object Array]';\n };\n\n // Is a given variable an object?\n _.isObject = function(obj) {\n return obj === Object(obj);\n };\n\n // Is a given variable an arguments object?\n _.isArguments = function(obj) {\n return toString.call(obj) == '[object Arguments]';\n };\n if (!_.isArguments(arguments)) {\n _.isArguments = function(obj) {\n return !!(obj && _.has(obj, 'callee'));\n };\n }\n\n // Is a given value a function?\n _.isFunction = function(obj) {\n return toString.call(obj) == '[object Function]';\n };\n\n // Is a given value a string?\n _.isString = function(obj) {\n return toString.call(obj) == '[object String]';\n };\n\n // Is a given value a number?\n _.isNumber = function(obj) {\n return toString.call(obj) == '[object Number]';\n };\n\n // Is t
he given value `NaN`?\n _.isNaN = function(obj) {\n // `NaN` is the only value for which `===` is not reflexive.\n return obj !== obj;\n };\n\n // Is a given value a boolean?\n _.isBoolean = function(obj) {\n return obj === true || obj === false || toString.call(obj) == '[object Boolean]';\n };\n\n // Is a given value a date?\n _.isDate = function(obj) {\n return toString.call(obj) == '[object Date]';\n };\n\n // Is the given value a regular expression?\n _.isRegExp = function(obj) {\n return toString.call(obj) == '[object RegExp]';\n };\n\n // Is a given value equal to null?\n _.isNull = function(obj) {\n return obj === null;\n };\n\n // Is a given variable undefined?\n _.isUndefined = function(obj) {\n return obj === void 0;\n };\n\n // Has own property?\n _.has = function(obj, key) {\n return hasOwnProperty.call(obj, key);\n };\n\n // Utility Functions\n // -----------------\n\n // Run Underscore.js in *noConflict* mode, returning th
e `_` variable to its\n // previous owner. Returns a reference to the Underscore object.\n _.noConflict = function() {\n root._ = previousUnderscore;\n return this;\n };\n\n // Keep the identity function around for default iterators.\n _.identity = function(value) {\n return value;\n };\n\n // Run a function **n** times.\n _.times = function (n, iterator, context) {\n for (var i = 0; i < n; i++) iterator.call(context, i);\n };\n\n // Escape a string for HTML interpolation.\n _.escape = function(string) {\n return (''+string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/\"/g, '"').replace(/'/g, ''').replace(/\\//g,'/');\n };\n\n // Add your own custom functions to the Underscore object, ensuring that\n // they're correctly added to the OOP wrapper as well.\n _.mixin = function(obj) {\n each(_.functions(obj), function(name){\n addToWrapper(name, _[name] = obj[name]);\n });\n };\n\n // Generate a u
nique integer id (unique within the entire client session).\n // Useful for temporary DOM ids.\n var idCounter = 0;\n _.uniqueId = function(prefix) {\n var id = idCounter++;\n return prefix ? prefix + id : id;\n };\n\n // By default, Underscore uses ERB-style template delimiters, change the\n // following template settings to use alternative delimiters.\n _.templateSettings = {\n evaluate : /<%([\\s\\S]+?)%>/g,\n interpolate : /<%=([\\s\\S]+?)%>/g,\n escape : /<%-([\\s\\S]+?)%>/g\n };\n\n // When customizing `templateSettings`, if you don't want to define an\n // interpolation, evaluation or escaping regex, we need one that is\n // guaranteed not to match.\n var noMatch = /.^/;\n\n // Within an interpolation, evaluation, or escaping, remove HTML escaping\n // that had been previously added.\n var unescape = function(code) {\n return code.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\'/g, \"'\");\n };\n\n // JavaScript micro-templating, similar
to John Resig's implementation.\n // Underscore templating handles arbitrary delimiters, preserves whitespace,\n // and correctly escapes quotes within interpolated code.\n _.template = function(str, data) {\n var c = _.templateSettings;\n var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +\n 'with(obj||{}){__p.push(\\'' +\n str.replace(/\\\\/g, '\\\\\\\\')\n .replace(/'/g, \"\\\\'\")\n .replace(c.escape || noMatch, function(match, code) {\n return \"',_.escape(\" + unescape(code) + \"),'\";\n })\n .replace(c.interpolate || noMatch, function(match, code) {\n return \"',\" + unescape(code) + \",'\";\n })\n .replace(c.evaluate || noMatch, function(match, code) {\n return \"');\" + unescape(code).replace(/[\\r\\n\\t]/g, ' ') + \";__p.push('\";\n })\n .replace(/\\r/g, '\\\\r')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\t/g, '\\\\t')\n
+ \"');}return __p.join('');\";\n var func = new Function('obj', '_', tmpl);\n if (data) return func(data, _);\n return function(data) {\n return func.call(this, data, _);\n };\n };\n\n // Add a \"chain\" function, which will delegate to the wrapper.\n _.chain = function(obj) {\n return _(obj).chain();\n };\n\n // The OOP Wrapper\n // ---------------\n\n // If Underscore is called as a function, it returns a wrapped object that\n // can be used OO-style. This wrapper holds altered versions of all the\n // underscore functions. Wrapped objects may be chained.\n var wrapper = function(obj) { this._wrapped = obj; };\n\n // Expose `wrapper.prototype` as `_.prototype`\n _.prototype = wrapper.prototype;\n\n // Helper function to continue chaining intermediate results.\n var result = function(obj, chain) {\n return chain ? _(obj).chain() : obj;\n };\n\n // A method to easily add functions to the OOP wrapper.\n var addToWrapper = function(name,
func) {\n wrapper.prototype[name] = function() {\n var args = slice.call(arguments);\n unshift.call(args, this._wrapped);\n return result(func.apply(_, args), this._chain);\n };\n };\n\n // Add all of the Underscore functions to the wrapper object.\n _.mixin(_);\n\n // Add all mutator Array functions to the wrapper.\n each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {\n var method = ArrayProto[name];\n wrapper.prototype[name] = function() {\n var wrapped = this._wrapped;\n method.apply(wrapped, arguments);\n var length = wrapped.length;\n if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];\n return result(wrapped, this._chain);\n };\n });\n\n // Add all accessor Array functions to the wrapper.\n each(['concat', 'join', 'slice'], function(name) {\n var method = ArrayProto[name];\n wrapper.prototype[name] = function() {\n return result(method.apply(
this._wrapped, arguments), this._chain);\n };\n });\n\n // Start chaining a wrapped Underscore object.\n wrapper.prototype.chain = function() {\n this._chain = true;\n return this;\n };\n\n // Extracts the result from a wrapped and chained object.\n wrapper.prototype.value = function() {\n return this._wrapped;\n };\n\n}).call(this);\n">>},
- {<<"async">>,
- <<"/*global setTimeout: false, console: false */\n(function () {\n\n var async = {};\n\n // global on the server, window in the browser\n var root = this,\n previous_async = root.async;\n\n if (typeof module !== 'undefined' && module.exports) {\n module.exports = async;\n }\n else {\n root.async = async;\n }\n\n async.noConflict = function () {\n root.async = previous_async;\n return async;\n };\n\n //// cross-browser compatiblity functions ////\n\n var _forEach = function (arr, iterator) {\n if (arr.forEach) {\n return arr.forEach(iterator);\n }\n for (var i = 0; i < arr.length; i += 1) {\n iterator(arr[i], i, arr);\n }\n };\n\n var _map = function (arr, iterator) {\n if (arr.map) {\n return arr.map(iterator);\n }\n var results = [];\n _forEach(arr, function (x, i, a) {\n results.push(iterator(x, i, a));
\n });\n return results;\n };\n\n var _reduce = function (arr, iterator, memo) {\n if (arr.reduce) {\n return arr.reduce(iterator, memo);\n }\n _forEach(arr, function (x, i, a) {\n memo = iterator(memo, x, i, a);\n });\n return memo;\n };\n\n var _keys = function (obj) {\n if (Object.keys) {\n return Object.keys(obj);\n }\n var keys = [];\n for (var k in obj) {\n if (obj.hasOwnProperty(k)) {\n keys.push(k);\n }\n }\n return keys;\n };\n\n var _indexOf = function (arr, item) {\n if (arr.indexOf) {\n return arr.indexOf(item);\n }\n for (var i = 0; i < arr.length; i += 1) {\n if (arr[i] === item) {\n return i;\n }\n }\n return -1;\n };\n\n //// exported async module functions ////\n\n //// nextTick implementation with b
rowser-compatible fallback ////\n if (typeof process === 'undefined' || !(process.nextTick)) {\n async.nextTick = function (fn) {\n setTimeout(fn, 0);\n };\n }\n else {\n async.nextTick = process.nextTick;\n }\n\n async.forEach = function (arr, iterator, callback) {\n if (!arr.length) {\n return callback();\n }\n var completed = 0;\n _forEach(arr, function (x) {\n iterator(x, function (err) {\n if (err) {\n callback(err);\n callback = function () {};\n }\n else {\n completed += 1;\n if (completed === arr.length) {\n callback();\n }\n }\n });\n });\n };\n\n async.forEachSeries = function (arr, iterator, callback) {\n if (!arr.length) {\n return callback();\n }\n
var completed = 0;\n var iterate = function () {\n iterator(arr[completed], function (err) {\n if (err) {\n callback(err);\n callback = function () {};\n }\n else {\n completed += 1;\n if (completed === arr.length) {\n callback();\n }\n else {\n iterate();\n }\n }\n });\n };\n iterate();\n };\n \n async.forEachLimit = function (arr, limit, iterator, callback) {\n if (!arr.length || limit <= 0) {\n return callback(); \n }\n var completed = 0;\n var started = 0;\n var running = 0;\n \n (function replenish () {\n if (completed === arr.length) {\n return callback();\n }\n \n while (running
< limit && started < arr.length) {\n iterator(arr[started], function (err) {\n if (err) {\n callback(err);\n callback = function () {};\n }\n else {\n completed += 1;\n running -= 1;\n if (completed === arr.length) {\n callback();\n }\n else {\n replenish();\n }\n }\n });\n started += 1;\n running += 1;\n }\n })();\n };\n\n\n var doParallel = function (fn) {\n return function () {\n var args = Array.prototype.slice.call(arguments);\n return fn.apply(null, [async.forEach].concat(args));\n };\n };\n var doSeries = function (fn) {\n return function () {\n var args = Array.prototype.slice.call(arguments);\n return fn.apply(nul
l, [async.forEachSeries].concat(args));\n };\n };\n\n\n var _asyncMap = function (eachfn, arr, iterator, callback) {\n var results = [];\n arr = _map(arr, function (x, i) {\n return {index: i, value: x};\n });\n eachfn(arr, function (x, callback) {\n iterator(x.value, function (err, v) {\n results[x.index] = v;\n callback(err);\n });\n }, function (err) {\n callback(err, results);\n });\n };\n async.map = doParallel(_asyncMap);\n async.mapSeries = doSeries(_asyncMap);\n\n\n // reduce only has a series version, as doing reduce in parallel won't\n // work in many situations.\n async.reduce = function (arr, memo, iterator, callback) {\n async.forEachSeries(arr, function (x, callback) {\n iterator(memo, x, function (err, v) {\n memo = v;\n callback(err);\n });\n }, function (er
r) {\n callback(err, memo);\n });\n };\n // inject alias\n async.inject = async.reduce;\n // foldl alias\n async.foldl = async.reduce;\n\n async.reduceRight = function (arr, memo, iterator, callback) {\n var reversed = _map(arr, function (x) {\n return x;\n }).reverse();\n async.reduce(reversed, memo, iterator, callback);\n };\n // foldr alias\n async.foldr = async.reduceRight;\n\n var _filter = function (eachfn, arr, iterator, callback) {\n var results = [];\n arr = _map(arr, function (x, i) {\n return {index: i, value: x};\n });\n eachfn(arr, function (x, callback) {\n iterator(x.value, function (v) {\n if (v) {\n results.push(x);\n }\n callback();\n });\n }, function (err) {\n callback(_map(results.sort(function (a, b) {\n return a.index - b.inde
x;\n }), function (x) {\n return x.value;\n }));\n });\n };\n async.filter = doParallel(_filter);\n async.filterSeries = doSeries(_filter);\n // select alias\n async.select = async.filter;\n async.selectSeries = async.filterSeries;\n\n var _reject = function (eachfn, arr, iterator, callback) {\n var results = [];\n arr = _map(arr, function (x, i) {\n return {index: i, value: x};\n });\n eachfn(arr, function (x, callback) {\n iterator(x.value, function (v) {\n if (!v) {\n results.push(x);\n }\n callback();\n });\n }, function (err) {\n callback(_map(results.sort(function (a, b) {\n return a.index - b.index;\n }), function (x) {\n return x.value;\n }));\n });\n };\n async.reject = doParallel(_reject);\n async.reje
ctSeries = doSeries(_reject);\n\n var _detect = function (eachfn, arr, iterator, main_callback) {\n eachfn(arr, function (x, callback) {\n iterator(x, function (result) {\n if (result) {\n main_callback(x);\n main_callback = function () {};\n }\n else {\n callback();\n }\n });\n }, function (err) {\n main_callback();\n });\n };\n async.detect = doParallel(_detect);\n async.detectSeries = doSeries(_detect);\n\n async.some = function (arr, iterator, main_callback) {\n async.forEach(arr, function (x, callback) {\n iterator(x, function (v) {\n if (v) {\n main_callback(true);\n main_callback = function () {};\n }\n callback();\n });\n }, function (err) {\n main_callback(false);
\n });\n };\n // any alias\n async.any = async.some;\n\n async.every = function (arr, iterator, main_callback) {\n async.forEach(arr, function (x, callback) {\n iterator(x, function (v) {\n if (!v) {\n main_callback(false);\n main_callback = function () {};\n }\n callback();\n });\n }, function (err) {\n main_callback(true);\n });\n };\n // all alias\n async.all = async.every;\n\n async.sortBy = function (arr, iterator, callback) {\n async.map(arr, function (x, callback) {\n iterator(x, function (err, criteria) {\n if (err) {\n callback(err);\n }\n else {\n callback(null, {value: x, criteria: criteria});\n }\n });\n }, function (err, results) {\n if (err) {\n r
eturn callback(err);\n }\n else {\n var fn = function (left, right) {\n var a = left.criteria, b = right.criteria;\n return a < b ? -1 : a > b ? 1 : 0;\n };\n callback(null, _map(results.sort(fn), function (x) {\n return x.value;\n }));\n }\n });\n };\n\n async.auto = function (tasks, callback) {\n callback = callback || function () {};\n var keys = _keys(tasks);\n if (!keys.length) {\n return callback(null);\n }\n\n var results = {};\n\n var listeners = [];\n var addListener = function (fn) {\n listeners.unshift(fn);\n };\n var removeListener = function (fn) {\n for (var i = 0; i < listeners.length; i += 1) {\n if (listeners[i] === fn) {\n listeners.splice(i, 1);\n return;\n
}\n }\n };\n var taskComplete = function () {\n _forEach(listeners, function (fn) {\n fn();\n });\n };\n\n addListener(function () {\n if (_keys(results).length === keys.length) {\n callback(null, results);\n }\n });\n\n _forEach(keys, function (k) {\n var task = (tasks[k] instanceof Function) ? [tasks[k]]: tasks[k];\n var taskCallback = function (err) {\n if (err) {\n callback(err);\n // stop subsequent errors hitting callback multiple times\n callback = function () {};\n }\n else {\n var args = Array.prototype.slice.call(arguments, 1);\n if (args.length <= 1) {\n args = args[0];\n }\n results[k] = args;\n
taskComplete();\n }\n };\n var requires = task.slice(0, Math.abs(task.length - 1)) || [];\n var ready = function () {\n return _reduce(requires, function (a, x) {\n return (a && results.hasOwnProperty(x));\n }, true);\n };\n if (ready()) {\n task[task.length - 1](taskCallback, results);\n }\n else {\n var listener = function () {\n if (ready()) {\n removeListener(listener);\n task[task.length - 1](taskCallback, results);\n }\n };\n addListener(listener);\n }\n });\n };\n\n async.waterfall = function (tasks, callback) {\n if (!tasks.length) {\n return callback();\n }\n callback = callback || function () {};\n var wrapIterator = function (it
erator) {\n return function (err) {\n if (err) {\n callback(err);\n callback = function () {};\n }\n else {\n var args = Array.prototype.slice.call(arguments, 1);\n var next = iterator.next();\n if (next) {\n args.push(wrapIterator(next));\n }\n else {\n args.push(callback);\n }\n async.nextTick(function () {\n iterator.apply(null, args);\n });\n }\n };\n };\n wrapIterator(async.iterator(tasks))();\n };\n\n async.parallel = function (tasks, callback) {\n callback = callback || function () {};\n if (tasks.constructor === Array) {\n async.map(tasks, function (fn, callback) {\n if (fn) {\n
fn(function (err) {\n var args = Array.prototype.slice.call(arguments, 1);\n if (args.length <= 1) {\n args = args[0];\n }\n callback.call(null, err, args);\n });\n }\n }, callback);\n }\n else {\n var results = {};\n async.forEach(_keys(tasks), function (k, callback) {\n tasks[k](function (err) {\n var args = Array.prototype.slice.call(arguments, 1);\n if (args.length <= 1) {\n args = args[0];\n }\n results[k] = args;\n callback(err);\n });\n }, function (err) {\n callback(err, results);\n });\n }\n };\n\n async.series = function (tasks, callback) {\n callback = callb
ack || function () {};\n if (tasks.constructor === Array) {\n async.mapSeries(tasks, function (fn, callback) {\n if (fn) {\n fn(function (err) {\n var args = Array.prototype.slice.call(arguments, 1);\n if (args.length <= 1) {\n args = args[0];\n }\n callback.call(null, err, args);\n });\n }\n }, callback);\n }\n else {\n var results = {};\n async.forEachSeries(_keys(tasks), function (k, callback) {\n tasks[k](function (err) {\n var args = Array.prototype.slice.call(arguments, 1);\n if (args.length <= 1) {\n args = args[0];\n }\n results[k] = args;\n callback(err);\n });\n }, func
tion (err) {\n callback(err, results);\n });\n }\n };\n\n async.iterator = function (tasks) {\n var makeCallback = function (index) {\n var fn = function () {\n if (tasks.length) {\n tasks[index].apply(null, arguments);\n }\n return fn.next();\n };\n fn.next = function () {\n return (index < tasks.length - 1) ? makeCallback(index + 1): null;\n };\n return fn;\n };\n return makeCallback(0);\n };\n\n async.apply = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1);\n return function () {\n return fn.apply(\n null, args.concat(Array.prototype.slice.call(arguments))\n );\n };\n };\n\n var _concat = function (eachfn, arr, fn, callback) {\n var r = [];\n eachfn(arr, function (x, cb) {\n
fn(x, function (err, y) {\n r = r.concat(y || []);\n cb(err);\n });\n }, function (err) {\n callback(err, r);\n });\n };\n async.concat = doParallel(_concat);\n async.concatSeries = doSeries(_concat);\n\n async.whilst = function (test, iterator, callback) {\n if (test()) {\n iterator(function (err) {\n if (err) {\n return callback(err);\n }\n async.whilst(test, iterator, callback);\n });\n }\n else {\n callback();\n }\n };\n\n async.until = function (test, iterator, callback) {\n if (!test()) {\n iterator(function (err) {\n if (err) {\n return callback(err);\n }\n async.until(test, iterator, callback);\n });\n }\n else {\n callback();\n }\n };\n\n
async.queue = function (worker, concurrency) {\n var workers = 0;\n var q = {\n tasks: [],\n concurrency: concurrency,\n saturated: null,\n empty: null,\n drain: null,\n push: function (data, callback) {\n q.tasks.push({data: data, callback: callback});\n if(q.saturated && q.tasks.length == concurrency) q.saturated();\n async.nextTick(q.process);\n },\n process: function () {\n if (workers < q.concurrency && q.tasks.length) {\n var task = q.tasks.shift();\n if(q.empty && q.tasks.length == 0) q.empty();\n workers += 1;\n worker(task.data, function () {\n workers -= 1;\n if (task.callback) {\n task.callback.apply(task, arguments);\n }\n
if(q.drain && q.tasks.length + workers == 0) q.drain();\n q.process();\n });\n }\n },\n length: function () {\n return q.tasks.length;\n },\n running: function () {\n return workers;\n }\n };\n return q;\n };\n\n var _console_fn = function (name) {\n return function (fn) {\n var args = Array.prototype.slice.call(arguments, 1);\n fn.apply(null, args.concat([function (err) {\n var args = Array.prototype.slice.call(arguments, 1);\n if (typeof console !== 'undefined') {\n if (err) {\n if (console.error) {\n console.error(err);\n }\n }\n else if (console[name]) {\n _forEach(args, function (x) {\n
console[name](x);\n });\n }\n }\n }]));\n };\n };\n async.log = _console_fn('log');\n async.dir = _console_fn('dir');\n /*async.info = _console_fn('info');\n async.warn = _console_fn('warn');\n async.error = _console_fn('error');*/\n\n async.memoize = function (fn, hasher) {\n var memo = {};\n var queues = {};\n hasher = hasher || function (x) {\n return x;\n };\n var memoized = function () {\n var args = Array.prototype.slice.call(arguments);\n var callback = args.pop();\n var key = hasher.apply(null, args);\n if (key in memo) {\n callback.apply(null, memo[key]);\n }\n else if (key in queues) {\n queues[key].push(callback);\n }\n else {\n queues[key] = [callback];\n fn.apply(null, args.conca
t([function () {\n memo[key] = arguments;\n var q = queues[key];\n delete queues[key];\n for (var i = 0, l = q.length; i < l; i++) {\n q[i].apply(null, arguments);\n }\n }]));\n }\n };\n memoized.unmemoized = fn;\n return memoized;\n };\n\n async.unmemoize = function (fn) {\n return function () {\n return (fn.unmemoized || fn).apply(null, arguments);\n }\n };\n\n}());\n">>},
- {<<"handlebars">>,
- <<47,47,32,108,105,98,47,104,97,110,100,108,101,98,97,114,115,47,98,97,115,
- 101,46,106,115,10,118,97,114,32,72,97,110,100,108,101,98,97,114,115,32,
- 61,32,123,125,59,10,10,72,97,110,100,108,101,98,97,114,115,46,86,69,82,
- 83,73,79,78,32,61,32,34,49,46,48,46,98,101,116,97,46,50,34,59,10,10,72,
- 97,110,100,108,101,98,97,114,115,46,104,101,108,112,101,114,115,32,32,61,
- 32,123,125,59,10,72,97,110,100,108,101,98,97,114,115,46,112,97,114,116,
- 105,97,108,115,32,61,32,123,125,59,10,10,72,97,110,100,108,101,98,97,114,
- 115,46,114,101,103,105,115,116,101,114,72,101,108,112,101,114,32,61,32,
- 102,117,110,99,116,105,111,110,40,110,97,109,101,44,32,102,110,44,32,105,
- 110,118,101,114,115,101,41,32,123,10,32,32,105,102,40,105,110,118,101,
- 114,115,101,41,32,123,32,102,110,46,110,111,116,32,61,32,105,110,118,101,
- 114,115,101,59,32,125,10,32,32,116,104,105,115,46,104,101,108,112,101,
- 114,115,91,110,97,109,101,93,32,61,32,102,110,59,10,125,59,10,10,72,97,
- 110,100,108,101,98,97,114,115,46,114,101,103,105,115,116,101,114,80,97,
- 114,116,105,97,108,32,61,32,102,117,110,99,116,105,111,110,40,110,97,109,
- 101,44,32,115,116,114,41,32,123,10,32,32,116,104,105,115,46,112,97,114,
- 116,105,97,108,115,91,110,97,109,101,93,32,61,32,115,116,114,59,10,125,
- 59,10,10,72,97,110,100,108,101,98,97,114,115,46,114,101,103,105,115,116,
- 101,114,72,101,108,112,101,114,40,39,104,101,108,112,101,114,77,105,115,
- 115,105,110,103,39,44,32,102,117,110,99,116,105,111,110,40,97,114,103,41,
- 32,123,10,32,32,105,102,40,97,114,103,117,109,101,110,116,115,46,108,101,
- 110,103,116,104,32,61,61,61,32,50,41,32,123,10,32,32,32,32,114,101,116,
- 117,114,110,32,117,110,100,101,102,105,110,101,100,59,10,32,32,125,32,
- 101,108,115,101,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,
- 32,69,114,114,111,114,40,34,67,111,117,108,100,32,110,111,116,32,102,105,
- 110,100,32,112,114,111,112,101,114,116,121,32,39,34,32,43,32,97,114,103,
- 32,43,32,34,39,34,41,59,10,32,32,125,10,125,41,59,10,10,72,97,110,100,
- 108,101,98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,
- 101,114,40,39,98,108,111,99,107,72,101,108,112,101,114,77,105,115,115,
- 105,110,103,39,44,32,102,117,110,99,116,105,111,110,40,99,111,110,116,
- 101,120,116,44,32,111,112,116,105,111,110,115,41,32,123,10,32,32,118,97,
- 114,32,105,110,118,101,114,115,101,32,61,32,111,112,116,105,111,110,115,
- 46,105,110,118,101,114,115,101,32,124,124,32,102,117,110,99,116,105,111,
- 110,40,41,32,123,125,44,32,102,110,32,61,32,111,112,116,105,111,110,115,
- 46,102,110,59,10,10,10,32,32,118,97,114,32,114,101,116,32,61,32,34,34,59,
- 10,32,32,118,97,114,32,116,121,112,101,32,61,32,79,98,106,101,99,116,46,
- 112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,
- 99,97,108,108,40,99,111,110,116,101,120,116,41,59,10,10,32,32,105,102,40,
- 116,121,112,101,32,61,61,61,32,34,91,111,98,106,101,99,116,32,70,117,110,
- 99,116,105,111,110,93,34,41,32,123,10,32,32,32,32,99,111,110,116,101,120,
- 116,32,61,32,99,111,110,116,101,120,116,40,41,59,10,32,32,125,10,10,32,
- 32,105,102,40,99,111,110,116,101,120,116,32,61,61,61,32,116,114,117,101,
- 41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,102,110,40,116,104,
- 105,115,41,59,10,32,32,125,32,101,108,115,101,32,105,102,40,99,111,110,
- 116,101,120,116,32,61,61,61,32,102,97,108,115,101,32,124,124,32,99,111,
- 110,116,101,120,116,32,61,61,32,110,117,108,108,41,32,123,10,32,32,32,32,
- 114,101,116,117,114,110,32,105,110,118,101,114,115,101,40,116,104,105,
- 115,41,59,10,32,32,125,32,101,108,115,101,32,105,102,40,116,121,112,101,
- 32,61,61,61,32,34,91,111,98,106,101,99,116,32,65,114,114,97,121,93,34,41,
- 32,123,10,32,32,32,32,105,102,40,99,111,110,116,101,120,116,46,108,101,
- 110,103,116,104,32,62,32,48,41,32,123,10,32,32,32,32,32,32,102,111,114,
- 40,118,97,114,32,105,61,48,44,32,106,61,99,111,110,116,101,120,116,46,
- 108,101,110,103,116,104,59,32,105,60,106,59,32,105,43,43,41,32,123,10,32,
- 32,32,32,32,32,32,32,114,101,116,32,61,32,114,101,116,32,43,32,102,110,
- 40,99,111,110,116,101,120,116,91,105,93,41,59,10,32,32,32,32,32,32,125,
- 10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,114,
- 101,116,32,61,32,105,110,118,101,114,115,101,40,116,104,105,115,41,59,10,
- 32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,32,114,101,116,59,
- 10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,114,101,116,117,
- 114,110,32,102,110,40,99,111,110,116,101,120,116,41,59,10,32,32,125,10,
- 125,41,59,10,10,72,97,110,100,108,101,98,97,114,115,46,114,101,103,105,
- 115,116,101,114,72,101,108,112,101,114,40,39,101,97,99,104,39,44,32,102,
- 117,110,99,116,105,111,110,40,99,111,110,116,101,120,116,44,32,111,112,
- 116,105,111,110,115,41,32,123,10,32,32,118,97,114,32,102,110,32,61,32,
- 111,112,116,105,111,110,115,46,102,110,44,32,105,110,118,101,114,115,101,
- 32,61,32,111,112,116,105,111,110,115,46,105,110,118,101,114,115,101,59,
- 10,32,32,118,97,114,32,114,101,116,32,61,32,34,34,59,10,10,32,32,105,102,
- 40,99,111,110,116,101,120,116,32,38,38,32,99,111,110,116,101,120,116,46,
- 108,101,110,103,116,104,32,62,32,48,41,32,123,10,32,32,32,32,102,111,114,
- 40,118,97,114,32,105,61,48,44,32,106,61,99,111,110,116,101,120,116,46,
- 108,101,110,103,116,104,59,32,105,60,106,59,32,105,43,43,41,32,123,10,32,
- 32,32,32,32,32,114,101,116,32,61,32,114,101,116,32,43,32,102,110,40,99,
- 111,110,116,101,120,116,91,105,93,41,59,10,32,32,32,32,125,10,32,32,125,
- 32,101,108,115,101,32,123,10,32,32,32,32,114,101,116,32,61,32,105,110,
- 118,101,114,115,101,40,116,104,105,115,41,59,10,32,32,125,10,32,32,114,
- 101,116,117,114,110,32,114,101,116,59,10,125,41,59,10,10,72,97,110,100,
- 108,101,98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,
- 101,114,40,39,105,102,39,44,32,102,117,110,99,116,105,111,110,40,99,111,
- 110,116,101,120,116,44,32,111,112,116,105,111,110,115,41,32,123,10,32,32,
- 105,102,40,33,99,111,110,116,101,120,116,32,124,124,32,72,97,110,100,108,
- 101,98,97,114,115,46,85,116,105,108,115,46,105,115,69,109,112,116,121,40,
- 99,111,110,116,101,120,116,41,41,32,123,10,32,32,32,32,114,101,116,117,
- 114,110,32,111,112,116,105,111,110,115,46,105,110,118,101,114,115,101,40,
- 116,104,105,115,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,
- 32,114,101,116,117,114,110,32,111,112,116,105,111,110,115,46,102,110,40,
- 116,104,105,115,41,59,10,32,32,125,10,125,41,59,10,10,72,97,110,100,108,
- 101,98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,101,
- 114,40,39,117,110,108,101,115,115,39,44,32,102,117,110,99,116,105,111,
- 110,40,99,111,110,116,101,120,116,44,32,111,112,116,105,111,110,115,41,
- 32,123,10,32,32,118,97,114,32,102,110,32,61,32,111,112,116,105,111,110,
- 115,46,102,110,44,32,105,110,118,101,114,115,101,32,61,32,111,112,116,
- 105,111,110,115,46,105,110,118,101,114,115,101,59,10,32,32,111,112,116,
- 105,111,110,115,46,102,110,32,61,32,105,110,118,101,114,115,101,59,10,32,
- 32,111,112,116,105,111,110,115,46,105,110,118,101,114,115,101,32,61,32,
- 102,110,59,10,10,32,32,114,101,116,117,114,110,32,72,97,110,100,108,101,
- 98,97,114,115,46,104,101,108,112,101,114,115,91,39,105,102,39,93,46,99,
- 97,108,108,40,116,104,105,115,44,32,99,111,110,116,101,120,116,44,32,111,
- 112,116,105,111,110,115,41,59,10,125,41,59,10,10,72,97,110,100,108,101,
- 98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,101,114,
- 40,39,119,105,116,104,39,44,32,102,117,110,99,116,105,111,110,40,99,111,
- 110,116,101,120,116,44,32,111,112,116,105,111,110,115,41,32,123,10,32,32,
- 114,101,116,117,114,110,32,111,112,116,105,111,110,115,46,102,110,40,99,
- 111,110,116,101,120,116,41,59,10,125,41,59,10,59,10,47,47,32,108,105,98,
- 47,104,97,110,100,108,101,98,97,114,115,47,99,111,109,112,105,108,101,
- 114,47,112,97,114,115,101,114,46,106,115,10,47,42,32,74,105,115,111,110,
- 32,103,101,110,101,114,97,116,101,100,32,112,97,114,115,101,114,32,42,47,
- 10,118,97,114,32,104,97,110,100,108,101,98,97,114,115,32,61,32,40,102,
- 117,110,99,116,105,111,110,40,41,123,10,10,118,97,114,32,112,97,114,115,
- 101,114,32,61,32,123,116,114,97,99,101,58,32,102,117,110,99,116,105,111,
- 110,32,116,114,97,99,101,40,41,32,123,32,125,44,10,121,121,58,32,123,125,
- 44,10,115,121,109,98,111,108,115,95,58,32,123,34,101,114,114,111,114,34,
- 58,50,44,34,114,111,111,116,34,58,51,44,34,112,114,111,103,114,97,109,34,
- 58,52,44,34,69,79,70,34,58,53,44,34,115,116,97,116,101,109,101,110,116,
- 115,34,58,54,44,34,115,105,109,112,108,101,73,110,118,101,114,115,101,34,
- 58,55,44,34,115,116,97,116,101,109,101,110,116,34,58,56,44,34,111,112,
- 101,110,73,110,118,101,114,115,101,34,58,57,44,34,99,108,111,115,101,66,
- 108,111,99,107,34,58,49,48,44,34,111,112,101,110,66,108,111,99,107,34,58,
- 49,49,44,34,109,117,115,116,97,99,104,101,34,58,49,50,44,34,112,97,114,
- 116,105,97,108,34,58,49,51,44,34,67,79,78,84,69,78,84,34,58,49,52,44,34,
- 67,79,77,77,69,78,84,34,58,49,53,44,34,79,80,69,78,95,66,76,79,67,75,34,
- 58,49,54,44,34,105,110,77,117,115,116,97,99,104,101,34,58,49,55,44,34,67,
- 76,79,83,69,34,58,49,56,44,34,79,80,69,78,95,73,78,86,69,82,83,69,34,58,
- 49,57,44,34,79,80,69,78,95,69,78,68,66,76,79,67,75,34,58,50,48,44,34,112,
- 97,116,104,34,58,50,49,44,34,79,80,69,78,34,58,50,50,44,34,79,80,69,78,
- 95,85,78,69,83,67,65,80,69,68,34,58,50,51,44,34,79,80,69,78,95,80,65,82,
- 84,73,65,76,34,58,50,52,44,34,112,97,114,97,109,115,34,58,50,53,44,34,
- 104,97,115,104,34,58,50,54,44,34,112,97,114,97,109,34,58,50,55,44,34,83,
- 84,82,73,78,71,34,58,50,56,44,34,73,78,84,69,71,69,82,34,58,50,57,44,34,
- 66,79,79,76,69,65,78,34,58,51,48,44,34,104,97,115,104,83,101,103,109,101,
- 110,116,115,34,58,51,49,44,34,104,97,115,104,83,101,103,109,101,110,116,
- 34,58,51,50,44,34,73,68,34,58,51,51,44,34,69,81,85,65,76,83,34,58,51,52,
- 44,34,112,97,116,104,83,101,103,109,101,110,116,115,34,58,51,53,44,34,83,
- 69,80,34,58,51,54,44,34,36,97,99,99,101,112,116,34,58,48,44,34,36,101,
- 110,100,34,58,49,125,44,10,116,101,114,109,105,110,97,108,115,95,58,32,
- 123,50,58,34,101,114,114,111,114,34,44,53,58,34,69,79,70,34,44,49,52,58,
- 34,67,79,78,84,69,78,84,34,44,49,53,58,34,67,79,77,77,69,78,84,34,44,49,
- 54,58,34,79,80,69,78,95,66,76,79,67,75,34,44,49,56,58,34,67,76,79,83,69,
- 34,44,49,57,58,34,79,80,69,78,95,73,78,86,69,82,83,69,34,44,50,48,58,34,
- 79,80,69,78,95,69,78,68,66,76,79,67,75,34,44,50,50,58,34,79,80,69,78,34,
- 44,50,51,58,34,79,80,69,78,95,85,78,69,83,67,65,80,69,68,34,44,50,52,58,
- 34,79,80,69,78,95,80,65,82,84,73,65,76,34,44,50,56,58,34,83,84,82,73,78,
- 71,34,44,50,57,58,34,73,78,84,69,71,69,82,34,44,51,48,58,34,66,79,79,76,
- 69,65,78,34,44,51,51,58,34,73,68,34,44,51,52,58,34,69,81,85,65,76,83,34,
- 44,51,54,58,34,83,69,80,34,125,44,10,112,114,111,100,117,99,116,105,111,
- 110,115,95,58,32,91,48,44,91,51,44,50,93,44,91,52,44,51,93,44,91,52,44,
- 49,93,44,91,52,44,48,93,44,91,54,44,49,93,44,91,54,44,50,93,44,91,56,44,
- 51,93,44,91,56,44,51,93,44,91,56,44,49,93,44,91,56,44,49,93,44,91,56,44,
- 49,93,44,91,56,44,49,93,44,91,49,49,44,51,93,44,91,57,44,51,93,44,91,49,
- 48,44,51,93,44,91,49,50,44,51,93,44,91,49,50,44,51,93,44,91,49,51,44,51,
- 93,44,91,49,51,44,52,93,44,91,55,44,50,93,44,91,49,55,44,51,93,44,91,49,
- 55,44,50,93,44,91,49,55,44,50,93,44,91,49,55,44,49,93,44,91,50,53,44,50,
- 93,44,91,50,53,44,49,93,44,91,50,55,44,49,93,44,91,50,55,44,49,93,44,91,
- 50,55,44,49,93,44,91,50,55,44,49,93,44,91,50,54,44,49,93,44,91,51,49,44,
- 50,93,44,91,51,49,44,49,93,44,91,51,50,44,51,93,44,91,51,50,44,51,93,44,
- 91,51,50,44,51,93,44,91,51,50,44,51,93,44,91,50,49,44,49,93,44,91,51,53,
- 44,51,93,44,91,51,53,44,49,93,93,44,10,112,101,114,102,111,114,109,65,99,
- 116,105,111,110,58,32,102,117,110,99,116,105,111,110,32,97,110,111,110,
- 121,109,111,117,115,40,121,121,116,101,120,116,44,121,121,108,101,110,
- 103,44,121,121,108,105,110,101,110,111,44,121,121,44,121,121,115,116,97,
- 116,101,44,36,36,44,95,36,41,32,123,10,10,118,97,114,32,36,48,32,61,32,
- 36,36,46,108,101,110,103,116,104,32,45,32,49,59,10,115,119,105,116,99,
- 104,32,40,121,121,115,116,97,116,101,41,32,123,10,99,97,115,101,32,49,58,
- 32,114,101,116,117,114,110,32,36,36,91,36,48,45,49,93,32,10,98,114,101,
- 97,107,59,10,99,97,115,101,32,50,58,32,116,104,105,115,46,36,32,61,32,
- 110,101,119,32,121,121,46,80,114,111,103,114,97,109,78,111,100,101,40,36,
- 36,91,36,48,45,50,93,44,32,36,36,91,36,48,93,41,32,10,98,114,101,97,107,
- 59,10,99,97,115,101,32,51,58,32,116,104,105,115,46,36,32,61,32,110,101,
- 119,32,121,121,46,80,114,111,103,114,97,109,78,111,100,101,40,36,36,91,
- 36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,52,58,32,116,
- 104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,80,114,111,103,114,
- 97,109,78,111,100,101,40,91,93,41,32,10,98,114,101,97,107,59,10,99,97,
- 115,101,32,53,58,32,116,104,105,115,46,36,32,61,32,91,36,36,91,36,48,93,
- 93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,54,58,32,36,36,91,36,
- 48,45,49,93,46,112,117,115,104,40,36,36,91,36,48,93,41,59,32,116,104,105,
- 115,46,36,32,61,32,36,36,91,36,48,45,49,93,32,10,98,114,101,97,107,59,10,
- 99,97,115,101,32,55,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,
- 121,121,46,73,110,118,101,114,115,101,78,111,100,101,40,36,36,91,36,48,
- 45,50,93,44,32,36,36,91,36,48,45,49,93,44,32,36,36,91,36,48,93,41,32,10,
- 98,114,101,97,107,59,10,99,97,115,101,32,56,58,32,116,104,105,115,46,36,
- 32,61,32,110,101,119,32,121,121,46,66,108,111,99,107,78,111,100,101,40,
- 36,36,91,36,48,45,50,93,44,32,36,36,91,36,48,45,49,93,44,32,36,36,91,36,
- 48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,57,58,32,116,104,
- 105,115,46,36,32,61,32,36,36,91,36,48,93,32,10,98,114,101,97,107,59,10,
- 99,97,115,101,32,49,48,58,32,116,104,105,115,46,36,32,61,32,36,36,91,36,
- 48,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,49,49,58,32,116,104,
- 105,115,46,36,32,61,32,110,101,119,32,121,121,46,67,111,110,116,101,110,
- 116,78,111,100,101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,
- 99,97,115,101,32,49,50,58,32,116,104,105,115,46,36,32,61,32,110,101,119,
- 32,121,121,46,67,111,109,109,101,110,116,78,111,100,101,40,36,36,91,36,
- 48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,49,51,58,32,116,
- 104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,77,117,115,116,97,
- 99,104,101,78,111,100,101,40,36,36,91,36,48,45,49,93,91,48,93,44,32,36,
- 36,91,36,48,45,49,93,91,49,93,41,32,10,98,114,101,97,107,59,10,99,97,115,
- 101,32,49,52,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,
- 46,77,117,115,116,97,99,104,101,78,111,100,101,40,36,36,91,36,48,45,49,
- 93,91,48,93,44,32,36,36,91,36,48,45,49,93,91,49,93,41,32,10,98,114,101,
- 97,107,59,10,99,97,115,101,32,49,53,58,32,116,104,105,115,46,36,32,61,32,
- 36,36,91,36,48,45,49,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,
- 49,54,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,77,
- 117,115,116,97,99,104,101,78,111,100,101,40,36,36,91,36,48,45,49,93,91,
- 48,93,44,32,36,36,91,36,48,45,49,93,91,49,93,41,32,10,98,114,101,97,107,
- 59,10,99,97,115,101,32,49,55,58,32,116,104,105,115,46,36,32,61,32,110,
- 101,119,32,121,121,46,77,117,115,116,97,99,104,101,78,111,100,101,40,36,
- 36,91,36,48,45,49,93,91,48,93,44,32,36,36,91,36,48,45,49,93,91,49,93,44,
- 32,116,114,117,101,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,49,
- 56,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,80,97,
- 114,116,105,97,108,78,111,100,101,40,36,36,91,36,48,45,49,93,41,32,10,98,
- 114,101,97,107,59,10,99,97,115,101,32,49,57,58,32,116,104,105,115,46,36,
- 32,61,32,110,101,119,32,121,121,46,80,97,114,116,105,97,108,78,111,100,
- 101,40,36,36,91,36,48,45,50,93,44,32,36,36,91,36,48,45,49,93,41,32,10,98,
- 114,101,97,107,59,10,99,97,115,101,32,50,48,58,32,10,98,114,101,97,107,
- 59,10,99,97,115,101,32,50,49,58,32,116,104,105,115,46,36,32,61,32,91,91,
- 36,36,91,36,48,45,50,93,93,46,99,111,110,99,97,116,40,36,36,91,36,48,45,
- 49,93,41,44,32,36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,99,97,
- 115,101,32,50,50,58,32,116,104,105,115,46,36,32,61,32,91,91,36,36,91,36,
- 48,45,49,93,93,46,99,111,110,99,97,116,40,36,36,91,36,48,93,41,44,32,110,
- 117,108,108,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,50,51,58,
- 32,116,104,105,115,46,36,32,61,32,91,91,36,36,91,36,48,45,49,93,93,44,32,
- 36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,50,
- 52,58,32,116,104,105,115,46,36,32,61,32,91,91,36,36,91,36,48,93,93,44,32,
- 110,117,108,108,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,50,53,
- 58,32,36,36,91,36,48,45,49,93,46,112,117,115,104,40,36,36,91,36,48,93,41,
- 59,32,116,104,105,115,46,36,32,61,32,36,36,91,36,48,45,49,93,59,32,10,98,
- 114,101,97,107,59,10,99,97,115,101,32,50,54,58,32,116,104,105,115,46,36,
- 32,61,32,91,36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,99,97,115,
- 101,32,50,55,58,32,116,104,105,115,46,36,32,61,32,36,36,91,36,48,93,32,
- 10,98,114,101,97,107,59,10,99,97,115,101,32,50,56,58,32,116,104,105,115,
- 46,36,32,61,32,110,101,119,32,121,121,46,83,116,114,105,110,103,78,111,
- 100,101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,
- 101,32,50,57,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,
- 46,73,110,116,101,103,101,114,78,111,100,101,40,36,36,91,36,48,93,41,32,
- 10,98,114,101,97,107,59,10,99,97,115,101,32,51,48,58,32,116,104,105,115,
- 46,36,32,61,32,110,101,119,32,121,121,46,66,111,111,108,101,97,110,78,
- 111,100,101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,
- 115,101,32,51,49,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,
- 121,46,72,97,115,104,78,111,100,101,40,36,36,91,36,48,93,41,32,10,98,114,
- 101,97,107,59,10,99,97,115,101,32,51,50,58,32,36,36,91,36,48,45,49,93,46,
- 112,117,115,104,40,36,36,91,36,48,93,41,59,32,116,104,105,115,46,36,32,
- 61,32,36,36,91,36,48,45,49,93,32,10,98,114,101,97,107,59,10,99,97,115,
- 101,32,51,51,58,32,116,104,105,115,46,36,32,61,32,91,36,36,91,36,48,93,
- 93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,52,58,32,116,104,
- 105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,36,36,91,36,48,
- 93,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,53,58,32,116,104,
- 105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,110,101,119,32,
- 121,121,46,83,116,114,105,110,103,78,111,100,101,40,36,36,91,36,48,93,41,
- 93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,54,58,32,116,104,
- 105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,110,101,119,32,
- 121,121,46,73,110,116,101,103,101,114,78,111,100,101,40,36,36,91,36,48,
- 93,41,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,55,58,32,116,
- 104,105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,110,101,119,
- 32,121,121,46,66,111,111,108,101,97,110,78,111,100,101,40,36,36,91,36,48,
- 93,41,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,56,58,32,116,
- 104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,73,100,78,111,100,
- 101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,
- 32,51,57,58,32,36,36,91,36,48,45,50,93,46,112,117,115,104,40,36,36,91,36,
- 48,93,41,59,32,116,104,105,115,46,36,32,61,32,36,36,91,36,48,45,50,93,59,
- 32,10,98,114,101,97,107,59,10,99,97,115,101,32,52,48,58,32,116,104,105,
- 115,46,36,32,61,32,91,36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,
- 125,10,125,44,10,116,97,98,108,101,58,32,91,123,51,58,49,44,52,58,50,44,
- 53,58,91,50,44,52,93,44,54,58,51,44,56,58,52,44,57,58,53,44,49,49,58,54,
- 44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,44,57,93,44,49,53,58,91,
- 49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,44,49,57,58,91,49,44,49,49,
- 93,44,50,50,58,91,49,44,49,51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,
- 58,91,49,44,49,53,93,125,44,123,49,58,91,51,93,125,44,123,53,58,91,49,44,
- 49,54,93,125,44,123,53,58,91,50,44,51,93,44,55,58,49,55,44,56,58,49,56,
- 44,57,58,53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,
- 49,44,57,93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,
- 44,49,57,58,91,49,44,49,57,93,44,50,48,58,91,50,44,51,93,44,50,50,58,91,
- 49,44,49,51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,58,91,49,44,49,53,
- 93,125,44,123,53,58,91,50,44,53,93,44,49,52,58,91,50,44,53,93,44,49,53,
- 58,91,50,44,53,93,44,49,54,58,91,50,44,53,93,44,49,57,58,91,50,44,53,93,
- 44,50,48,58,91,50,44,53,93,44,50,50,58,91,50,44,53,93,44,50,51,58,91,50,
- 44,53,93,44,50,52,58,91,50,44,53,93,125,44,123,52,58,50,48,44,54,58,51,
- 44,56,58,52,44,57,58,53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,
- 49,52,58,91,49,44,57,93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,
- 44,49,50,93,44,49,57,58,91,49,44,49,49,93,44,50,48,58,91,50,44,52,93,44,
- 50,50,58,91,49,44,49,51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,58,91,
- 49,44,49,53,93,125,44,123,52,58,50,49,44,54,58,51,44,56,58,52,44,57,58,
- 53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,44,57,
- 93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,44,49,57,
- 58,91,49,44,49,49,93,44,50,48,58,91,50,44,52,93,44,50,50,58,91,49,44,49,
- 51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,58,91,49,44,49,53,93,125,44,
- 123,53,58,91,50,44,57,93,44,49,52,58,91,50,44,57,93,44,49,53,58,91,50,44,
- 57,93,44,49,54,58,91,50,44,57,93,44,49,57,58,91,50,44,57,93,44,50,48,58,
- 91,50,44,57,93,44,50,50,58,91,50,44,57,93,44,50,51,58,91,50,44,57,93,44,
- 50,52,58,91,50,44,57,93,125,44,123,53,58,91,50,44,49,48,93,44,49,52,58,
- 91,50,44,49,48,93,44,49,53,58,91,50,44,49,48,93,44,49,54,58,91,50,44,49,
- 48,93,44,49,57,58,91,50,44,49,48,93,44,50,48,58,91,50,44,49,48,93,44,50,
- 50,58,91,50,44,49,48,93,44,50,51,58,91,50,44,49,48,93,44,50,52,58,91,50,
- 44,49,48,93,125,44,123,53,58,91,50,44,49,49,93,44,49,52,58,91,50,44,49,
- 49,93,44,49,53,58,91,50,44,49,49,93,44,49,54,58,91,50,44,49,49,93,44,49,
- 57,58,91,50,44,49,49,93,44,50,48,58,91,50,44,49,49,93,44,50,50,58,91,50,
- 44,49,49,93,44,50,51,58,91,50,44,49,49,93,44,50,52,58,91,50,44,49,49,93,
- 125,44,123,53,58,91,50,44,49,50,93,44,49,52,58,91,50,44,49,50,93,44,49,
- 53,58,91,50,44,49,50,93,44,49,54,58,91,50,44,49,50,93,44,49,57,58,91,50,
- 44,49,50,93,44,50,48,58,91,50,44,49,50,93,44,50,50,58,91,50,44,49,50,93,
- 44,50,51,58,91,50,44,49,50,93,44,50,52,58,91,50,44,49,50,93,125,44,123,
- 49,55,58,50,50,44,50,49,58,50,51,44,51,51,58,91,49,44,50,53,93,44,51,53,
- 58,50,52,125,44,123,49,55,58,50,54,44,50,49,58,50,51,44,51,51,58,91,49,
- 44,50,53,93,44,51,53,58,50,52,125,44,123,49,55,58,50,55,44,50,49,58,50,
- 51,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,52,125,44,123,49,55,58,
- 50,56,44,50,49,58,50,51,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,52,
- 125,44,123,50,49,58,50,57,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,
- 52,125,44,123,49,58,91,50,44,49,93,125,44,123,54,58,51,48,44,56,58,52,44,
- 57,58,53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,
- 44,57,93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,44,
- 49,57,58,91,49,44,49,49,93,44,50,50,58,91,49,44,49,51,93,44,50,51,58,91,
- 49,44,49,52,93,44,50,52,58,91,49,44,49,53,93,125,44,123,53,58,91,50,44,
- 54,93,44,49,52,58,91,50,44,54,93,44,49,53,58,91,50,44,54,93,44,49,54,58,
- 91,50,44,54,93,44,49,57,58,91,50,44,54,93,44,50,48,58,91,50,44,54,93,44,
- 50,50,58,91,50,44,54,93,44,50,51,58,91,50,44,54,93,44,50,52,58,91,50,44,
- 54,93,125,44,123,49,55,58,50,50,44,49,56,58,91,49,44,51,49,93,44,50,49,
- 58,50,51,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,52,125,44,123,49,
- 48,58,51,50,44,50,48,58,91,49,44,51,51,93,125,44,123,49,48,58,51,52,44,
- 50,48,58,91,49,44,51,51,93,125,44,123,49,56,58,91,49,44,51,53,93,125,44,
- 123,49,56,58,91,50,44,50,52,93,44,50,49,58,52,48,44,50,53,58,51,54,44,50,
- 54,58,51,55,44,50,55,58,51,56,44,50,56,58,91,49,44,52,49,93,44,50,57,58,
- 91,49,44,52,50,93,44,51,48,58,91,49,44,52,51,93,44,51,49,58,51,57,44,51,
- 50,58,52,52,44,51,51,58,91,49,44,52,53,93,44,51,53,58,50,52,125,44,123,
- 49,56,58,91,50,44,51,56,93,44,50,56,58,91,50,44,51,56,93,44,50,57,58,91,
- 50,44,51,56,93,44,51,48,58,91,50,44,51,56,93,44,51,51,58,91,50,44,51,56,
- 93,44,51,54,58,91,49,44,52,54,93,125,44,123,49,56,58,91,50,44,52,48,93,
- 44,50,56,58,91,50,44,52,48,93,44,50,57,58,91,50,44,52,48,93,44,51,48,58,
- 91,50,44,52,48,93,44,51,51,58,91,50,44,52,48,93,44,51,54,58,91,50,44,52,
- 48,93,125,44,123,49,56,58,91,49,44,52,55,93,125,44,123,49,56,58,91,49,44,
- 52,56,93,125,44,123,49,56,58,91,49,44,52,57,93,125,44,123,49,56,58,91,49,
- 44,53,48,93,44,50,49,58,53,49,44,51,51,58,91,49,44,50,53,93,44,51,53,58,
- 50,52,125,44,123,53,58,91,50,44,50,93,44,56,58,49,56,44,57,58,53,44,49,
- 49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,44,57,93,44,49,
- 53,58,91,49,44,49,48,93,44,49,54,58,91,
<TRUNCATED>