Greasy Fork is available in English.
Check ChangeLog from Github Relase page.
- (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){// ==UserScript==// @name CheckChangelogFromGithubRelease// @namespace http://efcl.info/// @description Check ChangeLog from Github Relase page.// @license MIT// @include https://github.com/*/*/releases/tag/*// @version 1.2.1// @grant GM_xmlhttpRequest// ==/UserScript=="use strict";var githubAPI = require("./lib/github_api");var searcher = require("./lib/seacher");var injector = require("./lib/injector");var ghObject = require("github-release-dom")(location.href);var treePromise = new Promise(function (resolve, reject) {githubAPI.getTree(ghObject, function (error, res) {if (error) {reject(error);} else {resolve(res);}})});treePromise.then(JSON.parse).then(searcher.findChangeLogInTrees).then(function (r###lt) {if (!r###lt) {return Promise.reject(new Error("Not found CHANGELOG in Repogitory."));}injector.injectChangelogLink(ghObject, r###lt.path);}).catch(function (error) {console.error(error);});},{"./lib/github_api":2,"./lib/injector":3,"./lib/seacher":4,"github-release-dom":14}],2:[function(require,module,exports){/*** Created by azu on 2014/06/18.* LICENSE : MIT*/"use strict";// http://developer.github.com/v3/git/trees/// GET /repos/:owner/:repo/git/trees/:shafunction getTree(ghObject, callback) {var owner = ghObject.user,repoName = ghObject.repo,tagName = ghObject.tagName;var treeAPI = "https://api.github.com/repos/" + owner + "/" + repoName + "/git/trees/" + tagName;GM_xmlhttpRequest({method: "GET",url: treeAPI,onload: function (res) {if (res.status === 201 || res.status == 200) {callback(null, res.responseText);} else {callback(new Error(res.statusText));}},onerror: function (res) {callback(res);}});}function getFileRawContent(url, callback) {// http://swanson.github.com/blog/2011/07/09/digging-around-the-github-v3-api.htmlGM_xmlhttpRequest({method: "GET",url: url,headers: {"Accept": "application/vnd.github-blob.raw"},onload: function (res) {callback(null, res.responseText);},onerror: function (res) {callback(res);}});}module.exports = {getTree: getTree,getFileRawContent: getFileRawContent};},{}],3:[function(require,module,exports){/*** Created by azu on 2014/06/18.* LICENSE : MIT*/"use strict";var tagRef = document.querySelector(".tag-references");const GITHUBDOMAIN = "https://github.com/";function injectChangelogLink(ghObject, filePath) {var span = document.createElement("span");var a = document.createElement("a");a.href = GITHUBDOMAIN + ghObject.user + "/" + ghObject.repo + "/blob/" + ghObject.tagName + "/" + filePath;a.textContent = "CHANGELOG FILE";span.appendChild(a);if (tagRef.nextSibling === null) {tagRef.parentNode.appendChild(span); // 末尾に追加} else {tagRef.parentNode.insertBefore(span, tagRef.nextSibling); // 基準ノードの後ろに追加}}module.exports = {injectChangelogLink: injectChangelogLink};},{}],4:[function(require,module,exports){/*** Created by azu on 2014/06/18.* LICENSE : MIT*/"use strict";var find = require("lodash.find");function findChangeLogInTrees(trees) {if (typeof trees !== "object") {throw new Error("trees is not object");}var tree = trees["tree"];var r###lt = find(tree, function (object) {return /(^changes|^changelog|^history)/i.test(object.path);});return r###lt;}module.exports = {findChangeLogInTrees: findChangeLogInTrees};},{"lodash.find":17}],5:[function(require,module,exports){if (typeof Object.create === 'function') {// implementation from standard node.js 'util' modulemodule.exports = function inherits(ctor, superCtor) {ctor.super_ = superCtorctor.prototype = Object.create(superCtor.prototype, {constructor: {value: ctor,enumerable: false,writable: true,configurable: true}});};} else {// old school shim for old browsersmodule.exports = function inherits(ctor, superCtor) {ctor.super_ = superCtorvar TempCtor = function () {}TempCtor.prototype = superCtor.prototypector.prototype = new TempCtor()ctor.prototype.constructor = ctor}}},{}],6:[function(require,module,exports){// shim for using process in browservar process = module.exports = {};process.nextTick = (function () {var canSetImmediate = typeof window !== 'undefined'&& window.setImmediate;var canPost = typeof window !== 'undefined'&& window.postMessage && window.addEventListener;if (canSetImmediate) {return function (f) { return window.setImmediate(f) };}if (canPost) {var queue = [];window.addEventListener('message', function (ev) {var source = ev.source;if ((source === window || source === null) && ev.data === 'process-tick') {ev.stopPropagation();if (queue.length > 0) {var fn = queue.shift();fn();}}}, true);return function nextTick(fn) {queue.push(fn);window.postMessage('process-tick', '*');};}return function nextTick(fn) {setTimeout(fn, 0);};})();process.title = 'browser';process.browser = true;process.env = {};process.argv = [];function noop() {}process.on = noop;process.addListener = noop;process.once = noop;process.off = noop;process.removeListener = noop;process.removeAllListeners = noop;process.emit = noop;process.binding = function (name) {throw new Error('process.binding is not supported');}// TODO(shtylman)process.cwd = function () { return '/' };process.chdir = function (dir) {throw new Error('process.chdir is not supported');};},{}],7:[function(require,module,exports){(function (global){/*! http://mths.be/punycode v1.2.4 by @mathias */;(function(root) {/** Detect free variables */var freeExports = typeof exports == 'object' && exports;var freeModule = typeof module == 'object' && module &&module.exports == freeExports && module;var freeGlobal = typeof global == 'object' && global;if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {root = freeGlobal;}/*** The `punycode` object.* @name punycode* @type Object*/var punycode,/** Highest positive signed 32-bit float value */maxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1/** Bootstring parameters */base = 36,tMin = 1,tMax = 26,skew = 38,damp = 700,initialBias = 72,initialN = 128, // 0x80delimiter = '-', // '\x2D'/** Regular expressions */regexPunycode = /^xn--/,regexNonASCII = /[^ -~]/, // unprintable ASCII chars + non-ASCII charsregexSeparators = /\x2E|\u3002|\uFF0E|\uFF61/g, // RFC 3490 separators/** Error messages */errors = {'overflow': 'Overflow: input needs wider integers to process','not-basic': 'Illegal input >= 0x80 (not a basic code point)','invalid-input': 'Invalid input'},/** Convenience shortcuts */baseMinusTMin = base - tMin,floor = Math.floor,stringFromCharCode = String.fromCharCode,/** Temporary variable */key;/*--------------------------------------------------------------------------*//*** A generic error utility function.* @private* @param {String} type The error type.* @returns {Error} Throws a `RangeError` with the applicable error message.*/function error(type) {throw RangeError(errors[type]);}/*** A generic `Array#map` utility function.* @private* @param {Array} array The array to iterate over.* @param {Function} callback The function that gets called for every array* item.* @returns {Array} A new array of values returned by the callback function.*/function map(array, fn) {var length = array.length;while (length--) {array[length] = fn(array[length]);}return array;}/*** A simple `Array#map`-like wrapper to work with domain name strings.* @private* @param {String} domain The domain name.* @param {Function} callback The function that gets called for every* character.* @returns {Array} A new string of characters returned by the callback* function.*/function mapDomain(string, fn) {return map(string.split(regexSeparators), fn).join('.');}/*** Creates an array containing the numeric code points of each Unicode* character in the string. While JavaScript uses UCS-2 internally,* this function will convert a pair of surrogate halves (each of which* UCS-2 exposes as separate characters) into a single code point,* matching UTF-16.* @see `punycode.ucs2.encode`* @see <http://mathiasbynens.be/notes/javascript-encoding>* @memberOf punycode.ucs2* @name decode* @param {String} string The Unicode input string (UCS-2).* @returns {Array} The new array of code points.*/function ucs2decode(string) {var output = [],counter = 0,length = string.length,value,extra;while (counter < length) {value = string.charCodeAt(counter++);if (value >= 0xD800 && value <= 0xDBFF && counter < length) {// high surrogate, and there is a next characterextra = string.charCodeAt(counter++);if ((extra & 0xFC00) == 0xDC00) { // low surrogateoutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);} else {// unmatched surrogate; only append this code unit, in case the next// code unit is the high surrogate of a surrogate pairoutput.push(value);counter--;}} else {output.push(value);}}return output;}/*** Creates a string based on an array of numeric code points.* @see `punycode.ucs2.decode`* @memberOf punycode.ucs2* @name encode* @param {Array} codePoints The array of numeric code points.* @returns {String} The new Unicode string (UCS-2).*/function ucs2encode(array) {return map(array, function(value) {var output = '';if (value > 0xFFFF) {value -= 0x10000;output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);value = 0xDC00 | value & 0x3FF;}output += stringFromCharCode(value);return output;}).join('');}/*** Converts a basic code point into a digit/integer.* @see `digitToBasic()`* @private* @param {Number} codePoint The basic numeric code point value.* @returns {Number} The numeric value of a basic code point (for use in* representing integers) in the range `0` to `base - 1`, or `base` if* the code point does not represent a value.*/function basicToDigit(codePoint) {if (codePoint - 48 < 10) {return codePoint - 22;}if (codePoint - 65 < 26) {return codePoint - 65;}if (codePoint - 97 < 26) {return codePoint - 97;}return base;}/*** Converts a digit/integer into a basic code point.* @see `basicToDigit()`* @private* @param {Number} digit The numeric value of a basic code point.* @returns {Number} The basic code point whose value (when used for* representing integers) is `digit`, which needs to be in the range* `0` to `base - 1`. If `flag` is non-zero, the uppercase form is* used; else, the lowercase form is used. The behavior is undefined* if `flag` is non-zero and `digit` has no uppercase form.*/function digitToBasic(digit, flag) {// 0..25 map to ASCII a..z or A..Z// 26..35 map to ASCII 0..9return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);}/*** Bias adaptation function as per section 3.4 of RFC 3492.* http://tools.ietf.org/html/rfc3492#section-3.4* @private*/function adapt(delta, numPoints, firstTime) {var k = 0;delta = firstTime ? floor(delta / damp) : delta >> 1;delta += floor(delta / numPoints);for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {delta = floor(delta / baseMinusTMin);}return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));}/*** Converts a Punycode string of ASCII-only symbols to a string of Unicode* symbols.* @memberOf punycode* @param {String} input The Punycode string of ASCII-only symbols.* @returns {String} The r###lting string of Unicode symbols.*/function decode(input) {// Don't use UCS-2var output = [],inputLength = input.length,out,i = 0,n = initialN,bias = initialBias,basic,j,index,oldi,w,k,digit,t,/** Cached calculation r###lts */baseMinusT;// Handle the basic code points: let `basic` be the number of input code// points before the last delimiter, or `0` if there is none, then copy// the first basic code points to the output.basic = input.lastIndexOf(delimiter);if (basic < 0) {basic = 0;}for (j = 0; j < basic; ++j) {// if it's not a basic code pointif (input.charCodeAt(j) >= 0x80) {error('not-basic');}output.push(input.charCodeAt(j));}// Main decoding loop: start just after the last delimiter if any basic code// points were copied; start at the beginning otherwise.for (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {// `index` is the index of the next character to be consumed.// Decode a generalized variable-length integer into `delta`,// which gets added to `i`. The overflow checking is easier// if we increase `i` as we go, then subtract off its starting// value at the end to obtain `delta`.for (oldi = i, w = 1, k = base; /* no condition */; k += base) {if (index >= inputLength) {error('invalid-input');}digit = basicToDigit(input.charCodeAt(index++));if (digit >= base || digit > floor((maxInt - i) / w)) {error('overflow');}i += digit * w;t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);if (digit < t) {break;}baseMinusT = base - t;if (w > floor(maxInt / baseMinusT)) {error('overflow');}w *= baseMinusT;}out = output.length + 1;bias = adapt(i - oldi, out, oldi == 0);// `i` was supposed to wrap around from `out` to `0`,// incrementing `n` each time, so we'll fix that now:if (floor(i / out) > maxInt - n) {error('overflow');}n += floor(i / out);i %= out;// Insert `n` at position `i` of the outputoutput.splice(i++, 0, n);}return ucs2encode(output);}/*** Converts a string of Unicode symbols to a Punycode string of ASCII-only* symbols.* @memberOf punycode* @param {String} input The string of Unicode symbols.* @returns {String} The r###lting Punycode string of ASCII-only symbols.*/function encode(input) {var n,delta,handled###ount,basicLength,bias,j,m,q,k,t,currentValue,output = [],/** `inputLength` will hold the number of code points in `input`. */inputLength,/** Cached calculation r###lts */handled###ountPlusOne,baseMinusT,qMinusT;// Convert the input in UCS-2 to Unicodeinput = ucs2decode(input);// Cache the lengthinputLength = input.length;// Initialize the staten = initialN;delta = 0;bias = initialBias;// Handle the basic code pointsfor (j = 0; j < inputLength; ++j) {currentValue = input[j];if (currentValue < 0x80) {output.push(stringFromCharCode(currentValue));}}handled###ount = basicLength = output.length;// `handled###ount` is the number of code points that have been handled;// `basicLength` is the number of basic code points.// Finish the basic string - if it is not empty - with a delimiterif (basicLength) {output.push(delimiter);}// Main encoding loop:while (handled###ount < inputLength) {// All non-basic code points < n have been handled already. Find the next// larger one:for (m = maxInt, j = 0; j < inputLength; ++j) {currentValue = input[j];if (currentValue >= n && currentValue < m) {m = currentValue;}}// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,// but guard against overflowhandled###ountPlusOne = handled###ount + 1;if (m - n > floor((maxInt - delta) / handled###ountPlusOne)) {error('overflow');}delta += (m - n) * handled###ountPlusOne;n = m;for (j = 0; j < inputLength; ++j) {currentValue = input[j];if (currentValue < n && ++delta > maxInt) {error('overflow');}if (currentValue == n) {// Represent delta as a generalized variable-length integerfor (q = delta, k = base; /* no condition */; k += base) {t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);if (q < t) {break;}qMinusT = q - t;baseMinusT = base - t;output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));q = floor(qMinusT / baseMinusT);}output.push(stringFromCharCode(digitToBasic(q, 0)));bias = adapt(delta, handled###ountPlusOne, handled###ount == basicLength);delta = 0;++handled###ount;}}++delta;++n;}return output.join('');}/*** Converts a Punycode string representing a domain name to Unicode. Only the* Punycoded parts of the domain name will be converted, i.e. it doesn't* matter if you call it on a string that has already been converted to* Unicode.* @memberOf punycode* @param {String} domain The Punycode domain name to convert to Unicode.* @returns {String} The Unicode representation of the given Punycode* string.*/function toUnicode(domain) {return mapDomain(domain, function(string) {return regexPunycode.test(string)? decode(string.slice(4).toLowerCase()): string;});}/*** Converts a Unicode string representing a domain name to Punycode. Only the* non-ASCII parts of the domain name will be converted, i.e. it doesn't* matter if you call it with a domain that's already in ASCII.* @memberOf punycode* @param {String} domain The domain name to convert, as a Unicode string.* @returns {String} The Punycode representation of the given domain name.*/function toASCII(domain) {return mapDomain(domain, function(string) {return regexNonASCII.test(string)? 'xn--' + encode(string): string;});}/*--------------------------------------------------------------------------*//** Define the public API */punycode = {/*** A string representing the current Punycode.js version number.* @memberOf punycode* @type String*/'version': '1.2.4',/*** An object of methods to convert from JavaScript's internal character* representation (UCS-2) to Unicode code points, and back.* @see <http://mathiasbynens.be/notes/javascript-encoding>* @memberOf punycode* @type Object*/'ucs2': {'decode': ucs2decode,'encode': ucs2encode},'decode': decode,'encode': encode,'toASCII': toASCII,'toUnicode': toUnicode};/** Expose `punycode` */// Some AMD build optimizers, like r.js, check for specific condition patterns// like the following:if (typeof define == 'function' &&typeof define.amd == 'object' &&define.amd) {define('punycode', function() {return punycode;});} else if (freeExports && !freeExports.nodeType) {if (freeModule) { // in Node.js or RingoJS v0.8.0+freeModule.exports = punycode;} else { // in Narwhal or RingoJS v0.7.0-for (key in punycode) {punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);}}} else { // in Rhino or a web browserroot.punycode = punycode;}}(this));}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})},{}],8:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the// "Software"), to deal in the Software without restriction, including// without limitation the rights to use, copy, modify, merge, publish,// distribute, sublicense, and/or sell copies of the Software, and to permit// persons to whom the Software is furnished to do so, subject to the// following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE// USE OR OTHER DEALINGS IN THE SOFTWARE.'use strict';// If obj.hasOwnProperty has been overridden, then calling// obj.hasOwnProperty(prop) will break.// See: https://github.com/joyent/node/issues/1707function hasOwnProperty(obj, prop) {return Object.prototype.hasOwnProperty.call(obj, prop);}module.exports = function(qs, sep, eq, options) {sep = sep || '&';eq = eq || '=';var obj = {};if (typeof qs !== 'string' || qs.length === 0) {return obj;}var regexp = /\+/g;qs = qs.split(sep);var maxKeys = 1000;if (options && typeof options.maxKeys === 'number') {maxKeys = options.maxKeys;}var len = qs.length;// maxKeys <= 0 means that we should not limit keys countif (maxKeys > 0 && len > maxKeys) {len = maxKeys;}for (var i = 0; i < len; ++i) {var x = qs[i].replace(regexp, '%20'),idx = x.indexOf(eq),kstr, vstr, k, v;if (idx >= 0) {kstr = x.substr(0, idx);vstr = x.substr(idx + 1);} else {kstr = x;vstr = '';}k = decodeURIComponent(kstr);v = decodeURIComponent(vstr);if (!hasOwnProperty(obj, k)) {obj[k] = v;} else if (isArray(obj[k])) {obj[k].push(v);} else {obj[k] = [obj[k], v];}}return obj;};var isArray = Array.isArray || function (xs) {return Object.prototype.toString.call(xs) === '[object Array]';};},{}],9:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the// "Software"), to deal in the Software without restriction, including// without limitation the rights to use, copy, modify, merge, publish,// distribute, sublicense, and/or sell copies of the Software, and to permit// persons to whom the Software is furnished to do so, subject to the// following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE// USE OR OTHER DEALINGS IN THE SOFTWARE.'use strict';var stringifyPrimitive = function(v) {switch (typeof v) {case 'string':return v;case 'boolean':return v ? 'true' : 'false';case 'number':return isFinite(v) ? v : '';default:return '';}};module.exports = function(obj, sep, eq, name) {sep = sep || '&';eq = eq || '=';if (obj === null) {obj = undefined;}if (typeof obj === 'object') {return map(objectKeys(obj), function(k) {var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;if (isArray(obj[k])) {return map(obj[k], function(v) {return ks + encodeURIComponent(stringifyPrimitive(v));}).join(sep);} else {return ks + encodeURIComponent(stringifyPrimitive(obj[k]));}}).join(sep);}if (!name) return '';return encodeURIComponent(stringifyPrimitive(name)) + eq +encodeURIComponent(stringifyPrimitive(obj));};var isArray = Array.isArray || function (xs) {return Object.prototype.toString.call(xs) === '[object Array]';};function map (xs, f) {if (xs.map) return xs.map(f);var res = [];for (var i = 0; i < xs.length; i++) {res.push(f(xs[i], i));}return res;}var objectKeys = Object.keys || function (obj) {var res = [];for (var key in obj) {if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);}return res;};},{}],10:[function(require,module,exports){'use strict';exports.decode = exports.parse = require('./decode');exports.encode = exports.stringify = require('./encode');},{"./decode":8,"./encode":9}],11:[function(require,module,exports){// Copyright Joyent, Inc. and other Node contributors.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the// "Software"), to deal in the Software without restriction, including// without limitation the rights to use, copy, modify, merge, publish,// distribute, sublicense, and/or sell copies of the Software, and to permit// persons to whom the Software is furnished to do so, subject to the// following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE// USE OR OTHER DEALINGS IN THE SOFTWARE.var punycode = require('punycode');exports.parse = urlParse;exports.resolve = urlResolve;exports.resolveObject = urlResolveObject;exports.format = urlFormat;exports.Url = Url;function Url() {this.protocol = null;this.slashes = null;this.auth = null;this.host = null;this.port = null;this.hostname = null;this.hash = null;this.search = null;this.query = null;this.pathname = null;this.path = null;this.href = null;}// Reference: RFC 3986, RFC 1808, RFC 2396// define these here so at least they only have to be// compiled once on the first module load.var protocolPattern = /^([a-z0-9.+-]+:)/i,portPattern = /:[0-9]*$/,// RFC 2396: characters reserved for delimiting URLs.// We actually just auto-escape these.delims = ['<', '>', '"', '`', ' ', '\r', '\n', '\t'],// RFC 2396: characters not allowed for various reasons.unwise = ['{', '}', '|', '\\', '^', '`'].concat(delims),// Allowed by RFCs, but cause of XSS attacks. Always escape these.autoEscape = ['\''].concat(unwise),// Characters that are never ever allowed in a hostname.// Note that any invalid chars are also handled, but these// are the ones that are *expected* to be seen, so we fast-path// them.nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),hostEndingChars = ['/', '?', '#'],hostnameMaxLen = 255,hostnamePartPattern = /^[a-z0-9A-Z_-]{0,63}$/,hostnamePartStart = /^([a-z0-9A-Z_-]{0,63})(.*)$/,// protocols that can allow "unsafe" and "unwise" chars.unsafeProtocol = {'javascript': true,'javascript:': true},// protocols that never have a hostname.hostlessProtocol = {'javascript': true,'javascript:': true},// protocols that always contain a // bit.slashedProtocol = {'http': true,'https': true,'ftp': true,'gopher': true,'file': true,'http:': true,'https:': true,'ftp:': true,'gopher:': true,'file:': true},querystring = require('querystring');function urlParse(url, parseQueryString, slashesDenoteHost) {if (url && isObject(url) && url instanceof Url) return url;var u = new Url;u.parse(url, parseQueryString, slashesDenoteHost);return u;}Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {if (!isString(url)) {throw new TypeError("Parameter 'url' must be a string, not " + typeof url);}var rest = url;// trim before proceeding.// This is to support parse stuff like " http://foo.com \n"rest = rest.trim();var proto = protocolPattern.exec(rest);if (proto) {proto = proto[0];var lowerProto = proto.toLowerCase();this.protocol = lowerProto;rest = rest.substr(proto.length);}// figure out if it's got a host// user@server is *always* interpreted as a hostname, and url// resolution will treat //foo/bar as host=foo,path=bar because that's// how the browser resolves relative URLs.if (slashesDenoteHost || proto || rest.match(/^\/\/[^@\/]+@[^@\/]+/)) {var slashes = rest.substr(0, 2) === '//';if (slashes && !(proto && hostlessProtocol[proto])) {rest = rest.substr(2);this.slashes = true;}}if (!hostlessProtocol[proto] &&(slashes || (proto && !slashedProtocol[proto]))) {// there's a hostname.// the first instance of /, ?, ;, or # ends the host.//// If there is an @ in the hostname, then non-host chars *are* allowed// to the left of the last @ sign, unless some host-ending character// comes *before* the @-sign.// URLs are obnoxious.//// ex:// http://a@b@c/ => user:a@b host:c// http://a@b?@c => user:a host:c path:/?@c// v0.12 TODO(isaacs): This is not quite how Chrome does things.// Review our test case against browsers more comprehensively.// find the first instance of any hostEndingCharsvar hostEnd = -1;for (var i = 0; i < hostEndingChars.length; i++) {var hec = rest.indexOf(hostEndingChars[i]);if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))hostEnd = hec;}// at this point, either we have an explicit point where the// auth portion cannot go past, or the last @ char is the decider.var auth, atSign;if (hostEnd === -1) {// atSign can be anywhere.atSign = rest.lastIndexOf('@');} else {// atSign must be in auth portion.// http://a@b/c@d => host:b auth:a path:/c@datSign = rest.lastIndexOf('@', hostEnd);}// Now we have a portion which is definitely the auth.// Pull that off.if (atSign !== -1) {auth = rest.slice(0, atSign);rest = rest.slice(atSign + 1);this.auth = decodeURIComponent(auth);}// the host is the remaining to the left of the first non-host charhostEnd = -1;for (var i = 0; i < nonHostChars.length; i++) {var hec = rest.indexOf(nonHostChars[i]);if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))hostEnd = hec;}// if we still have not hit it, then the entire thing is a host.if (hostEnd === -1)hostEnd = rest.length;this.host = rest.slice(0, hostEnd);rest = rest.slice(hostEnd);// pull out port.this.parseHost();// we've indicated that there is a hostname,// so even if it's empty, it has to be present.this.hostname = this.hostname || '';// if hostname begins with [ and ends with ]// assume that it's an IPv6 address.var ipv6Hostname = this.hostname[0] === '[' &&this.hostname[this.hostname.length - 1] === ']';// validate a little.if (!ipv6Hostname) {var hostparts = this.hostname.split(/\./);for (var i = 0, l = hostparts.length; i < l; i++) {var part = hostparts[i];if (!part) continue;if (!part.match(hostnamePartPattern)) {var newpart = '';for (var j = 0, k = part.length; j < k; j++) {if (part.charCodeAt(j) > 127) {// we replace non-ASCII char with a temporary placeholder// we need this to make sure size of hostname is not// broken by replacing non-ASCII by nothingnewpart += 'x';} else {newpart += part[j];}}// we test again with ASCII char onlyif (!newpart.match(hostnamePartPattern)) {var validParts = hostparts.slice(0, i);var notHost = hostparts.slice(i + 1);var bit = part.match(hostnamePartStart);if (bit) {validParts.push(bit[1]);notHost.unshift(bit[2]);}if (notHost.length) {rest = '/' + notHost.join('.') + rest;}this.hostname = validParts.join('.');break;}}}}if (this.hostname.length > hostnameMaxLen) {this.hostname = '';} else {// hostnames are always lower case.this.hostname = this.hostname.toLowerCase();}if (!ipv6Hostname) {// IDNA Support: Returns a puny coded representation of "domain".// It only converts the part of the domain name that// has non ASCII characters. I.e. it dosent matter if// you call it with a domain that already is in ASCII.var domainArray = this.hostname.split('.');var newOut = [];for (var i = 0; i < domainArray.length; ++i) {var s = domainArray[i];newOut.push(s.match(/[^A-Za-z0-9_-]/) ?'xn--' + punycode.encode(s) : s);}this.hostname = newOut.join('.');}var p = this.port ? ':' + this.port : '';var h = this.hostname || '';this.host = h + p;this.href += this.host;// strip [ and ] from the hostname// the host field still retains them, thoughif (ipv6Hostname) {this.hostname = this.hostname.substr(1, this.hostname.length - 2);if (rest[0] !== '/') {rest = '/' + rest;}}}// now rest is set to the post-host stuff.// chop off any delim chars.if (!unsafeProtocol[lowerProto]) {// First, make 100% sure that any "autoEscape" chars get// escaped, even if encodeURIComponent doesn't think they// need to be.for (var i = 0, l = autoEscape.length; i < l; i++) {var ae = autoEscape[i];var esc = encodeURIComponent(ae);if (esc === ae) {esc = escape(ae);}rest = rest.split(ae).join(esc);}}// chop off from the tail first.var hash = rest.indexOf('#');if (hash !== -1) {// got a fragment string.this.hash = rest.substr(hash);rest = rest.slice(0, hash);}var qm = rest.indexOf('?');if (qm !== -1) {this.search = rest.substr(qm);this.query = rest.substr(qm + 1);if (parseQueryString) {this.query = querystring.parse(this.query);}rest = rest.slice(0, qm);} else if (parseQueryString) {// no query string, but parseQueryString still requestedthis.search = '';this.query = {};}if (rest) this.pathname = rest;if (slashedProtocol[lowerProto] &&this.hostname && !this.pathname) {this.pathname = '/';}//to support http.requestif (this.pathname || this.search) {var p = this.pathname || '';var s = this.search || '';this.path = p + s;}// finally, reconstruct the href based on what has been validated.this.href = this.format();return this;};// format a parsed object into a url stringfunction urlFormat(obj) {// ensure it's an object, and not a string url.// If it's an obj, this is a no-op.// this way, you can call url_format() on strings// to clean up potentially wonky urls.if (isString(obj)) obj = urlParse(obj);if (!(obj instanceof Url)) return Url.prototype.format.call(obj);return obj.format();}Url.prototype.format = function() {var auth = this.auth || '';if (auth) {auth = encodeURIComponent(auth);auth = auth.replace(/%3A/i, ':');auth += '@';}var protocol = this.protocol || '',pathname = this.pathname || '',hash = this.hash || '',host = false,query = '';if (this.host) {host = auth + this.host;} else if (this.hostname) {host = auth + (this.hostname.indexOf(':') === -1 ?this.hostname :'[' + this.hostname + ']');if (this.port) {host += ':' + this.port;}}if (this.query &&isObject(this.query) &&Object.keys(this.query).length) {query = querystring.stringify(this.query);}var search = this.search || (query && ('?' + query)) || '';if (protocol && protocol.substr(-1) !== ':') protocol += ':';// only the slashedProtocols get the //. Not mailto:, xmpp:, etc.// unless they had them to begin with.if (this.slashes ||(!protocol || slashedProtocol[protocol]) && host !== false) {host = '//' + (host || '');if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;} else if (!host) {host = '';}if (hash && hash.charAt(0) !== '#') hash = '#' + hash;if (search && search.charAt(0) !== '?') search = '?' + search;pathname = pathname.replace(/[?#]/g, function(match) {return encodeURIComponent(match);});search = search.replace('#', '%23');return protocol + host + pathname + search + hash;};function urlResolve(source, relative) {return urlParse(source, false, true).resolve(relative);}Url.prototype.resolve = function(relative) {return this.resolveObject(urlParse(relative, false, true)).format();};function urlResolveObject(source, relative) {if (!source) return relative;return urlParse(source, false, true).resolveObject(relative);}Url.prototype.resolveObject = function(relative) {if (isString(relative)) {var rel = new Url();rel.parse(relative, false, true);relative = rel;}var r###lt = new Url();Object.keys(this).forEach(function(k) {r###lt[k] = this[k];}, this);// hash is always overridden, no matter what.// even href="" will remove it.r###lt.hash = relative.hash;// if the relative url is empty, then there's nothing left to do here.if (relative.href === '') {r###lt.href = r###lt.format();return r###lt;}// hrefs like //foo/bar always cut to the protocol.if (relative.slashes && !relative.protocol) {// take everything except the protocol from relativeObject.keys(relative).forEach(function(k) {if (k !== 'protocol')r###lt[k] = relative[k];});//urlParse appends trailing / to urls like http://www.example.comif (slashedProtocol[r###lt.protocol] &&r###lt.hostname && !r###lt.pathname) {r###lt.path = r###lt.pathname = '/';}r###lt.href = r###lt.format();return r###lt;}if (relative.protocol && relative.protocol !== r###lt.protocol) {// if it's a known url protocol, then changing// the protocol does weird things// first, if it's not file:, then we MUST have a host,// and if there was a path// to begin with, then we MUST have a path.// if it is file:, then the host is dropped,// because that's known to be hostless.// anything else is assumed to be absolute.if (!slashedProtocol[relative.protocol]) {Object.keys(relative).forEach(function(k) {r###lt[k] = relative[k];});r###lt.href = r###lt.format();return r###lt;}r###lt.protocol = relative.protocol;if (!relative.host && !hostlessProtocol[relative.protocol]) {var relPath = (relative.pathname || '').split('/');while (relPath.length && !(relative.host = relPath.shift()));if (!relative.host) relative.host = '';if (!relative.hostname) relative.hostname = '';if (relPath[0] !== '') relPath.unshift('');if (relPath.length < 2) relPath.unshift('');r###lt.pathname = relPath.join('/');} else {r###lt.pathname = relative.pathname;}r###lt.search = relative.search;r###lt.query = relative.query;r###lt.host = relative.host || '';r###lt.auth = relative.auth;r###lt.hostname = relative.hostname || relative.host;r###lt.port = relative.port;// to support http.requestif (r###lt.pathname || r###lt.search) {var p = r###lt.pathname || '';var s = r###lt.search || '';r###lt.path = p + s;}r###lt.slashes = r###lt.slashes || relative.slashes;r###lt.href = r###lt.format();return r###lt;}var isSourceAbs = (r###lt.pathname && r###lt.pathname.charAt(0) === '/'),isRelAbs = (relative.host ||relative.pathname && relative.pathname.charAt(0) === '/'),mustEndAbs = (isRelAbs || isSourceAbs ||(r###lt.host && relative.pathname)),removeAllDots = mustEndAbs,srcPath = r###lt.pathname && r###lt.pathname.split('/') || [],relPath = relative.pathname && relative.pathname.split('/') || [],psychotic = r###lt.protocol && !slashedProtocol[r###lt.protocol];// if the url is a non-slashed url, then relative// links like ../.. should be able// to crawl up to the hostname, as well. This is strange.// r###lt.protocol has already been set by now.// Later on, put the first path part into the host field.if (psychotic) {r###lt.hostname = '';r###lt.port = null;if (r###lt.host) {if (srcPath[0] === '') srcPath[0] = r###lt.host;else srcPath.unshift(r###lt.host);}r###lt.host = '';if (relative.protocol) {relative.hostname = null;relative.port = null;if (relative.host) {if (relPath[0] === '') relPath[0] = relative.host;else relPath.unshift(relative.host);}relative.host = null;}mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');}if (isRelAbs) {// it's absolute.r###lt.host = (relative.host || relative.host === '') ?relative.host : r###lt.host;r###lt.hostname = (relative.hostname || relative.hostname === '') ?relative.hostname : r###lt.hostname;r###lt.search = relative.search;r###lt.query = relative.query;srcPath = relPath;// fall through to the dot-handling below.} else if (relPath.length) {// it's relative// throw away the existing file, and take the new path instead.if (!srcPath) srcPath = [];srcPath.pop();srcPath = srcPath.concat(relPath);r###lt.search = relative.search;r###lt.query = relative.query;} else if (!isNullOrUndefined(relative.search)) {// just pull out the search.// like href='?foo'.// Put this after the other two cases because it simplifies the booleansif (psychotic) {r###lt.hostname = r###lt.host = srcPath.shift();//occationaly the auth can get stuck only in host//this especialy happens in cases like//url.resolveObject('mailto:local1@domain1', 'local2@domain2')var authInHost = r###lt.host && r###lt.host.indexOf('@') > 0 ?r###lt.host.split('@') : false;if (authInHost) {r###lt.auth = authInHost.shift();r###lt.host = r###lt.hostname = authInHost.shift();}}r###lt.search = relative.search;r###lt.query = relative.query;//to support http.requestif (!isNull(r###lt.pathname) || !isNull(r###lt.search)) {r###lt.path = (r###lt.pathname ? r###lt.pathname : '') +(r###lt.search ? r###lt.search : '');}r###lt.href = r###lt.format();return r###lt;}if (!srcPath.length) {// no path at all. easy.// we've already handled the other stuff above.r###lt.pathname = null;//to support http.requestif (r###lt.search) {r###lt.path = '/' + r###lt.search;} else {r###lt.path = null;}r###lt.href = r###lt.format();return r###lt;}// if a url ENDs in . or .., then it must get a trailing slash.// however, if it ends in anything else non-slashy,// then it must NOT get a trailing slash.var last = srcPath.slice(-1)[0];var hasTrailingSlash = ((r###lt.host || relative.host) && (last === '.' || last === '..') ||last === '');// strip single dots, resolve double dots to parent dir// if the path tries to go above the root, `up` ends up > 0var up = 0;for (var i = srcPath.length; i >= 0; i--) {last = srcPath[i];if (last == '.') {srcPath.splice(i, 1);} else if (last === '..') {srcPath.splice(i, 1);up++;} else if (up) {srcPath.splice(i, 1);up--;}}// if the path is allowed to go above the root, restore leading ..sif (!mustEndAbs && !removeAllDots) {for (; up--; up) {srcPath.unshift('..');}}if (mustEndAbs && srcPath[0] !== '' &&(!srcPath[0] || srcPath[0].charAt(0) !== '/')) {srcPath.unshift('');}if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {srcPath.push('');}var isAbsolute = srcPath[0] === '' ||(srcPath[0] && srcPath[0].charAt(0) === '/');// put the host backif (psychotic) {r###lt.hostname = r###lt.host = isAbsolute ? '' :srcPath.length ? srcPath.shift() : '';//occationaly the auth can get stuck only in host//this especialy happens in cases like//url.resolveObject('mailto:local1@domain1', 'local2@domain2')var authInHost = r###lt.host && r###lt.host.indexOf('@') > 0 ?r###lt.host.split('@') : false;if (authInHost) {r###lt.auth = authInHost.shift();r###lt.host = r###lt.hostname = authInHost.shift();}}mustEndAbs = mustEndAbs || (r###lt.host && srcPath.length);if (mustEndAbs && !isAbsolute) {srcPath.unshift('');}if (!srcPath.length) {r###lt.pathname = null;r###lt.path = null;} else {r###lt.pathname = srcPath.join('/');}//to support request.httpif (!isNull(r###lt.pathname) || !isNull(r###lt.search)) {r###lt.path = (r###lt.pathname ? r###lt.pathname : '') +(r###lt.search ? r###lt.search : '');}r###lt.auth = relative.auth || r###lt.auth;r###lt.slashes = r###lt.slashes || relative.slashes;r###lt.href = r###lt.format();return r###lt;};Url.prototype.parseHost = function() {var host = this.host;var port = portPattern.exec(host);if (port) {port = port[0];if (port !== ':') {this.port = port.substr(1);}host = host.substr(0, host.length - port.length);}if (host) this.hostname = host;};function isString(arg) {return typeof arg === "string";}function isObject(arg) {return typeof arg === 'object' && arg !== null;}function isNull(arg) {return arg === null;}function isNullOrUndefined(arg) {return arg == null;}},{"punycode":7,"querystring":10}],12:[function(require,module,exports){module.exports = function isBuffer(arg) {return arg && typeof arg === 'object'&& typeof arg.copy === 'function'&& typeof arg.fill === 'function'&& typeof arg.readUInt8 === 'function';}},{}],13:[function(require,module,exports){(function (process,global){// Copyright Joyent, Inc. and other Node contributors.//// Permission is hereby granted, free of charge, to any person obtaining a// copy of this software and associated documentation files (the// "Software"), to deal in the Software without restriction, including// without limitation the rights to use, copy, modify, merge, publish,// distribute, sublicense, and/or sell copies of the Software, and to permit// persons to whom the Software is furnished to do so, subject to the// following conditions://// The above copyright notice and this permission notice shall be included// in all copies or substantial portions of the Software.//// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE// USE OR OTHER DEALINGS IN THE SOFTWARE.var formatRegExp = /%[sdj%]/g;exports.format = function(f) {if (!isString(f)) {var objects = [];for (var i = 0; i < arguments.length; i++) {objects.push(inspect(arguments[i]));}return objects.join(' ');}var i = 1;var args = arguments;var len = args.length;var str = String(f).replace(formatRegExp, function(x) {if (x === '%%') return '%';if (i >= len) return x;switch (x) {case '%s': return String(args[i++]);case '%d': return Number(args[i++]);case '%j':try {return JSON.stringify(args[i++]);} catch (_) {return '[Circular]';}default:return x;}});for (var x = args[i]; i < len; x = args[++i]) {if (isNull(x) || !isObject(x)) {str += ' ' + x;} else {str += ' ' + inspect(x);}}return str;};// Mark that a method should not be used.// Returns a modified function which warns once by default.// If --no-deprecation is set, then it is a no-op.exports.deprecate = function(fn, msg) {// Allow for deprecating things in the process of starting up.if (isUndefined(global.process)) {return function() {return exports.deprecate(fn, msg).apply(this, arguments);};}if (process.noDeprecation === true) {return fn;}var warned = false;function deprecated() {if (!warned) {if (process.throwDeprecation) {throw new Error(msg);} else if (process.traceDeprecation) {console.trace(msg);} else {console.error(msg);}warned = true;}return fn.apply(this, arguments);}return deprecated;};var debugs = {};var debugEnviron;exports.debuglog = function(set) {if (isUndefined(debugEnviron))debugEnviron = process.env.NODE_DEBUG || '';set = set.toUpperCase();if (!debugs[set]) {if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {var pid = process.pid;debugs[set] = function() {var msg = exports.format.apply(exports, arguments);console.error('%s %d: %s', set, pid, msg);};} else {debugs[set] = function() {};}}return debugs[set];};/*** Echos the value of a value. Trys to print the value out* in the best way possible given the different types.** @param {Object} obj The object to print out.* @param {Object} opts Optional options object that alters the output.*//* legacy: obj, showHidden, depth, colors*/function inspect(obj, opts) {// default optionsvar ctx = {seen: [],stylize: stylizeNoColor};// legacy...if (arguments.length >= 3) ctx.depth = arguments[2];if (arguments.length >= 4) ctx.colors = arguments[3];if (isBoolean(opts)) {// legacy...ctx.showHidden = opts;} else if (opts) {// got an "options" objectexports._extend(ctx, opts);}// set default optionsif (isUndefined(ctx.showHidden)) ctx.showHidden = false;if (isUndefined(ctx.depth)) ctx.depth = 2;if (isUndefined(ctx.colors)) ctx.colors = false;if (isUndefined(ctx.customInspect)) ctx.customInspect = true;if (ctx.colors) ctx.stylize = stylizeWithColor;return formatValue(ctx, obj, ctx.depth);}exports.inspect = inspect;// http://en.wikipedia.org/wiki/ANSI_escape_code#graphicsinspect.colors = {'bold' : [1, 22],'italic' : [3, 23],'underline' : [4, 24],'inverse' : [7, 27],'white' : [37, 39],'grey' : [90, 39],'black' : [30, 39],'blue' : [34, 39],'cyan' : [36, 39],'green' : [32, 39],'magenta' : [35, 39],'red' : [31, 39],'yellow' : [33, 39]};// Don't use 'blue' not visible on cmd.exeinspect.styles = {'special': 'cyan','number': 'yellow','boolean': 'yellow','undefined': 'grey','null': 'bold','string': 'green','date': 'magenta',// "name": intentionally not styling'regexp': 'red'};function stylizeWithColor(str, styleType) {var style = inspect.styles[styleType];if (style) {return '\u001b[' + inspect.colors[style][0] + 'm' + str +'\u001b[' + inspect.colors[style][1] + 'm';} else {return str;}}function stylizeNoColor(str, styleType) {return str;}function arrayToHash(array) {var hash = {};array.forEach(function(val, idx) {hash[val] = true;});return hash;}function formatValue(ctx, value, recurseTimes) {// Provide a hook for user-specified inspect functions.// Check that value is an object with an inspect function on itif (ctx.customInspect &&value &&isFunction(value.inspect) &&// Filter out the util module, it's inspect function is specialvalue.inspect !== exports.inspect &&// Also filter out any prototype objects using the circular check.!(value.constructor && value.constructor.prototype === value)) {var ret = value.inspect(recurseTimes, ctx);if (!isString(ret)) {ret = formatValue(ctx, ret, recurseTimes);}return ret;}// Primitive types cannot have propertiesvar primitive = formatPrimitive(ctx, value);if (primitive) {return primitive;}// Look up the keys of the object.var keys = Object.keys(value);var visibleKeys = arrayToHash(keys);if (ctx.showHidden) {keys = Object.getOwnPropertyNames(value);}// IE doesn't make error fields non-enumerable// http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspxif (isError(value)&& (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {return formatError(value);}// Some type of object without properties can be shortcutted.if (keys.length === 0) {if (isFunction(value)) {var name = value.name ? ': ' + value.name : '';return ctx.stylize('[Function' + name + ']', 'special');}if (isRegExp(value)) {return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');}if (isDate(value)) {return ctx.stylize(Date.prototype.toString.call(value), 'date');}if (isError(value)) {return formatError(value);}}var base = '', array = false, braces = ['{', '}'];// Make Array say that they are Arrayif (isArray(value)) {array = true;braces = ['[', ']'];}// Make functions say that they are functionsif (isFunction(value)) {var n = value.name ? ': ' + value.name : '';base = ' [Function' + n + ']';}// Make RegExps say that they are RegExpsif (isRegExp(value)) {base = ' ' + RegExp.prototype.toString.call(value);}// Make dates with properties first say the dateif (isDate(value)) {base = ' ' + Date.prototype.toUTCString.call(value);}// Make error with message first say the errorif (isError(value)) {base = ' ' + formatError(value);}if (keys.length === 0 && (!array || value.length == 0)) {return braces[0] + base + braces[1];}if (recurseTimes < 0) {if (isRegExp(value)) {return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');} else {return ctx.stylize('[Object]', 'special');}}ctx.seen.push(value);var output;if (array) {output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);} else {output = keys.map(function(key) {return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);});}ctx.seen.pop();return reduceToSingleString(output, base, braces);}function formatPrimitive(ctx, value) {if (isUndefined(value))return ctx.stylize('undefined', 'undefined');if (isString(value)) {var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '').replace(/'/g, "\\'").replace(/\\"/g, '"') + '\'';return ctx.stylize(simple, 'string');}if (isNumber(value))return ctx.stylize('' + value, 'number');if (isBoolean(value))return ctx.stylize('' + value, 'boolean');// For some reason typeof null is "object", so special case here.if (isNull(value))return ctx.stylize('null', 'null');}function formatError(value) {return '[' + Error.prototype.toString.call(value) + ']';}function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {var output = [];for (var i = 0, l = value.length; i < l; ++i) {if (hasOwnProperty(value, String(i))) {output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,String(i), true));} else {output.push('');}}keys.forEach(function(key) {if (!key.match(/^\d+$/)) {output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,key, true));}});return output;}function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {var name, str, desc;desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };if (desc.get) {if (desc.set) {str = ctx.stylize('[Getter/Setter]', 'special');} else {str = ctx.stylize('[Getter]', 'special');}} else {if (desc.set) {str = ctx.stylize('[Setter]', 'special');}}if (!hasOwnProperty(visibleKeys, key)) {name = '[' + key + ']';}if (!str) {if (ctx.seen.indexOf(desc.value) < 0) {if (isNull(recurseTimes)) {str = formatValue(ctx, desc.value, null);} else {str = formatValue(ctx, desc.value, recurseTimes - 1);}if (str.indexOf('\n') > -1) {if (array) {str = str.split('\n').map(function(line) {return ' ' + line;}).join('\n').substr(2);} else {str = '\n' + str.split('\n').map(function(line) {return ' ' + line;}).join('\n');}}} else {str = ctx.stylize('[Circular]', 'special');}}if (isUndefined(name)) {if (array && key.match(/^\d+$/)) {return str;}name = JSON.stringify('' + key);if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {name = name.substr(1, name.length - 2);name = ctx.stylize(name, 'name');} else {name = name.replace(/'/g, "\\'").replace(/\\"/g, '"').replace(/(^"|"$)/g, "'");name = ctx.stylize(name, 'string');}}return name + ': ' + str;}function reduceToSingleString(output, base, braces) {var numLinesEst = 0;var length = output.reduce(function(prev, cur) {numLinesEst++;if (cur.indexOf('\n') >= 0) numLinesEst++;return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;}, 0);if (length > 60) {return braces[0] +(base === '' ? '' : base + '\n ') +' ' +output.join(',\n ') +' ' +braces[1];}return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];}// NOTE: These type checking functions intentionally don't use `instanceof`// because it is fragile and can be easily faked with `Object.create()`.function isArray(ar) {return Array.isArray(ar);}exports.isArray = isArray;function isBoolean(arg) {return typeof arg === 'boolean';}exports.isBoolean = isBoolean;function isNull(arg) {return arg === null;}exports.isNull = isNull;function isNullOrUndefined(arg) {return arg == null;}exports.isNullOrUndefined = isNullOrUndefined;function isNumber(arg) {return typeof arg === 'number';}exports.isNumber = isNumber;function isString(arg) {return typeof arg === 'string';}exports.isString = isString;function isSymbol(arg) {return typeof arg === 'symbol';}exports.isSymbol = isSymbol;function isUndefined(arg) {return arg === void 0;}exports.isUndefined = isUndefined;function isRegExp(re) {return isObject(re) && objectToString(re) === '[object RegExp]';}exports.isRegExp = isRegExp;function isObject(arg) {return typeof arg === 'object' && arg !== null;}exports.isObject = isObject;function isDate(d) {return isObject(d) && objectToString(d) === '[object Date]';}exports.isDate = isDate;function isError(e) {return isObject(e) &&(objectToString(e) === '[object Error]' || e instanceof Error);}exports.isError = isError;function isFunction(arg) {return typeof arg === 'function';}exports.isFunction = isFunction;function isPrimitive(arg) {return arg === null ||typeof arg === 'boolean' ||typeof arg === 'number' ||typeof arg === 'string' ||typeof arg === 'symbol' || // ES6 symboltypeof arg === 'undefined';}exports.isPrimitive = isPrimitive;exports.isBuffer = require('./support/isBuffer');function objectToString(o) {return Object.prototype.toString.call(o);}function pad(n) {return n < 10 ? '0' + n.toString(10) : n.toString(10);}var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep','Oct', 'Nov', 'Dec'];// 26 Feb 16:19:34function timestamp() {var d = new Date();var time = [pad(d.getHours()),pad(d.getMinutes()),pad(d.getSeconds())].join(':');return [d.getDate(), months[d.getMonth()], time].join(' ');}// log is just a thin wrapper to console.log that prepends a timestampexports.log = function() {console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));};/*** Inherit the prototype methods from one constructor into another.** The Function.prototype.inherits from lang.js rewritten as a standalone* function (not on Function.prototype). NOTE: If this file is to be loaded* during bootstrapping this function needs to be rewritten using some native* functions as prototype setup using normal JavaScript does not work as* expected during bootstrapping (see mirror.js in r114903).** @param {function} ctor Constructor function which needs to inherit the* prototype.* @param {function} superCtor Constructor function to inherit prototype from.*/exports.inherits = require('inherits');exports._extend = function(origin, add) {// Don't do anything if add isn't an objectif (!add || !isObject(add)) return origin;var keys = Object.keys(add);var i = keys.length;while (i--) {origin[keys[i]] = add[keys[i]];}return origin;};function hasOwnProperty(obj, prop) {return Object.prototype.hasOwnProperty.call(obj, prop);}}).call(this,require("FWaASH"),typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})},{"./support/isBuffer":12,"FWaASH":6,"inherits":5}],14:[function(require,module,exports){"use strict";var gh = require("github-url-to-object");function getTagName(URL) {var reg = /\/releases\/tag\/(.*)[#?/]?/;var match = URL.match(reg);return match && match[1];}function convertURL(URL) {var ghParsed = gh(URL);ghParsed.tagName = getTagName(URL);return ghParsed;}module.exports = convertURL;},{"github-url-to-object":15}],15:[function(require,module,exports){"use strict"var url = require("url")var util = require("util")var isUrl = require("is-url")module.exports = function(repo_url) {var obj = {}if (!repo_url) return nullvar shorthand = repo_url.match(/^([\w-_]+)\/([\w-_\.]+)#?([\w-_\.]+)?$/)var mediumhand = repo_url.match(/^github:([\w-_]+)\/([\w-_\.]+)#?([\w-_\.]+)?$/)var antiquated = repo_url.match(/^git@[\w-_\.]+:([\w-_]+)\/([\w-_\.]+)$/)if (shorthand) {obj.user = shorthand[1]obj.repo = shorthand[2]obj.branch = shorthand[3] || "master"} else if (mediumhand) {obj.user = mediumhand[1]obj.repo = mediumhand[2]obj.branch = mediumhand[3] || "master"} else if (antiquated) {obj.user = antiquated[1]obj.repo = antiquated[2].replace(/\.git$/i, "")obj.branch = "master"} else {if (!isUrl(repo_url)) return nullvar parsedURL = url.parse(repo_url)if (parsedURL.hostname != "github.com") return nullvar parts = parsedURL.pathname.match(/^\/([\w-_]+)\/([\w-_\.]+)(\/tree\/[\w-_\.]+)?(\/blob\/[\w-_\.]+)?/)// ([\w-_\.]+)if (!parts) return nullobj.user = parts[1]obj.repo = parts[2].replace(/\.git$/i, "")if (parts[3]) {obj.branch = parts[3].replace(/^\/tree\//, "")} else if (parts[4]) {obj.branch = parts[4].replace(/^\/blob\//, "")} else {obj.branch = "master"}}obj.tarball_url = util.format("https://api.github.com/repos/%s/%s/tarball/%s", obj.user, obj.repo, obj.branch)if (obj.branch === "master") {obj.https_url = util.format("https://github.com/%s/%s", obj.user, obj.repo)obj.travis_url = util.format("https://travis-ci.org/%s/%s", obj.user, obj.repo)} else {obj.https_url = util.format("https://github.com/%s/%s/tree/%s", obj.user, obj.repo, obj.branch)obj.travis_url = util.format("https://travis-ci.org/%s/%s?branch=%s", obj.user, obj.repo, obj.branch)}return obj}},{"is-url":16,"url":11,"util":13}],16:[function(require,module,exports){/*** Expose `isUrl`.*/module.exports = isUrl;/*** Matcher.*/var matcher = /^\w+:\/\/([^\s\.]+\.\S{2}|localhost[\:?\d]*)\S*$/;/*** Loosely validate a URL `string`.** @param {String} string* @return {Boolean}*/function isUrl(string){return matcher.test(string);}},{}],17:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var createCallback = require('lodash.createcallback'),forOwn = require('lodash.forown');/*** Iterates over elements of a collection, returning the first element that* the callback returns truey for. The callback is bound to `thisArg` and* invoked with three arguments; (value, index|key, collection).** If a property name is provided for `callback` the created "_.pluck" style* callback will return the property value of the given element.** If an object is provided for `callback` the created "_.where" style callback* will return `true` for elements that have the properties of the given object,* else `false`.** @static* @memberOf _* @alias detect, findWhere* @category Collections* @param {Array|Object|string} collection The collection to iterate over.* @param {Function|Object|string} [callback=identity] The function called* per iteration. If a property name or object is provided it will be used* to create a "_.pluck" or "_.where" style callback, respectively.* @param {*} [thisArg] The `this` binding of `callback`.* @returns {*} Returns the found element, else `undefined`.* @example** var characters = [* { 'name': 'barney', 'age': 36, 'blocked': false },* { 'name': 'fred', 'age': 40, 'blocked': true },* { 'name': 'pebbles', 'age': 1, 'blocked': false }* ];** _.find(characters, function(chr) {* return chr.age < 40;* });* // => { 'name': 'barney', 'age': 36, 'blocked': false }** // using "_.where" callback shorthand* _.find(characters, { 'age': 1 });* // => { 'name': 'pebbles', 'age': 1, 'blocked': false }** // using "_.pluck" callback shorthand* _.find(characters, 'blocked');* // => { 'name': 'fred', 'age': 40, 'blocked': true }*/function find(collection, callback, thisArg) {callback = createCallback(callback, thisArg, 3);var index = -1,length = collection ? collection.length : 0;if (typeof length == 'number') {while (++index < length) {var value = collection[index];if (callback(value, index, collection)) {return value;}}} else {var r###lt;forOwn(collection, function(value, index, collection) {if (callback(value, index, collection)) {r###lt = value;return false;}});return r###lt;}}module.exports = find;},{"lodash.createcallback":18,"lodash.forown":54}],18:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var baseCreateCallback = require('lodash._basecreatecallback'),baseIsEqual = require('lodash._baseisequal'),isObject = require('lodash.isobject'),keys = require('lodash.keys'),property = require('lodash.property');/*** Produces a callback bound to an optional `thisArg`. If `func` is a property* name the created callback will return the property value for a given element.* If `func` is an object the created callback will return `true` for elements* that contain the equivalent object properties, otherwise it will return `false`.** @static* @memberOf _* @category Utilities* @param {*} [func=identity] The value to convert to a callback.* @param {*} [thisArg] The `this` binding of the created callback.* @param {number} [argCount] The number of arguments the callback accepts.* @returns {Function} Returns a callback function.* @example** var characters = [* { 'name': 'barney', 'age': 36 },* { 'name': 'fred', 'age': 40 }* ];** // wrap to create custom callback shorthands* _.createCallback = _.wrap(_.createCallback, function(func, callback, thisArg) {* var match = /^(.+?)__([gl]t)(.+)$/.exec(callback);* return !match ? func(callback, thisArg) : function(object) {* return match[2] == 'gt' ? object[match[1]] > match[3] : object[match[1]] < match[3];* };* });** _.filter(characters, 'age__gt38');* // => [{ 'name': 'fred', 'age': 40 }]*/function createCallback(func, thisArg, argCount) {var type = typeof func;if (func == null || type == 'function') {return baseCreateCallback(func, thisArg, argCount);}// handle "_.pluck" style callback shorthandsif (type != 'object') {return property(func);}var props = keys(func),key = props[0],a = func[key];// handle "_.where" style callback shorthandsif (props.length == 1 && a === a && !isObject(a)) {// fast path the common case of providing an object with a single// property containing a primitive valuereturn function(object) {var b = object[key];return a === b && (a !== 0 || (1 / a == 1 / b));};}return function(object) {var length = props.length,r###lt = false;while (length--) {if (!(r###lt = baseIsEqual(object[props[length]], func[props[length]], null, true))) {break;}}return r###lt;};}module.exports = createCallback;},{"lodash._basecreatecallback":19,"lodash._baseisequal":38,"lodash.isobject":47,"lodash.keys":49,"lodash.property":53}],19:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var bind = require('lodash.bind'),identity = require('lodash.identity'),setBindData = require('lodash._setbinddata'),support = require('lodash.support');/** Used to detected named functions */var reFuncName = /^\s*function[ \n\r\t]+\w/;/** Used to detect functions containing a `this` reference */var reThis = /\bthis\b/;/** Native method shortcuts */var fnToString = Function.prototype.toString;/*** The base implementation of `_.createCallback` without support for creating* "_.pluck" or "_.where" style callbacks.** @private* @param {*} [func=identity] The value to convert to a callback.* @param {*} [thisArg] The `this` binding of the created callback.* @param {number} [argCount] The number of arguments the callback accepts.* @returns {Function} Returns a callback function.*/function baseCreateCallback(func, thisArg, argCount) {if (typeof func != 'function') {return identity;}// exit early for no `thisArg` or already bound by `Function#bind`if (typeof thisArg == 'undefined' || !('prototype' in func)) {return func;}var bindData = func.__bindData__;if (typeof bindData == 'undefined') {if (support.funcNames) {bindData = !func.name;}bindData = bindData || !support.funcDecomp;if (!bindData) {var source = fnToString.call(func);if (!support.funcNames) {bindData = !reFuncName.test(source);}if (!bindData) {// checks if `func` references the `this` keyword and stores the r###ltbindData = reThis.test(source);setBindData(func, bindData);}}}// exit early if there are no `this` references or `func` is boundif (bindData === false || (bindData !== true && bindData[1] & 1)) {return func;}switch (argCount) {case 1: return function(value) {return func.call(thisArg, value);};case 2: return function(a, b) {return func.call(thisArg, a, b);};case 3: return function(value, index, collection) {return func.call(thisArg, value, index, collection);};case 4: return function(accumulator, value, index, collection) {return func.call(thisArg, accumulator, value, index, collection);};}return bind(func, thisArg);}module.exports = baseCreateCallback;},{"lodash._setbinddata":20,"lodash.bind":23,"lodash.identity":35,"lodash.support":36}],20:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var isNative = require('lodash._isnative'),noop = require('lodash.noop');/** Used as the property descriptor for `__bindData__` */var descriptor = {'configurable': false,'enumerable': false,'value': null,'writable': false};/** Used to set meta data on functions */var defineProperty = (function() {// IE 8 only accepts DOM elementstry {var o = {},func = isNative(func = Object.defineProperty) && func,r###lt = func(o, o, o) && func;} catch(e) { }return r###lt;}());/*** Sets `this` binding data on a given function.** @private* @param {Function} func The function to set data on.* @param {Array} value The data array to set.*/var setBindData = !defineProperty ? noop : function(func, value) {descriptor.value = value;defineProperty(func, '__bindData__', descriptor);};module.exports = setBindData;},{"lodash._isnative":21,"lodash.noop":22}],21:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//** Used for native method references */var objectProto = Object.prototype;/** Used to resolve the internal [[Class]] of values */var toString = objectProto.toString;/** Used to detect if a method is native */var reNative = RegExp('^' +String(toString).replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/toString| for [^\]]+/g, '.*?') + '$');/*** Checks if `value` is a native function.** @private* @param {*} value The value to check.* @returns {boolean} Returns `true` if the `value` is a native function, else `false`.*/function isNative(value) {return typeof value == 'function' && reNative.test(value);}module.exports = isNative;},{}],22:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//*** A no-operation function.** @static* @memberOf _* @category Utilities* @example** var object = { 'name': 'fred' };* _.noop(object) === undefined;* // => true*/function noop() {// no operation performed}module.exports = noop;},{}],23:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var createWrapper = require('lodash._createwrapper'),slice = require('lodash._slice');/*** Creates a function that, when called, invokes `func` with the `this`* binding of `thisArg` and prepends any additional `bind` arguments to those* provided to the bound function.** @static* @memberOf _* @category Functions* @param {Function} func The function to bind.* @param {*} [thisArg] The `this` binding of `func`.* @param {...*} [arg] Arguments to be partially applied.* @returns {Function} Returns the new bound function.* @example** var func = function(greeting) {* return greeting + ' ' + this.name;* };** func = _.bind(func, { 'name': 'fred' }, 'hi');* func();* // => 'hi fred'*/function bind(func, thisArg) {return arguments.length > 2? createWrapper(func, 17, slice(arguments, 2), null, thisArg): createWrapper(func, 1, null, null, thisArg);}module.exports = bind;},{"lodash._createwrapper":24,"lodash._slice":34}],24:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var baseBind = require('lodash._basebind'),baseCreateWrapper = require('lodash._basecreatewrapper'),isFunction = require('lodash.isfunction'),slice = require('lodash._slice');/*** Used for `Array` method references.** Normally `Array.prototype` would suffice, however, using an array literal* avoids issues in Narwhal.*/var arrayRef = [];/** Native method shortcuts */var push = arrayRef.push,unshift = arrayRef.unshift;/*** Creates a function that, when called, either curries or invokes `func`* with an optional `this` binding and partially applied arguments.** @private* @param {Function|string} func The function or method name to reference.* @param {number} bitmask The bitmask of method flags to compose.* The bitmask may be composed of the following flags:* 1 - `_.bind`* 2 - `_.bindKey`* 4 - `_.curry`* 8 - `_.curry` (bound)* 16 - `_.partial`* 32 - `_.partialRight`* @param {Array} [partialArgs] An array of arguments to prepend to those* provided to the new function.* @param {Array} [partialRightArgs] An array of arguments to append to those* provided to the new function.* @param {*} [thisArg] The `this` binding of `func`.* @param {number} [arity] The arity of `func`.* @returns {Function} Returns the new function.*/function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {var isBind = bitmask & 1,isBindKey = bitmask & 2,isCurry = bitmask & 4,isCurryBound = bitmask & 8,isPartial = bitmask & 16,isPartialRight = bitmask & 32;if (!isBindKey && !isFunction(func)) {throw new TypeError;}if (isPartial && !partialArgs.length) {bitmask &= ~16;isPartial = partialArgs = false;}if (isPartialRight && !partialRightArgs.length) {bitmask &= ~32;isPartialRight = partialRightArgs = false;}var bindData = func && func.__bindData__;if (bindData && bindData !== true) {// clone `bindData`bindData = slice(bindData);if (bindData[2]) {bindData[2] = slice(bindData[2]);}if (bindData[3]) {bindData[3] = slice(bindData[3]);}// set `thisBinding` is not previously boundif (isBind && !(bindData[1] & 1)) {bindData[4] = thisArg;}// set if previously bound but not currently (subsequent curried functions)if (!isBind && bindData[1] & 1) {bitmask |= 8;}// set curried arity if not yet setif (isCurry && !(bindData[1] & 4)) {bindData[5] = arity;}// append partial left argumentsif (isPartial) {push.apply(bindData[2] || (bindData[2] = []), partialArgs);}// append partial right argumentsif (isPartialRight) {unshift.apply(bindData[3] || (bindData[3] = []), partialRightArgs);}// merge flagsbindData[1] |= bitmask;return createWrapper.apply(null, bindData);}// fast path for `_.bind`var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);}module.exports = createWrapper;},{"lodash._basebind":25,"lodash._basecreatewrapper":29,"lodash._slice":34,"lodash.isfunction":33}],25:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var baseCreate = require('lodash._basecreate'),isObject = require('lodash.isobject'),setBindData = require('lodash._setbinddata'),slice = require('lodash._slice');/*** Used for `Array` method references.** Normally `Array.prototype` would suffice, however, using an array literal* avoids issues in Narwhal.*/var arrayRef = [];/** Native method shortcuts */var push = arrayRef.push;/*** The base implementation of `_.bind` that creates the bound function and* sets its meta data.** @private* @param {Array} bindData The bind data array.* @returns {Function} Returns the new bound function.*/function baseBind(bindData) {var func = bindData[0],partialArgs = bindData[2],thisArg = bindData[4];function bound() {// `Function#bind` spec// http://es5.github.io/#x15.3.4.5if (partialArgs) {// avoid `arguments` object deoptimizations by using `slice` instead// of `Array.prototype.slice.call` and not assigning `arguments` to a// variable as a ternary expressionvar args = slice(partialArgs);push.apply(args, arguments);}// mimic the constructor's `return` behavior// http://es5.github.io/#x13.2.2if (this instanceof bound) {// ensure `new bound` is an instance of `func`var thisBinding = baseCreate(func.prototype),r###lt = func.apply(thisBinding, args || arguments);return isObject(r###lt) ? r###lt : thisBinding;}return func.apply(thisArg, args || arguments);}setBindData(bound, bindData);return bound;}module.exports = baseBind;},{"lodash._basecreate":26,"lodash._setbinddata":20,"lodash._slice":34,"lodash.isobject":47}],26:[function(require,module,exports){(function (global){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var isNative = require('lodash._isnative'),isObject = require('lodash.isobject'),noop = require('lodash.noop');/* Native method shortcuts for methods with the same name as other `lodash` methods */var nativeCreate = isNative(nativeCreate = Object.create) && nativeCreate;/*** The base implementation of `_.create` without support for assigning* properties to the created object.** @private* @param {Object} prototype The object to inherit from.* @returns {Object} Returns the new object.*/function baseCreate(prototype, properties) {return isObject(prototype) ? nativeCreate(prototype) : {};}// fallback for browsers without `Object.create`if (!nativeCreate) {baseCreate = (function() {function Object() {}return function(prototype) {if (isObject(prototype)) {Object.prototype = prototype;var r###lt = new Object;Object.prototype = null;}return r###lt || global.Object();};}());}module.exports = baseCreate;}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})},{"lodash._isnative":27,"lodash.isobject":47,"lodash.noop":28}],27:[function(require,module,exports){module.exports=require(21)},{}],28:[function(require,module,exports){module.exports=require(22)},{}],29:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var baseCreate = require('lodash._basecreate'),isObject = require('lodash.isobject'),setBindData = require('lodash._setbinddata'),slice = require('lodash._slice');/*** Used for `Array` method references.** Normally `Array.prototype` would suffice, however, using an array literal* avoids issues in Narwhal.*/var arrayRef = [];/** Native method shortcuts */var push = arrayRef.push;/*** The base implementation of `createWrapper` that creates the wrapper and* sets its meta data.** @private* @param {Array} bindData The bind data array.* @returns {Function} Returns the new function.*/function baseCreateWrapper(bindData) {var func = bindData[0],bitmask = bindData[1],partialArgs = bindData[2],partialRightArgs = bindData[3],thisArg = bindData[4],arity = bindData[5];var isBind = bitmask & 1,isBindKey = bitmask & 2,isCurry = bitmask & 4,isCurryBound = bitmask & 8,key = func;function bound() {var thisBinding = isBind ? thisArg : this;if (partialArgs) {var args = slice(partialArgs);push.apply(args, arguments);}if (partialRightArgs || isCurry) {args || (args = slice(arguments));if (partialRightArgs) {push.apply(args, partialRightArgs);}if (isCurry && args.length < arity) {bitmask |= 16 & ~32;return baseCreateWrapper([func, (isCurryBound ? bitmask : bitmask & ~3), args, null, thisArg, arity]);}}args || (args = arguments);if (isBindKey) {func = thisBinding[key];}if (this instanceof bound) {thisBinding = baseCreate(func.prototype);var r###lt = func.apply(thisBinding, args);return isObject(r###lt) ? r###lt : thisBinding;}return func.apply(thisBinding, args);}setBindData(bound, bindData);return bound;}module.exports = baseCreateWrapper;},{"lodash._basecreate":30,"lodash._setbinddata":20,"lodash._slice":34,"lodash.isobject":47}],30:[function(require,module,exports){module.exports=require(26)},{"lodash._isnative":31,"lodash.isobject":47,"lodash.noop":32}],31:[function(require,module,exports){module.exports=require(21)},{}],32:[function(require,module,exports){module.exports=require(22)},{}],33:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//*** Checks if `value` is a function.** @static* @memberOf _* @category Objects* @param {*} value The value to check.* @returns {boolean} Returns `true` if the `value` is a function, else `false`.* @example** _.isFunction(_);* // => true*/function isFunction(value) {return typeof value == 'function';}module.exports = isFunction;},{}],34:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//*** Slices the `collection` from the `start` index up to, but not including,* the `end` index.** Note: This function is used instead of `Array#slice` to support node lists* in IE < 9 and to ensure dense arrays are returned.** @private* @param {Array|Object|string} collection The collection to slice.* @param {number} start The start index.* @param {number} end The end index.* @returns {Array} Returns the new array.*/function slice(array, start, end) {start || (start = 0);if (typeof end == 'undefined') {end = array ? array.length : 0;}var index = -1,length = end - start || 0,r###lt = Array(length < 0 ? 0 : length);while (++index < length) {r###lt[index] = array[start + index];}return r###lt;}module.exports = slice;},{}],35:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//*** This method returns the first argument provided to it.** @static* @memberOf _* @category Utilities* @param {*} value Any value.* @returns {*} Returns `value`.* @example** var object = { 'name': 'fred' };* _.identity(object) === object;* // => true*/function identity(value) {return value;}module.exports = identity;},{}],36:[function(require,module,exports){(function (global){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var isNative = require('lodash._isnative');/** Used to detect functions containing a `this` reference */var reThis = /\bthis\b/;/*** An object used to flag environments features.** @static* @memberOf _* @type Object*/var support = {};/*** Detect if functions can be decompiled by `Function#toString`* (all but PS3 and older Opera mobile browsers & avoided in Windows 8 apps).** @memberOf _.support* @type boolean*/support.funcDecomp = !isNative(global.WinRTError) && reThis.test(function() { return this; });/*** Detect if `Function#name` is supported (all but IE).** @memberOf _.support* @type boolean*/support.funcNames = typeof Function.name == 'string';module.exports = support;}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})},{"lodash._isnative":37}],37:[function(require,module,exports){module.exports=require(21)},{}],38:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var forIn = require('lodash.forin'),getArray = require('lodash._getarray'),isFunction = require('lodash.isfunction'),objectTypes = require('lodash._objecttypes'),releaseArray = require('lodash._releasearray');/** `Object#toString` r###lt shortcuts */var argsClass = '[object Arguments]',arrayClass = '[object Array]',boolClass = '[object Boolean]',dateClass = '[object Date]',numberClass = '[object Number]',objectClass = '[object Object]',regexpClass = '[object RegExp]',stringClass = '[object String]';/** Used for native method references */var objectProto = Object.prototype;/** Used to resolve the internal [[Class]] of values */var toString = objectProto.toString;/** Native method shortcuts */var hasOwnProperty = objectProto.hasOwnProperty;/*** The base implementation of `_.isEqual`, without support for `thisArg` binding,* that allows partial "_.where" style comparisons.** @private* @param {*} a The value to compare.* @param {*} b The other value to compare.* @param {Function} [callback] The function to customize comparing values.* @param {Function} [isWhere=false] A flag to indicate performing partial comparisons.* @param {Array} [stackA=[]] Tracks traversed `a` objects.* @param {Array} [stackB=[]] Tracks traversed `b` objects.* @returns {boolean} Returns `true` if the values are equivalent, else `false`.*/function baseIsEqual(a, b, callback, isWhere, stackA, stackB) {// used to indicate that when comparing objects, `a` has at least the properties of `b`if (callback) {var r###lt = callback(a, b);if (typeof r###lt != 'undefined') {return !!r###lt;}}// exit early for identical valuesif (a === b) {// treat `+0` vs. `-0` as not equalreturn a !== 0 || (1 / a == 1 / b);}var type = typeof a,otherType = typeof b;// exit early for unlike primitive valuesif (a === a &&!(a && objectTypes[type]) &&!(b && objectTypes[otherType])) {return false;}// exit early for `null` and `undefined` avoiding ES3's Function#call behavior// http://es5.github.io/#x15.3.4.4if (a == null || b == null) {return a === b;}// compare [[Class]] namesvar className = toString.call(a),otherClass = toString.call(b);if (className == argsClass) {className = objectClass;}if (otherClass == argsClass) {otherClass = objectClass;}if (className != otherClass) {return false;}switch (className) {case boolClass:case dateClass:// coerce dates and booleans to numbers, dates to milliseconds and booleans// to `1` or `0` treating invalid dates coerced to `NaN` as not equalreturn +a == +b;case numberClass:// treat `NaN` vs. `NaN` as equalreturn (a != +a)? b != +b// but treat `+0` vs. `-0` as not equal: (a == 0 ? (1 / a == 1 / b) : a == +b);case regexpClass:case stringClass:// coerce regexes to strings (http://es5.github.io/#x15.10.6.4)// treat string primitives and their corresponding object instances as equalreturn a == String(b);}var isArr = className == arrayClass;if (!isArr) {// unwrap any `lodash` wrapped valuesvar aWrapped = hasOwnProperty.call(a, '__wrapped__'),bWrapped = hasOwnProperty.call(b, '__wrapped__');if (aWrapped || bWrapped) {return baseIsEqual(aWrapped ? a.__wrapped__ : a, bWrapped ? b.__wrapped__ : b, callback, isWhere, stackA, stackB);}// exit for functions and DOM nodesif (className != objectClass) {return false;}// in older versions of Opera, `arguments` objects have `Array` constructorsvar ctorA = a.constructor,ctorB = b.constructor;// non `Object` object instances with different constructors are not equalif (ctorA != ctorB &&!(isFunction(ctorA) && ctorA instanceof ctorA && isFunction(ctorB) && ctorB instanceof ctorB) &&('constructor' in a && 'constructor' in b)) {return false;}}// assume cyclic structures are equal// the algorithm for detecting cyclic structures is adapted from ES 5.1// section 15.12.3, abstract operation `JO` (http://es5.github.io/#x15.12.3)var initedStack = !stackA;stackA || (stackA = getArray());stackB || (stackB = getArray());var length = stackA.length;while (length--) {if (stackA[length] == a) {return stackB[length] == b;}}var size = 0;r###lt = true;// add `a` and `b` to the stack of traversed objectsstackA.push(a);stackB.push(b);// recursively compare objects and arrays (susceptible to call stack limits)if (isArr) {// compare lengths to determine if a deep comparison is necessarylength = a.length;size = b.length;r###lt = size == length;if (r###lt || isWhere) {// deep compare the contents, ignoring non-numeric propertieswhile (size--) {var index = length,value = b[size];if (isWhere) {while (index--) {if ((r###lt = baseIsEqual(a[index], value, callback, isWhere, stackA, stackB))) {break;}}} else if (!(r###lt = baseIsEqual(a[size], value, callback, isWhere, stackA, stackB))) {break;}}}}else {// deep compare objects using `forIn`, instead of `forOwn`, to avoid `Object.keys`// which, in this case, is more costlyforIn(b, function(value, key, b) {if (hasOwnProperty.call(b, key)) {// count the number of properties.size++;// deep compare each property value.return (r###lt = hasOwnProperty.call(a, key) && baseIsEqual(a[key], value, callback, isWhere, stackA, stackB));}});if (r###lt && !isWhere) {// ensure both objects have the same number of propertiesforIn(a, function(value, key, a) {if (hasOwnProperty.call(a, key)) {// `size` will be `-1` if `a` has more properties than `b`return (r###lt = --size > -1);}});}}stackA.pop();stackB.pop();if (initedStack) {releaseArray(stackA);releaseArray(stackB);}return r###lt;}module.exports = baseIsEqual;},{"lodash._getarray":39,"lodash._objecttypes":41,"lodash._releasearray":42,"lodash.forin":45,"lodash.isfunction":46}],39:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var arrayPool = require('lodash._arraypool');/*** Gets an array from the array pool or creates a new one if the pool is empty.** @private* @returns {Array} The array from the pool.*/function getArray() {return arrayPool.pop() || [];}module.exports = getArray;},{"lodash._arraypool":40}],40:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//** Used to pool arrays and objects used internally */var arrayPool = [];module.exports = arrayPool;},{}],41:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//** Used to determine if values are of the language type Object */var objectTypes = {'boolean': false,'function': true,'object': true,'number': false,'string': false,'undefined': false};module.exports = objectTypes;},{}],42:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var arrayPool = require('lodash._arraypool'),maxPoolSize = require('lodash._maxpoolsize');/*** Releases the given array back to the array pool.** @private* @param {Array} [array] The array to release.*/function releaseArray(array) {array.length = 0;if (arrayPool.length < maxPoolSize) {arrayPool.push(array);}}module.exports = releaseArray;},{"lodash._arraypool":43,"lodash._maxpoolsize":44}],43:[function(require,module,exports){module.exports=require(40)},{}],44:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//** Used as the max size of the `arrayPool` and `objectPool` */var maxPoolSize = 40;module.exports = maxPoolSize;},{}],45:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var baseCreateCallback = require('lodash._basecreatecallback'),objectTypes = require('lodash._objecttypes');/*** Iterates over own and inherited enumerable properties of an object,* executing the callback for each property. The callback is bound to `thisArg`* and invoked with three arguments; (value, key, object). Callbacks may exit* iteration early by explicitly returning `false`.** @static* @memberOf _* @type Function* @category Objects* @param {Object} object The object to iterate over.* @param {Function} [callback=identity] The function called per iteration.* @param {*} [thisArg] The `this` binding of `callback`.* @returns {Object} Returns `object`.* @example** function Shape() {* this.x = 0;* this.y = 0;* }** Shape.prototype.move = function(x, y) {* this.x += x;* this.y += y;* };** _.forIn(new Shape, function(value, key) {* console.log(key);* });* // => logs 'x', 'y', and 'move' (property order is not guaranteed across environments)*/var forIn = function(collection, callback, thisArg) {var index, iterable = collection, r###lt = iterable;if (!iterable) return r###lt;if (!objectTypes[typeof iterable]) return r###lt;callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);for (index in iterable) {if (callback(iterable[index], index, collection) === false) return r###lt;}return r###lt};module.exports = forIn;},{"lodash._basecreatecallback":19,"lodash._objecttypes":41}],46:[function(require,module,exports){module.exports=require(33)},{}],47:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var objectTypes = require('lodash._objecttypes');/*** Checks if `value` is the language type of Object.* (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)** @static* @memberOf _* @category Objects* @param {*} value The value to check.* @returns {boolean} Returns `true` if the `value` is an object, else `false`.* @example** _.isObject({});* // => true** _.isObject([1, 2, 3]);* // => true** _.isObject(1);* // => false*/function isObject(value) {// check if the value is the ECMAScript language type of Object// http://es5.github.io/#x8// and avoid a V8 bug// http://code.google.com/p/v8/issues/detail?id=2291return !!(value && objectTypes[typeof value]);}module.exports = isObject;},{"lodash._objecttypes":48}],48:[function(require,module,exports){module.exports=require(41)},{}],49:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var isNative = require('lodash._isnative'),isObject = require('lodash.isobject'),shimKeys = require('lodash._shimkeys');/* Native method shortcuts for methods with the same name as other `lodash` methods */var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys;/*** Creates an array composed of the own enumerable property names of an object.** @static* @memberOf _* @category Objects* @param {Object} object The object to inspect.* @returns {Array} Returns an array of property names.* @example** _.keys({ 'one': 1, 'two': 2, 'three': 3 });* // => ['one', 'two', 'three'] (property order is not guaranteed across environments)*/var keys = !nativeKeys ? shimKeys : function(object) {if (!isObject(object)) {return [];}return nativeKeys(object);};module.exports = keys;},{"lodash._isnative":50,"lodash._shimkeys":51,"lodash.isobject":47}],50:[function(require,module,exports){module.exports=require(21)},{}],51:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var objectTypes = require('lodash._objecttypes');/** Used for native method references */var objectProto = Object.prototype;/** Native method shortcuts */var hasOwnProperty = objectProto.hasOwnProperty;/*** A fallback implementation of `Object.keys` which produces an array of the* given object's own enumerable property names.** @private* @type Function* @param {Object} object The object to inspect.* @returns {Array} Returns an array of property names.*/var shimKeys = function(object) {var index, iterable = object, r###lt = [];if (!iterable) return r###lt;if (!(objectTypes[typeof object])) return r###lt;for (index in iterable) {if (hasOwnProperty.call(iterable, index)) {r###lt.push(index);}}return r###lt};module.exports = shimKeys;},{"lodash._objecttypes":52}],52:[function(require,module,exports){module.exports=require(41)},{}],53:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*//*** Creates a "_.pluck" style function, which returns the `key` value of a* given object.** @static* @memberOf _* @category Utilities* @param {string} key The name of the property to retrieve.* @returns {Function} Returns the new function.* @example** var characters = [* { 'name': 'fred', 'age': 40 },* { 'name': 'barney', 'age': 36 }* ];** var getName = _.property('name');** _.map(characters, getName);* // => ['barney', 'fred']** _.sortBy(characters, getName);* // => [{ 'name': 'barney', 'age': 36 }, { 'name': 'fred', 'age': 40 }]*/function property(key) {return function(object) {return object[key];};}module.exports = property;},{}],54:[function(require,module,exports){/*** Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>* Build: `lodash modularize modern exports="npm" -o ./npm/`* Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>* Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>* Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors* Available under MIT license <http://lodash.com/license>*/var baseCreateCallback = require('lodash._basecreatecallback'),keys = require('lodash.keys'),objectTypes = require('lodash._objecttypes');/*** Iterates over own enumerable properties of an object, executing the callback* for each property. The callback is bound to `thisArg` and invoked with three* arguments; (value, key, object). Callbacks may exit iteration early by* explicitly returning `false`.** @static* @memberOf _* @type Function* @category Objects* @param {Object} object The object to iterate over.* @param {Function} [callback=identity] The function called per iteration.* @param {*} [thisArg] The `this` binding of `callback`.* @returns {Object} Returns `object`.* @example** _.forOwn({ '0': 'zero', '1': 'one', 'length': 2 }, function(num, key) {* console.log(key);* });* // => logs '0', '1', and 'length' (property order is not guaranteed across environments)*/var forOwn = function(collection, callback, thisArg) {var index, iterable = collection, r###lt = iterable;if (!iterable) return r###lt;if (!objectTypes[typeof iterable]) return r###lt;callback = callback && typeof thisArg == 'undefined' ? callback : baseCreateCallback(callback, thisArg, 3);var ownIndex = -1,ownProps = objectTypes[typeof iterable] && keys(iterable),length = ownProps ? ownProps.length : 0;while (++ownIndex < length) {index = ownProps[ownIndex];if (callback(iterable[index], index, collection) === false) return r###lt;}return r###lt};module.exports = forOwn;},{"lodash._basecreatecallback":55,"lodash._objecttypes":76,"lodash.keys":77}],55:[function(require,module,exports){module.exports=require(19)},{"lodash._setbinddata":56,"lodash.bind":59,"lodash.identity":73,"lodash.support":74}],56:[function(require,module,exports){module.exports=require(20)},{"lodash._isnative":57,"lodash.noop":58}],57:[function(require,module,exports){module.exports=require(21)},{}],58:[function(require,module,exports){module.exports=require(22)},{}],59:[function(require,module,exports){module.exports=require(23)},{"lodash._createwrapper":60,"lodash._slice":72}],60:[function(require,module,exports){module.exports=require(24)},{"lodash._basebind":61,"lodash._basecreatewrapper":66,"lodash._slice":72,"lodash.isfunction":71}],61:[function(require,module,exports){module.exports=require(25)},{"lodash._basecreate":62,"lodash._setbinddata":56,"lodash._slice":72,"lodash.isobject":65}],62:[function(require,module,exports){module.exports=require(26)},{"lodash._isnative":63,"lodash.isobject":65,"lodash.noop":64}],63:[function(require,module,exports){module.exports=require(21)},{}],64:[function(require,module,exports){module.exports=require(22)},{}],65:[function(require,module,exports){module.exports=require(47)},{"lodash._objecttypes":76}],66:[function(require,module,exports){module.exports=require(29)},{"lodash._basecreate":67,"lodash._setbinddata":56,"lodash._slice":72,"lodash.isobject":70}],67:[function(require,module,exports){module.exports=require(26)},{"lodash._isnative":68,"lodash.isobject":70,"lodash.noop":69}],68:[function(require,module,exports){module.exports=require(21)},{}],69:[function(require,module,exports){module.exports=require(22)},{}],70:[function(require,module,exports){module.exports=require(47)},{"lodash._objecttypes":76}],71:[function(require,module,exports){module.exports=require(33)},{}],72:[function(require,module,exports){module.exports=require(34)},{}],73:[function(require,module,exports){module.exports=require(35)},{}],74:[function(require,module,exports){module.exports=require(36)},{"lodash._isnative":75}],75:[function(require,module,exports){module.exports=require(21)},{}],76:[function(require,module,exports){module.exports=require(41)},{}],77:[function(require,module,exports){module.exports=require(49)},{"lodash._isnative":78,"lodash._shimkeys":79,"lodash.isobject":80}],78:[function(require,module,exports){module.exports=require(21)},{}],79:[function(require,module,exports){module.exports=require(51)},{"lodash._objecttypes":76}],80:[function(require,module,exports){module.exports=require(47)},{"lodash._objecttypes":76}]},{},[1])