pax_global_header00006660000000000000000000000064124154565170014524gustar00rootroot0000000000000052 comment=e9e6557cc0fa26dba1a20b0d45e92de982f4047c colors.js-1.0.3/000077500000000000000000000000001241545651700134415ustar00rootroot00000000000000colors.js-1.0.3/.travis.yml000066400000000000000000000001041241545651700155450ustar00rootroot00000000000000language: node_js node_js: - "0.11" - "0.10" - "0.8" - "0.6"colors.js-1.0.3/MIT-LICENSE.txt000066400000000000000000000022251241545651700157140ustar00rootroot00000000000000Original Library - Copyright (c) Marak Squires Additional Functionality - Copyright (c) Sindre Sorhus (sindresorhus.com) 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.colors.js-1.0.3/ReadMe.md000066400000000000000000000061661241545651700151310ustar00rootroot00000000000000# colors.js ## get color and style in your node.js console ## Installation npm install colors ## colors and styles! ### text colors - black - red - green - yellow - blue - magenta - cyan - white - gray - grey ### background colors - bgBlack - bgRed - bgGreen - bgYellow - bgBlue - bgMagenta - bgCyan - bgWhite ### styles - reset - bold - dim - italic - underline - inverse - hidden - strikethrough ### extras - rainbow - zebra - america - trap - random ## Usage By popular demand, `colors` now ships with two types of usages! The super nifty way ```js var colors = require('colors'); console.log('hello'.green); // outputs green text console.log('i like cake and pies'.underline.red) // outputs red underlined text console.log('inverse the color'.inverse); // inverses the color console.log('OMG Rainbows!'.rainbow); // rainbow console.log('Run the trap'.trap); // Drops the bass ``` or a slightly less nifty way which doesn't extend `String.prototype` ```js var colors = require('colors/safe'); console.log(colors.green('hello')); // outputs green text console.log(colors.red.underline('i like cake and pies')) // outputs red underlined text console.log(colors.inverse('inverse the color')); // inverses the color console.log(colors.rainbow('OMG Rainbows!')); // rainbow console.log(colors.trap('Run the trap')); // Drops the bass ``` I prefer the first way. Some people seem to be afraid of extending `String.prototype` and prefer the second way. If you are writing good code you will never have an issue with the first approach. If you really don't want to touch `String.prototype`, the second usage will not touch `String` native object. ## Disabling Colors To disable colors you can pass the following arguments in the command line to your application: ```bash node myapp.js --no-color ``` ## Console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data) ```js var name = 'Marak'; console.log(colors.green('Hello %s'), name); // outputs -> 'Hello Marak' ``` ## Custom themes ### Using standard API ```js var colors = require('colors'); colors.setTheme({ silly: 'rainbow', input: 'grey', verbose: 'cyan', prompt: 'grey', info: 'green', data: 'grey', help: 'cyan', warn: 'yellow', debug: 'blue', error: 'red' }); // outputs red text console.log("this is an error".error); // outputs yellow text console.log("this is a warning".warn); ``` ### Using string safe API ```js var colors = require('colors/safe'); // set single property var error = colors.red; error('this is red'); // set theme colors.setTheme({ silly: 'rainbow', input: 'grey', verbose: 'cyan', prompt: 'grey', info: 'green', data: 'grey', help: 'cyan', warn: 'yellow', debug: 'blue', error: 'red' }); // outputs red text console.log(colors.error("this is an error")); // outputs yellow text console.log(colors.warn("this is a warning")); ``` *Protip: There is a secret undocumented style in `colors`. If you find the style you can summon him.*colors.js-1.0.3/examples/000077500000000000000000000000001241545651700152575ustar00rootroot00000000000000colors.js-1.0.3/examples/normal-usage.js000066400000000000000000000034031241545651700202070ustar00rootroot00000000000000var colors = require('../lib/index'); console.log("First some yellow text".yellow); console.log("Underline that text".yellow.underline); console.log("Make it bold and red".red.bold); console.log(("Double Raindows All Day Long").rainbow) console.log("Drop the bass".trap) console.log("DROP THE RAINBOW BASS".trap.rainbow) console.log('Chains are also cool.'.bold.italic.underline.red); // styles not widely supported console.log('So '.green + 'are'.underline + ' ' + 'inverse'.inverse + ' styles! '.yellow.bold); // styles not widely supported console.log("Zebras are so fun!".zebra); // // Remark: .strikethrough may not work with Mac OS Terminal App // console.log("This is " + "not".strikethrough + " fun."); console.log('Background color attack!'.black.bgWhite) console.log('Use random styles on everything!'.random) console.log('America, Heck Yeah!'.america) console.log('Setting themes is useful') // // Custom themes // console.log('Generic logging theme as JSON'.green.bold.underline); // Load theme with JSON literal colors.setTheme({ silly: 'rainbow', input: 'grey', verbose: 'cyan', prompt: 'grey', info: 'green', data: 'grey', help: 'cyan', warn: 'yellow', debug: 'blue', error: 'red' }); // outputs red text console.log("this is an error".error); // outputs yellow text console.log("this is a warning".warn); // outputs grey text console.log("this is an input".input); console.log('Generic logging theme as file'.green.bold.underline); // Load a theme from file colors.setTheme(__dirname + '/../themes/generic-logging.js'); // outputs red text console.log("this is an error".error); // outputs yellow text console.log("this is a warning".warn); // outputs grey text console.log("this is an input".input); //console.log("Don't summon".zalgo)colors.js-1.0.3/examples/safe-string.js000066400000000000000000000036111241545651700200400ustar00rootroot00000000000000var colors = require('../safe'); console.log(colors.yellow("First some yellow text")); console.log(colors.yellow.underline("Underline that text")); console.log(colors.red.bold("Make it bold and red")); console.log(colors.rainbow("Double Raindows All Day Long")) console.log(colors.trap("Drop the bass")) console.log(colors.rainbow(colors.trap("DROP THE RAINBOW BASS"))); console.log(colors.bold.italic.underline.red('Chains are also cool.')); // styles not widely supported console.log(colors.green('So ') + colors.underline('are') + ' ' + colors.inverse('inverse') + colors.yellow.bold(' styles! ')); // styles not widely supported console.log(colors.zebra("Zebras are so fun!")); console.log("This is " + colors.strikethrough("not") + " fun."); console.log(colors.black.bgWhite('Background color attack!')); console.log(colors.random('Use random styles on everything!')) console.log(colors.america('America, Heck Yeah!')); console.log('Setting themes is useful') // // Custom themes // //console.log('Generic logging theme as JSON'.green.bold.underline); // Load theme with JSON literal colors.setTheme({ silly: 'rainbow', input: 'grey', verbose: 'cyan', prompt: 'grey', info: 'green', data: 'grey', help: 'cyan', warn: 'yellow', debug: 'blue', error: 'red' }); // outputs red text console.log(colors.error("this is an error")); // outputs yellow text console.log(colors.warn("this is a warning")); // outputs grey text console.log(colors.input("this is an input")); // console.log('Generic logging theme as file'.green.bold.underline); // Load a theme from file colors.setTheme(__dirname + '/../themes/generic-logging.js'); // outputs red text console.log(colors.error("this is an error")); // outputs yellow text console.log(colors.warn("this is a warning")); // outputs grey text console.log(colors.input("this is an input")); // console.log(colors.zalgo("Don't summon him")) colors.js-1.0.3/lib/000077500000000000000000000000001241545651700142075ustar00rootroot00000000000000colors.js-1.0.3/lib/colors.js000066400000000000000000000107351241545651700160540ustar00rootroot00000000000000/* The MIT License (MIT) Original Library - Copyright (c) Marak Squires Additional functionality - Copyright (c) Sindre Sorhus (sindresorhus.com) 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 colors = {}; module['exports'] = colors; colors.themes = {}; var ansiStyles = colors.styles = require('./styles'); var defineProps = Object.defineProperties; colors.supportsColor = require('./system/supports-colors'); if (typeof colors.enabled === "undefined") { colors.enabled = colors.supportsColor; } colors.stripColors = colors.strip = function(str){ return ("" + str).replace(/\x1B\[\d+m/g, ''); }; var stylize = colors.stylize = function stylize (str, style) { return ansiStyles[style].open + str + ansiStyles[style].close; } var matchOperatorsRe = /[|\\{}()[\]^$+*?.]/g; var escapeStringRegexp = function (str) { if (typeof str !== 'string') { throw new TypeError('Expected a string'); } return str.replace(matchOperatorsRe, '\\$&'); } function build(_styles) { var builder = function builder() { return applyStyle.apply(builder, arguments); }; builder._styles = _styles; // __proto__ is used because we must return a function, but there is // no way to create a function with a different prototype. builder.__proto__ = proto; return builder; } var styles = (function () { var ret = {}; ansiStyles.grey = ansiStyles.gray; Object.keys(ansiStyles).forEach(function (key) { ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g'); ret[key] = { get: function () { return build(this._styles.concat(key)); } }; }); return ret; })(); var proto = defineProps(function colors() {}, styles); function applyStyle() { var args = arguments; var argsLen = args.length; var str = argsLen !== 0 && String(arguments[0]); if (argsLen > 1) { for (var a = 1; a < argsLen; a++) { str += ' ' + args[a]; } } if (!colors.enabled || !str) { return str; } var nestedStyles = this._styles; var i = nestedStyles.length; while (i--) { var code = ansiStyles[nestedStyles[i]]; str = code.open + str.replace(code.closeRe, code.open) + code.close; } return str; } function applyTheme (theme) { for (var style in theme) { (function(style){ colors[style] = function(str){ return colors[theme[style]](str); }; })(style) } } colors.setTheme = function (theme) { if (typeof theme === 'string') { try { colors.themes[theme] = require(theme); applyTheme(colors.themes[theme]); return colors.themes[theme]; } catch (err) { console.log(err); return err; } } else { applyTheme(theme); } }; function init() { var ret = {}; Object.keys(styles).forEach(function (name) { ret[name] = { get: function () { return build([name]); } }; }); return ret; } var sequencer = function sequencer (map, str) { var exploded = str.split(""), i = 0; exploded = exploded.map(map); return exploded.join(""); }; // custom formatter methods colors.trap = require('./custom/trap'); colors.zalgo = require('./custom/zalgo'); // maps colors.maps = {}; colors.maps.america = require('./maps/america'); colors.maps.zebra = require('./maps/zebra'); colors.maps.rainbow = require('./maps/rainbow'); colors.maps.random = require('./maps/random') for (var map in colors.maps) { (function(map){ colors[map] = function (str) { return sequencer(colors.maps[map], str); } })(map) } defineProps(colors, init());colors.js-1.0.3/lib/custom/000077500000000000000000000000001241545651700155215ustar00rootroot00000000000000colors.js-1.0.3/lib/custom/trap.js000066400000000000000000000032001241545651700170200ustar00rootroot00000000000000module['exports'] = function runTheTrap (text, options) { var result = ""; text = text || "Run the trap, drop the bass"; text = text.split(''); var trap = { a: ["\u0040", "\u0104", "\u023a", "\u0245", "\u0394", "\u039b", "\u0414"], b: ["\u00df", "\u0181", "\u0243", "\u026e", "\u03b2", "\u0e3f"], c: ["\u00a9", "\u023b", "\u03fe"], d: ["\u00d0", "\u018a", "\u0500" , "\u0501" ,"\u0502", "\u0503"], e: ["\u00cb", "\u0115", "\u018e", "\u0258", "\u03a3", "\u03be", "\u04bc", "\u0a6c"], f: ["\u04fa"], g: ["\u0262"], h: ["\u0126", "\u0195", "\u04a2", "\u04ba", "\u04c7", "\u050a"], i: ["\u0f0f"], j: ["\u0134"], k: ["\u0138", "\u04a0", "\u04c3", "\u051e"], l: ["\u0139"], m: ["\u028d", "\u04cd", "\u04ce", "\u0520", "\u0521", "\u0d69"], n: ["\u00d1", "\u014b", "\u019d", "\u0376", "\u03a0", "\u048a"], o: ["\u00d8", "\u00f5", "\u00f8", "\u01fe", "\u0298", "\u047a", "\u05dd", "\u06dd", "\u0e4f"], p: ["\u01f7", "\u048e"], q: ["\u09cd"], r: ["\u00ae", "\u01a6", "\u0210", "\u024c", "\u0280", "\u042f"], s: ["\u00a7", "\u03de", "\u03df", "\u03e8"], t: ["\u0141", "\u0166", "\u0373"], u: ["\u01b1", "\u054d"], v: ["\u05d8"], w: ["\u0428", "\u0460", "\u047c", "\u0d70"], x: ["\u04b2", "\u04fe", "\u04fc", "\u04fd"], y: ["\u00a5", "\u04b0", "\u04cb"], z: ["\u01b5", "\u0240"] } text.forEach(function(c){ c = c.toLowerCase(); var chars = trap[c] || [" "]; var rand = Math.floor(Math.random() * chars.length); if (typeof trap[c] !== "undefined") { result += trap[c][rand]; } else { result += c; } }); return result; } colors.js-1.0.3/lib/custom/zalgo.js000066400000000000000000000051561241545651700172020ustar00rootroot00000000000000// please no module['exports'] = function zalgo(text, options) { text = text || " he is here "; var soul = { "up" : [ '̍', '̎', '̄', '̅', '̿', '̑', '̆', '̐', '͒', '͗', '͑', '̇', '̈', '̊', '͂', '̓', '̈', '͊', '͋', '͌', '̃', '̂', '̌', '͐', '̀', '́', '̋', '̏', '̒', '̓', '̔', '̽', '̉', 'ͣ', 'ͤ', 'ͥ', 'ͦ', 'ͧ', 'ͨ', 'ͩ', 'ͪ', 'ͫ', 'ͬ', 'ͭ', 'ͮ', 'ͯ', '̾', '͛', '͆', '̚' ], "down" : [ '̖', '̗', '̘', '̙', '̜', '̝', '̞', '̟', '̠', '̤', '̥', '̦', '̩', '̪', '̫', '̬', '̭', '̮', '̯', '̰', '̱', '̲', '̳', '̹', '̺', '̻', '̼', 'ͅ', '͇', '͈', '͉', '͍', '͎', '͓', '͔', '͕', '͖', '͙', '͚', '̣' ], "mid" : [ '̕', '̛', '̀', '́', '͘', '̡', '̢', '̧', '̨', '̴', '̵', '̶', '͜', '͝', '͞', '͟', '͠', '͢', '̸', '̷', '͡', ' ҉' ] }, all = [].concat(soul.up, soul.down, soul.mid), zalgo = {}; function randomNumber(range) { var r = Math.floor(Math.random() * range); return r; } function is_char(character) { var bool = false; all.filter(function (i) { bool = (i === character); }); return bool; } function heComes(text, options) { var result = '', counts, l; options = options || {}; options["up"] = options["up"] || true; options["mid"] = options["mid"] || true; options["down"] = options["down"] || true; options["size"] = options["size"] || "maxi"; text = text.split(''); for (l in text) { if (is_char(l)) { continue; } result = result + text[l]; counts = {"up" : 0, "down" : 0, "mid" : 0}; switch (options.size) { case 'mini': counts.up = randomNumber(8); counts.min = randomNumber(2); counts.down = randomNumber(8); break; case 'maxi': counts.up = randomNumber(16) + 3; counts.min = randomNumber(4) + 1; counts.down = randomNumber(64) + 3; break; default: counts.up = randomNumber(8) + 1; counts.mid = randomNumber(6) / 2; counts.down = randomNumber(8) + 1; break; } var arr = ["up", "mid", "down"]; for (var d in arr) { var index = arr[d]; for (var i = 0 ; i <= counts[index]; i++) { if (options[index]) { result = result + soul[index][randomNumber(soul[index].length)]; } } } } return result; } // don't summon him return heComes(text); } colors.js-1.0.3/lib/extendStringPrototype.js000066400000000000000000000061641241545651700211600ustar00rootroot00000000000000var colors = require('./colors'), styles = require('./styles'); module['exports'] = function () { // // Extends prototype of native string object to allow for "foo".red syntax // var addProperty = function (color, func) { String.prototype.__defineGetter__(color, func); }; var sequencer = function sequencer (map, str) { return function () { var exploded = this.split(""), i = 0; exploded = exploded.map(map); return exploded.join(""); } }; var stylize = function stylize (str, style) { return styles[style].open + str + styles[style].close; } addProperty('strip', function () { return colors.strip(this); }); addProperty('stripColors', function () { return colors.strip(this); }); addProperty("trap", function(){ return colors.trap(this); }); addProperty("zalgo", function(){ return colors.zalgo(this); }); addProperty("zebra", function(){ return colors.zebra(this); }); addProperty("rainbow", function(){ return colors.rainbow(this); }); addProperty("random", function(){ return colors.random(this); }); addProperty("america", function(){ return colors.america(this); }); // // Iterate through all default styles and colors // var x = Object.keys(colors.styles); x.forEach(function (style) { addProperty(style, function () { return stylize(this, style); }); }); function applyTheme(theme) { // // Remark: This is a list of methods that exist // on String that you should not overwrite. // var stringPrototypeBlacklist = [ '__defineGetter__', '__defineSetter__', '__lookupGetter__', '__lookupSetter__', 'charAt', 'constructor', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'valueOf', 'charCodeAt', 'indexOf', 'lastIndexof', 'length', 'localeCompare', 'match', 'replace', 'search', 'slice', 'split', 'substring', 'toLocaleLowerCase', 'toLocaleUpperCase', 'toLowerCase', 'toUpperCase', 'trim', 'trimLeft', 'trimRight' ]; Object.keys(theme).forEach(function (prop) { if (stringPrototypeBlacklist.indexOf(prop) !== -1) { console.log('warn: '.red + ('String.prototype' + prop).magenta + ' is probably something you don\'t want to override. Ignoring style name'); } else { if (typeof(theme[prop]) === 'string') { colors[prop] = colors[theme[prop]]; addProperty(prop, function () { return colors[theme[prop]](this); }); } else { addProperty(prop, function () { var ret = this; for (var t = 0; t < theme[prop].length; t++) { ret = exports[theme[prop][t]](ret); } return ret; }); } } }); } colors.setTheme = function (theme) { if (typeof theme === 'string') { try { colors.themes[theme] = require(theme); applyTheme(colors.themes[theme]); return colors.themes[theme]; } catch (err) { console.log(err); return err; } } else { applyTheme(theme); } }; };colors.js-1.0.3/lib/index.js000066400000000000000000000006061241545651700156560ustar00rootroot00000000000000var colors = require('./colors'); module['exports'] = colors; // Remark: By default, colors will add style properties to String.prototype // // If you don't wish to extend String.prototype you can do this instead and native String will not be touched // // var colors = require('colors/safe); // colors.red("foo") // // var extendStringPrototype = require('./extendStringPrototype')();colors.js-1.0.3/lib/maps/000077500000000000000000000000001241545651700151475ustar00rootroot00000000000000colors.js-1.0.3/lib/maps/america.js000066400000000000000000000004631241545651700171110ustar00rootroot00000000000000var colors = require('../colors'); module['exports'] = (function() { return function (letter, i, exploded) { if(letter === " ") return letter; switch(i%3) { case 0: return colors.red(letter); case 1: return colors.white(letter) case 2: return colors.blue(letter) } } })();colors.js-1.0.3/lib/maps/rainbow.js000066400000000000000000000005301241545651700171440ustar00rootroot00000000000000var colors = require('../colors'); module['exports'] = (function () { var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta']; //RoY G BiV return function (letter, i, exploded) { if (letter === " ") { return letter; } else { return colors[rainbowColors[i++ % rainbowColors.length]](letter); } }; })(); colors.js-1.0.3/lib/maps/random.js000066400000000000000000000005401241545651700167640ustar00rootroot00000000000000var colors = require('../colors'); module['exports'] = (function () { var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green', 'blue', 'white', 'cyan', 'magenta']; return function(letter, i, exploded) { return letter === " " ? letter : colors[available[Math.round(Math.random() * (available.length - 1))]](letter); }; })();colors.js-1.0.3/lib/maps/zebra.js000066400000000000000000000002231241545651700166050ustar00rootroot00000000000000var colors = require('../colors'); module['exports'] = function (letter, i, exploded) { return i % 2 === 0 ? letter : colors.inverse(letter); };colors.js-1.0.3/lib/styles.js000066400000000000000000000040631241545651700160730ustar00rootroot00000000000000/* The MIT License (MIT) Copyright (c) Sindre Sorhus (sindresorhus.com) 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 styles = {}; module['exports'] = styles; var codes = { reset: [0, 0], bold: [1, 22], dim: [2, 22], italic: [3, 23], underline: [4, 24], inverse: [7, 27], hidden: [8, 28], strikethrough: [9, 29], black: [30, 39], red: [31, 39], green: [32, 39], yellow: [33, 39], blue: [34, 39], magenta: [35, 39], cyan: [36, 39], white: [37, 39], gray: [90, 39], grey: [90, 39], bgBlack: [40, 49], bgRed: [41, 49], bgGreen: [42, 49], bgYellow: [43, 49], bgBlue: [44, 49], bgMagenta: [45, 49], bgCyan: [46, 49], bgWhite: [47, 49], // legacy styles for colors pre v1.0.0 blackBG: [40, 49], redBG: [41, 49], greenBG: [42, 49], yellowBG: [43, 49], blueBG: [44, 49], magentaBG: [45, 49], cyanBG: [46, 49], whiteBG: [47, 49] }; Object.keys(codes).forEach(function (key) { var val = codes[key]; var style = styles[key] = []; style.open = '\u001b[' + val[0] + 'm'; style.close = '\u001b[' + val[1] + 'm'; });colors.js-1.0.3/lib/system/000077500000000000000000000000001241545651700155335ustar00rootroot00000000000000colors.js-1.0.3/lib/system/supports-colors.js000066400000000000000000000034331241545651700212720ustar00rootroot00000000000000/* The MIT License (MIT) Copyright (c) Sindre Sorhus (sindresorhus.com) 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 argv = process.argv; module.exports = (function () { if (argv.indexOf('--no-color') !== -1 || argv.indexOf('--color=false') !== -1) { return false; } if (argv.indexOf('--color') !== -1 || argv.indexOf('--color=true') !== -1 || argv.indexOf('--color=always') !== -1) { return true; } if (process.stdout && !process.stdout.isTTY) { return false; } if (process.platform === 'win32') { return true; } if ('COLORTERM' in process.env) { return true; } if (process.env.TERM === 'dumb') { return false; } if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) { return true; } return false; })();colors.js-1.0.3/package.json000066400000000000000000000011231241545651700157240ustar00rootroot00000000000000{ "name": "colors", "description": "get colors in your node.js console", "version": "1.0.3", "author": "Marak Squires", "homepage": "https://github.com/Marak/colors.js", "bugs": "https://github.com/Marak/colors.js/issues", "keywords": [ "ansi", "terminal", "colors" ], "repository": { "type": "git", "url": "http://github.com/Marak/colors.js.git" }, "license": "MIT", "scripts": { "test": "node tests/basic-test.js && node tests/safe-test.js" }, "engines": { "node": ">=0.1.90" }, "main": "./lib/index" } colors.js-1.0.3/safe.js000066400000000000000000000003611241545651700147150ustar00rootroot00000000000000// // Remark: Requiring this file will use the "safe" colors API which will not touch String.prototype // // var colors = require('colors/safe); // colors.red("foo") // // var colors = require('./lib/colors'); module['exports'] = colors;colors.js-1.0.3/screenshots/000077500000000000000000000000001241545651700160015ustar00rootroot00000000000000colors.js-1.0.3/screenshots/colors.png000066400000000000000000002336531241545651700200240ustar00rootroot00000000000000PNG  IHDR6+'iCCPICC ProfileX ywQ@&˒uw_=, tO),Yȁ2΂ 2Md8;C4)E( zh1}z>_ G&,,OA,z$k†M"B q^Bc~]|Ndlo}Ns@gaG^mGm 1 Ƙs1!.@VH zAO1=-Z|)pIQNƶKxA~:/{P~ Ah{zO2#s _%lf4C4ə́}DY@ mC+ "BiXLq$Ab? هdy/[t10@~< @9|@8?{ v;}Wk o]Qʝ@<a0zm5Fo_XWn?B?U(w7c%; 0#F OF#'#k/5aW~z8mh_\$CC~`_'@zD m`L%s8ADp ΁"(Wup<Ox^)0 6#3‰#4h z)b8"$9d yBn!H҃ "/idl( %Gi QV(g>T*:DPPS jhj4Z-@лh0:.Cע[\|B/18 3F# GDbcNacb111Ә%6˃ja-l 6[m>,;cÉlpp%v -nsx;<OJf)ymC(6)(E)((})(P^l짜ܤbҥr :JU@UKjjZZځ:uMniu&)c414444/iiiih hwFfV>AL'GgAKDWDH7D^ސ~?}<}}}?"%10CC3(*#3"c)j9&<)/qrLo>ǘ/3?beXd\gcYbebUaue=Zzu &fv6;/!IZ!5n?t/8688M9C8r|ͅr:u"7 6w:mq#OO9O/*/.B|l||||m|zA?  <X4,rJ!ZJXC_8WSxI_F$QFd\RTC4P4_KtML\M,U؜8xxDDİ$NRC2DDr@ %*(U$/V.hedFeid ecekd}-VK~[AU!T+E&EKdoJRJ>JEJʴfIM_UUT.2ڨvTSW#ժͫ{jhkji&ijkiEk-]=#sY筮.ATwJO@Kޔ>AL@נa5F F$5c-C&h]&&}L.M'̈́j̖vJn52?k>jkcQednyyk)ku &fVԖh{Yؽsw(rxT+ NWz׽Ukn&nnSܟzpyy4v]{us{fM;O|}=IIzyU{meUo b%c|_\y?]ls9yAA烾_ ^ u FLd" HԊ<D"UD!QY`#s"f:V/(uIŝo%Й(x4qaÝIIǓf:r(ѐϒWk9{'vIK!j^LäT>Yxr;7IBF^)SON+.8wF̅,\1k٫ٌoslrsrsWySɻO?U`]T(RUu>"<'J|K.\{1ƥKcJq/^q"g%rՇUUU~́A!&[ ?}abpedltԘЗ_c7_Nfx73YF͍){&ӽ3N3]xnk{y?T)͵Λ|qv!bas1|]r_J2rJk?8\]Xpy` USg˶NND Jx.y*g_ "1 'n@Ni9qL76'o(̢:A}&nяa`Au38@`PI"2 +W.Idɦ%)**%*T٭*U{ޠe-ҙ+?allg,miJiee7,ǬFGllG; 99 ;v}챽r/> ^ &o_?!@ 萒Їa#T"]HQ97bzbglƱ$%z;togeɰ7Sӂ3ŷg '~73=qdņf_,m_X9:#g}g3fky,`1'(s*rYD`tcƽߣBYDG]Lv^!!3E5 ' ܕyRy+g> 'rEXĖdTt̺l\šbRr*; %o7uXu5$7024454]2yEeUuMm]EJZ .B?ܞ{> _lE]Sw?%h`bЁਐPbX(18<("(2q%ǧ&N=Tr2Hсc'(SROdwejYls[  go3H\пv)dYUy JɫU!էj_뿾t-1u?5[:zߋl;rL{QGe-;zIk. =:{DZqWM&ސg1P85 S8{W/gn^g9M \58`l=!aq*T+4,t %mLoX0RlV I\ <1|aBڒΕrZ/"i̔fUDUSSRV?ayQ^h_٣K۬ϭopPpqG*]p|gUnMym{`/bc3Mn6=wq+wey^v’SJ??@tLPG𥐤aDވtRHM| sZփ%q?"iȳOu:ѕҕ8]ɜ:zv#{3g ym Jp/_[˽Wf*6V)W;vڅL4n{֥64n77;[:چNlf׾=pGge7 1''̒??]Y&yOP"\,tgM]8,aFe8W: #B;$/ -(bB)PQsE1 ~ӂjc`p }kmEDQM zLOLJSGL@ENoN0Hd`Jcfg`Qgf8;ge\.5܇xxzx#G  rf;g%%ץnIˈʼ,//-p_1SSYEFj%#M-Imz0~лaYS&fv0keombn+ek@w;Sи2qy(67h_|6/ނ>ξi~m+RAC)#ףԣ=>hWpVˑd)mi'2NȊY?1pC%2eW^{Q:; &w?qGTO4zCJƟ 皈{=ϜGڅOy_,eZSѸYg; d`^ā9o6#H(#${?T6jE+=g`h#Tb>aձǰC81\n`8JJF9 OOMX ;OC?s$ڙXnٌs9Y8ryx6xl6k KP̊;HIIHeeeW;)S&Yhhh*jjKHJI;7 5Kؕa^dQcjzƞA9%ŵ+=<{OlZ-`t  &VT&j(:8|҉#ՎtR =#ctXL֞#9{rP^*.phP+ W;EԽjhzI{v瞇V:{r?x?T9=7:2kɁw,c>->}[:̷bxdzo[?~nmZ?`UÌan)ZC) F߆LL8~Ũ.ws> ˤc#<ILQs#/{hihjܙ?4e a7sqrM w41sLʔ.mW*(=P_Ӳ֎׹;3P7 6*5~ea澫 2&l8;e;rq;}ξ[^1'>B~0<bz@rꈑ́_|ѡIFGz|ŽUߪ5qy7n5YO566nn#Sv\y`pqrHӧ *UGp/oRhz<:sl9)xHLb$o˨++W]V;}Z\CG:z̆F&-ӭʟ?lKmn(e%#LN,ٝͲ1@{]d_#GG?x9iTXtXML:com.adobe.xmp 566 423 ad@IDATx |SU?~II6B-)R\ adD^QQ|G޺QFddǀTDf8"(-m$Ms%7ɽiӜ99a{W5!2w^6F3?.haӣSd@g6sgcŷ.G/ݹ$ -{p3u6oyW14w^>kFI-,⊛U |`-͋9/,onѲ¡ݣhD ·{] )*^lG*ֱ3MxIEOv|r89'C[j쵥-fޟbZnE>H+Z{Χwkld-)D] Tr%}|R)?x̚5@ax4Ci< q _\jXWʢsY9/]&Oe08~PSo)fJn ]ܼqKuG,xw!/AzM.G%ģPE,cNZ>SJZ(5gՌ8Vjui n,,5Q[9n8wVC[<缵(Jt'ey=]^d3H$2;VPzҍ4$)Q(v cļB_Z[LU-vTvz|oȜ/Q V#(<2("hl'ʦS(@tqS$iA —f8>?ށ+EJ Jӥާ*ATIW=(@XL PH ۱FS: Nܹk%󊿸H5.:JÆr]15]!W.5[HURuZ82]*<@3ԼGn)A%vH㜻f/-q!q{ߌ8MOSePlשf5РAxv[A;@Z2=Ty)K(FAdb]6x uGVml8T.p0c2p7/b՟ԃEGֵa^X-OnFQԶD7 ZBR,L{!^5n:;WƱJpJa[FhTŊBv)EiKDx87O0U 5OL}=lIu8FNd8O)9H5Ws[+rcDz/5,n1yn96_d^!5aІgP wҍ8ZԛAZXL.C4h3-;Z*T]CKF)e(@ykLHR:-l!J\qSZ ޴J S)z*P\ ^ifQ ~~Y WphihxpGK<qWrHH_7 {/ RMgAZ$࠹\0PW+9;^ēOf/bqu9 WO} cz=5,,^ W}l8 FcTaCn/(\rI ew&#f{l,!F"8o[0{%EWzsBt48Ik•.* k'&!+6bL/HyN' ։ZdR%v-QP}IxP0zqC6JΥ>)UʕWk=,P-8lB>A~i\ 6p9O)yOgm3ՐPmǥt7Q}F W]t4;L;MNI +gXWO//Ηl=zvs[X{&Zi5 >]ZcOBmR[R2h43H] Qpf,%nMzGX4QNJnȬ}_W<ؐۿGL^ɼ'$2ZE66TSzBlu*`j(-e'("*ΉpTOUsML O~FTS"bХh~zd.TLcc leD ƆgoWۯx9J)˷_y'1&hݿgԹ}"jO~M Ї]( 9WIŇ]S4pB A"E4p&k>9-͆/p(ۭ1h&Dr>|}_/Bۧ[j?pH>b\.y2Aġ->ưws#ҭ~/вpB:)/ J&È>kq3 ,+BŽlC/!\x4 l_9pdcșϖEvڀݒj]RD$ 0pN1n,@2®mmHuw>p; Nkz -'X=LܟFUOP/y:vӹlrO}} ሟ'~X!p[WKL&̹xG#x_{fk^ibZII9e0K'= 7b =aAD:r5Rјljm+_s&pZ)Rܾ şdo3oҝexW/AI߾'__^²y+lv8<[(.h( 0Մ!z:Co 5S^oen88<.u< bs Cnك;W.*~zۻj!Nn-fxKqILs;NmNY;Sn% .+9PCy6$A8EޑAbKm6~ك8+qqEvpnbtwUZVD6N% @ܩXsM%KTZK+Z^ uX>(urg!P7K[(>LmtwmZtي rjE| J sD~ޭQιjCu#漆\x39A?4H`k1'+8octa<=tFwG-#knNsg:{GO)ȚES)ݍŌ:^\u@jOYX(CBH+`Ïm)_Zw*VJ J`3+_"^ \ޖv;Z.=IuD{]cw{OF?Huwն$ZN}]n WIөlc;6?!_9zjQQ\"}A<{Q:Aow3"į'vxbe oeU%;jDӲp!O? }4ΐ5Di7hh PXOLM$'}TD!XX޵  nqI6Qp%Q089տI>f3Xp "hi07( )ID}r oI"U" nq@Gb~(Vݖ'P("b;Pm=Nl`.;N߫@+v4kwfT$⫗QH j ! DY4]vBY('F6R ?CsDMzm| 5M 7$~LP!I>;hw I#6mOY-/fhb(Tj]y{/ `͖&{7-~|&OC3+!A)6:eOc34_ V+G[S?j53MI* Zf~ɬуC!Ʒ.Cjzmc>b,E9'H(9Nn*ONKu&ңT54aNj&vpzڳ{m$*`*yu~59)+zK%zj,STX @Coe3A4NsCɣ-է-6SDR9:ON~B6͓d/e@xr{)·|-SԼ`Wz2s VeDXzzVXVj7ONӑD㎩M)cqL> z$'KHͿFu_ zG40Qtѻ\:NH։Ns"8bUeٍ7'PS 9^:=>ٜpK| ZYis٘] -&ڙp/}<ՀF-~O6%0+懻 ȇONʟ]D8,zrIaEQWJC%y7N;Σ'88-h58rxD|L$Lo {%DHub3Jѭ^LK0>UZj!03R'n.~G00ǶTV5UO^5ʈ@QHMΔSu|MO6W:9 S/z[W9^]rZ>Xu"R1X]Q$7FLͶk7SpOabGB ]g?9fa>-6}w_}/Lp0 jQ!  7sp$z6RI e(]= `zW#k'iz(Aok]zj#`fg㻿7#] opD\R6F ޞ:G%>l^96'o *rӹgBQ!nؾ5?65)p_\ld֐Ex5|,\W5:/FX,AT+Tʹ&Q1N`{G6acl5(9~%\ahtf`vĬ@Xg..-lr0 wLZsGt r nLi Ԇ?>ql#ct!j%hBRߴ؞eNij}Q^;T}V3[_oo3+6ѣb @cISU' `A s+L8ŪPk#3a.MWV!"# _M@)i.ha~7&D@lg >'n݉ݚ0jSU.P#r}iVBY8 GoYlGR=uVBx6B*/c&ZmXb18W\$X'#e˺3gDGuQ"FA4 8HNއMgNN16wAgѤ`)E`h`-lں-5Ecl#jxwϐigR<|dQݗ9؎nU$j4pvöjv >@jTTޓ-Dn|Cw"s͟S9mXmZȱ(dM9,`б%e="j4|o w8SaM3fj$j|q[IrWm-[V$Eԗ9:oϼەGЛ%u%񩩤옅Ӝla77L]M(vm4Ʊ- rt^t\AꨐG,g(B0E_81tΉ$:;'։N̟ 6V2|ojG׎(„D!6O!06GUYYِsu&,&/Z:LoUn>(ұM,2qzɋ UԺ \?]'B['nC:EmEʩD5t82"OV]cEFˋ+TƒƬk#34 ,ĈypXZ':[R~_OQWO~؄,ORClB#G3<n)Ý˖R(2uU]S jg.NrAsi~7+(i<8 ASS`]j_ct}J>ׁ >HƏǪa.B"@t\[5kfҬ8lD@  9'0.`i[v~ 5 *XYߋH:B!AEl{F &'Da[]]ڎzC1B!@ B!@ B!@ B!1 %4kNu.zHzNua[{o?!s^\R׊T!#NWo]+$\Bt>(]@UѸb]#[(6t*t$~o~<8tT:)#ҒxoUui5g#?D|h l>VA_1*2r҂#j gtD I:#bG@D$jӫL.|D1D@EtsC@D[+ABeD9տI¾j3ą0G^ F ܃Y6D I:#bS/D'QCfkw_\jf{v-.zjЅ*och<Β:@Ԑ3"F\k5k!Z*QGFєr15hfLR g)Z$1B:@LTrѲ`Vq:L:.vl,exg-=2Fw{w DMqL_0t|F nkaN|(el{ڀ>n}1CCa&&ۥ ,zzwA($ʼnϠnA cSCl6HАJCrf%$(pG:?Y?jVڽ~KPyKj3t5_6[w4BQG\?4y\=~5 X ^v!@MTzlw܌!9ز;G=_cAG >3+r-6oSmxrNFq~scTqD=o>S7s9v<1L52oix_v{9IFH KwyTݳx(i6u16'=&,_=U|qfv⌤9?:) P ZwG Eᬹw~5㻣V=zU4n̼9 =N@)@x"k< X8QQb/L.y05cXm#,pfrIaEDgſͥd8 y\DīB 3"30A0/zKweI}Pk>Nxl;k7~ @XRƽh :=w^jQHMΔSuBfؖ1[̪eAPs3GsB3|ثcqo`թHmNc4ϸ^yS9 LWʭ72<<9KdGD:XW*lưGn!T_*G6PB!~2QΓyڶ?>Yj< WN3 YL}]+@T\!e? &Tg ~Eƙ^޼2o$dFHةZ+銶a"ȯG^69E% 8`~Hojة u~-UJePeȓmVɋ[g8~zclܢaw7Nn/i5q'%%#(!@?(ndtY@$5[;k !zh-ȉG-2134Yq u17;ʢ]<H x'ZB/B!dLFo^q pő%*2rQ=~B-ző0XOW9t>7a*4̳R{Y';m'@: !p# ЬhةAOK TAť1S,dyAQBA0%' fP]Hbx)>}ZV)WRU g8O2_F v4R58 !2STb=;u dqB=(Ov[ˌTǮܬFsdzuDs'sT;36ѿJ ;$ujd`)¡E`h`n6mAD$ lq#~B6U3g5XRDps›O3|g7a3_,-Ȝ)}JVD4-r 0Q ~&~nV3)i$u%/c_wagMg3YRW>W$);fa6q{; M+Ï?bbVOƧNQDLTĻ#QNbCXsF+ @2HK0){>VDmv/nk9DWZ~q$Ϝ4Q<_VqӁԠ8Dq]~4Ӛo+S[S;bG~69LhQJRh  Ƕ~mG;dKϾ{ p岰AV?: lPkv᭻"MU+UMZwC(rYΗWǁY9qe6бN̒$4 W߱ME;B΍OOSy˾r?sQbY\EJܯ"%^g8"C B!GQ;?pU#agKE@# rGB!@ B!@ B!@ B!@ B!@ |!tS̊7,d.V'B!P-xPGKՑxw>p,xDrV#2xM~OBu|e%>൮2`4w?wK:S4u b!\c狍~?y Hk:&|~P݇ Ng+2ewO'4HJWQ_KTꮔuSQ׉N:xl='VԨ69y|dS,59.׀D!F. D R)ju1۱Fߤ Ѱ)itÖ2Qn?P0wC b=qW)bvYJJ8Xn),i UKށ.5-#꺐Wo$ !tXֈoB ¿ᖠIb٧u؜.6=@,Pw>ۜMvgfspn!-x|`s {kCHޣƗ&ij~¾!>@ W*(a/?!@\x3Q)mRQjuՐO7B[UgƄ( ]\pLŭVlf drCoݬu㉺Ѫ\~v{Ke0 #B{ K"bĥ=D!qcCBUr`rUc<ǥ)7Z ? zϯ4 TkNԎT) .gWG^v!JF=B)#vˇ-GX[7T"2XVeg85fuh 8/|.FtΏamt4w%Q6:U=?pPEs`R!8Lٶ)`˩PΈ[;،nf]vma0,Ӫsc46Ʋ7x>jL:]$VO5)ڢw6!p^/V:G't#ROZ>mxs*ˋ3("&6\~4r.SbxJXY3&񳴨8&aFGB)uCt\Bs;$O|Fpy-`錉#! ڈ װQOioR6q9<^- rSt N 'XA-U3(E~&f  ULkUDMpYpKq6ncև %e`"U[!EQFe:[O0B?w`͚wkH"Km[V):z6|(21OԳ|MBapGYKm:554-%U Jr0#ԪWH208d'Hp j>ОIxt c"vۼZ'3Ei`uu}]_^iIiG3WcKd7@JUgOQBA qduQ#z!И?/҅qd2|m?8 2P =.X) i+8쯚eݏpF|y,B@5l%(%: ,gtr שjfOn&1ن~{3.g4)b.IUĤqj|Nϖu̜RX.A<hCg ]A3|9B))?@vlVl@<=+ږ<1L7kt9CKz(!2Ჟuxu?֟p_0לhu<(O:@mG6 vljl۝UX>x6ŘH& $1\GNClqZBfwW|FJ<#~V7}) A~ht63@IDATG\72Qp9\:3^'2SŰ^0W.QԂ0pͿo|ZJ9do!d{4a ̲t˕$ʚ {Nsk$hrbc@BЪXzd89w i\3H*ʞ'ศ65Ln4}JCg^!0蛉R75 k!)*ʼx@ 뿊ɚF}tm]GK.agmNEɂS]REπⱥ7a_ Dhɾ!yf&gõP98Z&v5ɩ/JecS8fuz39MJLY11kAQn3w֌LwW/^%{{C==cZg#T7|J>zDJEgLFjӲ\eQsQ"m+u 6i>b=ګ@bxSMS8FFƌ7d)"HZiɃQ҉߶li0Y"t"xίm䇻zfHf^"9Bs1}O*xҚuËE`)Ut-/(!00K`_T 'z={D^kB`xBj,lDe2@ 6^H`x( sBv>]֏.<,5>oi.amdC3RHunPAә+! Q!|er8BVڇL 1%J-s59@ @qd=]ې؛d6 w6\Nz41.vZa•rռaz3Bݝ.f׵5 ֍R_S|8:B B!@ B!@ B!@ B!@ B!@ B!@ B!@ ]"@R\rp+DfżZ7smO˶q.%~Ϧu8ϼQCSfHNtZ¡Le/싦6\UJ b 䬯"-UϪ!+t-T0ѹh)6 kRyYT h/ BYɽU?7x, H&J?:2 ]]?:ʅ,~p-Wvq,^^2#dɼ)݃2Qa:`05rsԐ]c!ɶg5G0QI!9zEJ>dzL}7WDAٙvzGQ6AϫR2dQQ(vcUJ~^>lY_4@N%YAAZ)'ߜf9gV2qB3Na27,He"Ou=r8?B]/-٪$ -{'-]~|LǾ <7ǽ|S^`̘r菷tzWңw&&Ub-eRp wЇ( !<|V!22RwsK2=4%-VыW&H 18T !Fʦ%c{/8/' v@Q~jGE zA"¢zrwwmEGt_9{CB~csG4G͙cU -m1ʛ:K3 q>?W?&'EQȭNζ 3h {\>H ~3N;jKGK Mv ꍮmunf|0PP [[R3nqv\yG߷L*pZcXkpN4>LϐHxڙD{t5_6[{e&`Ei3Q?]O S̅)Fe_SKm3GmF˞΂YiSET2ώ%Ցݛ*°F\47oW&G_&Kw%b!S0\ D &T>{j^žJӱ6u-Wlsa{GDDoI\:>]i1f=c3c;tί:+cö4Q#Sgx1Bb4F*W fBqϿ t_t G'Ü&0 ;ռpanF÷|2"wޒh2=XM 5qj/Wyw`}UƄE̒Jbx"aiHxdK7MD@`rqخ[V I=8b&{w-Ry{|aqSKW3>igzTQ;zVkYZb !ggD=v(܏pDH=NXNvK[+Vw9F6= $eb ۧWiQE>6~ZvIXa}bx˵ODkC'NI& RJw0^t'Ulҷkښ~Gt|KjnvgF×{y*zObB4 ֑}7}ocht'06X G> .]ÍbG'%fTßs#?+C|n|ڕoN牗sHUվg|o%[t{ Z:_ >`3Etq^=zBpIƪHo ecjl8u7zXoϫ_qӜ[wӷeMDp3UXkzbr+ka bwʭ;M^~#S :.G5O\^ErVlll*}װ꾣W^*SR/o]c~p#L'CѲLVzU2JԓA/xcsE B=iըa%Z%x5r O~wHGTw}OU sjsuNʏ@}x S䏤ȟ _~5h`0Ըs{f6E ySGҳHu%Hb1<1E."hHJ"ݦn6\ Λ>YW4˧E6[u'.®DeZ72n}'^|zAj~deuϋB9WMnC^2f\C`Ӭ+J=9<ԗh(E(Q'9]sfz;7A[]fx @ Hhui9@S$dCdJ-?q07ue /֞ӶXF*hc 1";\heS;@eo3 1rjV9g{}"dҔHL:\noم;h9S|mI`<B]a׷YTn4[ɒv~?FV0"2i0Rf-?JΚg&VNU^&/RAD nc'i&j,Ux =hDJEN.#_c.L'AD 9^%ls*Ɠ+I+!|Ck#e:YgS5G$Ĉ ^D#=Gb }n@3ko6G~h w} ՉWiޙ$U*Mwtmwy _h\rUͽpxnr)#M][BwyO#'(Lgڥ -AFl >RP*T#Sk,ξldAq*='e Q]SS m6;XsS:퇹|f'W${CʟuFμ'D'_Za84e3%MhjI9O'+[wLȒt7+ØM*ոxUd8^vN:ñe&,J~]nsU#iNVK?xxG6u5lrf$!jE] [j&=[ G&6ȍG8H^j70h*JWk6wCHψ%Xzc[mrCVcisx=?aX;v őa!9S@NϢSxnay)ExyPyeX{ᅄج2L>/b:vbw7'` +j|T#O(r79dX}b](l`" );1U'"|Eb H禺5]1.;$ :DΦV7{XĨ,/+ 8xkƎ=vҠo/T7$(YDO@:&4ד+7ƥqјK},J٘h.P7Q$McY"Hkiz)1x:k#iwsejf Ƨ-9j;>Tl>pT5ekmFymSL;O#\Oˢ̍o934rhr}AfrأIV;Cߖbe8ES?83e"Ƒ&iyױ3Fh٧ gdD^C J4fbXR3A VS3PFi ͽA9{-f'v 1h(L$-%u|'FNCl{v0M 2 wis൪(Ϧ]N-Aj Y;Lͥ;j(_4HM,~k#7&F1KEe ?\?i`2Շ5ݴkSֲ[")|C7`k6B0(BpxQ1`(9߭Ⱥ 1+}pBԈ}14;av{B5Y=.V~xID? F*("૷>$*08,sW 3b`VecvPǻ{LK?SG]{zMk]a@`" w*&Yua͸d!o?NW#i!bkΆ O}5lB* ;mx5JȚ ےS?jApU nXB};]k| WN. \"/K='|؇Bogu {mh,O+1 NTtzCtǶ6:ZW.X:.EO<+Ɓ2٣#>3H~eҍ=.Z.:,_|~XX _ddw.{0EI?9ga1%MEm#zHmhZM`v6~˭ u_qxcz]#R=,,:W=N{\t9T^yѱEż4bf8eU~d ?{WTh&}C (G**AՅ+[wEWEXuqD-+pqPPrJ -Lۤ͝MzfOo/Hx)U%Id!|33eZe߯70V7Bi99,tvD qZ@ ||Vq(<s@iaB1FD= p[qpٷ\,_-yݧ".t฾<""Htɰk6$,֌>Y7V&+KiKd*9 ǛR\wAHI}Ǖr9n&6< i}!Kj/:gs7]s sWyJ~h0 \C6O/}9wqtUS"Ԇ #hTUaL$^c)cHU*@ u;~e ]Mq.Yp^0Őbow Ó߃Qi"{J ܫr[5/w]8'9 @\`wG` ?H]t]V= KPP9:M6OfY%7tpN_[0"=_#(cU,}|r-eܰj!m֢O6m+ ˵PG$#B!dq;oر6Kk5ouU¬ F {4-"g6!@ IOȆKѭЬgSmwϣX䬵4 Be<@ 7c6ZbiQdw0'c\r6̓ڍXTp|1߷!E ϟ/>`uWk!k%*66CVߒ/beϏRJK1zo0gzfV0.):e,]1:4AX.}yre|r 28ty"ʊB\PPenB!zL[u!9%EzN/*ܗ$;Ëd]S+XP`(\ CE%gΔٷAH:3WYrI D sZ=/(k2~07dG̅k)|0mn ͸p 0I_{q*P8cY1Qg}ٙ@#BGDCUQzFET*<*n3]B,AQ4;Y)5|UnH :``Tf^Yib'+)m 1%+3SF&2V: ;|wSs5ƲlKaE u{~75*FDž Ua<&2**6**R`uӘF{n%78A8cgwΛ3sd?o+"@ө_s =@1';"uP*=k\VɡF$i섹A$8`)~j֯^ɣcmOq /[%{mC7Qr9!@tz@5kF欌Vp!oop艟MεW{׿f 7~1 A,+2氹zȴl6InQRy/*4 ~) T ]25,uܓt 4^Z^ݬa'"6V2c%@)ϭڶ#(f Y~׿\:$7žФ3@ :l;μyOZ$\_e>+ߜX3k* M]]ĵYʎ|3{Êl(1*Q#~bHO' /Zw$V Gq_r)Qm|9WV;pBVs4赟J=Jh}eߕd9:f{3K#d?rv=c6liȃ@\x\Vb_O^0gDNLih.gdX=jm1iXZ^6BԺ  OzyILZȶ4%VUl፸{L(vhUt_+.!%Ó=wlTҤ̵;z[@ƺ/ҳ埩6OT D (*3WY!Y !#[yvΓGvRGY#rTVh=1[NJN)g4\t\`rUu0hz(M&"-yOJ|ʉhJVaVr_2|lye֚Cu$( Qo\ nt0pJ{aeg\ XԱ9y 񡌼gJ㤩 ˈCFBP9Ѷ 7D&r @ ec`OƢU3kt(DXZleWm(8Sps8ol:=g'u&EݡcgR0`&ZSkYe6cgR'+W r(,fOuahk&J^~e]f~-%=6ϥжmg,%` $Gg7_Y,̱U ky/}/8![7V$"*clűo_L"H3,f}I4vb|2{h]> ̪(hQBOҪ s-"s bzsn:+-c;PC-#N ldwU^!@D7WJY87~nDTr[ XyiDo_Ȁ4lVmgVOOŶ3,r_?ۮ:>waf,)YvmBϓ[ <lM>5LFz. ,g~_{i%8n[ m$YzBx?,nCP1},+$&0VUl_9 ( $" 9B!9V٘`d><|' ;ӆk&,EQ2h#fOeg>CX;铙۳ϗ|(sFt]3V}!e L"MoA0?zj:yO7 5Zȣ_y))k39+w6P?9ʶ}Kbuɏylqȃ@ >߹/7^[2/_.6>r2)~42n\{^LJ^ukPbu8XWa c)67n2X63 $a0-yY!`pUks@4 #M*4Onں5nC!B!(en na~ult6䑗gd/eMsQtYEnaرz**c"~7_ H#iiplZvqncie^y6*ck*J_uʒkN@B!DT3yTj[ɟ:J NT>˵#RD᪊~~ATl韄`17 y ;[*;l"gyq*e#l t/'B!1C'/*9Ь Q0x71Eӂ_aKcrzac]/{Pb(y<3v?}a dN8݊M{`eI#ӠMĒI:- }&;8&N"Ʌ.od(!@tŽ\_epOs6 sU5cNUo02ܰ0;{yn_DžEFܾ(yw|6:f_,,:S|hXB$Vfhp̙bwV9PC_n˥.͚jeoX|E7 3p zHDH bK4 Ec(P!@t#+6o2j6Cfzc _ErDT4:4x ۢ =U›:{*Qx{X:70ܾ`e>>w'.2˺|?{u]  =@g#8-޶bfR(&`XY[$ГAp4Z>͓uHN8z:`ibF `WgmB<D:8g+[y.0&ćvąN4f/;slrt57Ιx]aY]uk !@t%+V,_bi΢u: d,+>5)y˞:Đg3/_ə]H p M<6x#16}bAqBZF=g誩eoqlI}6s#(GQ->hn^GtB!oJ AXjM|g>#8YbS$zϐXr S%O2:(N֖-SP&B!Vws3l~Wb"@77;!@ ݅@z*I9eU@ z X/YONT*kN}|=?F!@^ldԪwebqw;78vƬ>uoE@ȻcՁmׄB0[w{P!>#{Oh?>5JE W7̈ܮX'jc4sG`d1r)-oyj4r7ZTzB]M%zIG bR$º˟ksfrN:$o F*W^a!wH0`xeE@&1_;V`?*2̩UL|O<* *J'NE'B<I̐BbF\)/~U/ oIx-L %ԗ?R{kbL-$q&*|TP`bGz9Ȫʧ[&yR;9񤠔_:%ҿ|%<¯#1; 8ZUcؘAX5[΋|PH(]EIT8g^FEE*T*bNFwiC>2hd7 *}|3%6L4o&44H"BtI;*MM$ E$[.( lN+&=E=,HZ =;@OpWQ'Fji`s^W!`Х@DW)Pߓ, l?MN1Y D͌3=Z'7"ntgc8Of S)H. B@؈cCFb%'IQo?:^LT zn^e3/y!LC՘1#Lst:}VA}xԾOǑvY^9~p9m&Ny*1uG~ѳM6F% .ޡ' x6wC+( &z/?'nA"F AeG. ;7ߕ靔Aq̟ lǶ6x.T/_\b0kvīLx?ɹ.&2 dN@]Kubu} p UwjXھr:*1|_N)0qltcZ6ͫȘnDۋDeF@;Z)wcVQ2墙tW^gFlPNG#CX-z|(xmp ʿlhܴ( Ve-)iGWR3 7pHXO37KC,y#JR/L3R;H>K}!J0=9'QQN(SLE7GJ4h`MeDbbT𬨠Db spʁ>#ݦT_@כ20(sjUo˫GR]7km3IwRC26L`@kQ@O`d lzх]3[$f0W3h TQ`k1|aH/ Iь+5e1=*ivL2p]b>+aHCiTҍ=^O0ݎ4U=!^D'DbJHC"3n>ǕpS3A[9 1rn)+[MZkkk_E#`<މ@UћwRِ /~F'ZB]BZ? y/[H uy ۙt1 7Fwu +)370\w,Ȥd΍*:ȯ9}wC}pC nYk`uXqK#Dk@~rv)_-!@BW~IE 0`<~55M;6S-zwh>!*"]dP~bOF5!#R-?1@8/>F>K K+mnKi@ǹkND@IDAT&|`伲,Ra@UW Xyf Gpc!p] 4|+ `biB)vMࠢ&7Ule{QytJ7 L,c):Cl%L#cς?]5^h}YFf+#ѹDee".7!!{83]V{k:8J>'yKhs(T)u- mpma)s~y NCU 0Z̅ 6;k!,=(xՃG}{Sm)3#qU}W\Wae X,+wfcQd]?@ *J3%u'>I7X;T} sI> _ $j~}ɠZAa6JQY@L%*@sihE(+zA<*T ͭe0spv|% mg4O MIٙOvb*R>UH4˒A`1ׇ@zǂeB#]Bt؎KzPtL@5mqejP,!YfKrG4=fEa0J-8IE5^? .[: -<>ߟf-L  Ez`6#\0ZCM]j#4/F|BE$@efj|>L*䀩љ ӇT)~9F(n["7W)]'I iۭ7DmSO''= +.Cj;m@bd }‹k\U :GKQZ/D-`1e*^rgr"AYk>a?BC drPHvv>C\(MDnr(T%%w\pQBW] 8&It3qM?_w%l$= f0I_3;dg<ؖ굕*V㗿1~5SppDBXByi՚kc\9Q>bFGM)Ԭ~NvfB(ΌFpVCF#8~ dwX'ۉ&^@f*>:_;4#n (ǑG`AQ}_0:j1S֨Z$T `ƒ)nou5I_UȇWK>م\% P!p!+y䃔7&*>ؤ(5ssAmaQĠX:4L.33D#U_Fef+N,lx@ζ1Fnn9\ޣ$$/$OWx?#Zm SH劉"^Y׊Kn%b)l^.y|4ⶣgi^m9Z*tsaC-!`po_;g*`L򝚅}sEUD\WxP-yQZ~fۆ׆pbq@:x5 SkH/rlld&0OB*&-(1o_Zyqo'Eeᡢ>UѾ ^fTTu_UP z2Q=5L\q{gi`ʨ(TrőH| lIm1[9:[֏O]jƝ'+=KN2G6_n׷|0V"vmE- h$c$JVKc ì, !0V$3Rl1PSB'~vŘf)&G_6Wɔw5&0.ǜ~uѹG*իR_wY><}DB1gjDj0L౥ݑ#S|w{hc lTƲ3?n"#2#TfFȍGsgQjzۘd/c4oώ^[> &\ j  bX8OݘxDtfW F O C(ld7kBHSfɼM VG{'݌1~#Icihm^Jؘ,s $^  -|\MP- =aYȉl չKq ?jȖFRUUӲ n,،80$X~tx?*)̀L!>B5^\˳ i0]%|b[#3,:\&[BF_X n=rnYv _WqIvn74MDoϲm_=1FMAwЦ~RdiWsv$@")ߌ˭[T[/,5<39Ŭ:$`:b l&Ms f/e#?BZ@ jLBDO ۔ s*pڋ/4T;vbGD6xvOe .z[FT:}\ǟv^?q>,B@{~ \):ݺW@\J`LE0$}BNˬX~pnD9ij-Ŭjrp0L`%ahyJL O_p5S/`- gQ %Ƅ ڬ!Ud9+LTϔٺ޽a>͉`~rcx$ j SQEO8C 3=Դ Z}&/E>Lwdn8E7,hC9ŘH-l9_{2}- Lǐ>YذX'*ϐ,Z H؎\^$#O]@]qIxԎR[0tAKj·7fh QVa8cg$VsԿ{ *z/~Fb0rT1^0$zy7]fyO|ؓq΃eAZ1ёSm#ȟ1JO z[ $VK-J/=~`ܤQrbrlS&ӽK "a/UAaw儫i0F' b#G sp(I3߫rK+%)OK}b=kIԼ $'>~xLLZOQ&>%ёc+fs?F Ï^/kt>/%K 'np(D2[\*9YhPm3YU`CQ93N]6b!gTv8lC+JHF q1tJ6CBuh e^%> ZpoPTE6,&/H%~;ARN'WD% ?f_9O8y(8WseFׇD,>Yeyz{f@\Ek(]-# V+6P;,\ 'm>$̇Bk ɬR/3{T<-R|xVdI89|@38 I띏u~ހWۡq9G%f+9E -s_рkc pWLa&9LK1yάW6dWn1*rZjp:)8g0lpgrg2{љo0)wk;<2?FE[;<"V2;Eܕ~DD"0g"m )r qrgYuÆz}ʋ o?xߐ1#u3FMp %ӑo \HLMeE!1Ö_YwXx0xmW'`tb ĹވECV׏nV< :220p4/ffֵɜct(#BW# <1PͯF{$dt4'R_N"3nMFg=ڨ{up@*pvvqAW~ 8lrCBnT64zNrɾxC2C_7Z[s[=~P"b>B3 L^EsHף"%$boc蒌&x Yͫ:z2;B!.퍢[sX#% qE0Qye[|}2xg!z]~-!pm#* #56BKbI6~IZt {N?=-?@@(@dkcm\F7u.>UJ)[4Z!p Tu*P5.&|:PK*]`(@\e\.*7!pLX7$ B!{~G haS'[@EYJR"rSC4 ϗ6WC ]F$& ntnTwnYmYea J08#}`4- Mm-9{[?*E51&fN6NlVΚYj ǒ?=Sp"}DOx]ȜSxK"C_@h\BhP?B`6 })T\{S3I'Aٹd\{]E z@\#xEOVyU`ĝWٜMĩD2ଃKR]}lSt2z|ŸKD]o WQIQ}YesȂyWzO. b`< OoGђ_P!BqX2jɰjibLsZq^G+1pSuey.[JUCeRXL9ӆյKm r+yct:NJbZFc%V971H y 40^/sp9Ngv̂ t𹂐Ѱr uPI`M 't¦k=Np?bCt"U@Q 1U̠ؖഷ;yYVi&J[VC}J0mrTµ+UձUcoWNU5ॴi*O 疻 11p:%Q71`4Ң21uj.-ҹSJ ,_ǪV"P.yzf|0PaI-3d@]Dq2'WqiψT/o.0zn`/[]Z/bsC7"Є_wm,kc;P?d1c82IxqR|Z>sy7eLE51 P1xO:X&>"8?ڿ œ:i$1ǧi҃U?MFx;2ynRK¶D^'K' )&Wpo/1" # (+o,¾?WD11 q>lWXl DlRtcp33㋡o rV-f$Η zkFa'QKڃU;+_8wi,&2f]_(^?u-ѢbrN\D X8D-UP˾ikCtFjPHq˾RGz[3 v2kusU eE9Qŋ랻<&Q?0PWŬ0郵ͫJkHMCQ!u/1"PJD@x" X&d}Ab/O7-:yOZ!p^Ǖ\aҒZ ! 0ϊc 14ߟ J}-aQPTn96+12sk. `\_G'״laQ4ioEݪ 3y|  N|=(fː(ۚfQyZ6ӵP](WaB!G@DE(~Sۜe=E%<?1(O\Gb\68a8j13bv%Sriו ی~i(c`/3C-IԀ&f<ylDu$0iriAAoߔΜCi|.V䳅GxЪ0LHҎ^(vQf~qv*n'ί;?WR^/1"^&JA A@E``FioǗǐ M -Er;ﻪncy{ &hlr\Έ :w OTp۞2BQ8K1^*dJ([D{~1_n5#7D&ʌVc`&!!XAPd6<[BoNM%XжK]RLfijEBƵHE>7z# 5qx6\jT|RuVfAxRXO8։Z!8L} ГDy%_ļ|ɤb$(fSZ[O;BF1)ʠYg_lPMP6̾gkhsf\6?Z!QgE3tQXwB>KLGXĴ0cRAZFV2ɐ9_ef嫕*Mtg-8ybCBAf/6~ٗİ["#[ѳ-5E~1- :&Ì 䲼rBj="Tʔl kC"WJmR&K޷@4befb)Ss&BKtb2 Ј:r! FCnhr\MF#*Bv 6D$0{"sSU4;AT6 P}NJd-n5;+sΝ'Q f P$֍qn͑l<PM?k3,fjG`21ڑ?I}]!;VMc)a4~s78zFp:ݹ!ЋUQƢ ^"4{Pj.R/m`pA'(8=[;aB19o0DO8/NhԂq}ްgY;/b+1l *P| ;e(@YfjQtHEAU,ޱ[ᚠ4z?k}uRbZl0v~5:gHByaɑ!p]!h J>W\{صԱc'!(VQ ~2p'><%W! TѝJ߻Q@@TEEH_j~ 2¢D{BgXLQ0vh:5] nRNTWZ{ޮ}bɈܺV9Y%j%Xk7۫v=h+CW\tJ/λLY"?NEB+(|_@?\\n/XHA\6>̅3}hjdT15KgbnETKo+̼)) f45]:uMLO.[5@fj=u4nY::,Mµ:6"D陱Zoԡꒃ?i٬ ~D=MFX%-hj}ٱ_-b&z護%EHbFG_~=YVc@?sYʎ9RTyFNKK>] ~;'~ppVg[TS:ӈ}M|I)$˿Y?0 fs |l 4mSyrog !#Hᔠ XNT>x-"PBzAdpI cƷ:W6{x`SO{;o+6zt?OJvڰ=ۿ ˱V׽$]}\Y to]s=Xw.zlu/ sPaL??KzNgwU[MV+G$R _ a×/^n8b(jCu¬-YmC}Rd]:]pSy3HEiTn!/?:A|7g@~nj<}Ue6L6{;cg[|l#mB4\^K\ڜn7F\QU) zxVaφ 1wSeX/{q@R!p ! /YƉ%?@L?A2)6=Q8=HX{eCf]il~O$P{O {p?]Sa_!ڔjCc? ^c Юx̗1Vef"g|R?9~jwdN?ed3VcL{@a+x*C?hAׇx)=3sl+iM c$o fΟ~ws"e*"H`O7ORpӐ 4/"@/Dcv=o'FA?K#]:rfٞX" Ub3Fe >fTQ~9Ttނo̡IƮxc eV%rffo:fV,0h2i~yG^]Vz[bAl3UB':U)I!c#B:3G W٤&SUem}6ܓfNԙ'Sf U}rǨv^be$[3=nmW+\*Lp$ot8+ GN}^_5UG+Yhpf#ќzq^#S :9M[I'Ӱ+CA3EW1~:* Vٹ8vwdr0Wb2 Rz:PLB>'ZܰmTQ@8h: .YsCc@{1޸3aK{4q2d'q|e@NBF8\ς7&ᐈpsJyOO)t:o.+Ș2i0ьϰ(S?~*sኇ3o'!VmLyZ'|A`bV]ֲuNrr~9gF:Mtzh}1 9RC)s?)^6i?x& )؀OO# A^@{3Ι GkoT)y vH{1`uk8l~"P4ίR3=\\OtrڬjSXv쨧iϏ kxb3VOb3vw#"/FܱpL&`gzr\|au]#橨qij*RFD;왉R^׻lF}ϝуpc l1RPGBt:ˎ5#/BDV^P|%KφK(h ˒1 gMuI}ɞ?^pdi`ylx! )0:ş\Љ..lʠjSB^>Vw?eH>G 9kdY+Ue->/ W1Xe'=_nC1 zTpzKb0L=.?9J2T_﹯7R3f1s&eߧb>b:al]Lu%_U%2ċl@1oԵi+j/<$J k~ی}YY 6n1`R^V/t^Jc]>G!S@[|7(gtbO0DWqSCh)! i48KQ:V_?1A T?RjD靀jk%B}gc:] )!kEA@oF]@YdyrGH&0SLW/fZ0d sޗpnRvCIl|h;Oi?Y[s2=8e,ݰa g31sye-̾YcLԲVQю_."cbK.2I1B6d87vT5 #yD@y/)s~"~;P,#:PgKmlN5)sH#ם ܢG$kʔ;C qgOXw{&Lfԩ 0bܕߎzoO}/8!p 6YZ,+~ڈ Z ~aa6/MkK+vodz յQcRYf:o{$`~A볶l뮽=%lXQc3o5=DJy }^p2e'gpvxIY8 VP\J"IGmSf(DRf>0>=KĤeL| Ot'&9 u-r pRn!K6g6B9kgθkH839pueMuWG:O?>WL^7l}fe- V%mT/?_VB=VVWԩBƪF}Ð,$Ě-:P~9z5}č+{* @N_t(=w@y~Çݤxfշg[$: XSQV>`[>m]hM#Cfj&Ƚ }:(8Ɖ"uUH?/E9Pk.!^˲[A6$BDP,!R1ѦmU6BuA2<628f鹇:N{?nԲpLlKz@zQ*eAЃYP>hAA Ap@D@5hWd@ }GHB!G(~\+B!@wZ5%\#<5'ߘ=$ iIcL|>2~uM)HLD8]9^8M{QLrB@OEv/̀^],Y]1L|yⶭ4'R˴7K12Uŧbg6FnQ*Pt*/!Փ >Z&_)@='BDvBoB\elJ+ЪvJ"b!п3q8ؐS|֜sN1׳[#CQE͏ѿv ?6%Kf-< g^.J٩!!=W.+λWT~G.=B=/}񒩪nnغ%%L^gouӒPpl*5EN5NZ]ۚ¡*p`*Y~Ȝ d2ՙ5"PW)TH>NYY߄7ꆭ gNlo/gS_s3# z#  RUF#ԄOnt(\N%+;{;UOZL"#> Nf73; YAlPSt [B1З{U*KUT=O1MUc !6+G&Z5ze`hęښv4BRj0}%F)E{qD^OƒSB"J}玹`42h },7L'juA|ʇ͸O([Kq[}ێ!DԹGD d&?$GOWGP,,2BOzaVv{>[=g ʱK(kf0!>&)at:>ls=7j~KQޣkwf XX~\ػ5i]NVN)[ e839X6ێƀPrv~'a$NmU89^*v 9ZL{܉=Dj/*f0W[n5sY=Eumi< 'RcۑSzx R4ǣp0О]]t8&fə9&m&}C 2=+Жl-> 4$r?nx2 r;eX^#CJ|B'dž @ }QQ5!>n:Y cώ{oL @)|O ,qXwj-q72*aEW'妮UȂ#`04"8Dc &-U`%ыK-.g =*o6"G '**+- R<]y|q̙1'f%27''n<ɩ&c-fl%jV݆E*m~<ҺlZr)L3>inn1ζDe;{OfyԚ%FF|=¾ݶDF4kNJ]屝+ڦ%@HW˧Zz:cV\( B! ȕ'LDJs2/do'4UU˒ uu˿'9d4*DE'fC*]1 @o5C@ oPVq1}ľ☜K6>SS?8JV }A*}R7'r*u9?,!D0N= 8S I9~46zS]%\M)NDQmgþ(cULYcvܕe0ۉU6L2ם&҂5;i2""ӷʷR$Жn&SEa4( `FԦW* %|B20ϭďұ t\&uV~g<=iWRf(LЈLĺQ|4t!',eeLmVgUl$NxFm6aQ7B!Ў ZZCUK-`A-a1 S^K, \4pDtهpv+7fΩ;TJ,ɜh{9 @" j {dWJ*A,"n\1Gvirt蝏2xqfWF=IԵE^ghYVVWԩѩk@w9kmY\&ʂw!ɋw;p9 Ù+(ΔY(Kv)[qrLΌ-GCWSJNN]zon9g~IM8!B! ;vzA4=0D @!TTa8#@@*UB!~ ~"B!@ B!@ B!@ B!@tHZuOQXΚoL-,akRykLIVXLV;Ve츞1I)sㅠ҆Kvv\qd:E_]YN ~FL ?T{sF (dGʶ$ m% b* Ș蘸h %]9\m:7rD ":+/!D(3*HN竅Wc >nDO\_~lĶ+nX]RRL[|-#B D]B&lH=MuЦVVkR]Eq)pSR djEM ԛ, bXߐAkk4!jTOLbRYl%Sdͩ B!hs+{꾌nO@/CvD'W*l(ίo+B!`"ca@S3ɱNUw&qҳ/]áaQޙraYm~=r@g84u]^Ĉ_KakjęB<7"Է)з]ž rl_/ #9@ >@T@&#cdal*p`:}fͺ?)nq ¼h, ܰ70* vHq+2#F˳zQl9󧺑m ze& f\b45ՙgA-P>_ƺ㘩Ík 8LYia,.$TQmFO<@fsJ.`Mf,,۾eUD/~8-peqvU@<*NDv΅Swt9h{c/bE.$Pv:c &l\5l3C޲̴Qc<3~ѓ`؄9+M}.Pv18RYL<8(y擓֬H:6K'̪^L{Fb%Vkj/,LjFWÇab nS.(41=<&!x$LW8N ELf~zt3Lf@񨝧9ox_^ / u 1A6aER#`KQI.6l .YiQf( P D'<4\4!h+YE @*9?B!@'1Bҩ~kH}E o@K2hJD0tFIz8!MW]Xɉd 1=^4ىk7B1l6GdМi,h 4r`6T\ڸ};[gG{u09ĦQ@N2A-jV?}4q.eUАBGEied td (vçsCM3XB;K~$ܜɶS93fha7Je;qUGESY7ډTނ[+_~VW2!m> !(@`[ĉxec?}ůֈm*^S_Y}^iU $s * bЩaT GDGSj ROLyW3E 2+'G04 KrXPߑLV$Hl"y!~7Zx{"lZ7+An@zMU[wuX)uy,0G7՞VM9UZ)|\=zuwP*['o/V}MəWdԧ_/{IrNUT5$N^rW^)*U@e}usNī*zc^U2OFY8'ΊNiC8ݽL(\!$JBj_Բ0_-'ؽ>f,z3&4Kkf)mAkl+0O5I$f>vUN5N bR`I9 ʌ9 VUm21Δ82h矼8k?KN2 wҗxov7Qm;ŠԎW9DL ؇Fl9S]^/J^8P "UYfҌ#TD;bAetCb"ӣ9تMRTnؘ pκF3&}ttۢ{ Rٻ}E8¬*S$5Sc3!W,s?=׋ɛ 4ki4q^~zQRuE,J'i ztT}F.JO'փ諲~#G&nTrzMɱt[ΗUO?!|37)`1E~FЉ?-)xPKgJZΖsR- )ϰC-$vr Ƞ3&㮸!bs>+1 ͨqǍ7q85աtO9C5eM|jjjjM~?S \$,3_1gi-)}7fut,cI#^^ƌcdV,[$S]9]G',"y|D9bL8sε+k| dNP G a{l%djRNcT@Ppj%l-yd$<[c:?AbAT}VLZ؝prwa!;B ڋ 7'lο*?oj,կ+ R\KYI{8TXX;oQӁ`Y[>}$NT@ paLcDhgf"XjfL%T'uYlBEQ lk6/ν)qohi|rl`! Ձ;4DyR:ĥ/ۍ)6JIX oՐO7bzLOJ e\ڢ`Y5KicJɀH]*̲'IY,d?q[ 'naFo!udh0imS8gvGe Bs %P1ZP>+b{45Dv@ `uhgEۼg*J=5$,m"$deg {U9`\u!e+nx__G~Y3D9(Y F3n+19ӎov盟rM%;,!ZUӾ?Q۳EQ."M r b2%J%<$훥oZͤ=@@3q,-\ON+< >ԸLWE_2>o1CB,h8ğv\R=oe'( SJc~ 233/P YѴ"΂< s2cY Nُ~c[>쉬 -䈁S#,Z3x+[&w 3VI*&,bÛ̹ x* ގ,s"3hXcO^|˫1Fda@S͘lah0k8&]LNk g@fD1 /Dl#c#k1KFd̏jĩ'.9HlY1D/s"PȌhيME;sѦkb{`~f.߲|=}Q,m{?_4\dgޞ S>AxzutҙL'~eMaW*'{$6rL^%/1he;ضC@ӁZ#!;I-*Lbn%'RmRĉbc}EOggN ڜ)@eڴt& Φ lkİn^q~^&oKK2f@,\ sPgEmWJ)(7F"tVUMmK|dT۵j>n>޶jV эCPY0CmvEK}mc= <ʒX}:'IS^r  ݅qGKx9S5l-V_K3CZ"9&Lڐbh3EsPMϼU[z%'!@#T}Yx,٠6 k4z8/I[I'E z !@t@!eΝ`O\,LdF Ӌx ̞K7ZĽ֌ 9 @CaҨ:eCCֹk.UpBt\TGȅRz(DiFJELB P ٖ^D@  HE=0YE HE=j9ҋ@ Er'Dbk2/`cmSBrء%A؈@%2e7V_1I=vBcoT9 }yrn)o@r~ۘZb!ryQfP(9pi ym"c^Y!Q쁺<r.]2JUoU˜[_q)Bܻx({yTTCg;$Y{ӹD2xutC>jyʴfSnt1g4jgOte?*Br#VZpcC PEyawޯIIb}[ 'z/G<*JC\(ɬxQ$ `O\x`|%%xx 4OF>Dl$tk̼@Xzd?hGP m:8k%Fu -jvqJ[rGX[g-)OIAj8 =8'lBکr irsL_gi46git CItڿ^Ox_gOx'FU[s"FSU*z*eA2EV#/8uNF zf`wCIcv\JgJuVFvt[JÎ#`~"W`(z# 7;}[ 1zCFs rtpSk}OsEpQ/ܡ Lk(~YP7ipIQr߶Wޯ&x:ZQri>lÐL?-ЪSekpVFO~Ws.tW>sC٭!>o<%fq 1/Tg֬>Czt:p#GHgoѩ*>cgWavR|t9Щ+i}<099sS] uEOPD$kCLXYUAҐTjjh+?X6GlȖ,ye+tlPk+ٙGu'C/`bVfm]ϗ|)@s>sWL teO7߻>9_>+7}~W^s jʟ_R4w3T蒔ĺNv V逌Hc`+#;iƼ+SaӞYM\OY^Ig fl Ōl6Q?>kx:'m9ϢWe+%ٟjKx֏bܧr[6祡ÿʙj^ݰ-~E_YjNio<.^6 ˪gsqH2%/39]ċ;bȹh0NjP~M{ٜeumZue~ǥ4Ŏ`ofcos>?AUͭnZ[fI!C[! :` wƋe n{oNMu݁׎llIO4%':ŃQp&+9v^pQ Z'{͔.lnu~2~ѩ| zE aCzLDb+gWT8Ot,vQkTds?n$Uks!W?qh-XZLIDK,\XWd'ɔgOs ls~A}=֎ 3gH'Zd qd`l+_7عLnè=eOOJV-a{O3Zo |M@.JTҡ[c[V#)D:tE 7F 5ku:EJ'gn͔n5BU L@Eއh蔷rŊ-tMjftQ^#&ߟ$d&|3d̪ }<Ӥjz(bڞ2l計C~|"%`\dN|T -)-_e*~]I>_ٛ-H BC5l s$;U.<' Z.xb{Ҭ{EP6{]+¯ TT!l4 sA ='Ǟ[_R "k; ]) .!]{1 2 @#Oy`+=.M47yquc1Xrėdt~VT)rOU8V[,zdz[`D}Ry"koM{/0Tmbquڭआz:=1$fr U]W*UiRWǦ`ڨT6Qו%!ԇVPVՍ?g؇W0)&L̋YKeQBP+A[^tO[>^(2q(BA ^_C| L +(=gl4ԜM˽sұ_w|!,9D?\8mS>9_O]K6<O1oLxǐ5/X_*@gنx22n5bF6JR'pxrŠ3E)MT 0ۆ {3^4,эˢGpy g3zSԥ ufn]?F'GkpGN|lg_(_2b,vyn*ٞЇpۭudkJ^rebpFOge~Ѽ/HD=y7gUusoa2#s J Bn(⾁T i(!$w87_2"Ʊ ˯҈$,EqÖd~M( jsŞr֡ȩwI%Czmwe}3E.?\xڳsV~_A|e$U>lH1ҘWlBX,1yJⲙ2aTONT`pVn!0h:A9's`Lyqkφrw&#P+M!NTۇIc/;30%")<Ao.f;7zSԲ@!.c% ߁O`"fǖKSUx7aJi_ =M:wg6N9A_h^Oʱ1C2waD{#X{F" c9H0/KUj:)2m]^k”wTTv( @=Ǣ~MآZ N /8qŋO J 5}s#)=nM13}2xFQC(p /U7l Up+ܗ2"ZiA%j FD9gaIDLew59ɠ`pڐ"tM.nmckZDgOҫiu9p dBW4^W߸tbm2gьC'Oi&2AShYJF>;]jܷ l`XWeOpm9嫮]kMLʼnpep{X2'SHĀױ/)l0&kfBi13KOs5¨%#EݜDOzٽM -:LE!g?70W8%6ÓN]ꠙޑ.IK||r0/~l.m6-^pzS6dIlHChZ"t# cA.J0XMh䦦iZL5n3ļ9ڟTV#rdC< 诅`cJO,&s Ux1 QK.RT5;صr^Gʑ.n<E?$}\]dtfS "ko\y}6csMEEiO@g?qkJ6ǬIY-2'1Bcliex,*qEȱn`'Uܨ'UY ڜǥS=d6Dfwv(sz@9\:ց2^`5՘_g:OlZ w&7ѶD5m k~[hzK]u#LPJ k;M7+L)fTQ>dis¨#E5O4/&˜U :rRcz[DX !Naa+u-iDszrU/a*~ԋEգ<< nџn%q$`Z-!H5zho:go`@ϙkt"lN, w6d cؘ6bx&E2"}DIUԷ'\U>aE=3Ļ?RoyD@hĢPwڢk*[[/`? &4=b"st{Igl,/P!Q*%ZF9jzDN~C;[$6I;+֨ OǜSVm%E"c7Ҕt| }CC9aּp-;VlR s#wzڍ0Q]VOP>FD]7ϕC-kRZm'\dד}~BdTcnϲ@AE0 :S G/fugOSBAs'OL/$DL–mߞcv 7U/`]V<Ƌ?vA&F8N y)5j7݄'xe4]mn&b@DdZmq].y2]BC\8@̾IdeCj%IAN;Ex2R[_$zuvO6r=;H zΊw6 ,kddW)D#CW]ɽ}LB8]X;{L juz [Brt O7oj:;.FmWR ޳(?-1ɹ]G U9 q3WYfIDATQ dWўîh"Vm-|׾tF6kCӫnҷX /:{!~S9S n &}m_<?"}N9Yy%Fa @4Eէɻ3:pu7S^a}w*(Y*+@F7 >'ZCAw$orN kFCgmEͻEʕJkpKs Qt f?X-ZooNzqxK$)uŐ.B X[=`w" P (飨ʊ@z6jk"Kݿ#\hxi{&㽕OĮ~"z31bawo97+FoS)̋Zt 4x %ݛ;ĉ%_~K}bO,U̒DoO7Hj'<?'DNuWˉw9<1-:r!yW6jOb wexd WZnI/OL/7,;Nxe΄Ud>O{3Vd5dŏO{Ln>I.p 7+3;t;Zk@rqgnJgru%6ZD2Y?)NF,zӗxo}h"ܣKLMZ.%Euy8 HRK&'C1?rØcRkN C&'\B  Yܪ뮨RC?o~^~2aceznw+UEX o]b1 X.1)Km'Q/= Uoaj=%־({gF~7^a)Tk ~b'-*3VQf3P.jZ|Ip`3")Rz5QɜV:-`!g/AD  2Zy+g 7Yd^S fasQSt:B8uCL6hsݜ"T/jt,1![a5L٢sjAŏ4(7M7Zz-,xWSXg4B Y}li%%ӹo(#;wW{|W5@fΩѬ#$N͎'@N-:rI%2[œxZ@_JS<Qf?Cg sT&['1Pns: B+'U7_L@^Σ'k.:Ǎ> gO:=vh <܈/gD\ {kjMX puAV5}pyznL=/9 Wth5bTtDХsp>>b4tu/ G7|hwMWk vĶ!R] GUoC*?]v2!ͥ]PRG(n(|P.##G8'ǶVYpYZW_=.ӫ=̝eN鄽@H @Q}{&]ud0JH1o!f =dJQ!@3p9bە>0_X))dhb^"^o('!a#FYLiI?Mz;}ۏɪ75ѥVs켔MI܃OB%mM @{#QMquڳԨTAzPE]yQA}a.a:6>|_,K++s%SFyϽNj0"S }.^ ~OB f8sm,/J۵Go-X )frM7xKן+Pu~wwhi`_eXOo/K h2nra##-)d҆d GWv!mzJb7`x._2JsP8mF.05h|ʺc hK~bڞ2l計C~|"(`\d *8{OѢrMAo9#mk)™*>ΝʦYt(N2H1c]l4a#qu_Uo1_6gtxgE7j/kʪV!;N{ ejGOfS3!tiS_$WM.Iw{(Mmk˛c8x2";>JWY2> 4Hfe 7TK[f~f~0\%**$p0 i^*I:7}Ut4 ] {y;.L;Os,!gzcfugGKLM' 'm@?PFB=@!`AEȃIr+Tpߥ;l,9',ˮS.dݞbɻ:%N1'?zV;b)zpZ`-~9t"6oͭLWLO=\\w;cA JcQ>M޾Aސ$N (eEag'wYjUAI }'+|oO)4:Iy]V5?٬ۦy+C6pqv jFau*O=?ԎpC)߆'pCy5 4 !mCgzI:vD8)Q Dy+=ފw*k'1N~b* C l \*}= ޏVBx 4lUh b;mpΧLi,\w-0m]g?0 F焸 ;e]ȃ,U: -KMiKejZiQ3M:T%ljD9MNKפHxl\^_ccp ys>_1"XHC*vw6]6qD;yR;/H>{})E2A~5*$S!}1JM.ɉ=֏6a d[d7<͓DN@ ͻv'7KpZcܫSOQ5ETJP~48WȕhAhebq]75^Th v I.6%Uryyï_߶1}"R2b%3 l !t1]A+NcX>ľJ]v% a|13a3~GZ\n4|i٦ h@tw}E]SUe+>'|E }_*щ~~qk'gR._vgqInG1{@a΅/yˁ԰5޳P\̤xLK^r]w& y@Pҥ Y_|(4<F.=gD_Zq/匘S}.ݾAޚwyaDz'::2vlִ DQm`NCU^IʂUOV$03"43M_]u}G:u9[Xezx,y D@SBeV伳c?ڝǩc7{ f"Gܔ=p̈́byyѯcf<)KBw91Uۘ^ފ'(8YNS@'Tx 3X[. ! ˆ@* ZtMtu9]2>fOI䊝 oGn3K7$ 3?zQfshS:S U7-1N12v'߄ `k&[ࠪ4Kӫ$%GL%GX>IBhDkklGLm9U*ۉjni`ء/Ԟ6վf}Xb6Q?@ = (M|^EESn 1o'c+ xGpu]BU%zGgQ\0_+V&/ϫ>aq ˷o2aYG%l}f HO̍}' ^( \; qG&f[T]P7"hOUbVJ,ٺTKn]']4W./e3gar=_JQL2G#E<ޮRBxjUkKT! E l ls/W+j|{=NI|w .(KZv=qzm̸wEjՌu hUP"LE&7;Nԉp?=ʋ봔ʆ jB'Ugf1xl1[A"d,]EWW5{)4|lUR2-ַHKG/E?D"@ ȒW!`/tǎL@c73C0uC* v1̬DǽB 'e٤2a/SýWB" OhT^wع{dNe7̬DŽo;(p||4&#ΈCXY Dދ:AmF"DE!aY×z,Pޜ% Et!7E޹(@B,)rE7EBQΓ#YA2G'dαd-jieu2ɷ.؀ˣ)_C8Q}ncx.|8Al͕ Tz`[ KDHݽdd|nu@Zi$=F;ljg6C>sWei +D}pX<l{s~8@n }Cs=whfbS DLT>WK1{& @$ ЗhPrfl(        -aznIENDB`colors.js-1.0.3/tests/000077500000000000000000000000001241545651700146035ustar00rootroot00000000000000colors.js-1.0.3/tests/basic-test.js000066400000000000000000000025031241545651700171770ustar00rootroot00000000000000var assert = require('assert'), colors = require('../lib/index'); var s = 'string'; function a(s, code) { return '\x1B[' + code.toString() + 'm' + s + '\x1B[39m'; } function aE(s, color, code) { assert.equal(s[color], a(s, code)); assert.equal(colors[color](s), a(s, code)); assert.equal(s[color], colors[color](s)); assert.equal(s[color].strip, s); assert.equal(s[color].strip, colors.strip(s)); } function h(s, color) { return '' + s + ''; } var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow']; var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']); colors.mode = 'console'; assert.equal(s.bold, '\x1B[1m' + s + '\x1B[22m'); assert.equal(s.italic, '\x1B[3m' + s + '\x1B[23m'); assert.equal(s.underline, '\x1B[4m' + s + '\x1B[24m'); assert.equal(s.strikethrough, '\x1B[9m' + s + '\x1B[29m'); assert.equal(s.inverse, '\x1B[7m' + s + '\x1B[27m'); assert.ok(s.rainbow); aE(s, 'white', 37); aE(s, 'grey', 90); aE(s, 'black', 30); aE(s, 'blue', 34); aE(s, 'cyan', 36); aE(s, 'green', 32); aE(s, 'magenta', 35); aE(s, 'red', 31); aE(s, 'yellow', 33); assert.equal(s, 'string'); colors.setTheme({error:'red'}); assert.equal(typeof("astring".red),'string'); assert.equal(typeof("astring".error),'string'); colors.js-1.0.3/tests/safe-test.js000066400000000000000000000023701241545651700170360ustar00rootroot00000000000000var assert = require('assert'), colors = require('../safe'); var s = 'string'; function a(s, code) { return '\x1B[' + code.toString() + 'm' + s + '\x1B[39m'; } function aE(s, color, code) { assert.equal(colors[color](s), a(s, code)); assert.equal(colors.strip(s), s); } function h(s, color) { return '' + s + ''; } var stylesColors = ['white', 'black', 'blue', 'cyan', 'green', 'magenta', 'red', 'yellow']; var stylesAll = stylesColors.concat(['bold', 'italic', 'underline', 'inverse', 'rainbow']); colors.mode = 'console'; assert.equal(colors.bold(s), '\x1B[1m' + s + '\x1B[22m'); assert.equal(colors.italic(s), '\x1B[3m' + s + '\x1B[23m'); assert.equal(colors.underline(s), '\x1B[4m' + s + '\x1B[24m'); assert.equal(colors.strikethrough(s), '\x1B[9m' + s + '\x1B[29m'); assert.equal(colors.inverse(s), '\x1B[7m' + s + '\x1B[27m'); assert.ok(colors.rainbow); aE(s, 'white', 37); aE(s, 'grey', 90); aE(s, 'black', 30); aE(s, 'blue', 34); aE(s, 'cyan', 36); aE(s, 'green', 32); aE(s, 'magenta', 35); aE(s, 'red', 31); aE(s, 'yellow', 33); assert.equal(s, 'string'); colors.setTheme({error:'red'}); assert.equal(typeof(colors.red("astring")), 'string'); assert.equal(typeof(colors.error("astring")), 'string');colors.js-1.0.3/themes/000077500000000000000000000000001241545651700147265ustar00rootroot00000000000000colors.js-1.0.3/themes/generic-logging.js000066400000000000000000000003051241545651700203220ustar00rootroot00000000000000module['exports'] = { silly: 'rainbow', input: 'grey', verbose: 'cyan', prompt: 'grey', info: 'green', data: 'grey', help: 'cyan', warn: 'yellow', debug: 'blue', error: 'red' };