pax_global_header00006660000000000000000000000064137632104260014516gustar00rootroot0000000000000052 comment=aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7 nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/000077500000000000000000000000001376321042600203075ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/.github/000077500000000000000000000000001376321042600216475ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/.github/CONTRIBUTING.md000066400000000000000000000053231376321042600241030ustar00rootroot00000000000000Hi! Thanks for your interest in contributing to nearley. nearley has always been a community-driven project, and we have a history of almost always merging good-quality PRs. Unfortunately, we're a small team with limited time to work on nearley. If you follow these guidelines, we'll be able to get to your issue much faster! --- Before submitting any **issue**, have you done the following? * Read [the README](https://github.com/Hardmath123/nearley/blob/master/README.md). * Included the version of node (`node -v`), npm (`npm -v`), and nearley (`nearleyc -v`) that you are using. Ideally, these should all be up-to-date. If you think you have found a **bug**, have you done the following? * Included a _minimal_ example demonstrating that bug, along with expected and actual output. * Extra credit: suggested a solution. * For **TypeScript**, please clarify if possible whether your bug is in the `@types/nearley` package (which isn't maintained by us), or in `generate.js`. If you are asking for **help**, have you done the following? * Looked through our [frequently asked questions](https://github.com/Hardmath123/nearley/issues?utf8=✓&q=label%3Aquestion), on the off chance that someone has already asked that question. * Included the _full_ source to your grammar, including supporting files for postprocessors. If you are suggesting a **feature**, have you done the following? * Looked through past issues, open and closed, to see whether it has been suggested before. * Offered a _compelling_ use-case that _cannot_ be accomplished with nearley as it stands. --- Before submitting a **pull request**, have you done the following? * Read [the README](https://github.com/Hardmath123/nearley/blob/master/README.md). * Checked in with a maintainer before you start hacking, to make sure it is something we would merge (this is more important for bigger changes). * Run the benchmark (`npm run benchmark`) and test suite (`npm test`) with and without your change to detect possible bugs, and included the output in your pull request as a separate comment. Parsing is tricky, and innocent changes can sometimes kill performance. :-( * _Not_ introduced any new dependencies. Check in with a maintainer if you think you need a dependency. * Please don't introduce style changes either--these introduce noise which makes your contribution harder to review! Check with a maintainer: we might be happy to accept them in a separate PR :-) * Documented your changes: new features should be mentioned in the docs, which are located in `/docs`. Edit the relevant `/docs/md/*.md` file in Markdown, and then (in a separate commit) run `npm install && npm run make` from the `/docs` directory to compile the documentation pages. nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/.gitignore000066400000000000000000000002461376321042600223010ustar00rootroot00000000000000out.js node_modules/ docs/node_modules/ .DS_Store test/profile.log test/grammars/parens.js test/grammars/whitespace.js *.swp *.ps1 *.cmd *.bat npm-debug.log sandbox/ nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/.nojekyll000066400000000000000000000000001376321042600221250ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/.travis.yml000066400000000000000000000006731376321042600224260ustar00rootroot00000000000000language: node_js node_js: - "6" - "8" install: - npm install - cd docs; npm install; cd .. script: - npm test - npm run benchmark -- -g dont-actually-run-benchmarks - cd docs; npm run make; cd .. - git status - git diff - git diff-index --quiet HEAD -- docs || (echo "$(tput bold)$(tput setaf 4)Did you forget to rebuild the docs? $ cd docs; npm run make$(tput sgr0)"; exit 1) cache: directories: - "node_modules" nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/CNAME000066400000000000000000000000171376321042600210530ustar00rootroot00000000000000nearley.js.org nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/LICENSE.txt000066400000000000000000000021431376321042600221320ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2014, 2015, 2016, 2017, 2018, 2019 Kartik Chandra, Tim Radvan 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. nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/README.md000066400000000000000000000065441376321042600215770ustar00rootroot00000000000000# [nearley](http://nearley.js.org) ↗️ [![JS.ORG](https://img.shields.io/badge/js.org-nearley-ffb400.svg?style=flat-square)](http://js.org) [![npm version](https://badge.fury.io/js/nearley.svg)](https://badge.fury.io/js/nearley) nearley is a simple, fast and powerful parsing toolkit. It consists of: 1. [A powerful, modular DSL for describing languages](https://nearley.js.org/docs/grammar) 2. [An efficient, lightweight Earley parser](https://nearley.js.org/docs/parser) 3. [Loads of tools, editor plug-ins, and other goodies!](https://nearley.js.org/docs/tooling) nearley is a **streaming** parser with support for catching **errors** gracefully and providing _all_ parsings for **ambiguous** grammars. It is compatible with a variety of **lexers** (we recommend [moo](http://github.com/tjvr/moo)). It comes with tools for creating **tests**, **railroad diagrams** and **fuzzers** from your grammars, and has support for a variety of editors and platforms. It works in both node and the browser. Unlike most other parser generators, nearley can handle *any* grammar you can define in BNF (and more!). In particular, while most existing JS parsers such as PEGjs and Jison choke on certain grammars (e.g. [left recursive ones](http://en.wikipedia.org/wiki/Left_recursion)), nearley handles them easily and efficiently by using the [Earley parsing algorithm](https://en.wikipedia.org/wiki/Earley_parser). nearley is used by a wide variety of projects: - [artificial intelligence](https://github.com/ChalmersGU-AI-course/shrdlite-course-project) and - [computational linguistics](https://wiki.eecs.yorku.ca/course_archive/2014-15/W/6339/useful_handouts) classes at universities; - [file format parsers](https://github.com/raymond-h/node-dmi); - [data-driven markup languages](https://github.com/idyll-lang/idyll-compiler); - [compilers for real-world programming languages](https://github.com/sizigi/lp5562); - and nearley itself! The nearley compiler is bootstrapped. nearley is an npm [staff pick](https://www.npmjs.com/package/npm-collection-staff-picks). ## Documentation Please visit our website https://nearley.js.org to get started! You will find a tutorial, detailed reference documents, and links to several real-world examples to get inspired. ## Contributing Please read [this document](.github/CONTRIBUTING.md) *before* working on nearley. If you are interested in contributing but unsure where to start, take a look at the issues labeled "up for grabs" on the issue tracker, or message a maintainer (@kach or @tjvr on Github). nearley is MIT licensed. A big thanks to Nathan Dinsmore for teaching me how to Earley, Aria Stewart for helping structure nearley into a mature module, and Robin Windels for bootstrapping the grammar. Additionally, Jacob Edelman wrote an experimental JavaScript parser with nearley and contributed ideas for EBNF support. Joshua T. Corbin refactored the compiler to be much, much prettier. Bojidar Marinov implemented postprocessors-in-other-languages. Shachar Itzhaky fixed a subtle bug with nullables. ## Citing nearley If you are citing nearley in academic work, please use the following BibTeX entry. ```bibtex @misc{nearley, author = "Kartik Chandra and Tim Radvan", title = "{nearley}: a parsing toolkit for {JavaScript}", year = {2014}, doi = {10.5281/zenodo.3897993}, url = {https://github.com/kach/nearley} } ``` nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/bin/000077500000000000000000000000001376321042600210575ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/bin/nearley-railroad.js000077500000000000000000000076571376321042600246710ustar00rootroot00000000000000#!/usr/bin/env node try { var rr = require('railroad-diagrams'); } catch(e) { // optional dependency not fullfilled console.log('Error: When you installed nearley, the dependency "railroad-diagrams" failed to install. Try running "npm install -g nearley" to re-install nearley. If that doesn\'t fix the problem, please file an issue on the nearley GitHub repository.') process.exit(1) } var fs = require('fs'); var path = require('path'); var opts = require('commander'); var version = require('../package.json').version; opts.version(version, '-v, --version') .arguments('') .option('-o, --out [filename.svg]', 'File to output to (default stdout).', false) .parse(process.argv); var input = opts.args[0] ? fs.createReadStream(opts.args[0]) : process.stdin; var output = opts.out ? fs.createWriteStream(opts.out) : process.stdout; function railroad(grm) { var rules = {}; grm.forEach(function(instr) { if (instr.rules) { if (!rules[instr.name]) { rules[instr.name] = []; } rules[instr.name] = rules[instr.name].concat(instr.rules); } }); var style = fs.readFileSync( path.join( path.dirname(require.resolve('railroad-diagrams')), 'railroad-diagrams.css' ) ); var diagrams = Object.keys(rules).map(function(r) { return [ '

' + r + '

', '
', diagram(r).toString(), '
' ].join('\n'); }); function diagram(name) { var selectedrules = rules[name]; var outer = {subexpression: selectedrules}; function renderTok(tok) { // ctx translated to correct position already if (tok.subexpression) { return new rr.Choice(0, tok.subexpression.map(renderTok)); } else if (tok.ebnf) { switch (tok.modifier) { case ":+": return new rr.OneOrMore(renderTok(tok.ebnf)); break; case ":*": return new rr.ZeroOrMore(renderTok(tok.ebnf)); break; case ":?": return new rr.Optional(renderTok(tok.ebnf)); break; } } else if (tok.literal) { return new rr.Terminal(JSON.stringify(tok.literal)); } else if (tok.mixin) { return new rr.Comment("Pas implementé."); } else if (tok.macrocall) { return new rr.Comment("Pas implementé."); } else if (tok.tokens) { return new rr.Sequence(tok.tokens.map(renderTok)); } else if (typeof(tok) === 'string') { return new rr.NonTerminal(tok); } else if (tok.constructor === RegExp) { return new rr.Terminal(tok.toString()); } else if (tok.token) { return new rr.Terminal(tok.token); } else { return new rr.Comment("[Unimplemented]"); } } return new rr.Diagram([renderTok(outer)]); } return [ '', '', '', '', '', '', '', diagrams.join('\n'), '', '' ].join('\n'); } var nearley = require('../lib/nearley.js'); var StreamWrapper = require('../lib/stream.js'); var parserGrammar = nearley.Grammar.fromCompiled(require('../lib/nearley-language-bootstrapped.js')); var parser = new nearley.Parser(parserGrammar); input .pipe(new StreamWrapper(parser)) .on('finish', function() { if (parser.results[0]) { output.write(railroad(parser.results[0])); } else { process.stderr.write('SyntaxError: unexpected EOF\n'); } }); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/bin/nearley-test.js000077500000000000000000000045501376321042600240400ustar00rootroot00000000000000#!/usr/bin/env node /* eg. node bin/nearleythere.js examples/js/left.js --input "....." or, node bin/nearleythere.js examples/js/AycockHorspool.js --input "aa" */ var fs = require('fs'); var nearley = require('../lib/nearley.js'); var opts = require('commander'); var StreamWrapper = require('../lib/stream.js'); var version = require('../package.json').version; opts.version(version, '-v, --version') .arguments('') .option('-i, --input [string]', 'An input string to parse (if not provided then read from stdin)') .option('-s, --start [symbol]', 'An optional start symbol (if not provided then use the parser start symbol)', false) .option('-o, --out [filename]', 'File to output to (defaults to stdout)', false) .option('-q, --quiet', 'Output parse results only (hide Earley table)', false) .parse(process.argv); var output = opts.out ? fs.createWriteStream(opts.out) : process.stdout; if (!opts.args[0]) { throw new Error('Please supply a grammer.js file path as a command-line argument'); } var filename = require('path').resolve(opts.args[0]); var grammar = nearley.Grammar.fromCompiled(require(filename)); if (opts.start) grammar.start = opts.start var parser = new nearley.Parser(grammar, { keepHistory: true, }); var writeTable = function (writeStream, parser) { writeStream.write("Table length: " + parser.table.length + "\n"); writeStream.write("Number of parses: " + parser.results.length + "\n"); writeStream.write("Parse Charts"); parser.table.forEach(function (column, index) { writeStream.write("\nChart: " + index++ + "\n"); var stateNumber = 0; column.states.forEach(function (state, stateIndex) { writeStream.write(stateIndex + ": " + state.toString() + "\n"); }) }) writeStream.write("\n\nParse results: \n"); } var writeResults = function (writeStream, parser) { writeStream.write(require('util').inspect(parser.results, {colors: !opts.quiet, depth: null})); writeStream.write("\n"); } if (typeof(opts.input) === "undefined") { process.stdin .pipe(new StreamWrapper(parser)) .on('finish', function() { if (!opts.quiet) writeTable(output, parser); writeResults(output, parser); }); } else { parser.feed(opts.input); if (!opts.quiet) writeTable(output, parser); writeResults(output, parser); } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/bin/nearley-unparse.js000077500000000000000000000023411376321042600245320ustar00rootroot00000000000000#!/usr/bin/env node var fs = require('fs'); var nearley = require('../lib/nearley.js'); var opts = require('commander'); var randexp = require('randexp'); var Unparse = require('../lib/unparse.js'); var version = require('../package.json').version; opts.version(version, '-v, --version') .arguments('') .option('-s, --start [name]', 'An optional start symbol (if not provided then use the parser start symbol)', false) .option('-n, --count [n]', 'The number of samples to generate (separated by \\n).', 1) .option('-d, --depth [n]', 'The depth bound of each sample. Defaults to -1, which means "unbounded".', -1) .option('-o, --out [filename]', 'File to output to (defaults to stdout)') .parse(process.argv); var output = opts.out ? fs.createWriteStream(opts.out) : process.stdout; if (!opts.args[0]) { throw new Error('Please supply a grammer.js file path as a command-line argument'); } var grammar = new require(require('path').resolve(opts.args[0])); // the main loop for (var i=0; i 1) output.write("\n"); } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/bin/nearleyc.js000077500000000000000000000025301376321042600232220ustar00rootroot00000000000000#!/usr/bin/env node var fs = require('fs'); var nearley = require('../lib/nearley.js'); var opts = require('commander'); var Compile = require('../lib/compile.js'); var StreamWrapper = require('../lib/stream.js'); var version = require('../package.json').version; opts.version(version, '-v, --version') .arguments('') .option('-o, --out [filename.js]', 'File to output to (defaults to stdout)', false) .option('-e, --export [name]', 'Variable to set parser to', 'grammar') .option('-q, --quiet', 'Suppress linter') .option('--nojs', 'Do not compile postprocessors') .parse(process.argv); var input = opts.args[0] ? fs.createReadStream(opts.args[0]) : process.stdin; var output = opts.out ? fs.createWriteStream(opts.out) : process.stdout; var parserGrammar = nearley.Grammar.fromCompiled(require('../lib/nearley-language-bootstrapped.js')); var parser = new nearley.Parser(parserGrammar); var generate = require('../lib/generate.js'); var lint = require('../lib/lint.js'); input .pipe(new StreamWrapper(parser)) .on('finish', function() { parser.feed('\n'); var c = Compile( parser.results[0], Object.assign({version: version}, opts) ); if (!opts.quiet) lint(c, {'out': process.stderr, 'version': version}); output.write(generate(c, opts.export)); }); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/builtin/000077500000000000000000000000001376321042600217555ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/builtin/cow.ne000066400000000000000000000000451376321042600230700ustar00rootroot00000000000000# Match a loud moo cow -> "MO" "O":+ nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/builtin/number.ne000066400000000000000000000020751376321042600235750ustar00rootroot00000000000000unsigned_int -> [0-9]:+ {% function(d) { return parseInt(d[0].join("")); } %} int -> ("-"|"+"):? [0-9]:+ {% function(d) { if (d[0]) { return parseInt(d[0][0]+d[1].join("")); } else { return parseInt(d[1].join("")); } } %} unsigned_decimal -> [0-9]:+ ("." [0-9]:+):? {% function(d) { return parseFloat( d[0].join("") + (d[1] ? "."+d[1][1].join("") : "") ); } %} decimal -> "-":? [0-9]:+ ("." [0-9]:+):? {% function(d) { return parseFloat( (d[0] || "") + d[1].join("") + (d[2] ? "."+d[2][1].join("") : "") ); } %} percentage -> decimal "%" {% function(d) { return d[0]/100; } %} jsonfloat -> "-":? [0-9]:+ ("." [0-9]:+):? ([eE] [+-]:? [0-9]:+):? {% function(d) { return parseFloat( (d[0] || "") + d[1].join("") + (d[2] ? "."+d[2][1].join("") : "") + (d[3] ? "e" + (d[3][1] || "+") + d[3][2].join("") : "") ); } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/builtin/postprocessors.ne000066400000000000000000000014021376321042600254060ustar00rootroot00000000000000# Simple postprocessors # Postprocessor generator that lets you select the nth element of the list. # `id` is equivalent to nth(0). @{% // Bypasses TS6133. Allow declared but unused functions. // @ts-ignore function nth(n) { return function(d) { return d[n]; }; } %} # Postprocessor generator that lets you generate an object dynamically. @{% // Bypasses TS6133. Allow declared but unused functions. // @ts-ignore function $(o) { return function(d) { var ret = {}; Object.keys(o).forEach(function(k) { ret[k] = d[o[k]]; }); return ret; }; } %} # A separated list of elements. delimited[el, delim] -> $el ($delim $el {% nth(1) %}):* {% function(d) { return [d[0]].concat(d[1]); } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/builtin/string.ne000066400000000000000000000013571376321042600236150ustar00rootroot00000000000000# Matches various kinds of string literals # Double-quoted string dqstring -> "\"" dstrchar:* "\"" {% function(d) {return d[1].join(""); } %} sqstring -> "'" sstrchar:* "'" {% function(d) {return d[1].join(""); } %} btstring -> "`" [^`]:* "`" {% function(d) {return d[1].join(""); } %} dstrchar -> [^\\"\n] {% id %} | "\\" strescape {% function(d) { return JSON.parse("\""+d.join("")+"\""); } %} sstrchar -> [^\\'\n] {% id %} | "\\" strescape {% function(d) { return JSON.parse("\""+d.join("")+"\""); } %} | "\\'" {% function(d) {return "'"; } %} strescape -> ["\\/bfnrt] {% id %} | "u" [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] [a-fA-F0-9] {% function(d) { return d.join(""); } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/builtin/whitespace.ne000066400000000000000000000002621376321042600244350ustar00rootroot00000000000000# Whitespace: `_` is optional, `__` is mandatory. _ -> wschar:* {% function(d) {return null;} %} __ -> wschar:+ {% function(d) {return null;} %} wschar -> [ \t\n\v\f] {% id %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/000077500000000000000000000000001376321042600212375ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/getting-started.html000066400000000000000000000321411376321042600252330ustar00rootroot00000000000000 Getting started - nearley.js - JS Parsing Toolkit

Getting started

nearley consists of two components: a compiler and a parser.

The nearley compiler converts grammar definitions from a simple BNF-based syntax to a small JS module. You can then use that module to construct a nearley parser, which parses input strings.

Installation

Both components are published as a single NPM package compatible with Node.js and most browsers.

To use the nearley parser, you need to install nearley locally.

$ npm install --save nearley

To use the nearley compiler, you need to additionally install nearley globally.

$ npm install -g nearley

This actually adds several new commands to your $PATH:

  • nearleyc compiles grammar files to JavaScript.
  • nearley-test lets you quickly test a grammar against some input and see the results. It also lets you explore the internal state of nearley’s Earley table, in case you find that interesting.
  • nearley-unparse inverts a parser into a generator, allowing you to create random strings that match your grammar.
  • nearley-railroad generates pretty railroad diagrams from your parser. This is mainly helpful for creating documentation, as (for example) on json.org.

These are documented on the tooling page.

Note: If you’re not ready to install nearley yet, you can follow along in your browser using the nearley playground, an online interface for exploring nearley grammars interactively.

nearley in 3 steps

nearley was written with users in mind: getting started with nearley is as simple as:

Step 1: Describe your grammar using the nearley syntax. In a file called grammar.ne, write:

main -> (statement "\n"):+
statement -> "foo" | "bar"

Step 2: Compile the grammar to a JavaScript module. On the command line, run:

$ nearleyc grammar.ne -o grammar.js

Step 3: Parse some data! In a new JavaScript file, instantiate a Parser object and feed it a string:

const nearley = require("nearley");
const grammar = require("./grammar.js");

// Create a Parser object from our grammar.
const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));

// Parse something!
parser.feed("foo\n");

// parser.results is an array of possible parsings.
console.log(parser.results); // [[[[ "foo" ],"\n" ]]]

What’s next?

Now that you have nearley installed, you can learn how to write a grammar!

Further reading

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/glossary.html000066400000000000000000000315661376321042600240030ustar00rootroot00000000000000 Glossary - nearley.js - JS Parsing Toolkit

Glossary

Parsing terminology gets very confusing very quickly. Here is a glossary that can help us all communicate more effectively.

token: the smallest meaningful unit (the “words”) of your language

lexer: a function that converts a sequence of characters to a sequence of tokens (converts a sequence of letters and spaces to a sequence of words)

string: a sequence of tokens

concatenation: joining two strings by appending one to the other

language: a set of strings

production rule: a set of strings specified as a sequence of symbols, such that the rule matches a string if it is a concatenation of strings matched by the respective symbols

symbol: a generic term for a member of a production rule, either a nonterminal or a terminal

nonterminal: a symbol that specifies a set of other production rules that match

terminal: a symbol that directly specifies a set of tokens that match

context-free grammar: a set of production rules that together specify a language

context-free language: a language that can be specified by a context-free grammar

Backus-Naur Form: a set of conventions for describing and typesetting context-free grammars

recognizer: a function that takes a grammar and a string and sees if the grammar matches the string (it just says “yes” or “no”)

parser: a function that takes a grammar and a string and returns a derivation of that string from that grammar

derivation: a way to apply the production rules of a grammar recursively to obtain a string

parse tree: a representation of a derivation as a tree

abstract syntax tree (AST): a version of a parse tree that has undergone some postprocessors to simplify it (for example, an AST is likely to omit whitespace)

preprocessor: the dialect of JavaScript targeted by nearleyc; for example, you can emit TypeScript code instead of plain JavaScript (not to be confused with postprocessor)

postprocessor: a function associated with a production rule, whose purpose is to transform a parse tree into an AST, making simplifications along the way — for example, by omitting whitespace (not to be confused with preprocessor)

ambiguity: a situation where there exist more than one derivations for a single string — unlike most parser libraries, nearley returns all possible derivations

Earley algorithm: a parsing algorithm developed by Jay Earley in 1968, which can efficiently parse all context-free grammars

Earley table: the intermediate data structure created by the Earley algorithm, where each new token creates a new column

Leo optimization: a trick we can use to optimize right-recursion, making it just as efficient to parse as left-recursion

left-recursion: a situation where a nonterminal refers to a production rule whose first symbol matches the same nonterminal

epsilon: the empty production rule, matching only the empty string

nullable rule: a production rule that matches the empty string, even though it is not necessarily equal to the epsilon rule (for example, the concatenation of epsilon with epsilon)

nearley: a parser that parses context-free languages, along with several additional utilities for building languages

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/grammar.html000066400000000000000000000503711376321042600235610ustar00rootroot00000000000000 Writing a parser - nearley.js - JS Parsing Toolkit

Writing a parser

This section describes the nearley grammar language, in which you can describe grammars for nearley to parse. Grammars are conventionally kept in .ne files. You can then use nearleyc to compile your .ne grammars to JavaScript modules.

You can find many examples of nearley grammars online, as well as some in the examples/ directory of the Github repository.

Vocabulary

  • A terminal is a single, constant string or a token. For example, the keyword "if" is a terminal.
  • A nonterminal describes a set of possible strings. For example, all “if” statements can be described by a single nonterminal whose value depends on the condition and body of the if statement.
  • A rule (or production rule) is a definition of a nonterminal. For example,
    ifStatement -> "if" condition "then" statement "endif"
    is the rule according to which the if statement nonterminal, ifStatement, is parsed. It depends on the nonterminals condition and statement. A nonterminal can be described by multiple rules. For example, we can add a second rule
    ifStatement -> "if" condition "then" statement "else" statement "endif"
    to support “else” clauses.

By default, nearley attempts to parse the first nonterminal defined in the grammar. In the following grammar, nearley will try to parse input text as an expression.

expression -> number "+" number
expression -> number "-" number
expression -> number "*" number
expression -> number "/" number
number -> [0-9]:+

You can use the pipe character | to separate alternative rules for a nonterminal. In the example below, expression has four different rules.

expression ->
    number "+" number
  | number "-" number
  | number "*" number
  | number "/" number

The keyword null stands for the epsilon rule, which matches nothing. The following nonterminal matches zero or more cows in a row, such as cowcowcow:

a -> null | a "cow"

Postprocessors

By default, nearley wraps everything matched by a rule into an array. For example, when rule -> "tick" "tock" matches the string "ticktock", it creates the “parse tree” ["tick", "tock"]. Most of the time, however, you need to process that data in some way: for example, you may want to filter out whitespace, or transform the results into a custom JavaScript object.

For this purpose, each rule can have a postprocessor: a JavaScript function that transforms the array and returns a “processed” version of the result. Postprocessors are wrapped in {% %}s:

expression -> number "+" number {%
    function(data) {
        return {
            operator: "sum",
            leftOperand:  data[0],
            rightOperand: data[2] // data[1] is "+"
        };
    }
%}

The rule above will parse the string 5+10 into { operator: "sum", leftOperand: 5, rightOperand: 10 }.

The postprocessor can be any function with signature function(data, location, reject). Here,

  • data: Array is an array that contains the results of parsing each part of the rule. Note that it is still an array, even if the rule only has one part! You can use the built-in {% id %} postprocessor to convert a one-item array into the item itself.

    For arrow function users, a convenient pattern is to decompose the data array within the argument of the arrow function:

    expression ->
        number "+" number {% ([fst, _, snd]) => fst + snd %}
      | number "-" number {% ([fst, _, snd]) => fst - snd %}
      | number "*" number {% ([fst, _, snd]) => fst * snd %}
      | number "/" number {% ([fst, _, snd]) => fst / snd %}
  • location: number is the index (zero-based) at which the rule match starts. You might use this to show the location of an expression in an error message.

    Note: Many tokenizers provide line, column, and offset information in the Token object. If you are using a tokenizer, then it is better to use that information than the nearley-provided variable, which would only tell you that it saw the nth token rather than the nth character in the string.

  • reject: Object is a unique object that you can return to signal that this rule doesn’t actually match its input.

    Reject is used in some edge cases. For example, suppose you want sequences of letters to match variables, except for the keyword if. In this case, your rule may be

    variable -> [a-z]:+ {%
        function(d,l, reject) {
            if (d[0] == 'if') {
                return reject;
            } else {
                return {'name': d[0]};
            }
        }
    %}

    Warning: Grammars using reject are not context-free, and are often much slower to parse. So, we encourage you not to use reject unless absolutely necessary. You can usually use a tokenizer instead.

nearley provides one built-in postprocessor:

  • id returns the first element of the data array. This is useful to extract the content of a single-element array: foo -> bar {% id %}

More syntax: tips and tricks

Comments

Comments are marked with ‘#’. Everything from # to the end of a line is ignored:

expression -> number "+" number # sum of two numbers

Charsets

You can use valid RegExp charsets in a rule (unless you’re using a tokenizer):

not_a_letter -> [^a-zA-Z]

The . character can be used to represent any character.

Case-insensitive string literals

You can create case-insensitive string literals by adding an i after the string literal:

cow -> "cow"i # matches CoW, COW, and so on.

Note that if you are using a lexer, your lexer should use the i flag in its regexes instead. That is, if you are using a lexer, you should not use the i suffix in nearley.

EBNF

nearley supports the *, ?, and + operators from EBNF as shown:

batman -> "na":* "batman" # nananana...nanabatman

You can also use capture groups with parentheses. Its contents can be anything that a rule can have:

banana -> "ba" ("na" {% id %} | "NA" {% id %}):+

Macros

Macros allow you to create polymorphic rules:

# Matches "'Hello?' 'Hello?' 'Hello?'"
matchThree[X] -> $X " " $X " " $X
inQuotes[X] -> "'" $X "'"

main -> matchThree[inQuotes["Hello?"]]

Macros are dynamically scoped, which means they see arguments passed to parent macros:

# Matches "Cows oink." and "Cows moo!"
sentence[ANIMAL, PUNCTUATION] -> animalGoes[("moo" | "oink" | "baa")] $PUNCTUATION
animalGoes[SOUND] -> $ANIMAL " " $SOUND # uses $ANIMAL from its caller

main -> sentence["Cows", ("." | "!")]

Macros are expanded at compile time and inserted in places they are used. They are not “real” rules. Therefore, macros cannot be recursive (nearleyc will go into an infinite loop trying to expand the macro-loop). They must also be defined before they are used.

Additional JS

For more intricate postprocessors, or any other functionality you may need, you can include chunks of JavaScript code between production rules by surrounding it with @{% ... %}:

@{%
const cowSays = require("./cow.js");
%}

cow -> "moo" {% ([moo]) => cowSays(moo) %}

Note that it doesn’t matter where you add these; they all get hoisted to the top of the generated code.

Importing other grammars

You can include the content of other grammar files:

@include "../misc/primitives.ne" # path relative to file being compiled
sum -> number "+" number # uses "number" from the included file

There are some common nonterminals like “integer” and “double-quoted string” that ship with nearley to help you prototype grammars efficiently. You can include them using the @builtin directive:

@builtin "number.ne"
main -> int:+

(Note that we mean “efficient” in the sense that you can get them set up very quickly. The builtins are inefficient in the sense that they make your parser slower. For a “real” project, you would want to switch to a lexer and implement these primitives yourself!)

See the builtin/ directory on Github for more details. Contributions are welcome!

Note that including a file imports all of the nonterminals defined in it, as well as any JS, macros, and configuration options defined there.

What’s next?

Now that you have a grammar, you’re ready to learn how to use it to build a parser!

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/how-to-grammar-good.html000066400000000000000000000417751376321042600257320ustar00rootroot00000000000000 How to grammar good - nearley.js - JS Parsing Toolkit

How to grammar good

A lot of people have pointed out to me that writing grammars for nearley is hard. The thing is, writing grammars is, in general, very hard. It doesn’t help that certain grammar-related problems are provably undecidable.

As with all of programming, grammar-writing is guided by instinct and pattern recognition (on the part of the human, in this case!). This guide is meant to walk through some common idioms, ideas, anti-patterns and pitfalls, and hopefully make you a confident grammarian. Treat it more as a styleguide than a tutorial.

It might be worth reading Better Earley than Never first, to understand the algorithm and some basic concepts. From here on out, I’m assuming you know what regular expression, Backus Naur Form, context free grammar, terminal, nonterminal, and ambiguous grammar mean. You should know nearley syntax well enough to understand what something like

int -> [0-9]        {% id %}
    | int [0-9]     {% function(d) {return d[0] + d[1]} %}

means (though I like to pride myself on the readability of nearley grammar…).

Structure

Your grammar should be structured from the top down. The first few rules in a file should describe a general outline, and tiny details (terminals for whitespace, literals etc.) should be at the bottom. For example, if you’re writing a parser for Scheme, you would start with

Sourcefile -> (S-expression | Comment):*

and then fill out what s-expression and comment mean. Most of the time, rules defined higher in the file reference rules defined lower down, and rules defined near the bottom rarely ever reference rules near the top.

Nonterminal names

Give your nonterminals useful names–mostly nouns that describe the string it will match. By convention, we use _ for optional whitespace and __ for mandatory whitespace: it makes it easy to write rules like

"(" _ expression _ ")"

You can explicitly mark a nonterminal as optional or repetitive by postfixing its name with ? and + (respectively)–as in statementlist+ or comment?. Note that this has no semantic value: use nearley’s EBNF modifiers (:*, :+, :?) for that.

Don’t roll your own unroller

If you want to match one or more of a nonterminal, use an EBNF modifier. It’s semantically legible, contextually appropriate and (most importantly) easy. It’s very easy to mess up and create an exponentially ambiguous monstrosity such as

lotsofletters -> "a" | lotsofletters lotsofletters

Postprocess or dispose

nearley saves a nested array structure by default, but most of the time that’s not what you want. For things like whitespace, you want to throw away all that useless information for memory efficiency, so use a postprocessor that just returns null. For syntactic sugar and stuff, construct object literals so that the code that processes your AST is relatively independent of your grammar. Constructing object literals also lets you discard junk (parens, etc.).

Remember, charclasses aren’t regexes

The [a-z] syntax only allows you to use regex-style character classes, not actual regular expressions. Nearley fundamentally does not support regexes as terminals. Use EBNF modifiers instead–they do what you want.

Debug with nearley-test

Use the nearley-test script (installs alongside nearleyc) to debug your grammars. It lets you inspect the parse tables, and see all the parsings, or the point of failure. This is invaluable when you have a subtle ambiguity issue.

Don’t shy away from left recursion

You were a good little student and you paid attention to your professors when they told you never to write grammars like:

a -> a "something"

because a naïve recursive-descent parser would bork in an infinite loop. Nearley, of course, is much better, so you don’t have to worry about that. If you’re paranoid about efficiency, you should actually prefer left recursion over right recursion (a -> "something" a) because it’s very slightly faster. In any case, that’s how you deal with left or right associativity for binary operators.

Do shy away from left recursion

…if you’re using it where the EBNF :* or :+ makes more sense!

Operator precedence is not black magic

Here’s how you do it: you start with your lowest-precedence operator and work your way up to your highest precedence ones. Each operator gets its own nonterminal:

math -> sum
sum -> sum ("+"|"-") product | product
product -> product ("*"|"/") exp | exp
exp -> number "^" exp | number # this is right associative!

It should be pretty clear how this works, and how to extend it to different types of operators. The main thing is to be careful with your associativity direction. Be careful not to write op -> op "$" op, because that’s ambiguous.

Introducing non-conflicting unary negation ("5 * -5") is left as a trivial exercise for the enterprising reader.

Comment your grammars

It’s very easy to come back to a grammar a week later and have no idea what it’s doing. Leave comments that explain precisely what each nonterminal matches, since a clear description will help you debug things in the future.

Use whitespace prettily

Align your ->s and your |s and your {% ... %}s. Future retinas will thank you.

Parsing an established language? Cheat!

Almost all standards publish syntax guides with an accompanying diagram in (E)BNF. It’s worth it to Google around for this. With just a bit of common sense, you should be able to transliterate it to a .ne file.


Again, grammar-writing is largely about instinct and experience. The more you write, the more you’ll understand how it goes, and the faster you’ll be able to prototype and design.

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/index.html000066400000000000000000000551761376321042600232520ustar00rootroot00000000000000 Home - nearley.js - JS Parsing Toolkit

Home

Parsers turn strings of characters into meaningful data structures (like a JSON object!). nearley is a fast, feature-rich, and modern parser toolkit for JavaScript. nearley is an npm Staff Pick.

nearley 101

  1. Install: $ npm install -g nearley (or try nearley live in your browser here!)
  2. Write your grammar:
    # Match a CSS color
    # http://www.w3.org/TR/css3-color/#colorunits
    @builtin "whitespace.ne" # `_` means arbitrary amount of whitespace
    @builtin "number.ne"     # `int`, `decimal`, and `percentage` number primitives
    csscolor -> "#" hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit
              | "#" hexdigit hexdigit hexdigit
              | "rgb"  _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")"
              | "hsl"  _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")"
              | "rgba" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")"
              | "hsla" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")"
    hexdigit -> [a-fA-F0-9]
    colnum   -> int | percentage
  3. Compile your grammar:
    $ nearleyc csscolor.ne -o csscolor.js
  4. Test your grammar:
    $ nearley-test -i "#00ff00" csscolor.js
    Parse results:
    [ [ '#', [ '0' ], [ '0' ], [ 'f' ], [ 'f' ], [ '0' ], [ '0' ] ] ]
  5. Turn your grammar into a generator:
    $ nearley-unparse -n 3 csscolor.js
    #Ab21F2
    rgb  ( -29.889%,7,8172)
    #a40
  6. You try it! Type a CSS color here:
    …and the parsed output will appear here!
  7. Create beautiful railroad diagrams to document your grammar formally.
    $ nearley-railroad csscolor.ne -o csscolor.html
    See a demo here.

Features

  • nearley is the first JS parser to use the Earley algorithm (insert your own ‘early bird’ pun here). It also implements Joop Leo’s optimizations for right-recursion, making it effectively linear-time for LL(k) grammars.
  • nearley lives happily in node, but doesn’t mind the browser.
  • nearley outputs small files. And its expressive DSL comes with plenty of syntactic sugar to keep your source files short. And sweet.
  • nearley’s grammar language is powerful and expressive: you can use macros, import from a large builtin library of pre-defined parser-pieces, use a tokenizer for extra performance, and more!
  • nearley is built on an idiomatic streaming API. You even have access to partial parses to build predictive user interfaces.
  • nearley processes left recursion without choking. In fact, nearley will parse anything you throw at it without complaining or going into a sulk infinite loop.
  • nearley handles ambiguous grammars gracefully. Ambiguous grammars can be parsed in multiple ways: instead of getting confused, nearley gives you all the parsings (in a deterministic order!).
  • nearley allows for debugging with generous error detection. When it catches a parse-time error, nearley tells you exactly what went wrong and where.
  • nearley is powerful enough to be bootstrapped. That means nearley uses nearley to compile parts of nearley. nearleyception!
  • nearley parsers can be inverted to form generators which output random strings that match a grammar. Useful for writing test cases, fuzzers, and Mad-Libs.
  • You can export nearley parsers as railroad diagrams, which provide easy-to-understand documentation of your grammar.
  • nearley comes with fantastic tooling. You can find editor plug-ins for vim, Sublime Text, Atom, and VS Code; there are also plug-ins for Webpack and gulp.

Projects using nearley

Artificial Intelligence, NLP, Linguistics: Shrdlite is a programming project in Artificial Intelligence, a course given at the University of Gothenburg and Chalmers University of Technology. It uses nearley for reading instructions in natural language (i.e. English). lexicon-grammars was used to parse lexicons for a project at Australian National University.

Standard formats: node-dmi is a module that reads iconstate metadata from BYOND DMI files, edtf.js is a parser for Extended Date Time Format, node-krl-parser is a KRL parser for node, bibliography is a BibTeX-to-HTML converter, biblatex-csl-converter converts between bibtex/CSL/JSON, scalpel parses CSS selectors (powering enzyme, Airbnb’s React testing tool), rfc5545-rrule helps parse iCalendar data, mangudai parses RMS scripts for Age of Empires II, tf-hcl parses and generates HCL config files, css-selector-inspector parses and tokenizes CSS3 selectors, css-property-parser validates and expands CSS shorthands, node-scad-parser parses OpenSCAD 3D models, js-sql-parse parses SQL statements, pg-mem is an in-memory Postgres database emulator, resp-parser is a parser for the RESP protocol, celio parses Celestia star catalogs.

Templating and files: uPresent is a markdown-based presentation authoring system, saison is a minimal templating language, Packdown is a tool to generate human-readable archives of multiple files.

Programming languages: Carbon is a C subset that compiles to JavaScript, optimized for game development, ezlang is a simple language, tlnccuwagnf is a fun general-purpose language, nanalang is a silly esoteric language, english is a less esoteric programming language, ecmaless is an easily-extensible language, hm-parser parses Haskell-like Hindley-Milner type signatures, kozily implements the Oz language, abstract-machine inspects execution models, fbp-types provides typechecking primitives for flow-based systems, lp5562 is an assembler for the TI LP5562 LED driver, VSL is a Versatile Scripting Language, while-typescript is an implementation of the WHILE language, lo is a language for secure distributed systems, jaco is an implementation of CMU’s C0 teaching language, walt is a subset of JavaScript that targets WebAssembly.

Mathematics: Solvent is a powerful desktop calculator, Truth-table is a tool to visualize propositional logic in truth tables, Emunotes is a personal Wiki with inline graphing and computation, react-equation parses and renders equations in React, the mLab generates category theory papers.

Domain-specific languages: Hexant is a cellular automata simulator with a DSL for custom automata, Dicetower is an advanced dice plugin for hubot, deck.zone is a language to create board games, in-seconds is a time calculator for music applications, website-spec is a tool for functional web testing, pianola allows declarative function composition, idyll is a markup language for data-driven documents, virtsecgroup provides virtual AWS security groups, deadfad is a hex editor that lets you specify structs, bishbosh helps you create command-line interfaces, syso codifies aspects of French legal contracts, siteswap parses Siteswap notation for juggling patterns, jsgrep provides syntactic grep for JavaScript, electro-grammar parses descriptions of electronic components like resistors and capacitors, cicero helps create smart legal contracts, Eventbot is a calendar plugin for Slack used by thousands of teams, Obyte is a cryptocurrency platform, OptiCSS is a CSS optimizer built by LinkedIn, NESTUP is a language for specifying nested rhythmic tuplets.

Other: ProceduralPsychEpisode generates “random episodes of the hilarious but formulaic show”

Parsing libraries: nearley is a parser toolkit for JavaScript. It has a nearley-based DSL to specify parsers.

Give to nearley

nearley has been maintained by volunteers since 2014. If you want to help support us, contact @kach or @tjvr on GitHub. We’ll send over our PayPal information – and maybe something nice. :-).

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/layouts/000077500000000000000000000000001376321042600227375ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/layouts/template.html000066400000000000000000000123751376321042600254500ustar00rootroot00000000000000 {{#if title}}{{title}} - {{/if}}nearley.js - JS Parsing Toolkit

{{title}}

{{{contents}}} {{#if isDemoPage}} {{/if}} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/make.js000066400000000000000000000024531376321042600225160ustar00rootroot00000000000000 const fs = require('fs') const Metalsmith = require('metalsmith') const markdown = require('metalsmith-markdown') const headings = require('metalsmith-headings') const layouts = require('metalsmith-layouts') const paths = require('metalsmith-paths') const Handlebars = require('handlebars') Handlebars.registerHelper('eq', (a, b) => a === b) /* const debug = (files, metalsmith, done) => { setImmediate(done) } */ const docs = articles => (files, metalsmith, done) => { setImmediate(done) Object.assign(metalsmith.metadata(), { docs: articles.map(name => { const f = files[name + '.md'] f.isDoc = true return f }), }) } Metalsmith(__dirname) .metadata({ version: require('../package.json').version, css: fs.readFileSync('../www/main.css', 'utf-8'), }) .source('md/') .destination('.') .clean(false) .use(paths({ property: 'paths' })) .use(docs([ 'index', 'getting-started', 'grammar', 'parser', 'tokenizers', 'tooling', 'how-to-grammar-good', 'using-in-frontend', 'glossary', ])) //.use(debug) .use(markdown({ smartypants: true, gfm: true, })) .use(headings('h3')) .use(layouts({ engine: 'handlebars', default: 'template.html', })) .build(function(err) { if (err) throw err; }) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/000077500000000000000000000000001376321042600216375ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/getting-started.md000066400000000000000000000062431376321042600252730ustar00rootroot00000000000000--- title: Getting started --- nearley consists of two components: a *compiler* and a *parser*. The nearley *compiler* converts grammar definitions from a simple [BNF](https://en.wikipedia.org/wiki/Backus–Naur_form)-based syntax to a small JS module. You can then use that module to construct a nearley *parser*, which parses input strings. ### Installation Both components are published as a single [NPM](https://docs.npmjs.com/getting-started/what-is-npm) package compatible with [Node.js](https://nodejs.org/en/) and most browsers. To use the nearley *parser*, you need to install nearley **locally**. ```bash $ npm install --save nearley ``` To use the nearley *compiler*, you need to *additionally* install nearley **globally**. ```bash $ npm install -g nearley ``` This actually adds several new commands to your `$PATH`: - `nearleyc` compiles grammar files to JavaScript. - `nearley-test` lets you quickly test a grammar against some input and see the results. It also lets you explore the internal state of nearley's Earley table, in case you find that interesting. - `nearley-unparse` inverts a parser into a generator, allowing you to create random strings that match your grammar. - `nearley-railroad` generates pretty railroad diagrams from your parser. This is mainly helpful for creating documentation, as (for example) on json.org. These are documented on the [tooling page](tooling). > Note: If you're not ready to install nearley yet, you can follow along in > your browser using the [nearley > playground](https://omrelli.ug/nearley-playground/), an online interface for > exploring nearley grammars interactively. ### nearley in 3 steps nearley was written with users in mind: getting started with nearley is as simple as: **Step 1: Describe your grammar** using the [nearley syntax](grammar). In a file called `grammar.ne`, write: ```ne main -> (statement "\n"):+ statement -> "foo" | "bar" ``` **Step 2: Compile** the grammar to a JavaScript module. On the command line, run: ```bash $ nearleyc grammar.ne -o grammar.js ``` **Step 3: Parse** some data! In a new JavaScript file, instantiate a [Parser object](parser) and feed it a string: ```js const nearley = require("nearley"); const grammar = require("./grammar.js"); // Create a Parser object from our grammar. const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar)); // Parse something! parser.feed("foo\n"); // parser.results is an array of possible parsings. console.log(parser.results); // [[[[ "foo" ],"\n" ]]] ``` ### What's next? Now that you have nearley installed, you can [learn how to write a grammar](grammar)! ### Further reading - Take a look at a [nearley tutorial](https://medium.com/@gajus/parsing-absolutely-anything-in-javascript-using-earley-algorithm-886edcc31e5e) written by @gajus, or a [blog post about using nearley-unparse to generate murder mystery plots](http://humans-who-read-grammars.blogspot.com/2018/04/having-fun-with-phrase-structure.html). - Read my [blog post](http://hardmath123.github.io/earley.html) to learn more about the algorithm. - Read about [Marpa](http://savage.net.au/Marpa.html) to learn more than you ever thought you wanted to know about parsing. nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/glossary.md000066400000000000000000000064311376321042600240300ustar00rootroot00000000000000--- title: Glossary --- Parsing terminology gets very confusing very quickly. Here is a glossary that can help us all communicate more effectively. **token**: the smallest meaningful unit (the "words") of your language **lexer**: a function that converts a sequence of *characters* to a sequence of *tokens* (converts a sequence of letters and spaces to a sequence of words) **string**: a sequence of *tokens* **concatenation**: joining two strings by appending one to the other **language**: a set of *strings* **production rule**: a set of *strings* specified as a sequence of *symbols*, such that the rule matches a string if it is a *concatenation* of strings matched by the respective symbols **symbol**: a generic term for a member of a *production rule*, either a *nonterminal* or a *terminal* **nonterminal**: a *symbol* that specifies a set of other *production rules* that match **terminal**: a *symbol* that directly specifies a set of *tokens* that match **context-free grammar**: a set of *production rules* that together specify a *language* **context-free language**: a *language* that can be specified by a *context-free grammar* **Backus-Naur Form**: a set of conventions for describing and typesetting context-free grammars **recognizer**: a function that takes a *grammar* and a *string* and sees if the grammar matches the string (it just says "yes" or "no") **parser**: a function that takes a *grammar* and a *string* and returns a *derivation* of that string from that grammar **derivation**: a way to apply the production rules of a *grammar* recursively to obtain a *string* **parse tree**: a representation of a *derivation* as a tree **abstract syntax tree (AST)**: a version of a *parse tree* that has undergone some *postprocessors* to simplify it (for example, an AST is likely to omit whitespace) **preprocessor**: the dialect of JavaScript targeted by `nearleyc`; for example, you can emit TypeScript code instead of plain JavaScript (not to be confused with *postprocessor*) **postprocessor**: a function associated with a production rule, whose purpose is to transform a *parse tree* into an AST, making simplifications along the way --- for example, by omitting whitespace (not to be confused with *preprocessor*) **ambiguity**: a situation where there exist more than one *derivations* for a single *string* --- unlike most *parser* libraries, *nearley* returns all possible derivations **Earley algorithm**: a *parsing* algorithm developed by Jay Earley in 1968, which can efficiently parse all *context-free grammars* **Earley table**: the intermediate data structure created by the Earley algorithm, where each new token creates a new column **Leo optimization**: a trick we can use to optimize right-recursion, making it just as efficient to parse as *left-recursion* **left-recursion**: a situation where a nonterminal refers to a production rule whose first symbol matches the same nonterminal **epsilon**: the empty *production rule*, matching only the empty string **nullable rule**: a *production rule* that matches the empty string, even though it is not necessarily equal to the *epsilon* rule (for example, the *concatenation* of epsilon with epsilon) **nearley**: a *parser* that parses *context-free languages*, along with several additional utilities for building languages nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/grammar.md000066400000000000000000000206231376321042600236120ustar00rootroot00000000000000--- title: Writing a parser --- This section describes the nearley grammar language, in which you can describe grammars for nearley to parse. Grammars are conventionally kept in `.ne` files. You can then use `nearleyc` to compile your `.ne` grammars to JavaScript modules. You can find many examples of nearley grammars online, as well as some in the `examples/` directory of the [Github repository](http://github.com/Hardmath123/nearley). ### Vocabulary - A *terminal* is a single, constant string or a token. For example, the keyword `"if"` is a terminal. - A *nonterminal* describes a set of possible strings. For example, all "if" statements can be described by a single nonterminal whose value depends on the condition and body of the if statement. - A *rule* (or production rule) is a definition of a nonterminal. For example, ```ne ifStatement -> "if" condition "then" statement "endif" ``` is the rule according to which the if statement nonterminal, `ifStatement`, is parsed. It depends on the nonterminals `condition` and `statement`. A nonterminal can be described by multiple rules. For example, we can add a second rule ```ne ifStatement -> "if" condition "then" statement "else" statement "endif" ``` to support "else" clauses. By default, nearley attempts to parse the first nonterminal defined in the grammar. In the following grammar, nearley will try to parse input text as an `expression`. ```ne expression -> number "+" number expression -> number "-" number expression -> number "*" number expression -> number "/" number number -> [0-9]:+ ``` You can use the pipe character `|` to separate alternative rules for a nonterminal. In the example below, `expression` has four different rules. ```ne expression -> number "+" number | number "-" number | number "*" number | number "/" number ``` The keyword `null` stands for the **epsilon rule**, which matches nothing. The following nonterminal matches zero or more `cow`s in a row, such as `cowcowcow`: ```ne a -> null | a "cow" ``` ### Postprocessors By default, nearley wraps everything matched by a rule into an array. For example, when `rule -> "tick" "tock"` matches the string `"ticktock"`, it creates the "parse tree" `["tick", "tock"]`. Most of the time, however, you need to process that data in some way: for example, you may want to filter out whitespace, or transform the results into a custom JavaScript object. For this purpose, each rule can have a *postprocessor*: a JavaScript function that transforms the array and returns a "processed" version of the result. Postprocessors are wrapped in `{% %}`s: ```ne expression -> number "+" number {% function(data) { return { operator: "sum", leftOperand: data[0], rightOperand: data[2] // data[1] is "+" }; } %} ``` The rule above will parse the string `5+10` into `{ operator: "sum", leftOperand: 5, rightOperand: 10 }`. The postprocessor can be any function with signature `function(data, location, reject)`. Here, - `data: Array` is an array that contains the results of parsing each part of the rule. Note that it is still an array, even if the rule only has one part! You can use the built-in `{% id %}` postprocessor to convert a one-item array into the item itself. For **arrow function** users, a convenient pattern is to decompose the `data` array within the argument of the arrow function: ```ne expression -> number "+" number {% ([fst, _, snd]) => fst + snd %} | number "-" number {% ([fst, _, snd]) => fst - snd %} | number "*" number {% ([fst, _, snd]) => fst * snd %} | number "/" number {% ([fst, _, snd]) => fst / snd %} ``` - `location: number` is the index (zero-based) at which the rule match starts. You might use this to show the location of an expression in an error message. > Note: Many [tokenizers](tokenizers) provide line, column, and offset > information in the Token object. If you are using a tokenizer, then it is > better to use that information than the nearley-provided variable, which > would only tell you that it saw the nth _token_ rather than the nth > _character_ in the string. - `reject: Object` is a unique object that you can return to signal that this rule doesn't *actually* match its input. Reject is used in some edge cases. For example, suppose you want sequences of letters to match variables, except for the keyword `if`. In this case, your rule may be ```ne variable -> [a-z]:+ {% function(d,l, reject) { if (d[0] == 'if') { return reject; } else { return {'name': d[0]}; } } %} ``` > Warning: Grammars using `reject` are not context-free, and are often much > slower to parse. So, we encourage you not to use `reject` unless absolutely > necessary. You can usually use a tokenizer instead. nearley provides one built-in postprocessor: - `id` returns the first element of the `data` array. This is useful to extract the content of a single-element array: `foo -> bar {% id %}` ### More syntax: tips and tricks #### Comments Comments are marked with '#'. Everything from `#` to the end of a line is ignored: ```ne expression -> number "+" number # sum of two numbers ``` #### Charsets You can use valid RegExp charsets in a rule (unless you're using a [tokenizer](tokenizers)): not_a_letter -> [^a-zA-Z] The `.` character can be used to represent any character. #### Case-insensitive string literals You can create case-insensitive string literals by adding an `i` after the string literal: cow -> "cow"i # matches CoW, COW, and so on. Note that if you are using a lexer, your lexer should use the `i` flag in its regexes instead. That is, if you are using a lexer, you should *not* use the `i` suffix in nearley. #### EBNF nearley supports the `*`, `?`, and `+` operators from [EBNF](https://en.wikipedia.org/wiki/Extended_Backus–Naur_form) as shown: ```ne batman -> "na":* "batman" # nananana...nanabatman ``` You can also use capture groups with parentheses. Its contents can be anything that a rule can have: ```ne banana -> "ba" ("na" {% id %} | "NA" {% id %}):+ ``` ### Macros Macros allow you to create polymorphic rules: ```ne # Matches "'Hello?' 'Hello?' 'Hello?'" matchThree[X] -> $X " " $X " " $X inQuotes[X] -> "'" $X "'" main -> matchThree[inQuotes["Hello?"]] ``` Macros are dynamically scoped, which means they see arguments passed to parent macros: ```ne # Matches "Cows oink." and "Cows moo!" sentence[ANIMAL, PUNCTUATION] -> animalGoes[("moo" | "oink" | "baa")] $PUNCTUATION animalGoes[SOUND] -> $ANIMAL " " $SOUND # uses $ANIMAL from its caller main -> sentence["Cows", ("." | "!")] ``` Macros are expanded at compile time and inserted in places they are used. They are not "real" rules. Therefore, macros *cannot* be recursive (`nearleyc` will go into an infinite loop trying to expand the macro-loop). They must also be defined *before* they are used. ### Additional JS For more intricate postprocessors, or any other functionality you may need, you can include chunks of JavaScript code between production rules by surrounding it with `@{% ... %}`: ```ne @{% const cowSays = require("./cow.js"); %} cow -> "moo" {% ([moo]) => cowSays(moo) %} ``` Note that it doesn't matter where you add these; they all get hoisted to the top of the generated code. ### Importing other grammars You can include the content of other grammar files: ```ne @include "../misc/primitives.ne" # path relative to file being compiled sum -> number "+" number # uses "number" from the included file ``` There are some common nonterminals like "integer" and "double-quoted string" that ship with nearley to help you prototype grammars efficiently. You can include them using the `@builtin` directive: ```ne @builtin "number.ne" main -> int:+ ``` (Note that we mean "efficient" in the sense that you can get them set up very quickly. The builtins are _inefficient_ in the sense that they make your parser slower. For a "real" project, you would want to switch to a lexer and implement these primitives yourself!) See the [`builtin/`](https://github.com/kach/nearley/tree/master/builtin) directory on Github for more details. Contributions are welcome! Note that including a file imports *all* of the nonterminals defined in it, as well as any JS, macros, and configuration options defined there. ### What's next? Now that you have a grammar, you're ready to [learn how to use it to build a parser!](parser) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/how-to-grammar-good.md000066400000000000000000000133301376321042600257500ustar00rootroot00000000000000--- title: How to grammar good --- A lot of people have pointed out to me that writing grammars for [nearley](http://hardmath123.github.io/nearley/) is *hard*. The thing is, writing grammars is, in general, very hard. It doesn't help that certain grammar-related problems are provably undecidable. As with all of programming, grammar-writing is guided by instinct and pattern recognition (on the part of the human, in this case!). This guide is meant to walk through some common idioms, ideas, anti-patterns and pitfalls, and hopefully make you a confident grammarian. Treat it more as a styleguide than a tutorial. It might be worth reading [Better Earley than Never](http://hardmath123.github.io/earley.html) first, to understand the algorithm and some basic concepts. From here on out, I'm assuming you know what *regular expression*, *Backus Naur Form*, *context free grammar*, *terminal*, *nonterminal*, and *ambiguous grammar* mean. You should know nearley syntax well enough to understand what something like ```ne int -> [0-9] {% id %} | int [0-9] {% function(d) {return d[0] + d[1]} %} ``` means (though I like to pride myself on the readability of nearley grammar...). ### Structure Your grammar should be structured from the top down. The first few rules in a file should describe a general outline, and tiny details (terminals for whitespace, literals etc.) should be at the bottom. For example, if you're writing a parser for Scheme, you would start with Sourcefile -> (S-expression | Comment):* and then fill out what `s-expression` and `comment` mean. Most of the time, rules defined higher in the file reference rules defined lower down, and rules defined near the bottom rarely ever reference rules near the top. ### Nonterminal names Give your nonterminals useful names--mostly nouns that describe the string it will match. By convention, we use `_` for optional whitespace and `__` for mandatory whitespace: it makes it easy to write rules like "(" _ expression _ ")" You can explicitly mark a nonterminal as optional or repetitive by postfixing its name with `?` and `+` (respectively)--as in `statementlist+` or `comment?`. Note that this has no semantic value: use nearley's EBNF modifiers (`:*`, `:+`, `:?`) for that. ### Don't roll your own unroller If you want to match one or more of a nonterminal, use an EBNF modifier. It's semantically legible, contextually appropriate and (most importantly) easy. It's very easy to mess up and create an exponentially ambiguous monstrosity such as lotsofletters -> "a" | lotsofletters lotsofletters ### Postprocess or dispose nearley saves a nested array structure by default, but most of the time that's not what you want. For things like whitespace, you want to throw away all that useless information for memory efficiency, so use a postprocessor that just returns `null`. For syntactic sugar and stuff, construct object literals so that the code that processes your AST is relatively independent of your grammar. Constructing object literals also lets you discard junk (parens, etc.). ### Remember, charclasses aren't regexes The `[a-z]` syntax only allows you to use regex-style character classes, not actual regular expressions. Nearley fundamentally does not support regexes as terminals. Use EBNF modifiers instead--they do what you want. ### Debug with nearley-test Use the `nearley-test` script (installs alongside `nearleyc`) to debug your grammars. It lets you inspect the parse tables, and see all the parsings, or the point of failure. This is invaluable when you have a subtle ambiguity issue. ### Don't shy away from left recursion You were a good little student and you paid attention to your professors when they told you never to write grammars like: a -> a "something" because a naïve recursive-descent parser would bork in an infinite loop. Nearley, of course, is much better, so you don't have to worry about that. If you're paranoid about efficiency, you should actually prefer left recursion over right recursion (`a -> "something" a`) because it's very slightly faster. In any case, that's how you deal with left or right associativity for binary operators. ### Do shy away from left recursion ...if you're using it where the EBNF `:*` or `:+` makes more sense! ### Operator precedence is not black magic Here's how you do it: you start with your lowest-precedence operator and work your way up to your highest precedence ones. Each operator gets its own nonterminal: math -> sum sum -> sum ("+"|"-") product | product product -> product ("*"|"/") exp | exp exp -> number "^" exp | number # this is right associative! It should be pretty clear how this works, and how to extend it to different types of operators. The main thing is to be careful with your associativity direction. Be careful not to write `op -> op "$" op`, because that's ambiguous. Introducing non-conflicting unary negation (`"5 * -5"`) is left as a trivial exercise for the enterprising reader. ### Comment your grammars It's very easy to come back to a grammar a week later and have no idea what it's doing. Leave comments that explain precisely what each nonterminal matches, since a clear description will help you debug things in the future. ### Use whitespace prettily Align your `->`s and your `|`s and your `{% ... %}`s. Future retinas will thank you. ### Parsing an established language? Cheat! Almost all standards publish syntax guides with an accompanying diagram in (E)BNF. It's worth it to Google around for this. With just a bit of common sense, you should be able to transliterate it to a `.ne` file. --- Again, grammar-writing is largely about instinct and experience. The more you write, the more you'll understand how it goes, and the faster you'll be able to prototype and design. nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/index.md000066400000000000000000000254301376321042600232740ustar00rootroot00000000000000--- title: Home isDemoPage: true --- **Parsers** turn strings of characters into meaningful data structures (like a JSON object!). **nearley** is a **fast**, **feature-rich**, and **modern** parser toolkit for JavaScript. nearley is an [npm Staff Pick](https://github.com/npm/npm-collection-staff-picks). ### nearley 101 1. Install: `$ npm install -g nearley` (or try nearley live in your browser [here](https://omrelli.ug/nearley-playground/)!) 2. Write your grammar: ```ne # Match a CSS color # http://www.w3.org/TR/css3-color/#colorunits @builtin "whitespace.ne" # `_` means arbitrary amount of whitespace @builtin "number.ne" # `int`, `decimal`, and `percentage` number primitives csscolor -> "#" hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit | "#" hexdigit hexdigit hexdigit | "rgb" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")" | "hsl" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")" | "rgba" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")" | "hsla" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")" hexdigit -> [a-fA-F0-9] colnum -> int | percentage ``` 3. Compile your grammar: ```bash $ nearleyc csscolor.ne -o csscolor.js ``` 4. Test your grammar: ```bash $ nearley-test -i "#00ff00" csscolor.js Parse results: [ [ '#', [ '0' ], [ '0' ], [ 'f' ], [ 'f' ], [ '0' ], [ '0' ] ] ] ``` 5. Turn your grammar into a generator: ```bash $ nearley-unparse -n 3 csscolor.js ``` ``` #Ab21F2 rgb ( -29.889%,7,8172) #a40 ``` 6. You try it! Type a CSS color here:
…and the parsed output will appear here!
7. Create beautiful railroad diagrams to document your grammar formally. ```bash $ nearley-railroad csscolor.ne -o csscolor.html ``` See a demo [here](/www/railroad-demo). ### Features * nearley is the first JS parser to use the **Earley** algorithm (insert your own ‘early bird’ pun here). It also implements Joop Leo's optimizations for right-recursion, making it effectively **linear-time** for LL(k) grammars. * nearley lives happily in **node**, but doesn't mind the **browser**. * nearley outputs **small** files. And its **expressive** DSL comes with plenty of **syntactic sugar** to keep your source files short. And sweet. * nearley's grammar language is powerful and expressive: you can use **macros**, import from a large **builtin library** of pre-defined parser-pieces, use a **tokenizer** for extra performance, and more! * nearley is built on an idiomatic **streaming API**. You even have access to partial parses to build **predictive** user interfaces. * nearley processes **left recursion** without choking. In fact, nearley will parse anything you throw at it without complaining or going into a ~~sulk~~ infinite loop. * nearley handles **ambiguous grammars** gracefully. Ambiguous grammars can be parsed in multiple ways: instead of getting confused, nearley gives you all the parsings (in a deterministic order!). * nearley allows for debugging with generous **error detection**. When it catches a parse-time error, nearley tells you exactly what went wrong and where. * nearley is powerful enough to be **bootstrapped**. That means nearley uses nearley to compile parts of nearley. _nearleyception!_ * nearley parsers can be inverted to form **generators** which output random strings that match a grammar. Useful for writing **test cases**, **fuzzers**, and **Mad-Libs**. * You can export nearley parsers as **railroad diagrams**, which provide easy-to-understand documentation of your grammar. * nearley comes with fantastic tooling. You can find editor plug-ins for **vim**, **Sublime Text**, **Atom**, and **VS Code**; there are also plug-ins for **Webpack** and **gulp**. ### Projects using nearley **Artificial Intelligence, NLP, Linguistics**: [Shrdlite](https://github.com/ChalmersGU-AI-course/shrdlite-course-project) is a programming project in Artificial Intelligence, a course given at the University of Gothenburg and Chalmers University of Technology. It uses nearley for reading instructions in natural language (i.e. English). [lexicon-grammars](https://github.com/fauxneticien/lexicon-grammars) was used to parse lexicons for a project at Australian National University. **Standard formats**: [node-dmi](https://github.com/raymond-h/node-dmi) is a module that reads iconstate metadata from BYOND DMI files, [edtf.js](https://github.com/inukshuk/edtf.js) is a parser for Extended Date Time Format, [node-krl-parser](https://github.com/farskipper/node-krl-parser) is a KRL parser for node, [bibliography](https://github.com/digitalheir/bibliography-js) is a BibTeX-to-HTML converter, [biblatex-csl-converter](https://github.com/fiduswriter/biblatex-csl-converter) converts between bibtex/CSL/JSON, [scalpel](https://github.com/gajus/scalpel) parses CSS selectors (powering [enzyme](https://github.com/airbnb/enzyme), Airbnb's React testing tool), [rfc5545-rrule](https://github.com/waratuman/rfc5545-rrule) helps parse iCalendar data, [mangudai](https://github.com/mangudai/mangudai) parses RMS scripts for Age of Empires II, [tf-hcl](https://github.com/r24y/tf-hcl) parses and generates HCL config files, [css-selector-inspector](https://github.com/balbuf/css-selector-inspector) parses and tokenizes CSS3 selectors, [css-property-parser](https://github.com/mahirshah/css-property-parser) validates and expands CSS shorthands, [node-scad-parser](https://github.com/hhornbacher/node-scad-parser) parses OpenSCAD 3D models, [js-sql-parse](https://github.com/justinkenel/js-sql-parse) parses SQL statements, [pg-mem](https://github.com/oguimbal/pg-mem) is an in-memory Postgres database emulator, [resp-parser](https://github.com/appology/resp-parser) is a parser for the RESP protocol, [celio](https://github.com/AntonShan/Celio) parses Celestia star catalogs. **Templating and files**: [uPresent](https://github.com/bobbybee/uPresent) is a markdown-based presentation authoring system, [saison](https://github.com/rtsao/saison) is a minimal templating language, [Packdown](https://github.com/imsky/packdown) is a tool to generate human-readable archives of multiple files. **Programming languages**: [Carbon](https://github.com/bobbybee/carbon) is a C subset that compiles to JavaScript, optimized for game development, [ezlang](https://github.com/tleb/ezlang) is a simple language, [tlnccuwagnf](https://github.com/liam4/tlnccuwagnf) is a fun general-purpose language, [nanalang](https://github.com/nanalan/g) is a silly esoteric language, [english](https://github.com/nanalan/english) is a less esoteric programming language, [ecmaless](https://github.com/farskipper/ecmaless) is an easily-extensible language, [hm-parser](https://github.com/xodio/hm-parser) parses Haskell-like Hindley-Milner type signatures, [kozily](https://github.com/kozily/web) implements the Oz language, [abstract-machine](https://stefan1niculae.github.io/abstract-machine/) inspects execution models, [fbp-types](https://github.com/Malpaux/fbp-types) provides typechecking primitives for flow-based systems, [lp5562](https://github.com/sizigi/lp5562) is an assembler for the TI LP5562 LED driver, [VSL](https://github.com/vsl-lang/VSL) is a Versatile Scripting Language, [while-typescript](https://github.com/juanlaube/while-typescript) is an implementation of the WHILE language, [lo](https://github.com/lo-language/velo) is a language for secure distributed systems, [jaco](https://github.com/calculemuscode/jaco) is an implementation of CMU's C0 teaching language, [walt](https://github.com/ballercat/walt) is a subset of JavaScript that targets WebAssembly. **Mathematics**: [Solvent](https://github.com/andrejewski/solvent) is a powerful desktop calculator, [Truth-table](https://github.com/andrejewski/truth-table) is a tool to visualize propositional logic in truth tables, [Emunotes](http://emunotes.com) is a personal Wiki with inline graphing and computation, [react-equation](https://kgram.github.io/react-equation/) parses and renders equations in React, [the mLab](https://github.com/cemulate/the-mlab) generates category theory papers. **Domain-specific languages**: [Hexant](https://github.com/jcorbin/hexant) is a cellular automata simulator with a DSL for custom automata, [Dicetower](https://github.com/justjake/dicetower) is an advanced dice plugin for hubot, [deck.zone](https://github.com/seiyria/deck.zone) is a language to create board games, [in-seconds](https://github.com/danigb/in-seconds) is a time calculator for music applications, [website-spec](https://github.com/bumbu/website-spec) is a tool for functional web testing, [pianola](https://github.com/gajus/pianola) allows declarative function composition, [idyll](https://idyll-lang.github.io/idyll/) is a markup language for data-driven documents, [virtsecgroup](https://github.com/affinipay/virtsecgroup) provides virtual AWS security groups, [deadfad](https://github.com/Pwootage/deadfad) is a hex editor that lets you specify structs, [bishbosh](https://github.com/juliankrispel/bishbosh) helps you create command-line interfaces, [syso](https://github.com/sgmap/syso) codifies aspects of French legal contracts, [siteswap](https://github.com/independentgeorge/siteswap.js) parses Siteswap notation for juggling patterns, [jsgrep](https://github.com/amireh/jsgrep) provides syntactic grep for JavaScript, [electro-grammar](https://github.com/monostable/electro-grammar) parses descriptions of electronic components like resistors and capacitors, [cicero](https://github.com/accordproject) helps create smart legal contracts, [Eventbot](https://geteventbot.com) is a calendar plugin for Slack used by thousands of teams, [Obyte](https://github.com/byteball/ocore) is a cryptocurrency platform, [OptiCSS](https://github.com/linkedin/opticss) is a CSS optimizer built by LinkedIn, [NESTUP](https://github.com/cutelabnyc/nested-tuplets) is a language for specifying nested rhythmic tuplets. **Other**: [ProceduralPsychEpisode](https://github.com/PatrickMurphy/ProceduralPsychEpisode) generates "random episodes of the hilarious but formulaic show" **Parsing libraries**: [nearley](http://nearley.js.org) is a parser toolkit for JavaScript. It has a nearley-based DSL to specify parsers. ### Give to nearley nearley has been maintained by volunteers since 2014. If you want to help support us, contact **@kach** or **@tjvr** on GitHub. We'll send over our PayPal information -- and maybe something nice. :-). nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/md/parser.md000066400000000000000000000116501376321042600234600ustar00rootroot00000000000000--- title: Using a parser --- This section describes nearley's parser API. Once you have compiled a `grammar.ne` file to a `grammar.js` module, you can then use nearley to instantiate a `Parser` object. First, import nearley and your grammar. ```js const nearley = require("nearley"); const grammar = require("./grammar.js"); ``` Note that if you are parsing in the browser, you can simply include `nearley.js` and `grammar.js` in ` nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/tokenizers.html000066400000000000000000000340411376321042600243240ustar00rootroot00000000000000 Tokenizers - nearley.js - JS Parsing Toolkit

Tokenizers

By default, nearley splits the input into a stream of characters. This is called scannerless parsing.

A tokenizer splits the input into a stream of larger units called tokens. This happens in a separate stage before parsing. For example, a tokenizer might convert 512 + 10 into ["512", "+", "10"]: notice how it removed the whitespace, and combined multi-digit numbers into a single number.

Using a tokenizer has many benefits. It…

  • …often makes your parser faster by more than an order of magnitude.
  • …allows you to write cleaner, more maintainable grammars.
  • …helps avoid ambiguous grammars in some cases. For example, a tokenizer can easily tell you that superclass is a single keyword, not a sequence of super and class keywords.
  • …gives you lexical information such as line numbers for each token. This lets you make better error messages.

Lexing with Moo

The @lexer directive instructs Nearley to use a lexer you’ve defined inside a Javascript block in your grammar.

nearley supports and recommends Moo, a super-fast lexer. Construct a lexer using moo.compile.

When using a lexer, there are two ways to match tokens:

  • Use %token to match a token with type token.

    line -> words %newline
  • Use "foo" to match a token with text foo.

    This is convenient for matching keywords:

    ifStatement -> "if" condition "then" block

Here is an example of a simple grammar:

@{%
const moo = require("moo");

const lexer = moo.compile({
  ws:     /[ \t]+/,
  number: /[0-9]+/,
  word: /[a-z]+/,
  times:  /\*|x/
});
%}

# Pass your lexer object using the @lexer option:
@lexer lexer

# Use %token to match any token of that type instead of "token":
multiplication -> %number %ws %times %ws %number {% ([first, , , , second]) => first * second %}

# Literal strings now match tokens with that text:
trig -> "sin" %number

Have a look at the Moo documentation to learn more about writing a tokenizer.

You use the parser as usual: call parser.feed(data), and nearley will give you the parsed results in return.

Custom lexers

nearley recommends using a moo-based lexer. However, you can use any lexer that conforms to the following interface:

  • next() returns a token object, which could have fields for line number, etc. Importantly, a token object must have a value attribute.
  • save() returns an info object that describes the current state of the lexer. nearley places no restrictions on this object.
  • reset(chunk, info) sets the internal buffer of the lexer to chunk, and restores its state to a state returned by save().
  • formatError(token) returns a string with an error message describing a parse error at that token (for example, the string might contain the line and column where the error was found).
  • has(name) returns true if the lexer can emit tokens with that name. This is used to resolve %-specifiers in compiled nearley grammars.

Note: if you are searching for a lexer that allows indentation-aware grammars (like in Python), you can still use moo. See this example or the moo-indentation-lexer module.

Custom token matchers

Aside from the lexer infrastructure, nearley provides a lightweight way to parse arbitrary streams.

Custom matchers can be defined in two ways: literal tokens and testable tokens. A literal token matches a JS value exactly (with ===), while a testable token runs a predicate that tests whether or not the value matches.

Note that in this case, you would feed a Parser instance an array of objects rather than a string! Here is a simple example:

@{%
const tokenPrint = { literal: "print" };
const tokenNumber = { test: x => Number.isInteger(x) };
%}

main -> %tokenPrint %tokenNumber ";;"

# parser.feed(["print", 12, ";;"]);
nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/tooling.html000066400000000000000000000361241376321042600236060ustar00rootroot00000000000000 Tooling - nearley.js - JS Parsing Toolkit

Tooling

nearley ships with a host of tools to help you develop, test, and maintain your grammars easily.

nearley-test: Exploring a parser interactively

A global install of nearley provides nearley-test, a simple command-line tool you can use to inspect what a parser is doing. You input a generated grammar.js file, and then give it some input to test the parser against. nearley-test prints out the output if successful, and optionally pretty-prints the internal parse table used by the algorithm. This is helpful to test a new parser.

nearley-unparse: The Unparser

The Unparser takes a (compiled) parser and outputs a random string that would be accepted by the parser.

$ nearley-unparse -s number <(nearleyc builtin/prims.ne)
-6.22E94

You can use the Unparser to…

  • …test your parser specification by generating lots of random expressions and making sure all of them are “correct”.
  • …generate random strings from a schema (for example, random email addresses or telephone numbers).
  • …create fuzzers and combinatorial stress-testers.
  • …play “Mad-Libs” automatically! (Practical application: automatic grammatically valid loremtext.)

The Unparser outputs as a stream by continuously writing characters to its output pipe. So, if it “goes off the deep end” and generates a huge string, you will still see output scrolling by in real-time.

To limit the size of the output, you can specify a bound on the depth with the -d flag. This switches the Unparser to a different algorithm. A larger depth bound corresponds to larger generated strings.

As far as I know, nearley is the only parser generator with this feature. It is inspired by Roly Fentanes’ randexp, which does the same thing with regular expressions.

Chase Meadors wrote a standalone nearley-unparse module, nearley-generator, which powers mLab, and you can play with it in the browser here.

nearley-railroad: Automagical Railroad Diagrams

nearley lets you convert your grammars to pretty SVG railroad diagrams that you can include in webpages, documentation, and even papers.

$ nearley-railroad regex.ne -o grammar.html

Railroad demo

See a bigger example here.

This feature is powered by railroad-diagrams by tabatkins.

See also: better-nearley-railroad (a third-party alternative)

Other Tools

This section lists nearley tooling created by other developers. These tools are not distributed with nearley, so if you have problems, please contact the respective author for support instead of opening an issue with nearley.

Atom users can write nearley grammars with this plugin by Bojidar Marinov.

TextMate and Sublime Text users can use this language by yours truly.

Sublime Text users can write nearley grammars with this syntax by liam4.

Vim users can use this plugin by Tim (based on this older plugin by Andrés Arana).

Visual Studio Code users can use this extension by Pouya Kary.

Python users can convert nearley grammars to Python using lark by Erez.

Node users can programmatically access the unparser using nearley-there by Scott Tolksdorf.

Browser users can use nearley-playground by Guillermo Webster to explore nearley interactively in the browser. There is also a Mac app by Pouya Kary.

Webpack users can use nearley-loader by Andrés Arana to load grammars directly.

Gulp users can use gulp-nearley by Joseph Junker to compile grammars with a gulpfile.

Node users can quickly create the framework for a large nearley-based project using nearley-template.

Parcel users can use parcel-plugin-nearley by Adam Rich to load grammars directly.

Jest users can use jest-transform-nearley by Adam Rich to load grammars directly.

Nearley for Deno use your compiled parser in deno with this nearley deno port by Olivier Guimbal

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/docs/using-in-frontend.html000066400000000000000000000251541376321042600255020ustar00rootroot00000000000000 Compiling in browsers - nearley.js - JS Parsing Toolkit

Compiling in browsers

Both the nearley parser and compiled grammars work in browsers; simply include nearley.js and your compiled grammar.js file in <script> tags and use nearley as usual. However, the nearley compiler is not designed for the browser – you should precompile your grammars and only serve the generated JS files to browsers.

If you absolutely have to compile a grammar in a browser (for example, to implement a nearley IDE) then you can use a tool like Webpack or Rollup to include the nearley NPM package in your browser code. Then, you can utilize the nearleyc internals to compile grammars dynamically.

const nearley = require("nearley");
const compile = require("nearley/lib/compile");
const generate = require("nearley/lib/generate");
const nearleyGrammar = require("nearley/lib/nearley-language-bootstrapped");

function compileGrammar(sourceCode) {
    // Parse the grammar source into an AST
    const grammarParser = new nearley.Parser(nearleyGrammar);
    grammarParser.feed(sourceCode);
    const grammarAst = grammarParser.results[0]; // TODO check for errors

    // Compile the AST into a set of rules
    const grammarInfoObject = compile(grammarAst, {});
    // Generate JavaScript code from the rules
    const grammarJs = generate(grammarInfoObject, "grammar");

    // Pretend this is a CommonJS environment to catch exports from the grammar.
    const module = { exports: {} };
    eval(grammarJs);

    return module.exports;
}

const grammar = compileGrammar("main -> foo | bar");

const parser = new nearley.Parser(nearley.Grammar.fromCompiled(grammar));
nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/000077500000000000000000000000001376321042600221255ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/AycockHorspool.ne000066400000000000000000000002371376321042600254120ustar00rootroot00000000000000# grammar used in Aycock, Horspool paper # http://webhome.cs.uvic.ca/~nigelh/Publications/PracticalEarleyParsing.pdf S -> A A A A A -> "a" | E E -> null nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/JoopLeo.ne000066400000000000000000000004211376321042600240150ustar00rootroot00000000000000# the grammar used in Joop Leo's paper # Joop Leo "A general context-free parsing algorithm running in linear time on every LR(k) grammar without using lookahead" # input (a^n)(b^m) where n >= m # eg. # a # ab # aa # aab # aabb . . . S -> "a" S | C C -> "a" C "b" | null nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/calculator/000077500000000000000000000000001376321042600242565ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/calculator/arithmetic.ne000066400000000000000000000042761376321042600267440ustar00rootroot00000000000000# This is a nice little grammar to familiarize yourself # with the nearley syntax. # It parses valid calculator input, obeying OOO and stuff. # ln (3 + 2*(8/e - sin(pi/5))) # is valid input. # This is (hopefully) pretty self-evident. # `main` is the nonterminal that nearley tries to parse, so # we define it first. # The _'s are defined as whitespace below. This is a mini- # -idiom. main -> _ AS _ {% function(d) {return d[1]; } %} # PEMDAS! # We define each level of precedence as a nonterminal. # Parentheses P -> "(" _ AS _ ")" {% function(d) {return d[2]; } %} | N {% id %} # Exponents E -> P _ "^" _ E {% function(d) {return Math.pow(d[0], d[4]); } %} | P {% id %} # Multiplication and division MD -> MD _ "*" _ E {% function(d) {return d[0]*d[4]; } %} | MD _ "/" _ E {% function(d) {return d[0]/d[4]; } %} | E {% id %} # Addition and subtraction AS -> AS _ "+" _ MD {% function(d) {return d[0]+d[4]; } %} | AS _ "-" _ MD {% function(d) {return d[0]-d[4]; } %} | MD {% id %} # A number or a function of a number N -> float {% id %} | "sin" _ P {% function(d) {return Math.sin(d[2]); } %} | "cos" _ P {% function(d) {return Math.cos(d[2]); } %} | "tan" _ P {% function(d) {return Math.tan(d[2]); } %} | "asin" _ P {% function(d) {return Math.asin(d[2]); } %} | "acos" _ P {% function(d) {return Math.acos(d[2]); } %} | "atan" _ P {% function(d) {return Math.atan(d[2]); } %} | "pi" {% function(d) {return Math.PI; } %} | "e" {% function(d) {return Math.E; } %} | "sqrt" _ P {% function(d) {return Math.sqrt(d[2]); } %} | "ln" _ P {% function(d) {return Math.log(d[2]); } %} # I use `float` to basically mean a number with a decimal point in it float -> int "." int {% function(d) {return parseFloat(d[0] + d[1] + d[2])} %} | int {% function(d) {return parseInt(d[0])} %} int -> [0-9]:+ {% function(d) {return d[0].join(""); } %} # Whitespace. The important thing here is that the postprocessor # is a null-returning function. This is a memory efficiency trick. _ -> [\s]:* {% function(d) {return null; } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/calculator/build-and-test.sh000077500000000000000000000001231376321042600274250ustar00rootroot00000000000000../../bin/nearleyc.js arithmetic.ne -o grammar.js -e arithmetic node calculator.js nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/calculator/calculator.js000066400000000000000000000026121376321042600267460ustar00rootroot00000000000000// This is an example of how to use a nearley-made grammar. var PROMPT = "> "; var nearley = require("../../lib/nearley.js"); var grammar = require("./grammar.js"); // This is where the action is. function runmath(s) { var ans; try {// We want to catch parse errors and die appropriately // Make a parser and feed the input ans = new nearley.Parser(grammar.ParserRules, grammar.ParserStart) .feed(s); // Check if there are any results if (ans.results.length) { return ans.results[0].toString(); } else { // This means the input is incomplete. var out = "Error: incomplete input, parse failed. :("; return out; } } catch(e) { // Panic in style, by graphically pointing out the error location. var out = new Array(PROMPT.length + e.offset + 1).join("-") + "^ Error."; // -------- // ^ This comes from nearley! return out; } } // node readline gunk. Nothing too exciting. var readline = require('readline'), rl = readline.createInterface(process.stdin, process.stdout); rl.setPrompt(PROMPT); rl.prompt(); rl.on('line', function(line) { console.log(runmath(line)); rl.prompt(); }).on('close', function() { console.log('\nBye.'); process.exit(0); }); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/calculator/grammar.js000066400000000000000000000110741376321042600262450ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var grammar = { ParserRules: [ {"name": "main", "symbols": ["_", "AS", "_"], "postprocess": function(d) {return d[1]; }}, {"name": "P", "symbols": [{"literal":"("}, "_", "AS", "_", {"literal":")"}], "postprocess": function(d) {return d[2]; }}, {"name": "P", "symbols": ["N"], "postprocess": id}, {"name": "E", "symbols": ["P", "_", {"literal":"^"}, "_", "E"], "postprocess": function(d) {return Math.pow(d[0], d[4]); }}, {"name": "E", "symbols": ["P"], "postprocess": id}, {"name": "MD", "symbols": ["MD", "_", {"literal":"*"}, "_", "E"], "postprocess": function(d) {return d[0]*d[4]; }}, {"name": "MD", "symbols": ["MD", "_", {"literal":"/"}, "_", "E"], "postprocess": function(d) {return d[0]/d[4]; }}, {"name": "MD", "symbols": ["E"], "postprocess": id}, {"name": "AS", "symbols": ["AS", "_", {"literal":"+"}, "_", "MD"], "postprocess": function(d) {return d[0]+d[4]; }}, {"name": "AS", "symbols": ["AS", "_", {"literal":"-"}, "_", "MD"], "postprocess": function(d) {return d[0]-d[4]; }}, {"name": "AS", "symbols": ["MD"], "postprocess": id}, {"name": "N", "symbols": ["float"], "postprocess": id}, {"name": "N$string$1", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$1", "_", "P"], "postprocess": function(d) {return Math.sin(d[2]); }}, {"name": "N$string$2", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$2", "_", "P"], "postprocess": function(d) {return Math.cos(d[2]); }}, {"name": "N$string$3", "symbols": [{"literal":"t"}, {"literal":"a"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$3", "_", "P"], "postprocess": function(d) {return Math.tan(d[2]); }}, {"name": "N$string$4", "symbols": [{"literal":"a"}, {"literal":"s"}, {"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$4", "_", "P"], "postprocess": function(d) {return Math.asin(d[2]); }}, {"name": "N$string$5", "symbols": [{"literal":"a"}, {"literal":"c"}, {"literal":"o"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$5", "_", "P"], "postprocess": function(d) {return Math.acos(d[2]); }}, {"name": "N$string$6", "symbols": [{"literal":"a"}, {"literal":"t"}, {"literal":"a"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$6", "_", "P"], "postprocess": function(d) {return Math.atan(d[2]); }}, {"name": "N$string$7", "symbols": [{"literal":"p"}, {"literal":"i"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$7"], "postprocess": function(d) {return Math.PI; }}, {"name": "N", "symbols": [{"literal":"e"}], "postprocess": function(d) {return Math.E; }}, {"name": "N$string$8", "symbols": [{"literal":"s"}, {"literal":"q"}, {"literal":"r"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$8", "_", "P"], "postprocess": function(d) {return Math.sqrt(d[2]); }}, {"name": "N$string$9", "symbols": [{"literal":"l"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "N", "symbols": ["N$string$9", "_", "P"], "postprocess": function(d) {return Math.log(d[2]); }}, {"name": "float", "symbols": ["int", {"literal":"."}, "int"], "postprocess": function(d) {return parseFloat(d[0] + d[1] + d[2])}}, {"name": "float", "symbols": ["int"], "postprocess": function(d) {return parseInt(d[0])}}, {"name": "int$ebnf$1", "symbols": [/[0-9]/]}, {"name": "int$ebnf$1", "symbols": [/[0-9]/, "int$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "int", "symbols": ["int$ebnf$1"], "postprocess": function(d) {return d[0].join(""); }}, {"name": "_$ebnf$1", "symbols": []}, {"name": "_$ebnf$1", "symbols": [/[\s]/, "_$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "_", "symbols": ["_$ebnf$1"], "postprocess": function(d) {return null; }} ] , ParserStart: "main" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.arithmetic = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/calculator/index.html000066400000000000000000000057731376321042600262670ustar00rootroot00000000000000 Calculator!

Enter an expression and hit <enter>.
Made with nearley.
nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/classic_crontab.ne000066400000000000000000000223351376321042600256070ustar00rootroot00000000000000# Parser for classic crontab. For syntax, check: man 5 crontab # Note that Vixie crontab extensions are not included, as any other extension # Linux, FreeBSD, MacOS X (macos) all use Vixie extensions # Solaris as opposed, uses classic crontab syntax # Any valid classic crontab can be used on Linux, FreeBSD, MacOS X (macos) classicCrontab -> "\n":* anyLine ("\n":+ anyLine):* "\n":* {% classicCrontab %} anyLine -> envSet {% id %} | cronStat {% id %} | blankLine {% function(d) { return null; }%} | comment {% function(d) { return null; }%} envSet -> envIdent "=" shellString:? {% envSet %} cronStat -> [ \t]:* minutes _ hours _ daysOfMonth _ monthsOfYear _ daysOfWeek _ cronShellCmd {% cronStat %} comment -> "#" [^\n]:* {% function(d) { return null; }%} blankLine -> _ {% function(d) { return null; }%} minutes -> "*" {% minuteAll %} | "*/" ([23456] | "10" | "12" | "15" | "20" | "30") {% minuteJump %} | minute "-" minute {% minuteRange %} | minute ("," minute):* {% minuteList %} hours -> "*" {% hourAll %} | "*/" ([23468] | "12") {% hourJump %} | hour "-" hour {% hourRange %} | hour ("," hour):* {% hourList %} daysOfMonth -> "*" {% allDaysOfMonth %} | "*/" ([2356] | "10" | "15") {% dayOfMonthJump %} | dayOfMonth "-" dayOfMonth {% dayOfMonthRange %} | dayOfMonth ("," dayOfMonth):* {% dayOfMonthList %} monthsOfYear -> "*" {% allMonthsOfYear %} | "*/" [2346] {% monthOfYearJump %} | monthOfYearNum "-" monthOfYearNum {% monthOfYearRange %} | monthOfYearNum ("," monthOfYearNum):* {% monthOfYearList %} | monthOfYearLit "-" monthOfYearLit {% monthOfYearRange %} | monthOfYearLit ("," monthOfYearLit):* {% monthOfYearList %} daysOfWeek -> "*" {% allDaysOfWeek %} | dayOfWeekNum "-" dayOfWeekNum {% dayOfWeekRange %} | dayOfWeekNum ("," dayOfWeekNum):* {% dayOfWeekList %} | dayOfWeekLit "-" dayOfWeekLit {% dayOfWeekRange %} | dayOfWeekLit ("," dayOfWeekLit):* {% dayOfWeekList %} cronShellCmd -> shellCmd shellStdIn:? {% cronShellCmd %} envIdent -> [a-zA-Z_] [0-9a-zA-Z_]:* {% function(d) { return d[0] + d[1].join("") } %} shellString -> ("\\":? [^\r\n'"\\] | "\\" "\"" | "\\" "'" | "\\" "\\"):+ {% unQuotedString %} | "\"" doubleQuotedContent:* "\"" {% function(d) { return d[1].join(""); } %} | "'" singleQuotedContent:* "'" {% function(d) { return d[1].join(""); } %} doubleQuotedContent -> [^\r\n"\\] {% function(d) { return d[0]; } %} | "\\" [^\r\n"\\] {% function(d) { return d.join(""); } %} | "\\\\" {% function(d) { return "\\"; } %} | "\\\"" {% function(d) { return "\""; } %} singleQuotedContent -> [^\r\n'\\] {% function(d) { return d[0]; } %} | "\\" [^\r\n'\\] {% function(d) { return d.join(""); } %} | "\\\\" {% function(d) { return "\\"; } %} | "\\'" {% function(d) { return "'"; } %} minute -> [0-5]:? [0-9] {% minute %} hour -> ([01]:? [0-9] | "2" [0-3]) {% hour %} dayOfMonth -> ("0":? [1-9] | [12] [0-9] | "3" [01]) {% dayOfMonth %} monthOfYearNum -> ("0":? [1-9] | "1" [0-2]) {% monthOfYearNum %} monthOfYearLit -> [jJ] [aA] [nN] {% function(d) { return 1; } %} | [fF] [eE] [bB] {% function(d) { return 2; } %} | [mM] [aA] [rR] {% function(d) { return 3; } %} | [aA] [pP] [rR] {% function(d) { return 4; } %} | [mM] [aA] [yY] {% function(d) { return 5; } %} | [jJ] [uU] [nN] {% function(d) { return 6; } %} | [jJ] [uU] [lL] {% function(d) { return 7; } %} | [aA] [uU] [gG] {% function(d) { return 8; } %} | [sS] [eE] [pP] {% function(d) { return 9; } %} | [oO] [cC] [tT] {% function(d) { return 10; } %} | [nN] [oO] [vV] {% function(d) { return 11; } %} | [dD] [eE] [cC] {% function(d) { return 12; } %} dayOfWeekNum -> [0-6] {% function(d) { return parseInt(d[0]); } %} dayOfWeekLit -> [sS] [uU] [nN] {% function(d) { return 0; } %} | [mM] [oO] [nN] {% function(d) { return 1; } %} | [tT] [uU] [eE] {% function(d) { return 2; } %} | [wW] [eE] [dD] {% function(d) { return 3; } %} | [tT] [hH] [uU] {% function(d) { return 4; } %} | [fF] [rR] [iI] {% function(d) { return 5; } %} | [sS] [aA] [tT] {% function(d) { return 6; } %} shellCmd -> [^\n\s%\\] ([^\r\n%\\] | "\\\\" | "\\%"):* {% shellCmd %} shellStdIn -> "%" shellStdInChar:* {% shellStdIn %} shellStdInChar -> [^\r\n%] {% function(d) { return d[0]; } %} | "%" {% function(d) { return "\n"; } %} _ -> [ \t]:+ {% function(d) { return null; } %} @{% /***** COMMON FUNCTIONS *****/ function toInt(n) { return parseInt(n); } function jumpRange(maxNum, step) { let output = []; step = step || 1; step = (step < 1) ? 1 : step; for (let i = 0; i < maxNum; i += step) { output.push(i); } return output; } function numRange(minNum, maxNum) { let output = []; for (let i = minNum; i <= maxNum; ++i) { output.push(i); } return output; } function plusN(n) { return function(i) { return n + i; } } function upToN(n) { return function(i) { return i <= n; } } function joinListWithKey(key) { return function(d) { let dict = {}; dict[d[0]] = true; for (let i in d[1]) { dict[d[1][i][1]] = true; } let output = {}; output[key] = Object.keys(dict).map(toInt); return output; } } /***** FUNCTIONS FOR ENVIRONMENT VARS *****/ function envSet(d) { let output = {}; output[d[0]] = d[2]; return {env: output}; } function unQuotedString(d) { let output = []; for (let i in d[0]) { output.push(d[0][i][1]); } return output.join(""); } /***** FUNCTIONS FOR MINUTES *****/ function minute(d) { return parseInt((d[0] | "") + d[1]); } function minuteAll(d) { return {minutes: jumpRange(60)}; } function minuteJump(d) { let step = parseInt(d[1]); return {minutes: jumpRange(60, step)}; } function minuteRange(d, l, reject) { let minNum = d[0]; let maxNum = d[2]; if (maxNum <= minNum) { return reject; } return {minutes: numRange(minNum, maxNum)}; } function minuteList(d) { return joinListWithKey('minutes')(d); } /***** FUNCTIONS FOR HOURS *****/ function hour(d) { return parseInt((d[0][0] || "") + d[0][1]); } function hourAll(d) { return {hours: jumpRange(24)}; } function hourJump(d) { let step = parseInt(d[1]); return {hours: jumpRange(24, step)}; } function hourRange(d, l, reject) { let minNum = d[0]; let maxNum = d[2]; if (maxNum <= minNum) { return reject; } return {hours: numRange(minNum, maxNum)}; } function hourList(d) { return joinListWithKey('hours')(d); } /***** FUNCTIONS FOR THE DAYS OF THE MONTH *****/ function dayOfMonth(d) { return parseInt((d[0][0] || "") + d[0][1]); } function allDaysOfMonth(d) { return {daysOfMonth: jumpRange(31).map(plusN(1))}; } function dayOfMonthJump(d) { let step = parseInt(d[1]); return {daysOfMonth: jumpRange(31, step).map(plusN(step)).filter(upToN(31))}; } function dayOfMonthRange(d, l, reject) { let minNum = d[0]; let maxNum = d[2]; if (maxNum <= minNum) { return reject; } return {daysOfMonth: numRange(minNum, maxNum)}; } function dayOfMonthList(d) { return joinListWithKey('daysOfMonth')(d); } /***** FUNCTIONS FOR THE MONTHS OF THE YEAR *****/ function monthOfYearNum(d) { return parseInt((d[0][0] || "") + d[0][1]); } function allMonthsOfYear(d) { return {monthsOfYear: jumpRange(12).map(plusN(1))}; } function monthOfYearJump(d) { let step = parseInt(d[1]); return {monthsOfYear: jumpRange(12, step).map(plusN(step)).filter(upToN(12))}; } function monthOfYearRange(d, l, reject) { let minNum = d[0]; let maxNum = d[2]; if (maxNum <= minNum) { return reject; } return {monthsOfYear: numRange(minNum, maxNum)}; } function monthOfYearList(d) { return joinListWithKey('monthsOfYear')(d); } /***** FUNCTIONS FOR THE DAYS OF THE WEEK *****/ function allDaysOfWeek(d) { return {daysOfWeek: jumpRange(7)}; } function dayOfWeekRange(d, l, reject) { let minNum = d[0]; let maxNum = d[2]; if (maxNum <= minNum) { return reject; } return {daysOfWeek: numRange(minNum, maxNum)}; } function dayOfWeekList(d) { return joinListWithKey('daysOfWeek')(d); } /***** FUNCTIONS FOR SHELL COMMANDS *****/ function shellCmd(d) { return d[0] + d[1].join("").trim(); } function shellStdIn(d) { let output = d[1].join(""); return ((output === "") ? null : output); } function cronShellCmd(d) { return {cmd: d[0], stdin: d[1]}; } /***** FUNCTIONS FOR CRON STATEMENTS *****/ function cronStat(d) { return { cron: { minutes: d[1].minutes, hours: d[3].hours, daysOfMonth: d[5].daysOfMonth, monthsOfYear: d[7].monthsOfYear, daysOfWeek: d[9].daysOfWeek, shell: d[11] } } } function isValidStat(obj) { // Accept only cron & env statements return (obj && (obj.cron || obj.env)); } function classicCrontab(d) { let output = []; if (isValidStat(d[1])) { output.push(d[1]); } for (let i in d[2]) { if (isValidStat(d[2][i][1])) { output.push(d[2][i][1]); } } return output; } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/csscolor.ne000066400000000000000000000022541376321042600243030ustar00rootroot00000000000000# http://www.w3.org/TR/css3-color/#colorunits @builtin "whitespace.ne" @builtin "number.ne" @builtin "postprocessors.ne" csscolor -> "#" hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit {% function(d) { return { "r": parseInt(d[1]+d[2], 16), "g": parseInt(d[3]+d[4], 16), "b": parseInt(d[5]+d[6], 16), } } %} | "#" hexdigit hexdigit hexdigit {% function(d) { return { "r": parseInt(d[1]+d[1], 16), "g": parseInt(d[2]+d[2], 16), "b": parseInt(d[3]+d[3], 16), } } %} | "rgb" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")" {% $({"r": 4, "g": 8, "b": 12}) %} | "hsl" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")" {% $({"h": 4, "s": 8, "l": 12}) %} | "rgba" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")" {% $({"r": 4, "g": 8, "b": 12, "a": 16}) %} | "hsla" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")" {% $({"h": 4, "s": 8, "l": 12, "a": 16}) %} hexdigit -> [a-fA-F0-9] colnum -> unsigned_int {% id %} | percentage {% function(d) {return Math.floor(d[0]*255); } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/csv.ne000066400000000000000000000030511376321042600232430ustar00rootroot00000000000000# csv.ne # from the Antlr grammar at: http://www.antlr3.org/grammar/list.html # see also: https://github.com/antlr/grammars-v4 @{% var appendItem = function (a, b) { return function (d) { return d[a].concat([d[b]]); } }; var appendItemChar = function (a, b) { return function (d) { return d[a].concat(d[b]); } }; var empty = function (d) { return []; }; var emptyStr = function (d) { return ""; }; %} file -> header newline rows {% function (d) { return { header: d[0], rows: d[2] }; } %} header -> row {% id %} rows -> row | rows newline row {% appendItem(0,2) %} row -> field | row "," field {% appendItem(0,2) %} field -> unquoted_field {% id %} | "\"" quoted_field "\"" {% function (d) { return d[1]; } %} quoted_field -> null {% emptyStr %} | quoted_field quoted_field_char {% appendItemChar(0,1) %} quoted_field_char -> [^"] {% id %} | "\"" "\"" {% function (d) { return "\""; } %} unquoted_field -> null {% emptyStr %} | unquoted_field char {% appendItemChar(0,1) %} char -> [^\n\r",] {% id %} newline -> "\r" "\n" {% empty %} | "\r" | "\n" {% empty %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/fun-lang.ne000066400000000000000000000272221376321042600241650ustar00rootroot00000000000000@{% const moo = require("moo"); const lexer = moo.compile({ ws: /[ \t]+/, nl: { match: "\n", lineBreaks: true }, lte: "<=", lt: "<", gte: ">=", gt: ">", eq: "==", lparan: "(", rparan: ")", comma: ",", lbracket: "[", rbracket: "]", lbrace: "{", rbrace: "}", assignment: "=", plus: "+", minus: "-", multiply: "*", divide: "/", modulo: "%", colon: ":", comment: { match: /#[^\n]*/, value: s => s.substring(1) }, string_literal: { match: /"(?:[^\n\\"]|\\["\\ntbfr])*"/, value: s => JSON.parse(s) }, number_literal: { match: /[0-9]+(?:\.[0-9]+)?/, value: s => Number(s) }, identifier: { match: /[a-z_][a-z_0-9]*/, type: moo.keywords({ fun: "fun", proc: "proc", while: "while", for: "for", else: "else", in: "in", if: "if", return: "return", and: "and", or: "or", true: "true", false: "false" }) } }); function tokenStart(token) { return { line: token.line, col: token.col - 1 }; } function tokenEnd(token) { const lastNewLine = token.text.lastIndexOf("\n"); if (lastNewLine !== -1) { throw new Error("Unsupported case: token with line breaks"); } return { line: token.line, col: token.col + token.text.length - 1 }; } function convertToken(token) { return { type: token.type, value: token.value, start: tokenStart(token), end: tokenEnd(token) }; } function convertTokenId(data) { return convertToken(data[0]); } %} @lexer lexer input -> top_level_statements {% id %} top_level_statements -> top_level_statement {% d => [d[0]] %} | top_level_statement _ "\n" _ top_level_statements {% d => [ d[0], ...d[4] ] %} # below 2 sub-rules handle blank lines | _ "\n" top_level_statements {% d => d[2] %} | _ {% d => [] %} top_level_statement -> fun_definition {% id %} | proc_definition {% id %} | line_comment {% id %} fun_definition -> "fun" __ identifier _ "(" _ parameter_list _ ")" _ code_block {% d => ({ type: "fun_definition", name: d[2], parameters: d[6], body: d[10], start: tokenStart(d[0]), end: d[10].end }) %} proc_definition -> "proc" __ identifier _ "(" _ parameter_list _ ")" _ code_block {% d => ({ type: "proc_definition", name: d[2], parameters: d[6], body: d[10], start: tokenStart(d[0]), end: d[10].end }) %} parameter_list -> null {% () => [] %} | identifier {% d => [d[0]] %} | identifier _ "," _ parameter_list {% d => [d[0], ...d[4]] %} code_block -> "[" executable_statements "]" {% (d) => ({ type: "code_block", statements: d[1], start: tokenStart(d[0]), end: tokenEnd(d[2]) }) %} executable_statements -> _ {% () => [] %} | _ "\n" executable_statements {% (d) => d[2] %} | _ executable_statement _ {% d => [d[1]] %} | _ executable_statement _ "\n" executable_statements {% d => [d[1], ...d[4]] %} executable_statement -> return_statement {% id %} | var_assignment {% id %} | call_statement {% id %} | line_comment {% id %} | indexed_assignment {% id %} | while_loop {% id %} | if_statement {% id %} | for_loop {% id %} return_statement -> "return" __ expression {% d => ({ type: "return_statement", value: d[2], start: tokenStart(d[0]), end: d[2].end }) %} var_assignment -> identifier _ "=" _ expression {% d => ({ type: "var_assignment", var_name: d[0], value: d[4], start: d[0].start, end: d[4].end }) %} call_statement -> call_expression {% id %} call_expression -> identifier _ "(" argument_list ")" {% d => ({ type: "call_expression", fun_name: d[0], arguments: d[3], start: d[0].start, end: tokenEnd(d[4]) }) %} indexed_access -> unary_expression _ "[" _ expression _ "]" {% d => ({ type: "indexed_access", subject: d[0], index: d[4], start: d[0].start, end: tokenEnd(d[6]) }) %} indexed_assignment -> unary_expression _ "[" _ expression _ "]" _ "=" _ expression {% d => ({ type: "indexed_assignment", subject: d[0], index: d[4], value: d[10], start: d[0].start, end: d[10].end }) %} while_loop -> "while" __ expression __ code_block {% d => ({ type: "while_loop", condition: d[2], body: d[4], start: tokenStart(d[0]), end: d[4].end }) %} if_statement -> "if" __ expression __ code_block {% d => ({ type: "if_statement", condition: d[2], consequent: d[4], start: tokenStart(d[0]), end: d[4].end }) %} | "if" __ expression _ code_block _ "else" __ code_block {% d => ({ type: "if_statement", condition: d[2], consequent: d[4], alternate: d[8], start: tokenStart(d[0]), end: d[8].end }) %} | "if" __ expression _ code_block _ "else" __ if_statement {% d => ({ type: "if_statement", condition: d[2], consequent: d[4], alternate: d[8], start: tokenStart(d[0]), end: d[8].end }) %} for_loop -> "for" __ identifier __ "in" __ expression _ code_block {% d => ({ type: "for_loop", loop_variable: d[2], iterable: d[6], body: d[8], start: tokenStart(d[0]), end: d[8].end }) %} argument_list -> null {% () => [] %} | _ expression _ {% d => [d[1]] %} | _ expression _ "," argument_list {% d => [d[1], ...d[4]] %} expression -> boolean_expression {% id %} boolean_expression -> comparison_expression {% id %} | comparison_expression _ boolean_operator _ boolean_expression {% d => ({ type: "binary_operation", operator: convertToken(d[2]), left: d[0], right: d[4], start: d[0].start, end: d[4].end }) %} boolean_operator -> "and" {% id %} | "or" {% id %} comparison_expression -> additive_expression {% id %} | additive_expression _ comparison_operator _ comparison_expression {% d => ({ type: "binary_operation", operator: d[2], left: d[0], right: d[4], start: d[0].start, end: d[4].end }) %} comparison_operator -> ">" {% convertTokenId %} | ">=" {% convertTokenId %} | "<" {% convertTokenId %} | "<=" {% convertTokenId %} | "==" {% convertTokenId %} additive_expression -> multiplicative_expression {% id %} | multiplicative_expression _ [+-] _ additive_expression {% d => ({ type: "binary_operation", operator: convertToken(d[2]), left: d[0], right: d[4], start: d[0].start, end: d[4].end }) %} multiplicative_expression -> unary_expression {% id %} | unary_expression _ [*/%] _ multiplicative_expression {% d => ({ type: "binary_operation", operator: convertToken(d[2]), left: d[0], right: d[4], start: d[0].start, end: d[4].end }) %} unary_expression -> number {% id %} | identifier {% d => ({ type: "var_reference", var_name: d[0], start: d[0].start, end: d[0].end }) %} | call_expression {% id %} | string_literal {% id %} | list_literal {% id %} | dictionary_literal {% id %} | boolean_literal {% id %} | indexed_access {% id %} | fun_expression {% id %} | "(" expression ")" {% data => data[1] %} list_literal -> "[" list_items "]" {% d => ({ type: "list_literal", items: d[1], start: tokenStart(d[0]), end: tokenEnd(d[2]) }) %} list_items -> null {% () => [] %} | _ml expression _ml {% d => [d[1]] %} | _ml expression _ml "," list_items {% d => [ d[1], ...d[4] ] %} dictionary_literal -> "{" dictionary_entries "}" {% d => ({ type: "dictionary_literal", entries: d[1], start: tokenStart(d[0]), end: tokenEnd(d[2]) }) %} dictionary_entries -> null {% () => [] %} | _ml dictionary_entry _ml {% d => [d[1]] %} | _ml dictionary_entry _ml "," dictionary_entries {% d => [d[1], ...d[4]] %} dictionary_entry -> identifier _ml ":" _ml expression {% d => [d[0], d[4]] %} boolean_literal -> "true" {% d => ({ type: "boolean_literal", value: true, start: tokenStart(d[0]), end: tokenEnd(d[0]) }) %} | "false" {% d => ({ type: "boolean_literal", value: false, start: tokenStart(d[0]), end: tokenEnd(d[0]) }) %} fun_expression -> "fun" _ "(" _ parameter_list _ ")" _ code_block {% d => ({ type: "fun_expression", parameters: d[4], body: d[8], start: tokenStart(d[0]), end: d[8].end }) %} line_comment -> %comment {% convertTokenId %} string_literal -> %string_literal {% convertTokenId %} number -> %number_literal {% convertTokenId %} identifier -> %identifier {% convertTokenId %} _ml -> multi_line_ws_char:* multi_line_ws_char -> %ws | "\n" __ -> %ws:+ _ -> %ws:* nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/000077500000000000000000000000001376321042600225415ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/AycockHorspool.js000066400000000000000000000007741376321042600260460ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var grammar = { ParserRules: [ {"name": "S", "symbols": ["A", "A", "A", "A"]}, {"name": "A", "symbols": [{"literal":"a"}]}, {"name": "A", "symbols": ["E"]}, {"name": "E", "symbols": []} ] , ParserStart: "S" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/JoopLeo.js000066400000000000000000000010241376321042600244430ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var grammar = { ParserRules: [ {"name": "S", "symbols": [{"literal":"a"}, "S"]}, {"name": "S", "symbols": ["C"]}, {"name": "C", "symbols": [{"literal":"a"}, "C", {"literal":"b"}]}, {"name": "C", "symbols": []} ] , ParserStart: "S" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/csscolor.js000066400000000000000000000230301376321042600247240ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } function nth(n) { return function(d) { return d[n]; }; } function $(o) { return function(d) { var ret = {}; Object.keys(o).forEach(function(k) { ret[k] = d[o[k]]; }); return ret; }; } var grammar = { ParserRules: [ {"name": "_$ebnf$1", "symbols": []}, {"name": "_$ebnf$1", "symbols": ["wschar", "_$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "_", "symbols": ["_$ebnf$1"], "postprocess": function(d) {return null;}}, {"name": "__$ebnf$1", "symbols": ["wschar"]}, {"name": "__$ebnf$1", "symbols": ["wschar", "__$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "__", "symbols": ["__$ebnf$1"], "postprocess": function(d) {return null;}}, {"name": "wschar", "symbols": [/[ \t\n\v\f]/], "postprocess": id}, {"name": "unsigned_int$ebnf$1", "symbols": [/[0-9]/]}, {"name": "unsigned_int$ebnf$1", "symbols": [/[0-9]/, "unsigned_int$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "unsigned_int", "symbols": ["unsigned_int$ebnf$1"], "postprocess": function(d) { return parseInt(d[0].join("")); } }, {"name": "int$ebnf$1$subexpression$1", "symbols": [{"literal":"-"}]}, {"name": "int$ebnf$1$subexpression$1", "symbols": [{"literal":"+"}]}, {"name": "int$ebnf$1", "symbols": ["int$ebnf$1$subexpression$1"], "postprocess": id}, {"name": "int$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "int$ebnf$2", "symbols": [/[0-9]/]}, {"name": "int$ebnf$2", "symbols": [/[0-9]/, "int$ebnf$2"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "int", "symbols": ["int$ebnf$1", "int$ebnf$2"], "postprocess": function(d) { if (d[0]) { return parseInt(d[0][0]+d[1].join("")); } else { return parseInt(d[1].join("")); } } }, {"name": "unsigned_decimal$ebnf$1", "symbols": [/[0-9]/]}, {"name": "unsigned_decimal$ebnf$1", "symbols": [/[0-9]/, "unsigned_decimal$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "unsigned_decimal$ebnf$2$subexpression$1$ebnf$1", "symbols": [/[0-9]/]}, {"name": "unsigned_decimal$ebnf$2$subexpression$1$ebnf$1", "symbols": [/[0-9]/, "unsigned_decimal$ebnf$2$subexpression$1$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "unsigned_decimal$ebnf$2$subexpression$1", "symbols": [{"literal":"."}, "unsigned_decimal$ebnf$2$subexpression$1$ebnf$1"]}, {"name": "unsigned_decimal$ebnf$2", "symbols": ["unsigned_decimal$ebnf$2$subexpression$1"], "postprocess": id}, {"name": "unsigned_decimal$ebnf$2", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "unsigned_decimal", "symbols": ["unsigned_decimal$ebnf$1", "unsigned_decimal$ebnf$2"], "postprocess": function(d) { return parseFloat( d[0].join("") + (d[1] ? "."+d[1][1].join("") : "") ); } }, {"name": "decimal$ebnf$1", "symbols": [{"literal":"-"}], "postprocess": id}, {"name": "decimal$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "decimal$ebnf$2", "symbols": [/[0-9]/]}, {"name": "decimal$ebnf$2", "symbols": [/[0-9]/, "decimal$ebnf$2"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "decimal$ebnf$3$subexpression$1$ebnf$1", "symbols": [/[0-9]/]}, {"name": "decimal$ebnf$3$subexpression$1$ebnf$1", "symbols": [/[0-9]/, "decimal$ebnf$3$subexpression$1$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "decimal$ebnf$3$subexpression$1", "symbols": [{"literal":"."}, "decimal$ebnf$3$subexpression$1$ebnf$1"]}, {"name": "decimal$ebnf$3", "symbols": ["decimal$ebnf$3$subexpression$1"], "postprocess": id}, {"name": "decimal$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "decimal", "symbols": ["decimal$ebnf$1", "decimal$ebnf$2", "decimal$ebnf$3"], "postprocess": function(d) { return parseFloat( (d[0] || "") + d[1].join("") + (d[2] ? "."+d[2][1].join("") : "") ); } }, {"name": "percentage", "symbols": ["decimal", {"literal":"%"}], "postprocess": function(d) { return d[0]/100; } }, {"name": "jsonfloat$ebnf$1", "symbols": [{"literal":"-"}], "postprocess": id}, {"name": "jsonfloat$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "jsonfloat$ebnf$2", "symbols": [/[0-9]/]}, {"name": "jsonfloat$ebnf$2", "symbols": [/[0-9]/, "jsonfloat$ebnf$2"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "jsonfloat$ebnf$3$subexpression$1$ebnf$1", "symbols": [/[0-9]/]}, {"name": "jsonfloat$ebnf$3$subexpression$1$ebnf$1", "symbols": [/[0-9]/, "jsonfloat$ebnf$3$subexpression$1$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "jsonfloat$ebnf$3$subexpression$1", "symbols": [{"literal":"."}, "jsonfloat$ebnf$3$subexpression$1$ebnf$1"]}, {"name": "jsonfloat$ebnf$3", "symbols": ["jsonfloat$ebnf$3$subexpression$1"], "postprocess": id}, {"name": "jsonfloat$ebnf$3", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "jsonfloat$ebnf$4$subexpression$1$ebnf$1", "symbols": [/[+-]/], "postprocess": id}, {"name": "jsonfloat$ebnf$4$subexpression$1$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "jsonfloat$ebnf$4$subexpression$1$ebnf$2", "symbols": [/[0-9]/]}, {"name": "jsonfloat$ebnf$4$subexpression$1$ebnf$2", "symbols": [/[0-9]/, "jsonfloat$ebnf$4$subexpression$1$ebnf$2"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "jsonfloat$ebnf$4$subexpression$1", "symbols": [/[eE]/, "jsonfloat$ebnf$4$subexpression$1$ebnf$1", "jsonfloat$ebnf$4$subexpression$1$ebnf$2"]}, {"name": "jsonfloat$ebnf$4", "symbols": ["jsonfloat$ebnf$4$subexpression$1"], "postprocess": id}, {"name": "jsonfloat$ebnf$4", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "jsonfloat", "symbols": ["jsonfloat$ebnf$1", "jsonfloat$ebnf$2", "jsonfloat$ebnf$3", "jsonfloat$ebnf$4"], "postprocess": function(d) { return parseFloat( (d[0] || "") + d[1].join("") + (d[2] ? d[2][1].join("") : "") + (d[3] ? "e" + (d[3][1] || "+") + d[3][2].join("") : "") ); } }, {"name": "csscolor", "symbols": [{"literal":"#"}, "hexdigit", "hexdigit", "hexdigit", "hexdigit", "hexdigit", "hexdigit"], "postprocess": function(d) { return { "r": parseInt(d[1]+d[2], 16), "g": parseInt(d[3]+d[4], 16), "b": parseInt(d[5]+d[6], 16), } } }, {"name": "csscolor", "symbols": [{"literal":"#"}, "hexdigit", "hexdigit", "hexdigit"], "postprocess": function(d) { return { "r": parseInt(d[1]+d[1], 16), "g": parseInt(d[2]+d[2], 16), "b": parseInt(d[3]+d[3], 16), } } }, {"name": "csscolor$string$1", "symbols": [{"literal":"r"}, {"literal":"g"}, {"literal":"b"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "csscolor", "symbols": ["csscolor$string$1", "_", {"literal":"("}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":")"}], "postprocess": $({"r": 4, "g": 8, "b": 12})}, {"name": "csscolor$string$2", "symbols": [{"literal":"h"}, {"literal":"s"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "csscolor", "symbols": ["csscolor$string$2", "_", {"literal":"("}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":")"}], "postprocess": $({"h": 4, "s": 8, "l": 12})}, {"name": "csscolor$string$3", "symbols": [{"literal":"r"}, {"literal":"g"}, {"literal":"b"}, {"literal":"a"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "csscolor", "symbols": ["csscolor$string$3", "_", {"literal":"("}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":","}, "_", "decimal", "_", {"literal":")"}], "postprocess": $({"r": 4, "g": 8, "b": 12, "a": 16})}, {"name": "csscolor$string$4", "symbols": [{"literal":"h"}, {"literal":"s"}, {"literal":"l"}, {"literal":"a"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "csscolor", "symbols": ["csscolor$string$4", "_", {"literal":"("}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":","}, "_", "colnum", "_", {"literal":","}, "_", "decimal", "_", {"literal":")"}], "postprocess": $({"h": 4, "s": 8, "l": 12, "a": 16})}, {"name": "hexdigit", "symbols": [/[a-fA-F0-9]/]}, {"name": "colnum", "symbols": ["unsigned_int"], "postprocess": id}, {"name": "colnum", "symbols": ["percentage"], "postprocess": function(d) {return Math.floor(d[0]*255); } } ] , ParserStart: "csscolor" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/csv.js000066400000000000000000000042141376321042600236730ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var appendItem = function (a, b) { return function (d) { return d[a].concat([d[b]]); } }; var appendItemChar = function (a, b) { return function (d) { return d[a].concat(d[b]); } }; var empty = function (d) { return []; }; var emptyStr = function (d) { return ""; }; var grammar = { ParserRules: [ {"name": "file", "symbols": ["header", "newline", "rows"], "postprocess": function (d) { return { header: d[0], rows: d[2] }; } }, {"name": "header", "symbols": ["row"], "postprocess": id }, {"name": "rows", "symbols": ["row"]}, {"name": "rows", "symbols": ["rows", "newline", "row"], "postprocess": appendItem(0,2) }, {"name": "row", "symbols": ["field"]}, {"name": "row", "symbols": ["row", {"literal":","}, "field"], "postprocess": appendItem(0,2) }, {"name": "field", "symbols": ["unquoted_field"], "postprocess": id }, {"name": "field", "symbols": [{"literal":"\""}, "quoted_field", {"literal":"\""}], "postprocess": function (d) { return d[1]; } }, {"name": "quoted_field", "symbols": [], "postprocess": emptyStr }, {"name": "quoted_field", "symbols": ["quoted_field", "quoted_field_char"], "postprocess": appendItemChar(0,1) }, {"name": "quoted_field_char", "symbols": [/[^"]/], "postprocess": id }, {"name": "quoted_field_char", "symbols": [{"literal":"\""}, {"literal":"\""}], "postprocess": function (d) { return "\""; } }, {"name": "unquoted_field", "symbols": [], "postprocess": emptyStr }, {"name": "unquoted_field", "symbols": ["unquoted_field", "char"], "postprocess": appendItemChar(0,1) }, {"name": "char", "symbols": [/[^\n\r",]/], "postprocess": empty }, {"name": "newline", "symbols": [{"literal":"\r"}, {"literal":"\n"}], "postprocess": empty }, {"name": "newline", "symbols": [{"literal":"\r"}]}, {"name": "newline", "symbols": [{"literal":"\n"}], "postprocess": empty } ] , ParserStart: "file" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/left.js000066400000000000000000000006501376321042600240320ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var grammar = { ParserRules: [ {"name": "c", "symbols": []}, {"name": "c", "symbols": ["c", {"literal":"."}]} ] , ParserStart: "c" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/lua.js000066400000000000000000000442221376321042600236640ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var grammar = { ParserRules: [ {"name": "Chunk", "symbols": ["_", "Block", "_"]}, {"name": "Block", "symbols": ["_Block"]}, {"name": "Block", "symbols": ["_Block", "__", "ReturnStat"]}, {"name": " string$1", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"t"}, {"literal":"u"}, {"literal":"r"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ReturnStat", "symbols": [" string$1", "__", "ExpList"]}, {"name": " string$2", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"t"}, {"literal":"u"}, {"literal":"r"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ReturnStat", "symbols": [" string$2", "__", "ExpList", "_", {"literal":";"}]}, {"name": "_Block", "symbols": ["Statement"]}, {"name": "_Block", "symbols": ["_Block", "_", {"literal":";"}, "_", "Statement"]}, {"name": "_Block", "symbols": ["_Block", "__", "Statement"]}, {"name": "Statement", "symbols": ["VarList", "_", {"literal":"="}, "_", "ExpList"]}, {"name": "Statement", "symbols": ["FunctionCall"]}, {"name": "Statement", "symbols": ["Label"]}, {"name": " string$3", "symbols": [{"literal":"b"}, {"literal":"r"}, {"literal":"e"}, {"literal":"a"}, {"literal":"k"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$3"]}, {"name": " string$4", "symbols": [{"literal":"g"}, {"literal":"o"}, {"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$4", "__", "Name"]}, {"name": " string$5", "symbols": [{"literal":"d"}, {"literal":"o"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$6", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$5", "__", "Block", "__", " string$6"]}, {"name": " string$7", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"i"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$8", "symbols": [{"literal":"d"}, {"literal":"o"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$9", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$7", "__", "Exp", "__", " string$8", "__", "Block", "__", " string$9"]}, {"name": " string$10", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"p"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$11", "symbols": [{"literal":"u"}, {"literal":"n"}, {"literal":"t"}, {"literal":"i"}, {"literal":"l"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$10", "__", "Block", "__", " string$11", "__", "Exp"]}, {"name": " string$12", "symbols": [{"literal":"i"}, {"literal":"f"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$13", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$12", "__", "Exp", "__", " string$13", "__", "Block", "__", "Else"]}, {"name": " string$14", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$15", "symbols": [{"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$16", "symbols": [{"literal":"d"}, {"literal":"o"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$17", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$14", "__", "NameList", "__", " string$15", "__", "ExpList", "__", " string$16", "__", "Block", "__", " string$17"]}, {"name": " string$18", "symbols": [{"literal":"f"}, {"literal":"u"}, {"literal":"n"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$18", "__", "FunctionName", "_", "FunctionBody"]}, {"name": " string$19", "symbols": [{"literal":"l"}, {"literal":"o"}, {"literal":"c"}, {"literal":"a"}, {"literal":"l"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$20", "symbols": [{"literal":"f"}, {"literal":"u"}, {"literal":"n"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$19", "__", " string$20", "__", "Name", "__", "FunctionBody"]}, {"name": " string$21", "symbols": [{"literal":"l"}, {"literal":"o"}, {"literal":"c"}, {"literal":"a"}, {"literal":"l"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$21", "__", "NameList"]}, {"name": " string$22", "symbols": [{"literal":"l"}, {"literal":"o"}, {"literal":"c"}, {"literal":"a"}, {"literal":"l"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Statement", "symbols": [" string$22", "__", "NameList", "_", {"literal":"="}, "_", "ExpList"]}, {"name": " string$23", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Else", "symbols": [" string$23"]}, {"name": " string$24", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Else", "symbols": ["_Else", "__", " string$24"]}, {"name": " string$25", "symbols": [{"literal":"e"}, {"literal":"l"}, {"literal":"s"}, {"literal":"e"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$26", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Else", "symbols": ["_Else", "__", " string$25", "__", "Block", "__", " string$26"]}, {"name": " string$27", "symbols": [{"literal":"e"}, {"literal":"l"}, {"literal":"s"}, {"literal":"e"}, {"literal":"i"}, {"literal":"f"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$28", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "_Else", "symbols": [" string$27", "__", "Exp", "__", " string$28", "__", "Block"]}, {"name": " string$29", "symbols": [{"literal":"e"}, {"literal":"l"}, {"literal":"s"}, {"literal":"e"}, {"literal":"i"}, {"literal":"f"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$30", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "_Else", "symbols": ["_Else", "__", " string$29", "__", "Exp", "__", " string$30", "__", "Block"]}, {"name": " string$31", "symbols": [{"literal":":"}, {"literal":":"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": " string$32", "symbols": [{"literal":":"}, {"literal":":"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Label", "symbols": [" string$31", "_", "Name", "_", " string$32"]}, {"name": "Name", "symbols": ["_name"], "postprocess": function(d) {return {'name': d[0]}; } }, {"name": "_name", "symbols": [/[a-zA-Z_]/], "postprocess": id }, {"name": "_name", "symbols": ["_name", /[\w_]/], "postprocess": function(d) {return d[0] + d[1]; } }, {"name": "NameList", "symbols": ["Name"]}, {"name": "NameList", "symbols": ["NameList", "_", {"literal":","}, "_", "Name"]}, {"name": "Var", "symbols": ["Name"]}, {"name": "Var", "symbols": ["PrefixExp", "_", {"literal":"["}, "_", "Exp", "_", {"literal":"]"}]}, {"name": "Var", "symbols": ["PrefixExp", "_", {"literal":"."}, "_", "Name"]}, {"name": "VarList", "symbols": ["Var"]}, {"name": "VarList", "symbols": ["VarList", "_", {"literal":","}, "_", "Var"]}, {"name": "ExpList", "symbols": ["Exp"]}, {"name": "ExpList", "symbols": ["ExpList", "_", {"literal":","}, "_", "Exp"]}, {"name": "PrefixExp", "symbols": ["Var"]}, {"name": "PrefixExp", "symbols": ["FunctionCall"]}, {"name": "PrefixExp", "symbols": ["Parenthesized"]}, {"name": "FunctionCall", "symbols": ["PrefixExp", "_", "Args"]}, {"name": "FunctionCall", "symbols": ["PrefixExp", "_", {"literal":":"}, "_", "Name", "_", "Args"]}, {"name": "Args", "symbols": [{"literal":"("}, "_", {"literal":")"}]}, {"name": "Args", "symbols": [{"literal":"("}, "_", "ExpList", "_", {"literal":")"}]}, {"name": "Args", "symbols": ["String"]}, {"name": "FunctionName", "symbols": ["_functionname"]}, {"name": "FunctionName", "symbols": ["_functionname", {"literal":":"}, "Name"]}, {"name": "_functionname", "symbols": ["Name"]}, {"name": "_functionname", "symbols": ["FunctionName", "_", {"literal":"."}, "_", "FunctionName"]}, {"name": " string$33", "symbols": [{"literal":"f"}, {"literal":"u"}, {"literal":"n"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "FunctionDef", "symbols": [" string$33", "__", "FunctionBody"]}, {"name": " string$34", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "FunctionBody", "symbols": [{"literal":"("}, "_", "ParamList", "_", {"literal":")"}, "__", "Block", "__", " string$34"]}, {"name": " string$35", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "FunctionBody", "symbols": [{"literal":"("}, "_", {"literal":")"}, "__", "Block", "__", " string$35"]}, {"name": "ParamList", "symbols": ["NameList"]}, {"name": " string$36", "symbols": [{"literal":"."}, {"literal":"."}, {"literal":"."}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ParamList", "symbols": ["NameList", "_", {"literal":","}, "_", " string$36"]}, {"name": " string$37", "symbols": [{"literal":"."}, {"literal":"."}, {"literal":"."}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ParamList", "symbols": [" string$37"]}, {"name": "TableConstructor", "symbols": [{"literal":"{"}, "_", "FieldList", "_", {"literal":"}"}]}, {"name": "TableConstructor", "symbols": [{"literal":"{"}, "_", {"literal":"}"}]}, {"name": "FieldList", "symbols": ["_FieldList"]}, {"name": "FieldList", "symbols": ["_FieldList", "_", "FieldSep"]}, {"name": "_FieldList", "symbols": ["Field"]}, {"name": "_FieldList", "symbols": ["_FieldList", "_", "FieldSep", "_", "Field"]}, {"name": "Field", "symbols": [{"literal":"["}, "_", "Exp", "_", {"literal":"]"}, "_", {"literal":"="}, "_", "Exp"]}, {"name": "Field", "symbols": ["Name", "_", {"literal":"="}, "_", "Exp"]}, {"name": "Field", "symbols": ["Exp"]}, {"name": "FieldSep", "symbols": [{"literal":","}]}, {"name": "FieldSep", "symbols": [{"literal":";"}]}, {"name": "Exp", "symbols": ["Binop"], "postprocess": id }, {"name": "Binop", "symbols": ["ExpOr"], "postprocess": id }, {"name": "Parenthesized", "symbols": [{"literal":"("}, "Exp", {"literal":")"}]}, {"name": " string$38", "symbols": [{"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpOr", "symbols": ["ExpOr", "__", " string$38", "__", "ExpAnd"]}, {"name": "ExpOr", "symbols": ["ExpAnd"], "postprocess": id }, {"name": " string$39", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpAnd", "symbols": ["ExpAnd", "__", " string$39", "__", "ExpComparison"]}, {"name": "ExpAnd", "symbols": ["ExpComparison"], "postprocess": id }, {"name": "ExpComparison", "symbols": ["ExpComparison", "_", {"literal":"<"}, "_", "ExpConcatenation"]}, {"name": "ExpComparison", "symbols": ["ExpComparison", "_", {"literal":">"}, "_", "ExpConcatenation"]}, {"name": " string$40", "symbols": [{"literal":"<"}, {"literal":"="}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpComparison", "symbols": ["ExpComparison", "_", " string$40", "_", "ExpConcatenation"]}, {"name": " string$41", "symbols": [{"literal":">"}, {"literal":"="}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpComparison", "symbols": ["ExpComparison", "_", " string$41", "_", "ExpConcatenation"]}, {"name": " string$42", "symbols": [{"literal":"~"}, {"literal":"="}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpComparison", "symbols": ["ExpComparison", "_", " string$42", "_", "ExpConcatenation"]}, {"name": " string$43", "symbols": [{"literal":"="}, {"literal":"="}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpComparison", "symbols": ["ExpComparison", "_", " string$43", "_", "ExpConcatenation"]}, {"name": "ExpComparison", "symbols": ["ExpConcatenation"]}, {"name": " string$44", "symbols": [{"literal":"."}, {"literal":"."}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpConcatenation", "symbols": ["ExpSum", "_", " string$44", "_", "ExpConcatenation"]}, {"name": "ExpConcatenation", "symbols": ["ExpSum"]}, {"name": "ExpSum", "symbols": ["ExpSum", "_", {"literal":"+"}, "_", "ExpProduct"]}, {"name": "ExpSum", "symbols": ["ExpSum", "_", {"literal":"-"}, "_", "ExpProduct"]}, {"name": "ExpSum", "symbols": ["ExpProduct"]}, {"name": "ExpProduct", "symbols": ["ExpProduct", "_", {"literal":"*"}, "_", "ExpUnary"]}, {"name": "ExpProduct", "symbols": ["ExpProduct", "_", {"literal":"/"}, "_", "ExpUnary"]}, {"name": "ExpProduct", "symbols": ["ExpProduct", "_", {"literal":"%"}, "_", "ExpUnary"]}, {"name": "ExpProduct", "symbols": ["ExpUnary"]}, {"name": " string$45", "symbols": [{"literal":"n"}, {"literal":"o"}, {"literal":"t"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "ExpUnary", "symbols": [" string$45", "__", "ExpPow"]}, {"name": "ExpUnary", "symbols": [{"literal":"#"}, "_", "ExpPow"]}, {"name": "ExpUnary", "symbols": [{"literal":"-"}, "_", "ExpPow"]}, {"name": "ExpUnary", "symbols": ["ExpPow"]}, {"name": "ExpPow", "symbols": ["Atom"]}, {"name": "ExpPow", "symbols": ["Atom", "_", {"literal":"^"}, "_", "ExpPow"]}, {"name": "Atom", "symbols": ["Number"]}, {"name": "Atom", "symbols": ["String"]}, {"name": "Atom", "symbols": ["PrefixExp"]}, {"name": " string$46", "symbols": [{"literal":"n"}, {"literal":"i"}, {"literal":"l"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Atom", "symbols": [" string$46"]}, {"name": " string$47", "symbols": [{"literal":"f"}, {"literal":"a"}, {"literal":"l"}, {"literal":"s"}, {"literal":"e"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Atom", "symbols": [" string$47"]}, {"name": " string$48", "symbols": [{"literal":"t"}, {"literal":"r"}, {"literal":"u"}, {"literal":"e"}], "postprocess": function joiner(d) { return d.join(''); }}, {"name": "Atom", "symbols": [" string$48"]}, {"name": "Atom", "symbols": ["Parenthesized"]}, {"name": "Atom", "symbols": ["FunctionDef"]}, {"name": "Atom", "symbols": ["TableConstructor"]}, {"name": "Number", "symbols": ["_number"], "postprocess": function(d) {return {'literal': parseFloat(d[0])}} }, {"name": "_posint", "symbols": [/[0-9]/], "postprocess": id }, {"name": "_posint", "symbols": ["_posint", /[0-9]/], "postprocess": function(d) {return d[0] + d[1]} }, {"name": "_int", "symbols": [{"literal":"-"}, "_posint"], "postprocess": function(d) {return d[0] + d[1]; }}, {"name": "_int", "symbols": ["_posint"], "postprocess": id }, {"name": "_float", "symbols": ["_int"], "postprocess": id }, {"name": "_float", "symbols": ["_int", {"literal":"."}, "_posint"], "postprocess": function(d) {return d[0] + d[1] + d[2]; }}, {"name": "_number", "symbols": ["_float"], "postprocess": id }, {"name": "_number", "symbols": ["_float", {"literal":"e"}, "_int"], "postprocess": function(d){return d[0] + d[1] + d[2]; } }, {"name": "String", "symbols": [{"literal":"\""}, "_string", {"literal":"\""}], "postprocess": function(d) {return {'literal':d[1]}; } }, {"name": "_string", "symbols": [], "postprocess": function() {return ""; } }, {"name": "_string", "symbols": ["_string", "_stringchar"], "postprocess": function(d) {return d[0] + d[1];} }, {"name": "_stringchar", "symbols": [/[^\\"]/], "postprocess": id }, {"name": "_stringchar", "symbols": [{"literal":"\\"}, /[^]/], "postprocess": function(d) {return JSON.parse("\"" + d[0] + d[1] + "\""); } }, {"name": "_", "symbols": []}, {"name": "_", "symbols": ["_", /[\s]/], "postprocess": function() {} }, {"name": "__", "symbols": [/[\s]/]}, {"name": "__", "symbols": ["__", /[\s]/], "postprocess": function() {} } ] , ParserStart: "Chunk" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/numberstring.js000066400000000000000000000340151376321042600256210ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var nameMap = { one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9, ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19, twenty:20,thirty:30,fourty:40,fifty:50,sixty:60,seventy:70,eighty:80,ninety:90, hundred:100,thousand:1000,million:1000000,billion:1000000000 }; var nameToVal = function(d) { return nameMap[d]; }; var nothing = function (d) { return null; }; var sumParts = function(d) { var retVal = 0; for(var i=0;i d[2]}, {"name": "r_value", "symbols": ["join"], "postprocess": id}, {"name": "r_value", "symbols": ["n4"], "postprocess": id}, {"name": "b_parens", "symbols": [{"literal":"<"}, "_", "b8", "_", {"literal":">"}], "postprocess": d => d[2]}, {"name": "predicate", "symbols": ["simple_predicate"], "postprocess": id}, {"name": "join$string$1", "symbols": [{"literal":"j"}, {"literal":"o"}, {"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "join", "symbols": ["join$string$1", "__", "jpart", "__", "jpart"], "postprocess": d => ["concatenate:with:", d[2], d[4]]}, {"name": "jpart", "symbols": ["s0"], "postprocess": id}, {"name": "jpart", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "jpart", "symbols": ["join"], "postprocess": id}, {"name": "jpart", "symbols": ["r_parens"], "postprocess": id}, {"name": "jpart", "symbols": ["b_parens"], "postprocess": id}, {"name": "predicate$string$1", "symbols": [{"literal":"t"}, {"literal":"o"}, {"literal":"u"}, {"literal":"c"}, {"literal":"h"}, {"literal":"i"}, {"literal":"n"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "predicate$string$2", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"l"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "predicate", "symbols": ["predicate$string$1", "__", "predicate$string$2", "__", "c", "_", {"literal":"?"}], "postprocess": d => ["touchingColor:", d[4]]}, {"name": "predicate$string$3", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"l"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "predicate$string$4", "symbols": [{"literal":"i"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "predicate$string$5", "symbols": [{"literal":"t"}, {"literal":"o"}, {"literal":"u"}, {"literal":"c"}, {"literal":"h"}, {"literal":"i"}, {"literal":"n"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "predicate", "symbols": ["predicate$string$3", "__", "c", "__", "predicate$string$4", "__", "predicate$string$5", "__", "c", "_", {"literal":"?"}], "postprocess": d => ["color:sees:", d[2], d[8]]}, {"name": "b8", "symbols": ["b_and"], "postprocess": id}, {"name": "b8", "symbols": ["b_or"], "postprocess": id}, {"name": "b8", "symbols": ["b7"], "postprocess": id}, {"name": "b_and$string$1", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b_and", "symbols": ["b_and", "__", "b_and$string$1", "__", "b7"], "postprocess": d => ["&", d[0], d[4]]}, {"name": "b_and$string$2", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b_and", "symbols": ["b7", "__", "b_and$string$2", "__", "b7"], "postprocess": d => ["&", d[0], d[4]]}, {"name": "b_or$string$1", "symbols": [{"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b_or", "symbols": ["b_or", "__", "b_or$string$1", "__", "b7"], "postprocess": d => ["|", d[0], d[4]]}, {"name": "b_or$string$2", "symbols": [{"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b_or", "symbols": ["b7", "__", "b_or$string$2", "__", "b7"], "postprocess": d => ["|", d[0], d[4]]}, {"name": "b7$string$1", "symbols": [{"literal":"n"}, {"literal":"o"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b7", "symbols": ["b7$string$1", "__", "b7"], "postprocess": d => ["not", d[2]]}, {"name": "b7", "symbols": ["b6"], "postprocess": id}, {"name": "b6", "symbols": ["sb", "_", {"literal":"<"}, "_", "sb"], "postprocess": d => ["<", d[0], d[4]]}, {"name": "b6", "symbols": ["sb", "_", {"literal":">"}, "_", "sb"], "postprocess": d => [">", d[0], d[4]]}, {"name": "b6", "symbols": ["sb", "_", {"literal":"="}, "_", "sb"], "postprocess": d => ["=", d[0], d[4]]}, {"name": "b6$string$1", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"n"}, {"literal":"t"}, {"literal":"a"}, {"literal":"i"}, {"literal":"n"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b6", "symbols": ["m_list", "__", "b6$string$1", "__", "sb", "_", {"literal":"?"}], "postprocess": d => ["list:contains:", d[0], d[4]]}, {"name": "b6", "symbols": ["predicate"], "postprocess": id}, {"name": "b6", "symbols": ["b2"], "postprocess": id}, {"name": "b2", "symbols": ["b_parens"], "postprocess": id}, {"name": "b2", "symbols": ["b0"], "postprocess": id}, {"name": "n4", "symbols": ["n4", "_", {"literal":"+"}, "_", "n3"], "postprocess": d => ["+", d[0], d[4]]}, {"name": "n4", "symbols": ["n4", "_", {"literal":"-"}, "_", "n3"], "postprocess": d => ["-", d[0], d[4]]}, {"name": "n4", "symbols": ["n3"], "postprocess": id}, {"name": "n3", "symbols": ["n3", "_", {"literal":"*"}, "_", "n2"], "postprocess": d => ["*", d[0], d[4]]}, {"name": "n3", "symbols": ["n3", "_", {"literal":"/"}, "_", "n2"], "postprocess": d => ["/", d[0], d[4]]}, {"name": "n3$string$1", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n3", "symbols": ["n3", "_", "n3$string$1", "_", "n2"], "postprocess": d => ["%", d[0], d[4]]}, {"name": "n3", "symbols": ["n2"], "postprocess": id}, {"name": "n2$string$1", "symbols": [{"literal":"r"}, {"literal":"o"}, {"literal":"u"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["n2$string$1", "__", "n2"], "postprocess": d => ["rounded", d[2]]}, {"name": "n2$string$2", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["m_mathOp", "__", "n2$string$2", "__", "n2"], "postprocess": d => ["computeFunction:of:", d[0], d[4]]}, {"name": "n2$string$3", "symbols": [{"literal":"p"}, {"literal":"i"}, {"literal":"c"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2$string$4", "symbols": [{"literal":"r"}, {"literal":"a"}, {"literal":"n"}, {"literal":"d"}, {"literal":"o"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2$string$5", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["n2$string$3", "__", "n2$string$4", "__", "n4", "__", "n2$string$5", "__", "n2"], "postprocess": d => ["randomFrom:to:", d[4], d[8]]}, {"name": "n2$string$6", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["m_attribute", "__", "n2$string$6", "__", "m_spriteOrStage"], "postprocess": d => ["getAttribute:of:", d[0], d[4]]}, {"name": "n2$string$7", "symbols": [{"literal":"d"}, {"literal":"i"}, {"literal":"s"}, {"literal":"t"}, {"literal":"a"}, {"literal":"n"}, {"literal":"c"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2$string$8", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["n2$string$7", "__", "n2$string$8", "__", "m_spriteOrMouse"], "postprocess": d => ["distanceTo:", d[4]]}, {"name": "n2$string$9", "symbols": [{"literal":"l"}, {"literal":"e"}, {"literal":"n"}, {"literal":"g"}, {"literal":"t"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2$string$10", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["n2$string$9", "__", "n2$string$10", "__", "s2"], "postprocess": d => ["stringLength:", d[4]]}, {"name": "n2$string$11", "symbols": [{"literal":"l"}, {"literal":"e"}, {"literal":"t"}, {"literal":"t"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2$string$12", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "n2", "symbols": ["n2$string$11", "__", "n", "__", "n2$string$12", "__", "s2"], "postprocess": d => ["letter:of:", d[2], d[6]]}, {"name": "n2", "symbols": ["n1"], "postprocess": id}, {"name": "n1", "symbols": ["simple_reporter"], "postprocess": id}, {"name": "n1", "symbols": ["r_parens"], "postprocess": id}, {"name": "n1", "symbols": ["b_parens"], "postprocess": id}, {"name": "n1", "symbols": ["n0"], "postprocess": id}, {"name": "s2", "symbols": ["s0"], "postprocess": id}, {"name": "s2", "symbols": ["n1"], "postprocess": id}, {"name": "n0", "symbols": [{"literal":"-"}, "_", "number"], "postprocess": d => -d[2]}, {"name": "n0", "symbols": ["number"], "postprocess": d => d[0]}, {"name": "n0", "symbols": [{"literal":"_"}], "postprocess": d => 0}, {"name": "s0", "symbols": ["string"], "postprocess": id}, {"name": "b0$string$1", "symbols": [{"literal":"<"}, {"literal":">"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "b0", "symbols": ["b0$string$1"], "postprocess": d => false}, {"name": "c0", "symbols": ["color"], "postprocess": id}, {"name": "_greenFlag$string$1", "symbols": [{"literal":"f"}, {"literal":"l"}, {"literal":"a"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_greenFlag", "symbols": ["_greenFlag$string$1"]}, {"name": "_greenFlag$string$2", "symbols": [{"literal":"g"}, {"literal":"r"}, {"literal":"e"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_greenFlag$string$3", "symbols": [{"literal":"f"}, {"literal":"l"}, {"literal":"a"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_greenFlag", "symbols": ["_greenFlag$string$2", "__", "_greenFlag$string$3"]}, {"name": "_turnLeft$string$1", "symbols": [{"literal":"c"}, {"literal":"c"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_turnLeft", "symbols": ["_turnLeft$string$1"]}, {"name": "_turnLeft$string$2", "symbols": [{"literal":"l"}, {"literal":"e"}, {"literal":"f"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_turnLeft", "symbols": ["_turnLeft$string$2"]}, {"name": "_turnRight$string$1", "symbols": [{"literal":"c"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_turnRight", "symbols": ["_turnRight$string$1"]}, {"name": "_turnRight$string$2", "symbols": [{"literal":"r"}, {"literal":"i"}, {"literal":"g"}, {"literal":"h"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "_turnRight", "symbols": ["_turnRight$string$2"]}, {"name": "c0$string$1", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$1"], "postprocess": id}, {"name": "c0$string$2", "symbols": [{"literal":"o"}, {"literal":"r"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$2"], "postprocess": id}, {"name": "c0$string$3", "symbols": [{"literal":"y"}, {"literal":"e"}, {"literal":"l"}, {"literal":"l"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$3"], "postprocess": id}, {"name": "c0$string$4", "symbols": [{"literal":"g"}, {"literal":"r"}, {"literal":"e"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$4"], "postprocess": id}, {"name": "c0$string$5", "symbols": [{"literal":"b"}, {"literal":"l"}, {"literal":"u"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$5"], "postprocess": id}, {"name": "c0$string$6", "symbols": [{"literal":"p"}, {"literal":"u"}, {"literal":"r"}, {"literal":"p"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$6"], "postprocess": id}, {"name": "c0$string$7", "symbols": [{"literal":"b"}, {"literal":"l"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$7"], "postprocess": id}, {"name": "c0$string$8", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"i"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$8"], "postprocess": id}, {"name": "c0$string$9", "symbols": [{"literal":"p"}, {"literal":"i"}, {"literal":"n"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$9"], "postprocess": id}, {"name": "c0$string$10", "symbols": [{"literal":"b"}, {"literal":"r"}, {"literal":"o"}, {"literal":"w"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "c0", "symbols": ["c0$string$10"], "postprocess": id}, {"name": "m_attribute$string$1", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"s"}, {"literal":"i"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": [{"literal":"x"}, "__", "m_attribute$string$1"], "postprocess": d => "x position"}, {"name": "m_attribute$string$2", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"s"}, {"literal":"i"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": [{"literal":"y"}, "__", "m_attribute$string$2"], "postprocess": d => "y position"}, {"name": "m_attribute$string$3", "symbols": [{"literal":"d"}, {"literal":"i"}, {"literal":"r"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$3"], "postprocess": id}, {"name": "m_attribute$string$4", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}, {"literal":"t"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$4", "__", {"literal":"#"}], "postprocess": d => "costume #"}, {"name": "m_attribute$string$5", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}, {"literal":"t"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute$string$6", "symbols": [{"literal":"n"}, {"literal":"a"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$5", "__", "m_attribute$string$6"], "postprocess": d => "costume name"}, {"name": "m_attribute$string$7", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$7", "__", {"literal":"#"}], "postprocess": d => "backdrop #"}, {"name": "m_attribute$string$8", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute$string$9", "symbols": [{"literal":"n"}, {"literal":"a"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$8", "__", "m_attribute$string$9"], "postprocess": d => "backdrop name"}, {"name": "m_attribute$string$10", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"z"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$10"], "postprocess": id}, {"name": "m_attribute$string$11", "symbols": [{"literal":"v"}, {"literal":"o"}, {"literal":"l"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_attribute", "symbols": ["m_attribute$string$11"], "postprocess": id}, {"name": "m_attribute", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_backdrop", "symbols": ["jpart"], "postprocess": id}, {"name": "m_backdrop", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_broadcast", "symbols": ["jpart"], "postprocess": id}, {"name": "m_broadcast", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_costume", "symbols": ["jpart"], "postprocess": id}, {"name": "m_costume", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_effect$string$1", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"l"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$1"], "postprocess": id}, {"name": "m_effect$string$2", "symbols": [{"literal":"f"}, {"literal":"i"}, {"literal":"s"}, {"literal":"h"}, {"literal":"e"}, {"literal":"y"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$2"], "postprocess": id}, {"name": "m_effect$string$3", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"i"}, {"literal":"r"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$3"], "postprocess": id}, {"name": "m_effect$string$4", "symbols": [{"literal":"p"}, {"literal":"i"}, {"literal":"x"}, {"literal":"e"}, {"literal":"l"}, {"literal":"a"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$4"], "postprocess": id}, {"name": "m_effect$string$5", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"s"}, {"literal":"a"}, {"literal":"i"}, {"literal":"c"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$5"], "postprocess": id}, {"name": "m_effect$string$6", "symbols": [{"literal":"b"}, {"literal":"r"}, {"literal":"i"}, {"literal":"g"}, {"literal":"h"}, {"literal":"t"}, {"literal":"n"}, {"literal":"e"}, {"literal":"s"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$6"], "postprocess": id}, {"name": "m_effect$string$7", "symbols": [{"literal":"g"}, {"literal":"h"}, {"literal":"o"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_effect", "symbols": ["m_effect$string$7"], "postprocess": id}, {"name": "m_effect", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_key$string$1", "symbols": [{"literal":"s"}, {"literal":"p"}, {"literal":"a"}, {"literal":"c"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key", "symbols": ["m_key$string$1"], "postprocess": id}, {"name": "m_key$string$2", "symbols": [{"literal":"u"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key$string$3", "symbols": [{"literal":"a"}, {"literal":"r"}, {"literal":"r"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key", "symbols": ["m_key$string$2", "__", "m_key$string$3"], "postprocess": d => "up arrow"}, {"name": "m_key$string$4", "symbols": [{"literal":"d"}, {"literal":"o"}, {"literal":"w"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key$string$5", "symbols": [{"literal":"a"}, {"literal":"r"}, {"literal":"r"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key", "symbols": ["m_key$string$4", "__", "m_key$string$5"], "postprocess": d => "down arrow"}, {"name": "m_key$string$6", "symbols": [{"literal":"r"}, {"literal":"i"}, {"literal":"g"}, {"literal":"h"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key$string$7", "symbols": [{"literal":"a"}, {"literal":"r"}, {"literal":"r"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key", "symbols": ["m_key$string$6", "__", "m_key$string$7"], "postprocess": d => "right arrow"}, {"name": "m_key$string$8", "symbols": [{"literal":"l"}, {"literal":"e"}, {"literal":"f"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key$string$9", "symbols": [{"literal":"a"}, {"literal":"r"}, {"literal":"r"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key", "symbols": ["m_key$string$8", "__", "m_key$string$9"], "postprocess": d => "left arrow"}, {"name": "m_key$string$10", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_key", "symbols": ["m_key$string$10"], "postprocess": id}, {"name": "m_key", "symbols": [/[a-z0-9]/], "postprocess": id}, {"name": "m_key", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_list", "symbols": ["ListName"], "postprocess": id}, {"name": "m_list", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_location", "symbols": ["jpart"], "postprocess": id}, {"name": "m_location$string$1", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"u"}, {"literal":"s"}, {"literal":"e"}, {"literal":"-"}, {"literal":"p"}, {"literal":"o"}, {"literal":"i"}, {"literal":"n"}, {"literal":"t"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_location", "symbols": ["m_location$string$1"], "postprocess": d => "_mouse_"}, {"name": "m_location$string$2", "symbols": [{"literal":"r"}, {"literal":"a"}, {"literal":"n"}, {"literal":"d"}, {"literal":"o"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_location$string$3", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"s"}, {"literal":"i"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_location", "symbols": ["m_location$string$2", "__", "m_location$string$3"], "postprocess": d => "_random_"}, {"name": "m_location", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_mathOp$string$1", "symbols": [{"literal":"a"}, {"literal":"b"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$1"], "postprocess": id}, {"name": "m_mathOp$string$2", "symbols": [{"literal":"f"}, {"literal":"l"}, {"literal":"o"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$2"], "postprocess": id}, {"name": "m_mathOp$string$3", "symbols": [{"literal":"c"}, {"literal":"e"}, {"literal":"i"}, {"literal":"l"}, {"literal":"i"}, {"literal":"n"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$3"], "postprocess": id}, {"name": "m_mathOp$string$4", "symbols": [{"literal":"s"}, {"literal":"q"}, {"literal":"r"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$4"], "postprocess": id}, {"name": "m_mathOp$string$5", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$5"], "postprocess": id}, {"name": "m_mathOp$string$6", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$6"], "postprocess": id}, {"name": "m_mathOp$string$7", "symbols": [{"literal":"t"}, {"literal":"a"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$7"], "postprocess": id}, {"name": "m_mathOp$string$8", "symbols": [{"literal":"a"}, {"literal":"s"}, {"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$8"], "postprocess": id}, {"name": "m_mathOp$string$9", "symbols": [{"literal":"a"}, {"literal":"c"}, {"literal":"o"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$9"], "postprocess": id}, {"name": "m_mathOp$string$10", "symbols": [{"literal":"a"}, {"literal":"t"}, {"literal":"a"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$10"], "postprocess": id}, {"name": "m_mathOp$string$11", "symbols": [{"literal":"l"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$11"], "postprocess": id}, {"name": "m_mathOp$string$12", "symbols": [{"literal":"l"}, {"literal":"o"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$12"], "postprocess": id}, {"name": "m_mathOp", "symbols": [{"literal":"e"}, "_", {"literal":"^"}], "postprocess": d => "e ^"}, {"name": "m_mathOp$string$13", "symbols": [{"literal":"1"}, {"literal":"0"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_mathOp", "symbols": ["m_mathOp$string$13", "_", {"literal":"^"}], "postprocess": d => "10 ^"}, {"name": "m_mathOp", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_rotationStyle$string$1", "symbols": [{"literal":"l"}, {"literal":"e"}, {"literal":"f"}, {"literal":"t"}, {"literal":"-"}, {"literal":"r"}, {"literal":"i"}, {"literal":"g"}, {"literal":"h"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_rotationStyle", "symbols": ["m_rotationStyle$string$1"], "postprocess": id}, {"name": "m_rotationStyle$string$2", "symbols": [{"literal":"d"}, {"literal":"o"}, {"literal":"n"}, {"literal":"'"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_rotationStyle$string$3", "symbols": [{"literal":"r"}, {"literal":"o"}, {"literal":"t"}, {"literal":"a"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_rotationStyle", "symbols": ["m_rotationStyle$string$2", "__", "m_rotationStyle$string$3"], "postprocess": d => "don't rotate"}, {"name": "m_rotationStyle$string$4", "symbols": [{"literal":"a"}, {"literal":"l"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_rotationStyle$string$5", "symbols": [{"literal":"a"}, {"literal":"r"}, {"literal":"o"}, {"literal":"u"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_rotationStyle", "symbols": ["m_rotationStyle$string$4", "__", "m_rotationStyle$string$5"], "postprocess": d => "all around"}, {"name": "m_rotationStyle", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_scene", "symbols": ["jpart"], "postprocess": id}, {"name": "m_scene", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_sound", "symbols": ["jpart"], "postprocess": id}, {"name": "m_sound", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_spriteOnly", "symbols": ["jpart"], "postprocess": id}, {"name": "m_spriteOnly$string$1", "symbols": [{"literal":"m"}, {"literal":"y"}, {"literal":"s"}, {"literal":"e"}, {"literal":"l"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_spriteOnly", "symbols": ["m_spriteOnly$string$1"], "postprocess": d => "_myself_"}, {"name": "m_spriteOnly", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_spriteOrMouse", "symbols": ["jpart"], "postprocess": id}, {"name": "m_spriteOrMouse$string$1", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"u"}, {"literal":"s"}, {"literal":"e"}, {"literal":"-"}, {"literal":"p"}, {"literal":"o"}, {"literal":"i"}, {"literal":"n"}, {"literal":"t"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_spriteOrMouse", "symbols": ["m_spriteOrMouse$string$1"], "postprocess": d => "_mouse_"}, {"name": "m_spriteOrMouse", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_spriteOrStage", "symbols": ["jpart"], "postprocess": id}, {"name": "m_spriteOrStage$string$1", "symbols": [{"literal":"S"}, {"literal":"t"}, {"literal":"a"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_spriteOrStage", "symbols": ["m_spriteOrStage$string$1"], "postprocess": d => "_stage_"}, {"name": "m_spriteOrStage", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_stageOrThis$string$1", "symbols": [{"literal":"S"}, {"literal":"t"}, {"literal":"a"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stageOrThis", "symbols": ["m_stageOrThis$string$1"], "postprocess": d => "_stage_"}, {"name": "m_stageOrThis$string$2", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"i"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stageOrThis$string$3", "symbols": [{"literal":"s"}, {"literal":"p"}, {"literal":"r"}, {"literal":"i"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stageOrThis", "symbols": ["m_stageOrThis$string$2", "__", "m_stageOrThis$string$3"], "postprocess": d => "this sprite"}, {"name": "m_stageOrThis", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_stop$string$1", "symbols": [{"literal":"a"}, {"literal":"l"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop", "symbols": ["m_stop$string$1"], "postprocess": id}, {"name": "m_stop$string$2", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"i"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop$string$3", "symbols": [{"literal":"s"}, {"literal":"c"}, {"literal":"r"}, {"literal":"i"}, {"literal":"p"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop", "symbols": ["m_stop$string$2", "__", "m_stop$string$3"], "postprocess": d => "this script"}, {"name": "m_stop$string$4", "symbols": [{"literal":"o"}, {"literal":"t"}, {"literal":"h"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop$string$5", "symbols": [{"literal":"s"}, {"literal":"c"}, {"literal":"r"}, {"literal":"i"}, {"literal":"p"}, {"literal":"t"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop$string$6", "symbols": [{"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop$string$7", "symbols": [{"literal":"s"}, {"literal":"p"}, {"literal":"r"}, {"literal":"i"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_stop", "symbols": ["m_stop$string$4", "__", "m_stop$string$5", "__", "m_stop$string$6", "__", "m_stop$string$7"], "postprocess": d => "other scripts in sprite"}, {"name": "m_stop", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_timeAndDate$string$1", "symbols": [{"literal":"y"}, {"literal":"e"}, {"literal":"a"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$1"], "postprocess": id}, {"name": "m_timeAndDate$string$2", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"n"}, {"literal":"t"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$2"], "postprocess": id}, {"name": "m_timeAndDate$string$3", "symbols": [{"literal":"d"}, {"literal":"a"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$3"], "postprocess": id}, {"name": "m_timeAndDate$string$4", "symbols": [{"literal":"d"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate$string$5", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate$string$6", "symbols": [{"literal":"w"}, {"literal":"e"}, {"literal":"e"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$4", "__", "m_timeAndDate$string$5", "__", "m_timeAndDate$string$6"], "postprocess": d => "day of week"}, {"name": "m_timeAndDate$string$7", "symbols": [{"literal":"h"}, {"literal":"o"}, {"literal":"u"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$7"], "postprocess": id}, {"name": "m_timeAndDate$string$8", "symbols": [{"literal":"m"}, {"literal":"i"}, {"literal":"n"}, {"literal":"u"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$8"], "postprocess": id}, {"name": "m_timeAndDate$string$9", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"c"}, {"literal":"o"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_timeAndDate", "symbols": ["m_timeAndDate$string$9"], "postprocess": id}, {"name": "m_timeAndDate", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_touching", "symbols": ["jpart"], "postprocess": id}, {"name": "m_touching$string$1", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"u"}, {"literal":"s"}, {"literal":"e"}, {"literal":"-"}, {"literal":"p"}, {"literal":"o"}, {"literal":"i"}, {"literal":"n"}, {"literal":"t"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_touching", "symbols": ["m_touching$string$1"], "postprocess": d => "_mouse_"}, {"name": "m_touching$string$2", "symbols": [{"literal":"e"}, {"literal":"d"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_touching", "symbols": ["m_touching$string$2"], "postprocess": d => "_edge_"}, {"name": "m_touching", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_triggerSensor$string$1", "symbols": [{"literal":"l"}, {"literal":"o"}, {"literal":"u"}, {"literal":"d"}, {"literal":"n"}, {"literal":"e"}, {"literal":"s"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_triggerSensor", "symbols": ["m_triggerSensor$string$1"], "postprocess": id}, {"name": "m_triggerSensor$string$2", "symbols": [{"literal":"t"}, {"literal":"i"}, {"literal":"m"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_triggerSensor", "symbols": ["m_triggerSensor$string$2"], "postprocess": id}, {"name": "m_triggerSensor$string$3", "symbols": [{"literal":"v"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_triggerSensor$string$4", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_triggerSensor", "symbols": ["m_triggerSensor$string$3", "__", "m_triggerSensor$string$4"], "postprocess": d => "video motion"}, {"name": "m_triggerSensor", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_var", "symbols": ["VariableName"], "postprocess": id}, {"name": "m_var", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_varName", "symbols": ["VariableName"], "postprocess": id}, {"name": "m_varName", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_videoMotionType$string$1", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_videoMotionType", "symbols": ["m_videoMotionType$string$1"], "postprocess": id}, {"name": "m_videoMotionType$string$2", "symbols": [{"literal":"d"}, {"literal":"i"}, {"literal":"r"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_videoMotionType", "symbols": ["m_videoMotionType$string$2"], "postprocess": id}, {"name": "m_videoMotionType", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "m_videoState$string$1", "symbols": [{"literal":"o"}, {"literal":"f"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_videoState", "symbols": ["m_videoState$string$1"], "postprocess": id}, {"name": "m_videoState$string$2", "symbols": [{"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_videoState", "symbols": ["m_videoState$string$2"], "postprocess": id}, {"name": "m_videoState$string$3", "symbols": [{"literal":"o"}, {"literal":"n"}, {"literal":"-"}, {"literal":"f"}, {"literal":"l"}, {"literal":"i"}, {"literal":"p"}, {"literal":"p"}, {"literal":"e"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "m_videoState", "symbols": ["m_videoState$string$3"], "postprocess": id}, {"name": "m_videoState", "symbols": [{"literal":"_"}], "postprocess": d => ""}, {"name": "d_direction", "symbols": ["n"], "postprocess": id}, {"name": "d_drum", "symbols": ["n"], "postprocess": id}, {"name": "d_instrument", "symbols": ["n"], "postprocess": id}, {"name": "d_listDeleteItem$string$1", "symbols": [{"literal":"l"}, {"literal":"a"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "d_listDeleteItem", "symbols": ["d_listDeleteItem$string$1"], "postprocess": id}, {"name": "d_listDeleteItem$string$2", "symbols": [{"literal":"a"}, {"literal":"l"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "d_listDeleteItem", "symbols": ["d_listDeleteItem$string$2"], "postprocess": id}, {"name": "d_listDeleteItem", "symbols": ["n"], "postprocess": id}, {"name": "d_listItem$string$1", "symbols": [{"literal":"l"}, {"literal":"a"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "d_listItem", "symbols": ["d_listItem$string$1"], "postprocess": id}, {"name": "d_listItem$string$2", "symbols": [{"literal":"r"}, {"literal":"a"}, {"literal":"n"}, {"literal":"d"}, {"literal":"o"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "d_listItem", "symbols": ["d_listItem$string$2"], "postprocess": id}, {"name": "d_listItem", "symbols": ["n"], "postprocess": id}, {"name": "d_note", "symbols": ["n"], "postprocess": id}, {"name": "m_attribute", "symbols": ["jpart"], "postprocess": id}, {"name": "block$string$1", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"v"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$2", "symbols": [{"literal":"s"}, {"literal":"t"}, {"literal":"e"}, {"literal":"p"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$1", "__", "n", "__", "block$string$2"], "postprocess": d => ["forward:", d[2]]}, {"name": "block$string$3", "symbols": [{"literal":"t"}, {"literal":"u"}, {"literal":"r"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$4", "symbols": [{"literal":"d"}, {"literal":"e"}, {"literal":"g"}, {"literal":"r"}, {"literal":"e"}, {"literal":"e"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$3", "__", "_turnRight", "__", "n", "__", "block$string$4"], "postprocess": d => ["turnRight:", d[2], d[4]]}, {"name": "block$string$5", "symbols": [{"literal":"t"}, {"literal":"u"}, {"literal":"r"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$6", "symbols": [{"literal":"d"}, {"literal":"e"}, {"literal":"g"}, {"literal":"r"}, {"literal":"e"}, {"literal":"e"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$5", "__", "_turnLeft", "__", "n", "__", "block$string$6"], "postprocess": d => ["turnLeft:", d[2], d[4]]}, {"name": "block$string$7", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"i"}, {"literal":"n"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$8", "symbols": [{"literal":"i"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$9", "symbols": [{"literal":"d"}, {"literal":"i"}, {"literal":"r"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$7", "__", "block$string$8", "__", "block$string$9", "__", "d_direction"], "postprocess": d => ["heading:", d[6]]}, {"name": "block$string$10", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"i"}, {"literal":"n"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$11", "symbols": [{"literal":"t"}, {"literal":"o"}, {"literal":"w"}, {"literal":"a"}, {"literal":"r"}, {"literal":"d"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$10", "__", "block$string$11", "__", "m_spriteOrMouse"], "postprocess": d => ["pointTowards:", d[4]]}, {"name": "block$string$12", "symbols": [{"literal":"g"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$13", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$14", "symbols": [{"literal":"x"}, {"literal":":"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$15", "symbols": [{"literal":"y"}, {"literal":":"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$12", "__", "block$string$13", "__", "block$string$14", "__", "n", "__", "block$string$15", "__", "n"], "postprocess": d => ["gotoX:y:", d[6], d[10]]}, {"name": "block$string$16", "symbols": [{"literal":"g"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$17", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$16", "__", "block$string$17", "__", "m_location"], "postprocess": d => ["gotoSpriteOrMouse:", d[4]]}, {"name": "block$string$18", "symbols": [{"literal":"g"}, {"literal":"l"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$19", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"c"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$20", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$21", "symbols": [{"literal":"x"}, {"literal":":"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$22", "symbols": [{"literal":"y"}, {"literal":":"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$18", "__", "n", "__", "block$string$19", "__", "block$string$20", "__", "block$string$21", "__", "n", "__", "block$string$22", "__", "n"], "postprocess": d => ["glideSecs:toX:y:elapsed:from:", d[2], d[10], d[14]]}, {"name": "block$string$23", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$24", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$23", "__", {"literal":"x"}, "__", "block$string$24", "__", "n"], "postprocess": d => ["changeXposBy:", d[6]]}, {"name": "block$string$25", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$26", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$25", "__", {"literal":"x"}, "__", "block$string$26", "__", "n"], "postprocess": d => ["xpos:", d[6]]}, {"name": "block$string$27", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$28", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$27", "__", {"literal":"y"}, "__", "block$string$28", "__", "n"], "postprocess": d => ["changeYposBy:", d[6]]}, {"name": "block$string$29", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$30", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$29", "__", {"literal":"y"}, "__", "block$string$30", "__", "n"], "postprocess": d => ["ypos:", d[6]]}, {"name": "block$string$31", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$32", "symbols": [{"literal":"r"}, {"literal":"o"}, {"literal":"t"}, {"literal":"a"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$33", "symbols": [{"literal":"s"}, {"literal":"t"}, {"literal":"y"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$31", "__", "block$string$32", "__", "block$string$33", "__", "m_rotationStyle"], "postprocess": d => ["setRotationStyle", d[6]]}, {"name": "block$string$34", "symbols": [{"literal":"s"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$35", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$36", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"c"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$34", "__", "sb", "__", "block$string$35", "__", "n", "__", "block$string$36"], "postprocess": d => ["say:duration:elapsed:from:", d[2], d[6]]}, {"name": "block$string$37", "symbols": [{"literal":"s"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$37", "__", "sb"], "postprocess": d => ["say:", d[2]]}, {"name": "block$string$38", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"i"}, {"literal":"n"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$39", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$40", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"c"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$38", "__", "sb", "__", "block$string$39", "__", "n", "__", "block$string$40"], "postprocess": d => ["think:duration:elapsed:from:", d[2], d[6]]}, {"name": "block$string$41", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"i"}, {"literal":"n"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$41", "__", "sb"], "postprocess": d => ["think:", d[2]]}, {"name": "block$string$42", "symbols": [{"literal":"s"}, {"literal":"h"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$42"], "postprocess": d => ["show"]}, {"name": "block$string$43", "symbols": [{"literal":"h"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$43"], "postprocess": d => ["hide"]}, {"name": "block$string$44", "symbols": [{"literal":"s"}, {"literal":"w"}, {"literal":"i"}, {"literal":"t"}, {"literal":"c"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$45", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}, {"literal":"t"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$46", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$44", "__", "block$string$45", "__", "block$string$46", "__", "m_costume"], "postprocess": d => ["lookLike:", d[6]]}, {"name": "block$string$47", "symbols": [{"literal":"n"}, {"literal":"e"}, {"literal":"x"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$48", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}, {"literal":"t"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$47", "__", "block$string$48"], "postprocess": d => ["nextCostume"]}, {"name": "block$string$49", "symbols": [{"literal":"n"}, {"literal":"e"}, {"literal":"x"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$50", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$49", "__", "block$string$50"], "postprocess": d => ["nextScene"]}, {"name": "block$string$51", "symbols": [{"literal":"s"}, {"literal":"w"}, {"literal":"i"}, {"literal":"t"}, {"literal":"c"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$52", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$53", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$51", "__", "block$string$52", "__", "block$string$53", "__", "m_backdrop"], "postprocess": d => ["startScene", d[6]]}, {"name": "block$string$54", "symbols": [{"literal":"s"}, {"literal":"w"}, {"literal":"i"}, {"literal":"t"}, {"literal":"c"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$55", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$56", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$57", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$58", "symbols": [{"literal":"w"}, {"literal":"a"}, {"literal":"i"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$54", "__", "block$string$55", "__", "block$string$56", "__", "m_backdrop", "__", "block$string$57", "__", "block$string$58"], "postprocess": d => ["startSceneAndWait", d[6]]}, {"name": "block$string$59", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$60", "symbols": [{"literal":"e"}, {"literal":"f"}, {"literal":"f"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$61", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$59", "__", "m_effect", "__", "block$string$60", "__", "block$string$61", "__", "n"], "postprocess": d => ["changeGraphicEffect:by:", d[2], d[8]]}, {"name": "block$string$62", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$63", "symbols": [{"literal":"e"}, {"literal":"f"}, {"literal":"f"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$64", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$62", "__", "m_effect", "__", "block$string$63", "__", "block$string$64", "__", "n"], "postprocess": d => ["setGraphicEffect:to:", d[2], d[8]]}, {"name": "block$string$65", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"e"}, {"literal":"a"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$66", "symbols": [{"literal":"g"}, {"literal":"r"}, {"literal":"a"}, {"literal":"p"}, {"literal":"h"}, {"literal":"i"}, {"literal":"c"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$67", "symbols": [{"literal":"e"}, {"literal":"f"}, {"literal":"f"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$65", "__", "block$string$66", "__", "block$string$67"], "postprocess": d => ["filterReset"]}, {"name": "block$string$68", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$69", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"z"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$70", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$68", "__", "block$string$69", "__", "block$string$70", "__", "n"], "postprocess": d => ["changeSizeBy:", d[6]]}, {"name": "block$string$71", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$72", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"z"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$73", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$71", "__", "block$string$72", "__", "block$string$73", "__", "n", "__", {"literal":"%"}], "postprocess": d => ["setSizeTo:", d[6]]}, {"name": "block$string$74", "symbols": [{"literal":"g"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$75", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$76", "symbols": [{"literal":"f"}, {"literal":"r"}, {"literal":"o"}, {"literal":"n"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$74", "__", "block$string$75", "__", "block$string$76"], "postprocess": d => ["comeToFront"]}, {"name": "block$string$77", "symbols": [{"literal":"g"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$78", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$79", "symbols": [{"literal":"l"}, {"literal":"a"}, {"literal":"y"}, {"literal":"e"}, {"literal":"r"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$77", "__", "block$string$78", "__", "n", "__", "block$string$79"], "postprocess": d => ["goBackByLayers:", d[4]]}, {"name": "block$string$80", "symbols": [{"literal":"p"}, {"literal":"l"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$81", "symbols": [{"literal":"s"}, {"literal":"o"}, {"literal":"u"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$80", "__", "block$string$81", "__", "m_sound"], "postprocess": d => ["playSound:", d[4]]}, {"name": "block$string$82", "symbols": [{"literal":"p"}, {"literal":"l"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$83", "symbols": [{"literal":"s"}, {"literal":"o"}, {"literal":"u"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$84", "symbols": [{"literal":"u"}, {"literal":"n"}, {"literal":"t"}, {"literal":"i"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$85", "symbols": [{"literal":"d"}, {"literal":"o"}, {"literal":"n"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$82", "__", "block$string$83", "__", "m_sound", "__", "block$string$84", "__", "block$string$85"], "postprocess": d => ["doPlaySoundAndWait", d[4]]}, {"name": "block$string$86", "symbols": [{"literal":"s"}, {"literal":"t"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$87", "symbols": [{"literal":"a"}, {"literal":"l"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$88", "symbols": [{"literal":"s"}, {"literal":"o"}, {"literal":"u"}, {"literal":"n"}, {"literal":"d"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$86", "__", "block$string$87", "__", "block$string$88"], "postprocess": d => ["stopAllSounds"]}, {"name": "block$string$89", "symbols": [{"literal":"p"}, {"literal":"l"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$90", "symbols": [{"literal":"d"}, {"literal":"r"}, {"literal":"u"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$91", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$92", "symbols": [{"literal":"b"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$89", "__", "block$string$90", "__", "d_drum", "__", "block$string$91", "__", "n", "__", "block$string$92"], "postprocess": d => ["playDrum", d[4], d[8]]}, {"name": "block$string$93", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$94", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$95", "symbols": [{"literal":"b"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$93", "__", "block$string$94", "__", "n", "__", "block$string$95"], "postprocess": d => ["rest:elapsed:from:", d[4]]}, {"name": "block$string$96", "symbols": [{"literal":"p"}, {"literal":"l"}, {"literal":"a"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$97", "symbols": [{"literal":"n"}, {"literal":"o"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$98", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$99", "symbols": [{"literal":"b"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$96", "__", "block$string$97", "__", "d_note", "__", "block$string$98", "__", "n", "__", "block$string$99"], "postprocess": d => ["noteOn:duration:elapsed:from:", d[4], d[8]]}, {"name": "block$string$100", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$101", "symbols": [{"literal":"i"}, {"literal":"n"}, {"literal":"s"}, {"literal":"t"}, {"literal":"r"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}, {"literal":"n"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$102", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$100", "__", "block$string$101", "__", "block$string$102", "__", "d_instrument"], "postprocess": d => ["instrument:", d[6]]}, {"name": "block$string$103", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$104", "symbols": [{"literal":"v"}, {"literal":"o"}, {"literal":"l"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$105", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$103", "__", "block$string$104", "__", "block$string$105", "__", "n"], "postprocess": d => ["changeVolumeBy:", d[6]]}, {"name": "block$string$106", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$107", "symbols": [{"literal":"v"}, {"literal":"o"}, {"literal":"l"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$108", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$106", "__", "block$string$107", "__", "block$string$108", "__", "n", "__", {"literal":"%"}], "postprocess": d => ["setVolumeTo:", d[6]]}, {"name": "block$string$109", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$110", "symbols": [{"literal":"t"}, {"literal":"e"}, {"literal":"m"}, {"literal":"p"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$111", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$109", "__", "block$string$110", "__", "block$string$111", "__", "n"], "postprocess": d => ["changeTempoBy:", d[6]]}, {"name": "block$string$112", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$113", "symbols": [{"literal":"t"}, {"literal":"e"}, {"literal":"m"}, {"literal":"p"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$114", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$115", "symbols": [{"literal":"b"}, {"literal":"p"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$112", "__", "block$string$113", "__", "block$string$114", "__", "n", "__", "block$string$115"], "postprocess": d => ["setTempoTo:", d[6]]}, {"name": "block$string$116", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"e"}, {"literal":"a"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$116"], "postprocess": d => ["clearPenTrails"]}, {"name": "block$string$117", "symbols": [{"literal":"s"}, {"literal":"t"}, {"literal":"a"}, {"literal":"m"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$117"], "postprocess": d => ["stampCostume"]}, {"name": "block$string$118", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$119", "symbols": [{"literal":"d"}, {"literal":"o"}, {"literal":"w"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$118", "__", "block$string$119"], "postprocess": d => ["putPenDown"]}, {"name": "block$string$120", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$121", "symbols": [{"literal":"u"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$120", "__", "block$string$121"], "postprocess": d => ["putPenUp"]}, {"name": "block$string$122", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$123", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$124", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"l"}, {"literal":"o"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$125", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$122", "__", "block$string$123", "__", "block$string$124", "__", "block$string$125", "__", "c"], "postprocess": d => ["penColor:", d[8]]}, {"name": "block$string$126", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$127", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$128", "symbols": [{"literal":"h"}, {"literal":"u"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$129", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$126", "__", "block$string$127", "__", "block$string$128", "__", "block$string$129", "__", "n"], "postprocess": d => ["changePenHueBy:", d[8]]}, {"name": "block$string$130", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$131", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$132", "symbols": [{"literal":"h"}, {"literal":"u"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$133", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$130", "__", "block$string$131", "__", "block$string$132", "__", "block$string$133", "__", "n"], "postprocess": d => ["setPenHueTo:", d[8]]}, {"name": "block$string$134", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$135", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$136", "symbols": [{"literal":"s"}, {"literal":"h"}, {"literal":"a"}, {"literal":"d"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$137", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$134", "__", "block$string$135", "__", "block$string$136", "__", "block$string$137", "__", "n"], "postprocess": d => ["changePenShadeBy:", d[8]]}, {"name": "block$string$138", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$139", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$140", "symbols": [{"literal":"s"}, {"literal":"h"}, {"literal":"a"}, {"literal":"d"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$141", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$138", "__", "block$string$139", "__", "block$string$140", "__", "block$string$141", "__", "n"], "postprocess": d => ["setPenShadeTo:", d[8]]}, {"name": "block$string$142", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$143", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$144", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"z"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$145", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$142", "__", "block$string$143", "__", "block$string$144", "__", "block$string$145", "__", "n"], "postprocess": d => ["changePenSizeBy:", d[8]]}, {"name": "block$string$146", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$147", "symbols": [{"literal":"p"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$148", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"z"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$149", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$146", "__", "block$string$147", "__", "block$string$148", "__", "block$string$149", "__", "n"], "postprocess": d => ["penSize:", d[8]]}, {"name": "block$string$150", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$151", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"i"}, {"literal":"c"}, {"literal":"k"}, {"literal":"e"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$150", "__", "_greenFlag", "__", "block$string$151"], "postprocess": d => ["whenGreenFlag", d[2]]}, {"name": "block$string$152", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$153", "symbols": [{"literal":"k"}, {"literal":"e"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$154", "symbols": [{"literal":"p"}, {"literal":"r"}, {"literal":"e"}, {"literal":"s"}, {"literal":"s"}, {"literal":"e"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$152", "__", "m_key", "__", "block$string$153", "__", "block$string$154"], "postprocess": d => ["whenKeyPressed", d[2]]}, {"name": "block$string$155", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$156", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"i"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$157", "symbols": [{"literal":"s"}, {"literal":"p"}, {"literal":"r"}, {"literal":"i"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$158", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"i"}, {"literal":"c"}, {"literal":"k"}, {"literal":"e"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$155", "__", "block$string$156", "__", "block$string$157", "__", "block$string$158"], "postprocess": d => ["whenClicked"]}, {"name": "block$string$159", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$160", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$161", "symbols": [{"literal":"s"}, {"literal":"w"}, {"literal":"i"}, {"literal":"t"}, {"literal":"c"}, {"literal":"h"}, {"literal":"e"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$162", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$159", "__", "block$string$160", "__", "block$string$161", "__", "block$string$162", "__", "m_backdrop"], "postprocess": d => ["whenSceneStarts", d[8]]}, {"name": "block$string$163", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$163", "__", "m_triggerSensor", "__", {"literal":">"}, "__", "n"], "postprocess": d => ["whenSensorGreaterThan", d[2], d[6]]}, {"name": "block$string$164", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$165", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"c"}, {"literal":"e"}, {"literal":"i"}, {"literal":"v"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$164", "__", {"literal":"I"}, "__", "block$string$165", "__", "m_broadcast"], "postprocess": d => ["whenIReceive", d[6]]}, {"name": "block$string$166", "symbols": [{"literal":"b"}, {"literal":"r"}, {"literal":"o"}, {"literal":"a"}, {"literal":"d"}, {"literal":"c"}, {"literal":"a"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$166", "__", "m_broadcast"], "postprocess": d => ["broadcast:", d[2]]}, {"name": "block$string$167", "symbols": [{"literal":"b"}, {"literal":"r"}, {"literal":"o"}, {"literal":"a"}, {"literal":"d"}, {"literal":"c"}, {"literal":"a"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$168", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$169", "symbols": [{"literal":"w"}, {"literal":"a"}, {"literal":"i"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$167", "__", "m_broadcast", "__", "block$string$168", "__", "block$string$169"], "postprocess": d => ["doBroadcastAndWait", d[2]]}, {"name": "block$string$170", "symbols": [{"literal":"w"}, {"literal":"a"}, {"literal":"i"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$171", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"c"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$170", "__", "n", "__", "block$string$171"], "postprocess": d => ["wait:elapsed:from:", d[2]]}, {"name": "block$string$172", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"p"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$172", "__", "n"], "postprocess": d => ["doRepeat", d[2]]}, {"name": "block$string$173", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"r"}, {"literal":"e"}, {"literal":"v"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$173"], "postprocess": d => ["doForever"]}, {"name": "block$string$174", "symbols": [{"literal":"i"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$175", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$174", "__", "b", "__", "block$string$175"], "postprocess": d => ["doIfElse", d[2]]}, {"name": "block$string$176", "symbols": [{"literal":"w"}, {"literal":"a"}, {"literal":"i"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$177", "symbols": [{"literal":"u"}, {"literal":"n"}, {"literal":"t"}, {"literal":"i"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$176", "__", "block$string$177", "__", "b"], "postprocess": d => ["doWaitUntil", d[4]]}, {"name": "block$string$178", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"p"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$179", "symbols": [{"literal":"u"}, {"literal":"n"}, {"literal":"t"}, {"literal":"i"}, {"literal":"l"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$178", "__", "block$string$179", "__", "b"], "postprocess": d => ["doUntil", d[4]]}, {"name": "block$string$180", "symbols": [{"literal":"s"}, {"literal":"t"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$180", "__", "m_stop"], "postprocess": d => ["stopScripts", d[2]]}, {"name": "block$string$181", "symbols": [{"literal":"w"}, {"literal":"h"}, {"literal":"e"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$182", "symbols": [{"literal":"s"}, {"literal":"t"}, {"literal":"a"}, {"literal":"r"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$183", "symbols": [{"literal":"a"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$184", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"o"}, {"literal":"n"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$181", "__", {"literal":"I"}, "__", "block$string$182", "__", "block$string$183", "__", {"literal":"a"}, "__", "block$string$184"], "postprocess": d => ["whenCloned"]}, {"name": "block$string$185", "symbols": [{"literal":"c"}, {"literal":"r"}, {"literal":"e"}, {"literal":"a"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$186", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"o"}, {"literal":"n"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$187", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$185", "__", "block$string$186", "__", "block$string$187", "__", "m_spriteOnly"], "postprocess": d => ["createCloneOf", d[6]]}, {"name": "block$string$188", "symbols": [{"literal":"d"}, {"literal":"e"}, {"literal":"l"}, {"literal":"e"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$189", "symbols": [{"literal":"t"}, {"literal":"h"}, {"literal":"i"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$190", "symbols": [{"literal":"c"}, {"literal":"l"}, {"literal":"o"}, {"literal":"n"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$188", "__", "block$string$189", "__", "block$string$190"], "postprocess": d => ["deleteClone"]}, {"name": "block$string$191", "symbols": [{"literal":"a"}, {"literal":"s"}, {"literal":"k"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$192", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$193", "symbols": [{"literal":"w"}, {"literal":"a"}, {"literal":"i"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$191", "__", "sb", "__", "block$string$192", "__", "block$string$193"], "postprocess": d => ["doAsk", d[2]]}, {"name": "block$string$194", "symbols": [{"literal":"t"}, {"literal":"u"}, {"literal":"r"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$195", "symbols": [{"literal":"v"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$194", "__", "block$string$195", "__", "m_videoState"], "postprocess": d => ["setVideoState", d[4]]}, {"name": "block$string$196", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$197", "symbols": [{"literal":"v"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$198", "symbols": [{"literal":"t"}, {"literal":"r"}, {"literal":"a"}, {"literal":"n"}, {"literal":"s"}, {"literal":"p"}, {"literal":"a"}, {"literal":"r"}, {"literal":"e"}, {"literal":"n"}, {"literal":"c"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$199", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$196", "__", "block$string$197", "__", "block$string$198", "__", "block$string$199", "__", "n", "__", {"literal":"%"}], "postprocess": d => ["setVideoTransparency", d[8]]}, {"name": "block$string$200", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$201", "symbols": [{"literal":"t"}, {"literal":"i"}, {"literal":"m"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$200", "__", "block$string$201"], "postprocess": d => ["timerReset"]}, {"name": "block$string$202", "symbols": [{"literal":"s"}, {"literal":"e"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$203", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$202", "__", "m_var", "__", "block$string$203", "__", "sb"], "postprocess": d => ["setVar:to:", d[2], d[6]]}, {"name": "block$string$204", "symbols": [{"literal":"c"}, {"literal":"h"}, {"literal":"a"}, {"literal":"n"}, {"literal":"g"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$205", "symbols": [{"literal":"b"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$204", "__", "m_var", "__", "block$string$205", "__", "n"], "postprocess": d => ["changeVar:by:", d[2], d[6]]}, {"name": "block$string$206", "symbols": [{"literal":"s"}, {"literal":"h"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$207", "symbols": [{"literal":"v"}, {"literal":"a"}, {"literal":"r"}, {"literal":"i"}, {"literal":"a"}, {"literal":"b"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$206", "__", "block$string$207", "__", "m_var"], "postprocess": d => ["showVariable:", d[4]]}, {"name": "block$string$208", "symbols": [{"literal":"h"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$209", "symbols": [{"literal":"v"}, {"literal":"a"}, {"literal":"r"}, {"literal":"i"}, {"literal":"a"}, {"literal":"b"}, {"literal":"l"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$208", "__", "block$string$209", "__", "m_var"], "postprocess": d => ["hideVariable:", d[4]]}, {"name": "block$string$210", "symbols": [{"literal":"a"}, {"literal":"d"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$211", "symbols": [{"literal":"t"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$210", "__", "sb", "__", "block$string$211", "__", "m_list"], "postprocess": d => ["append:toList:", d[2], d[6]]}, {"name": "block$string$212", "symbols": [{"literal":"d"}, {"literal":"e"}, {"literal":"l"}, {"literal":"e"}, {"literal":"t"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$213", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$212", "__", "d_listDeleteItem", "__", "block$string$213", "__", "m_list"], "postprocess": d => ["deleteLine:ofList:", d[2], d[6]]}, {"name": "block$string$214", "symbols": [{"literal":"i"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$215", "symbols": [{"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$216", "symbols": [{"literal":"e"}, {"literal":"d"}, {"literal":"g"}, {"literal":"e"}, {"literal":","}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$217", "symbols": [{"literal":"b"}, {"literal":"o"}, {"literal":"u"}, {"literal":"n"}, {"literal":"c"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$214", "__", "block$string$215", "__", "block$string$216", "__", "block$string$217"], "postprocess": d => ["bounceOffEdge"]}, {"name": "block$string$218", "symbols": [{"literal":"i"}, {"literal":"n"}, {"literal":"s"}, {"literal":"e"}, {"literal":"r"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$219", "symbols": [{"literal":"a"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$220", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$218", "__", "sb", "__", "block$string$219", "__", "d_listItem", "__", "block$string$220", "__", "m_list"], "postprocess": d => ["insert:at:ofList:", d[2], d[6], d[10]]}, {"name": "block$string$221", "symbols": [{"literal":"r"}, {"literal":"e"}, {"literal":"p"}, {"literal":"l"}, {"literal":"a"}, {"literal":"c"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$222", "symbols": [{"literal":"i"}, {"literal":"t"}, {"literal":"e"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$223", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$224", "symbols": [{"literal":"w"}, {"literal":"i"}, {"literal":"t"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$221", "__", "block$string$222", "__", "d_listItem", "__", "block$string$223", "__", "m_list", "__", "block$string$224", "__", "sb"], "postprocess": d => ["setLine:ofList:to:", d[4], d[8], d[12]]}, {"name": "block$string$225", "symbols": [{"literal":"s"}, {"literal":"h"}, {"literal":"o"}, {"literal":"w"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$226", "symbols": [{"literal":"l"}, {"literal":"i"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$225", "__", "block$string$226", "__", "m_list"], "postprocess": d => ["showList:", d[4]]}, {"name": "block$string$227", "symbols": [{"literal":"h"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block$string$228", "symbols": [{"literal":"l"}, {"literal":"i"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$227", "__", "block$string$228", "__", "m_list"], "postprocess": d => ["hideList:", d[4]]}, {"name": "simple_reporter$string$1", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"s"}, {"literal":"i"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": [{"literal":"x"}, "__", "simple_reporter$string$1"], "postprocess": d => ["xpos"]}, {"name": "simple_reporter$string$2", "symbols": [{"literal":"p"}, {"literal":"o"}, {"literal":"s"}, {"literal":"i"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": [{"literal":"y"}, "__", "simple_reporter$string$2"], "postprocess": d => ["ypos"]}, {"name": "simple_reporter$string$3", "symbols": [{"literal":"d"}, {"literal":"i"}, {"literal":"r"}, {"literal":"e"}, {"literal":"c"}, {"literal":"t"}, {"literal":"i"}, {"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$3"], "postprocess": d => ["heading"]}, {"name": "simple_reporter$string$4", "symbols": [{"literal":"c"}, {"literal":"o"}, {"literal":"s"}, {"literal":"t"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$4", "__", {"literal":"#"}], "postprocess": d => ["costumeIndex"]}, {"name": "simple_reporter$string$5", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"z"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$5"], "postprocess": d => ["scale"]}, {"name": "simple_reporter$string$6", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter$string$7", "symbols": [{"literal":"n"}, {"literal":"a"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$6", "__", "simple_reporter$string$7"], "postprocess": d => ["sceneName"]}, {"name": "simple_reporter$string$8", "symbols": [{"literal":"b"}, {"literal":"a"}, {"literal":"c"}, {"literal":"k"}, {"literal":"d"}, {"literal":"r"}, {"literal":"o"}, {"literal":"p"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$8", "__", {"literal":"#"}], "postprocess": d => ["backgroundIndex"]}, {"name": "simple_reporter$string$9", "symbols": [{"literal":"v"}, {"literal":"o"}, {"literal":"l"}, {"literal":"u"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$9"], "postprocess": d => ["volume"]}, {"name": "simple_reporter$string$10", "symbols": [{"literal":"t"}, {"literal":"e"}, {"literal":"m"}, {"literal":"p"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$10"], "postprocess": d => ["tempo"]}, {"name": "simple_predicate$string$1", "symbols": [{"literal":"t"}, {"literal":"o"}, {"literal":"u"}, {"literal":"c"}, {"literal":"h"}, {"literal":"i"}, {"literal":"n"}, {"literal":"g"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_predicate", "symbols": ["simple_predicate$string$1", "__", "m_touching", "_", {"literal":"?"}], "postprocess": d => ["touching:", d[2]]}, {"name": "simple_reporter$string$11", "symbols": [{"literal":"a"}, {"literal":"n"}, {"literal":"s"}, {"literal":"w"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$11"], "postprocess": d => ["answer"]}, {"name": "simple_predicate$string$2", "symbols": [{"literal":"k"}, {"literal":"e"}, {"literal":"y"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_predicate$string$3", "symbols": [{"literal":"p"}, {"literal":"r"}, {"literal":"e"}, {"literal":"s"}, {"literal":"s"}, {"literal":"e"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_predicate", "symbols": ["simple_predicate$string$2", "__", "m_key", "__", "simple_predicate$string$3", "_", {"literal":"?"}], "postprocess": d => ["keyPressed:", d[2]]}, {"name": "simple_predicate$string$4", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"u"}, {"literal":"s"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_predicate$string$5", "symbols": [{"literal":"d"}, {"literal":"o"}, {"literal":"w"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_predicate", "symbols": ["simple_predicate$string$4", "__", "simple_predicate$string$5", "_", {"literal":"?"}], "postprocess": d => ["mousePressed"]}, {"name": "simple_reporter$string$12", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"u"}, {"literal":"s"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$12", "__", {"literal":"x"}], "postprocess": d => ["mouseX"]}, {"name": "simple_reporter$string$13", "symbols": [{"literal":"m"}, {"literal":"o"}, {"literal":"u"}, {"literal":"s"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$13", "__", {"literal":"y"}], "postprocess": d => ["mouseY"]}, {"name": "simple_reporter$string$14", "symbols": [{"literal":"l"}, {"literal":"o"}, {"literal":"u"}, {"literal":"d"}, {"literal":"n"}, {"literal":"e"}, {"literal":"s"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$14"], "postprocess": d => ["soundLevel"]}, {"name": "simple_reporter$string$15", "symbols": [{"literal":"v"}, {"literal":"i"}, {"literal":"d"}, {"literal":"e"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter$string$16", "symbols": [{"literal":"o"}, {"literal":"n"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$15", "__", "m_videoMotionType", "__", "simple_reporter$string$16", "__", "m_stageOrThis"], "postprocess": d => ["senseVideoMotion", d[2], d[6]]}, {"name": "simple_reporter$string$17", "symbols": [{"literal":"t"}, {"literal":"i"}, {"literal":"m"}, {"literal":"e"}, {"literal":"r"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$17"], "postprocess": d => ["timer"]}, {"name": "simple_reporter$string$18", "symbols": [{"literal":"c"}, {"literal":"u"}, {"literal":"r"}, {"literal":"r"}, {"literal":"e"}, {"literal":"n"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$18", "__", "m_timeAndDate"], "postprocess": d => ["timeAndDate", d[2]]}, {"name": "simple_reporter$string$19", "symbols": [{"literal":"d"}, {"literal":"a"}, {"literal":"y"}, {"literal":"s"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter$string$20", "symbols": [{"literal":"s"}, {"literal":"i"}, {"literal":"n"}, {"literal":"c"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$19", "__", "simple_reporter$string$20", "__", "number"], "postprocess": d => ["timestamp", d[4]]}, {"name": "simple_reporter$string$21", "symbols": [{"literal":"u"}, {"literal":"s"}, {"literal":"e"}, {"literal":"r"}, {"literal":"n"}, {"literal":"a"}, {"literal":"m"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$21"], "postprocess": d => ["getUserName"]}, {"name": "simple_reporter$string$22", "symbols": [{"literal":"i"}, {"literal":"t"}, {"literal":"e"}, {"literal":"m"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter$string$23", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$22", "__", "d_listItem", "__", "simple_reporter$string$23", "__", "m_list"], "postprocess": d => ["getLine:ofList:", d[2], d[6]]}, {"name": "simple_reporter$string$24", "symbols": [{"literal":"l"}, {"literal":"e"}, {"literal":"n"}, {"literal":"g"}, {"literal":"t"}, {"literal":"h"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter$string$25", "symbols": [{"literal":"o"}, {"literal":"f"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "simple_reporter", "symbols": ["simple_reporter$string$24", "__", "simple_reporter$string$25", "__", "m_list"], "postprocess": d => ["lineCountOfList:", d[4]]}, {"name": "simple_reporter", "symbols": ["VariableName"], "postprocess": d => ['readVariable', d[0]]}, {"name": "block$string$229", "symbols": [{"literal":"e"}, {"literal":"l"}, {"literal":"s"}, {"literal":"e"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$229"], "postprocess": d => ["else"]}, {"name": "block$string$230", "symbols": [{"literal":"e"}, {"literal":"n"}, {"literal":"d"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$230"], "postprocess": d => ["end"]}, {"name": "block$string$231", "symbols": [{"literal":"."}, {"literal":"."}, {"literal":"."}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "block", "symbols": ["block$string$231"], "postprocess": d => ["ellips"]}, {"name": "_$ebnf$1", "symbols": []}, {"name": "_$ebnf$1", "symbols": [/[ ]/, "_$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "_", "symbols": ["_$ebnf$1"], "postprocess": d => null}, {"name": "__$ebnf$1", "symbols": [/[ ]/]}, {"name": "__$ebnf$1", "symbols": [/[ ]/, "__$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "__", "symbols": ["__$ebnf$1"], "postprocess": d => null}, {"name": "string$string$1", "symbols": [{"literal":"'"}, {"literal":"h"}, {"literal":"e"}, {"literal":"l"}, {"literal":"l"}, {"literal":"o"}, {"literal":"'"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "string", "symbols": ["string$string$1"]}, {"name": "number", "symbols": ["digits"], "postprocess": d => parseInt(d[0])}, {"name": "number", "symbols": ["digits", /[.]/, "digits"], "postprocess": d => parseFloat(d.join(''))}, {"name": "digits$ebnf$1", "symbols": [/[0-9]/]}, {"name": "digits$ebnf$1", "symbols": [/[0-9]/, "digits$ebnf$1"], "postprocess": function arrconcat(d) {return [d[0]].concat(d[1]);}}, {"name": "digits", "symbols": ["digits$ebnf$1"], "postprocess": d => d[0].join('')}, {"name": "color", "symbols": [/[#]/, /[0-9a-z]/, /[0-9a-z]/, /[0-9a-z]/, /[0-9a-z]/, /[0-9a-z]/, /[0-9a-z]/]}, {"name": "color", "symbols": [/[#]/, /[0-9a-z]/, /[0-9a-z]/, /[0-9a-z]/]}, {"name": "VariableName$string$1", "symbols": [{"literal":"f"}, {"literal":"o"}, {"literal":"o"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "VariableName", "symbols": ["VariableName$string$1"], "postprocess": id}, {"name": "ListName$string$1", "symbols": [{"literal":"l"}, {"literal":"i"}, {"literal":"s"}, {"literal":"t"}], "postprocess": function joiner(d) {return d.join('');}}, {"name": "ListName", "symbols": ["ListName$string$1"], "postprocess": id} ] , ParserStart: "line" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/js/wikipedia.js000066400000000000000000000013711376321042600250470ustar00rootroot00000000000000// Generated automatically by nearley // http://github.com/Hardmath123/nearley (function () { function id(x) {return x[0]; } var grammar = { ParserRules: [ {"name": "P", "symbols": ["S"]}, {"name": "S", "symbols": ["S", {"literal":"+"}, "M"]}, {"name": "S", "symbols": ["M"]}, {"name": "M", "symbols": ["M", {"literal":"*"}, "T"]}, {"name": "M", "symbols": ["T"]}, {"name": "T", "symbols": [{"literal":"1"}]}, {"name": "T", "symbols": [{"literal":"2"}]}, {"name": "T", "symbols": [{"literal":"3"}]}, {"name": "T", "symbols": [{"literal":"4"}]} ] , ParserStart: "P" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/json.ne000066400000000000000000000032321376321042600234220ustar00rootroot00000000000000# http://www.json.org/ # http://www.asciitable.com/ @{% const moo = require('moo') let lexer = moo.compile({ space: {match: /\s+/, lineBreaks: true}, number: /-?(?:[0-9]|[1-9][0-9]+)(?:\.[0-9]+)?(?:[eE][-+]?[0-9]+)?\b/, string: /"(?:\\["bfnrt\/\\]|\\u[a-fA-F0-9]{4}|[^"\\])*"/, '{': '{', '}': '}', '[': '[', ']': ']', ',': ',', ':': ':', true: 'true', false: 'false', null: 'null', }) %} @lexer lexer json -> _ (object | array) _ {% function(d) { return d[1][0]; } %} object -> "{" _ "}" {% function(d) { return {}; } %} | "{" _ pair (_ "," _ pair):* _ "}" {% extractObject %} array -> "[" _ "]" {% function(d) { return []; } %} | "[" _ value (_ "," _ value):* _ "]" {% extractArray %} value -> object {% id %} | array {% id %} | number {% id %} | string {% id %} | "true" {% function(d) { return true; } %} | "false" {% function(d) { return false; } %} | "null" {% function(d) { return null; } %} number -> %number {% function(d) { return parseFloat(d[0].value) } %} string -> %string {% function(d) { return JSON.parse(d[0].value) } %} pair -> key _ ":" _ value {% function(d) { return [d[0], d[4]]; } %} key -> string {% id %} _ -> null | %space {% function(d) { return null; } %} @{% function extractPair(kv, output) { if(kv[0]) { output[kv[0]] = kv[1]; } } function extractObject(d) { let output = {}; extractPair(d[2], output); for (let i in d[3]) { extractPair(d[3][i][3], output); } return output; } function extractArray(d) { let output = [d[2]]; for (let i in d[3]) { output.push(d[3][i][3]); } return output; } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/left.ne000066400000000000000000000002531376321042600234030ustar00rootroot00000000000000# right.ne # notice the analogy to tail recursive calls # as it only COMPLETEs a single state for the current CHART # eg. 500 "." takes < 1 millisecond c -> null | c "." nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/lua.ne000066400000000000000000000100441376321042600232310ustar00rootroot00000000000000# Adapted from http://www.lua.org/manual/5.2/manual.html # No comments implemented yet, because lua comments are hard. # Additionally, this was written using an older version of # nearley. Use at your own peril (or fix it and PR!) Chunk -> _ Block _ Block -> _Block | _Block __ ReturnStat ReturnStat -> "return" __ ExpList | "return" __ ExpList _ ";" _Block -> Statement | _Block _ ";" _ Statement | _Block __ Statement Statement -> VarList _ "=" _ ExpList | FunctionCall | Label | "break" | "goto" __ Name | "do" __ Block __ "end" | "while" __ Exp __ "do" __ Block __ "end" | "repeat" __ Block __ "until" __ Exp | "if" __ Exp __ "then" __ Block __ Else | "for" __ NameList __ "in" __ ExpList __ "do" __ Block __ "end" | "function" __ FunctionName _ FunctionBody | "local" __ "function" __ Name __ FunctionBody | "local" __ NameList | "local" __ NameList _ "=" _ ExpList Else -> "end" | _Else __ "end" | _Else __ "else" __ Block __ "end" _Else -> "elseif" __ Exp __ "then" __ Block | _Else __ "elseif" __ Exp __ "then" __ Block Label -> "::" _ Name _ "::" # Names # See Section 2.1 Name -> _name {% function(d) {return {'name': d[0]}; } %} _name -> [a-zA-Z_] {% id %} | _name [\w_] {% function(d) {return d[0] + d[1]; } %} NameList -> Name | NameList _ "," _ Name Var -> Name | PrefixExp _ "[" _ Exp _ "]" | PrefixExp _ "." _ Name VarList -> Var | VarList _ "," _ Var ExpList -> Exp | ExpList _ "," _ Exp PrefixExp -> Var | FunctionCall | Parenthesized FunctionCall -> PrefixExp _ Args | PrefixExp _ ":" _ Name _ Args Args -> "(" _ ")" | "(" _ ExpList _ ")" | String FunctionName -> _functionname | _functionname ":" Name _functionname -> Name | FunctionName _ "." _ FunctionName FunctionDef -> "function" __ FunctionBody FunctionBody -> "(" _ ParamList _ ")" __ Block __ "end" | "(" _ ")" __ Block __ "end" ParamList -> NameList | NameList _ "," _ "..." | "..." # Tables TableConstructor -> "{" _ FieldList _ "}" | "{" _ "}" FieldList -> _FieldList | _FieldList _ FieldSep _FieldList -> Field | _FieldList _ FieldSep _ Field Field -> "[" _ Exp _ "]" _ "=" _ Exp | Name _ "=" _ Exp | Exp FieldSep -> "," | ";" # Expressions Exp -> Binop {% id %} Binop -> ExpOr {% id %} Parenthesized -> "(" Exp ")" ExpOr -> ExpOr __ "or" __ ExpAnd | ExpAnd {% id %} ExpAnd -> ExpAnd __ "and" __ ExpComparison | ExpComparison {% id %} ExpComparison -> ExpComparison _ "<" _ ExpConcatenation | ExpComparison _ ">" _ ExpConcatenation | ExpComparison _ "<=" _ ExpConcatenation | ExpComparison _ ">=" _ ExpConcatenation | ExpComparison _ "~=" _ ExpConcatenation | ExpComparison _ "==" _ ExpConcatenation | ExpConcatenation ExpConcatenation -> ExpSum _ ".." _ ExpConcatenation | ExpSum ExpSum -> ExpSum _ "+" _ ExpProduct | ExpSum _ "-" _ ExpProduct | ExpProduct ExpProduct -> ExpProduct _ "*" _ ExpUnary | ExpProduct _ "/" _ ExpUnary | ExpProduct _ "%" _ ExpUnary | ExpUnary ExpUnary -> "not" __ ExpPow | "#" _ ExpPow | "-" _ ExpPow | ExpPow ExpPow -> Atom | Atom _ "^" _ ExpPow Atom -> Number | String | PrefixExp | "nil" | "false" | "true" | Parenthesized | FunctionDef | TableConstructor # Primitives # ========== # Numbers Number -> _number {% function(d) {return {'literal': parseFloat(d[0])}} %} _posint -> [0-9] {% id %} | _posint [0-9] {% function(d) {return d[0] + d[1]} %} _int -> "-" _posint {% function(d) {return d[0] + d[1]; }%} | _posint {% id %} _float -> _int {% id %} | _int "." _posint {% function(d) {return d[0] + d[1] + d[2]; }%} _number -> _float {% id %} | _float "e" _int {% function(d){return d[0] + d[1] + d[2]; } %} #Strings String -> "\"" _string "\"" {% function(d) {return {'literal':d[1]}; } %} _string -> null {% function() {return ""; } %} | _string _stringchar {% function(d) {return d[0] + d[1];} %} _stringchar -> [^\\"] {% id %} | "\\" [^] {% function(d) {return JSON.parse("\"" + d[0] + d[1] + "\""); } %} # Whitespace _ -> null | _ [\s] {% function() {} %} __ -> [\s] | __ [\s] {% function() {} %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/numberstring.ne000066400000000000000000000047451376321042600252020ustar00rootroot00000000000000@{% var nameMap = { one:1,two:2,three:3,four:4,five:5,six:6,seven:7,eight:8,nine:9, ten:10,eleven:11,twelve:12,thirteen:13,fourteen:14,fifteen:15,sixteen:16,seventeen:17,eighteen:18,nineteen:19, twenty:20,thirty:30,fourty:40,fifty:50,sixty:60,seventy:70,eighty:80,ninety:90, hundred:100,thousand:1000,million:1000000,billion:1000000000 }; var nameToVal = function(d) { return nameMap[d]; }; var nothing = function (d) { return null; }; var sumParts = function(d) { var retVal = 0; for(var i=0;i $X {% nameToVal %} main -> billionsNumber {% findFirstNestedValueFromArray %} billionsNumber -> billionsSimple|billionsCompound|millionsNumber millionsNumber -> millionsSimple|millionsCompound|thousandsNumber thousandsNumber -> thousandsSimple|thousandsCompound|hundredsNumber hundredsNumber -> hundredsSimple|hundredsCompound|tensNumber tensNumber -> teenSimple|tensSimple|tensCompound|singlesSimple billionsCompound -> billionsSimple space billionsNumber {% sumParts %} millionsCompound -> millionsSimple space millionsNumber {% sumParts %} thousandsCompound -> thousandsSimple space hundredsNumber {% sumParts %} hundredsCompound -> hundredsSimple space tensNumber {% sumParts %} tensCompound -> tensSimple space singlesSimple {% sumParts %} billionsSimple -> millionsNumber space matchString["billion"] {% multParts %} millionsSimple -> thousandsNumber space matchString["million"] {% multParts %} thousandsSimple -> hundredsNumber space matchString["thousand"] {% multParts %} hundredsSimple -> tensNumber space matchString["hundred"] {% multParts %} teenSimple -> ("ten"|"eleven"|"twelve"|"thirteen"|"fourteen"|"fifteen"|"sixteen"|"seventeen"|"eighteen"|"nineteen") {% nameToVal %} tensSimple -> ("twenty"|"thirty"|"fourty"|"fifty"|"sixty"|"seventy"|"eighty"|"ninety") {% nameToVal %} singlesSimple -> ("one"|"two"|"three"|"four"|"five"|"six"|"seven"|"eight"|"nine") {% nameToVal %} space -> [\s] {% nothing %}nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/old-language-specification.js000066400000000000000000000103131376321042600276360ustar00rootroot00000000000000// Since nearley is now bootstrapped, this file isn't used. // I'm going to keep it around, though, as a reference for // the raw JS nearley API. It's also going to help out in // case we ever break the compiler and need sources to un- // break it. // // --h var NullPP = function(argument) {return null;} function rule(name, symbols, proc) { return { name: name, symbols: symbols, postprocess: proc }; } function m(s) { return { literal: s }; } module.exports = { rules: [ // Literally a string of whitespace rule("whitraw", [/\s/], NullPP), rule("whitraw", ["whitraw", /\s/], NullPP), // A string of whitespace OR the empty string rule("whitraw?", [], NullPP), rule("whitraw?", ["whitraw"], NullPP), // Whitespace with a comment rule("whit", ["whitraw"], NullPP), rule("whit", ["whitraw?", "comment", "whit?"], NullPP), // Optional whitespace with a comment rule("whit?", [], NullPP), rule("whit?", ["whit"], NullPP), rule("comment", [m("#"), "commentchars", m("\n")], NullPP), rule("commentchars", [], NullPP), rule("commentchars", ["commentchars", /[^\n]/], NullPP), rule("js", [m("{"), m("%"), "jscode", m("%"), m("}")], function(d) { return d[2]; }), rule("jscode", [], function() {return "";}), rule("jscode", ["jscode", /[^%]/], function(d) {return d[0] + d[1];}), rule("string", [m("\""), "charset", m("\"")], function(d) { return { literal: d[1].join("") }; }), rule("charset", []), rule("charset", ["charset", "char"], function(d) { return d[0].concat([d[1]]); }), rule("char", [ new RegExp("[^ \\\\ \"]")], function(d) { return d[0]; }), rule("char", [ m("\\"), new RegExp(".") ], function(d) { return JSON.parse("\""+"\\"+d[1]+"\""); }), rule("charclass", [m(".")], function(d) { return new RegExp(d[0]); }), rule("charclass", [m("["), "charclassmembers", m("]")], function(d) { return new RegExp("[" + d[1].join('') + "]"); }), rule("charclassmembers", []), rule("charclassmembers", ["charclassmembers", "charclassmember"], function(d) { return d[0].concat([d[1]]); }), rule("charclassmember", [ /[^\\\]]/ ], function(d) { return d[0]; }), rule("charclassmember", [m("\\"), /./], function(d) { return d[0] + d[1]; }), rule("word", [/[\w\?\+]/], function(d){ return d[0]; }), rule("word", ["word", /[\w\?\+]/], function(d){ return d[0]+d[1]; }), rule("expr", ["word"]), rule("expr", ["string"]), rule("expr", ["expr", "whit", "word"], function(d){ return d[0].concat([d[2]]); }), rule("expr", ["expr", "whit", "string"], function(d){ return d[0].concat([d[2]]); }), rule("expr", ["charclass"]), rule("expr", ["expr", "whit", "charclass"], function(d) { return d[0].concat([d[2]]); }), rule("completeexpression", ["expr"], function(d) { return {tokens: d[0]}; }), rule("completeexpression", ["expr", "whit?", "js"], function(d) { return {tokens: d[0], postprocess: d[2]}; }), rule("expression+", ["completeexpression"]), rule("expression+", ["expression+", "whit?", m("|"), "whit?", "completeexpression"], function(d) { return d[0].concat([d[4]]); }), rule("prod", ["word", "whit?", m("-"), m(">"), "whit?", "expression+"], function(d) { return {name: d[0], rules: d[5]}; }), rule("prod", [m("@"), "whit?", "js"], function(d) { return {body: d[2]}; }), rule("prog", ["prod"], function(d) { return [d[0]]; }), rule("prog", ["prod", "whit", "prog"], function(d) { return [d[0]].concat(d[2]); }), rule("final", ["whit?", "prog", "whit?"], function(d) { return d[1]; }) ], start: "final" } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/parentheses.ne000066400000000000000000000005071376321042600247740ustar00rootroot00000000000000# Test for balancing parentheses, brackets, square brackets and pairs of "<" ">" @{% function TRUE (d) { return true; } %} P -> "(" E ")" {% TRUE %} | "{" E "}" {% TRUE %} | "[" E "]" {% TRUE %} | "<" E ">" {% TRUE %} E -> null | "(" E ")" E | "{" E "}" E | "[" E "]" E | "<" E ">" E nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/railroad-experimental/000077500000000000000000000000001376321042600264155ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/railroad-experimental/custom-canvas.js000066400000000000000000000431301376321042600315370ustar00rootroot00000000000000var DIMENSIONS = { 'padding': 10, 'arcrad': 10, 'fontsize': 15 }; function railroad(grm) { function Point(x, y) { this.x = x; this.y = y; } var rules = {}; grm.forEach(function(instr) { if (instr.rules) { if (!rules[instr.name]) { rules[instr.name] = []; } rules[instr.name] = rules[instr.name].concat(instr.rules); } }); Object.keys(rules).forEach(function(r) { diagram(r); }); function diagram(name) { var selectedrules = rules[name]; var outer = {subexpression: selectedrules}; var can = document.createElement('canvas'); can.width = 600; can.height = 500; var ctx = can.getContext('2d'); ctx.font = DIMENSIONS.fontsize+"px monospace"; ctx.textBaseline = "bottom"; ctx.translate(0.5, 0.5); ctx.fillText(name, 0, DIMENSIONS.fontsize); ctx.translate(0, DIMENSIONS.fontsize + DIMENSIONS.padding); ctx.strokeRect(0, 0, 10, 10); ctx.translate(10, 5); function renderTok(tok) { // ctx translated to correct position already if (tok.subexpression) { var currentbound = new Point(0, 2*DIMENSIONS.arcrad); var rightPoint = 0; tok.subexpression.forEach(function(e) { ctx.beginPath(); ctx.arc(0, DIMENSIONS.arcrad, DIMENSIONS.arcrad, 0, Math.PI*3/2, true); ctx.moveTo(DIMENSIONS.arcrad, DIMENSIONS.arcrad); ctx.lineTo(DIMENSIONS.arcrad, currentbound.y-DIMENSIONS.arcrad); ctx.arc(DIMENSIONS.arcrad*2, currentbound.y-DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI, Math.PI/2, true); ctx.stroke(); ctx.save(); ctx.translate(DIMENSIONS.arcrad*2, currentbound.y); var bnds = renderTok(e); currentbound.x = Math.max(currentbound.x, bnds.x + 2*DIMENSIONS.arcrad); currentbound.y += DIMENSIONS.padding*2 + bnds.y; ctx.translate(bnds.x, 0); if (currentbound.x > rightPoint) { if (rightPoint > 0) { ctx.beginPath(); ctx.moveTo( DIMENSIONS.padding + rightPoint - currentbound.x + 2*DIMENSIONS.arcrad, -currentbound.y + bnds.y + DIMENSIONS.padding*2 ); ctx.lineTo( DIMENSIONS.padding + DIMENSIONS.arcrad*2, -currentbound.y + bnds.y + DIMENSIONS.padding*2); ctx.stroke(); } rightPoint = currentbound.x; ctx.beginPath(); ctx.moveTo(0, 0); } else { ctx.beginPath(); ctx.moveTo(0, 0); ctx.translate(rightPoint - bnds.x - 2*DIMENSIONS.arcrad, 0); } ctx.translate(DIMENSIONS.padding, 0); ctx.arc(0, -DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI/2, 0, true); ctx.translate(0, -currentbound.y + DIMENSIONS.arcrad + bnds.y + DIMENSIONS.padding*2); ctx.lineTo(DIMENSIONS.arcrad, 0); ctx.arc(DIMENSIONS.arcrad*2, 0, DIMENSIONS.arcrad, Math.PI, Math.PI*3/2); ctx.stroke(); ctx.restore(); }); currentbound.x += 2*DIMENSIONS.arcrad + DIMENSIONS.padding; return currentbound; } else if (tok.ebnf) { if (tok.modifier === ":+") { ctx.beginPath(); ctx.moveTo(0, 0); ctx.lineTo(DIMENSIONS.arcrad, 0); ctx.stroke(); ctx.save(); ctx.translate(DIMENSIONS.arcrad, 0); var bnds = renderTok(tok.ebnf); ctx.restore(); ctx.beginPath(); ctx.arc(DIMENSIONS.arcrad, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI*3/2, Math.PI, true); ctx.lineTo(0, bnds.y - DIMENSIONS.arcrad); ctx.arc(DIMENSIONS.arcrad, bnds.y - DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI, Math.PI/2, true); ctx.lineTo(bnds.x + DIMENSIONS.arcrad, bnds.y); ctx.arc(bnds.x + DIMENSIONS.arcrad, bnds.y - DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI/2, 0, true); ctx.lineTo(bnds.x + 2*DIMENSIONS.arcrad, DIMENSIONS.arcrad); ctx.arc(bnds.x + DIMENSIONS.arcrad, DIMENSIONS.arcrad, DIMENSIONS.arcrad, 0, Math.PI*3/2, true); ctx.lineTo(bnds.x + 2*DIMENSIONS.arcrad, 0); ctx.stroke(); return new Point(bnds.x + 2*DIMENSIONS.arcrad, bnds.y + DIMENSIONS.arcrad); } else if (tok.modifier === ":?") { ctx.beginPath(); ctx.arc(0, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI*3/2, 0); ctx.stroke(); ctx.beginPath(); ctx.arc(DIMENSIONS.arcrad*2, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI/2, Math.PI); ctx.stroke(); ctx.save(); ctx.translate(DIMENSIONS.arcrad*2, DIMENSIONS.arcrad*2); var bnds = renderTok(tok.ebnf); ctx.restore(); ctx.beginPath(); ctx.arc(DIMENSIONS.arcrad*2, DIMENSIONS.arcrad, DIMENSIONS.arcrad, 0, Math.PI/2); ctx.moveTo(DIMENSIONS.arcrad*3, DIMENSIONS.arcrad); ctx.arc(DIMENSIONS.arcrad*4, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI, Math.PI*3/2); ctx.save(); ctx.translate(bnds.x + 2*DIMENSIONS.arcrad, 0); ctx.arc(-DIMENSIONS.arcrad*2, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI*3/2, 0); ctx.moveTo(0, DIMENSIONS.arcrad*2); ctx.arc(0, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI/2, Math.PI); ctx.restore(); ctx.stroke(); ctx.translate(bnds.x + 2*DIMENSIONS.arcrad, 0); ctx.beginPath(); ctx.arc(0, DIMENSIONS.arcrad, DIMENSIONS.arcrad, 0, Math.PI/2); ctx.stroke(); ctx.beginPath(); ctx.arc(DIMENSIONS.arcrad*2, DIMENSIONS.arcrad, DIMENSIONS.arcrad, Math.PI, Math.PI*3/2); ctx.stroke(); return new Point(bnds.x + 4*DIMENSIONS.arcrad, bnds.y); } else if (tok.modifier === ":*") { var bnds = renderTok({ "ebnf": { "ebnf": tok.ebnf, "modifier": ":+" }, "modifier": ":?" }); return bnds; } } else if (tok.literal) { var str = JSON.stringify(tok.literal); var d = ctx.measureText(str).width; ctx.translate(0, -DIMENSIONS.fontsize/2); ctx.save(); ctx.fillStyle = "yellow"; ctx.fillRect(0, 0, d, DIMENSIONS.fontsize); ctx.restore(); ctx.fillText(str, 0, DIMENSIONS.fontsize); return new Point(d, DIMENSIONS.fontsize/2); } else if (tok.mixin) { return new Point(0,0); } else if (tok.macrocall) { return new Point(0,0); } else if (tok.tokens) { var currentbound = new Point(0, 0); tok.tokens.forEach(function(t) { ctx.save(); ctx.translate(currentbound.x, 0); ctx.beginPath(); ctx.moveTo(0,0); ctx.lineTo(DIMENSIONS.padding, 0); ctx.stroke(); ctx.translate(DIMENSIONS.padding, 0); currentbound.x += DIMENSIONS.padding; var bnds = renderTok(t); currentbound.x += bnds.x; currentbound.y = Math.max(currentbound.y, bnds.y); ctx.restore(); }); return currentbound; } else if (typeof(tok) === 'string') { ctx.save(); ctx.font = DIMENSIONS.fontsize+"px serif"; var d = ctx.measureText(tok).width; ctx.translate(0, -DIMENSIONS.fontsize/2); ctx.save(); ctx.fillStyle = "#aac"; ctx.fillRect(0, 0, d, DIMENSIONS.fontsize); ctx.restore(); ctx.fillText(tok, 0, DIMENSIONS.fontsize); ctx.restore(); return new Point(d, DIMENSIONS.fontsize/2); } else if (tok.constructor === RegExp) { var d = ctx.measureText(tok.toString()).width; ctx.translate(0, -DIMENSIONS.fontsize/2); ctx.fillText(tok.toString(), 0, DIMENSIONS.fontsize); ctx.strokeRect(0, 0, d, DIMENSIONS.fontsize); return new Point(d, DIMENSIONS.fontsize/2); } else { throw new Error(); } } var bnds = renderTok(outer); ctx.translate(bnds.x, 0); ctx.strokeRect(0, -5, 10, 10); var img = document.createElement('img'); img.src = can.toDataURL('image/png'); document.body.appendChild(img); } } window.addEventListener('load', function() { railroad(test2); }, false); var testcase = [ [ { name: 'final', rules: [ { tokens: [ 'whit?', 'prog', 'whit?' ], postprocess: ' function(d) { return d[1]; } ' } ] }, { name: 'prog', rules: [ { tokens: [ 'prod' ], postprocess: ' function(d) { return [d[0]]; } ' }, { tokens: [ 'prod', 'whit', 'prog' ], postprocess: ' function(d) { return [d[0]].concat(d[2]); } ' } ] }, { name: 'prod', rules: [ { tokens: [ 'word', 'whit?', { ebnf: { subexpression: [ { tokens: [ { literal: '-' } ] }, { tokens: [ { literal: '=' } ] } ] }, modifier: ':+' }, { literal: '>' }, 'whit?', 'expression+' ], postprocess: ' function(d) { return {name: d[0], rules: d[5]}; } ' }, { tokens: [ 'word', { literal: '[' }, 'wordlist', { literal: ']' }, 'whit?', { ebnf: { subexpression: [ { tokens: [ { literal: '-' } ] }, { tokens: [ { literal: '=' } ] } ] }, modifier: ':+' }, { literal: '>' }, 'whit?', 'expression+' ], postprocess: ' function(d) {return {macro: d[0], args: d[2], exprs: d[8]}} ' }, { tokens: [ { literal: '@' }, 'whit?', 'js' ], postprocess: ' function(d) { return {body: d[2]}; } ' }, { tokens: [ { literal: '@' }, 'word', 'whit', 'word' ], postprocess: ' function(d) { return {config: d[1], value: d[3]}; } ' }, { tokens: [ { literal: '@include' }, 'whit?', 'string' ], postprocess: ' function(d) {return {include: d[2].literal, builtin: false}} ' }, { tokens: [ { literal: '@builtin' }, 'whit?', 'string' ], postprocess: ' function(d) {return {include: d[2].literal, builtin: true }} ' } ] }, { name: 'expression+', rules: [ { tokens: [ 'completeexpression' ] }, { tokens: [ 'expression+', 'whit?', { literal: '|' }, 'whit?', 'completeexpression' ], postprocess: ' function(d) { return d[0].concat([d[4]]); } ' } ] }, { name: 'expressionlist', rules: [ { tokens: [ 'completeexpression' ] }, { tokens: [ 'expressionlist', 'whit?', { literal: ',' }, 'whit?', 'completeexpression' ], postprocess: ' function(d) { return d[0].concat([d[4]]); } ' } ] }, { name: 'wordlist', rules: [ { tokens: [ 'word' ] }, { tokens: [ 'wordlist', 'whit?', { literal: ',' }, 'whit?', 'word' ], postprocess: ' function(d) { return d[0].concat([d[4]]); } ' } ] }, { name: 'completeexpression', rules: [ { tokens: [ 'expr' ], postprocess: ' function(d) { return {tokens: d[0]}; } ' }, { tokens: [ 'expr', 'whit?', 'js' ], postprocess: ' function(d) { return {tokens: d[0], postprocess: d[2]}; } ' } ] }, { name: 'expr_member', rules: [ { tokens: [ 'word' ], postprocess: ' id ' }, { tokens: [ { literal: '$' }, 'word' ], postprocess: ' function(d) {return {mixin: d[1]}} ' }, { tokens: [ 'word', { literal: '[' }, 'expressionlist', { literal: ']' } ], postprocess: ' function(d) {return {macrocall: d[0], args: d[2]}} ' }, { tokens: [ 'string' ], postprocess: ' id ' }, { tokens: [ 'charclass' ], postprocess: ' id ' }, { tokens: [ { literal: '(' }, 'whit?', 'expression+', 'whit?', { literal: ')' } ], postprocess: ' function(d) {return {\'subexpression\': d[2]} ;} ' }, { tokens: [ 'expr_member', 'whit?', 'ebnf_modifier' ], postprocess: ' function(d) {return {\'ebnf\': d[0], \'modifier\': d[2]}; } ' } ] }, { name: 'ebnf_modifier', rules: [ { tokens: [ { literal: ':+' } ], postprocess: ' id ' }, { tokens: [ { literal: ':*' } ], postprocess: ' id ' }, { tokens: [ { literal: ':?' } ], postprocess: ' id ' } ] }, { name: 'expr', rules: [ { tokens: [ 'expr_member' ] }, { tokens: [ 'expr', 'whit', 'expr_member' ], postprocess: ' function(d){ return d[0].concat([d[2]]); } ' } ] }, { name: 'word', rules: [ { tokens: [ /[\w\?\+]/ ], postprocess: ' function(d){ return d[0]; } ' }, { tokens: [ 'word', /[\w\?\+]/ ], postprocess: ' function(d){ return d[0]+d[1]; } ' } ] }, { name: 'string', rules: [ { tokens: [ { literal: '"' }, 'charset', { literal: '"' } ], postprocess: ' function(d) { return { literal: d[1].join("") }; } ' } ] }, { name: 'charset', rules: [ { tokens: [ 'null' ] }, { tokens: [ 'charset', 'char' ], postprocess: ' function(d) { return d[0].concat([d[1]]); } ' } ] }, { name: 'char', rules: [ { tokens: [ /[^\\"]/ ], postprocess: ' function(d) { return d[0]; } ' }, { tokens: [ { literal: '\\' }, /./ ], postprocess: ' function(d) { return JSON.parse("\\""+"\\\\"+d[1]+"\\""); } ' } ] }, { name: 'charclass', rules: [ { tokens: [ { literal: '.' } ], postprocess: ' function(d) { return new RegExp("."); } ' }, { tokens: [ { literal: '[' }, 'charclassmembers', { literal: ']' } ], postprocess: ' function(d) { return new RegExp("[" + d[1].join(\'\') + "]"); } ' } ] }, { name: 'charclassmembers', rules: [ { tokens: [ 'null' ] }, { tokens: [ 'charclassmembers', 'charclassmember' ], postprocess: ' function(d) { return d[0].concat([d[1]]); } ' } ] }, { name: 'charclassmember', rules: [ { tokens: [ /[^\\\]]/ ], postprocess: ' function(d) { return d[0]; } ' }, { tokens: [ { literal: '\\' }, /./ ], postprocess: ' function(d) { return d[0] + d[1]; } ' } ] }, { name: 'js', rules: [ { tokens: [ { literal: '{' }, { literal: '%' }, 'jscode', { literal: '%' }, { literal: '}' } ], postprocess: ' function(d) { return d[2]; } ' } ] }, { name: 'jscode', rules: [ { tokens: [ 'null' ], postprocess: ' function() {return "";} ' }, { tokens: [ 'jscode', /[^%]/ ], postprocess: ' function(d) {return d[0] + d[1];} ' }, { tokens: [ 'jscode', { literal: '%' }, /[^}]/ ], postprocess: ' function(d) {return d[0] + d[1] + d[2]; } ' } ] }, { name: 'whit', rules: [ { tokens: [ 'whitraw' ] }, { tokens: [ 'whitraw?', 'comment', 'whit?' ] } ] }, { name: 'whit?', rules: [ { tokens: [ 'null' ] }, { tokens: [ 'whit' ] } ] }, { name: 'whitraw', rules: [ { tokens: [ /[\s]/ ] }, { tokens: [ 'whitraw', /[\s]/ ] } ] }, { name: 'whitraw?', rules: [ { tokens: [ 'null' ] }, { tokens: [ 'whitraw' ] } ] }, { name: 'comment', rules: [ { tokens: [ { literal: '#' }, 'commentchars', { literal: '\n' } ] } ] }, { name: 'commentchars', rules: [ { tokens: [ 'null' ] }, { tokens: [ 'commentchars', /[^\n]/ ] } ] } ] ][0] test2 = [ [ { name: 'a', rules: [ { tokens: [ { ebnf: { literal: 'cow' }, modifier: ':?' }, { literal: 'bee' }, /[abc]/, { subexpression: [ { tokens: [ 'd' ] }, { tokens: [ 'e' ] }, { tokens: [ 'f' ] } ] } ] }, { tokens: [ 'x' ] }, { tokens: [ 'y' ] }, { tokens: [ 'z' ] } ] } ] ][0] nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/railroad-experimental/index.html000066400000000000000000000003361376321042600304140ustar00rootroot00000000000000 nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/right.ne000066400000000000000000000002341376321042600235650ustar00rootroot00000000000000# right.ne # notice the exponential growth of states # as it must COMPLETE a state in every previous CHART # eg. 500 "." takes 3 seconds c -> null | "." c nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/token-2.ne000066400000000000000000000002161376321042600237270ustar00rootroot00000000000000@{% const tokenPrint = { literal: "print" }; const tokenNumber = { test: x => Number.isInteger(x) }; %} main -> %tokenPrint %tokenNumber ";;"nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/token.ne000066400000000000000000000002241376321042600235670ustar00rootroot00000000000000@{% var ws = {literal: " "}; var number = {test: function(n) { return n.constructor === Number; }}; %} main -> %number (%number %ws %number):+ nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/tosh.ne000066400000000000000000000372671376321042600234450ustar00rootroot00000000000000 line -> thing {% id %} thing -> block {% id %} | r_parens {% id %} | b_parens {% id %} n -> n4 {% id %} sb -> join {% id %} | n4 {% id %} | s0 {% id %} b -> b8 {% id %} c -> r_parens {% id %} | c0 {% id %} r_parens -> "(" _ r_value _ ")" {% d => d[2] %} r_value -> join {% id %} | n4 {% id %} b_parens -> "<" _ b8 _ ">" {% d => d[2] %} predicate -> simple_predicate {% id %} join -> "join" __ jpart __ jpart {% d => ["concatenate:with:", d[2], d[4]] %} jpart -> s0 {% id %} | "_" {% d => "" %} | join {% id %} | r_parens {% id %} | b_parens {% id %} predicate -> "touching" __ "color" __ c _ "?" {% d => ["touchingColor:", d[4]] %} | "color" __ c __ "is" __ "touching" __ c _ "?" {% d => ["color:sees:", d[2], d[8]] %} b8 -> b_and {% id %} | b_or {% id %} | b7 {% id %} b_and -> b_and __ "and" __ b7 {% d => ["&", d[0], d[4]] %} | b7 __ "and" __ b7 {% d => ["&", d[0], d[4]] %} b_or -> b_or __ "or" __ b7 {% d => ["|", d[0], d[4]] %} | b7 __ "or" __ b7 {% d => ["|", d[0], d[4]] %} b7 -> "not" __ b7 {% d => ["not", d[2]] %} | b6 {% id %} b6 -> sb _ "<" _ sb {% d => ["<", d[0], d[4]] %} | sb _ ">" _ sb {% d => [">", d[0], d[4]] %} | sb _ "=" _ sb {% d => ["=", d[0], d[4]] %} | m_list __ "contains" __ sb _ "?" {% d => ["list:contains:", d[0], d[4]] %} | predicate {% id %} | b2 {% id %} b2 -> b_parens {% id %} | b0 {% id %} n4 -> n4 _ "+" _ n3 {% d => ["+", d[0], d[4]] %} | n4 _ "-" _ n3 {% d => ["-", d[0], d[4]] %} | n3 {% id %} n3 -> n3 _ "*" _ n2 {% d => ["*", d[0], d[4]] %} | n3 _ "/" _ n2 {% d => ["/", d[0], d[4]] %} | n3 _ "mod" _ n2 {% d => ["%", d[0], d[4]] %} | n2 {% id %} n2 -> "round" __ n2 {% d => ["rounded", d[2]] %} | m_mathOp __ "of" __ n2 {% d => ["computeFunction:of:", d[0], d[4]] %} | "pick" __ "random" __ n4 __ "to" __ n2 {% d => ["randomFrom:to:", d[4], d[8]] %} | m_attribute __ "of" __ m_spriteOrStage {% d => ["getAttribute:of:", d[0], d[4]] %} | "distance" __ "to" __ m_spriteOrMouse {% d => ["distanceTo:", d[4]] %} | "length" __ "of" __ s2 {% d => ["stringLength:", d[4]] %} | "letter" __ n __ "of" __ s2 {% d => ["letter:of:", d[2], d[6]] %} | n1 {% id %} n1 -> simple_reporter {% id %} | r_parens {% id %} | b_parens {% id %} | n0 {% id %} s2 -> s0 {% id %} | n1 {% id %} n0 -> "-" _ number {% d => -d[2] %} | number {% d => d[0] %} | "_" {% d => 0 %} s0 -> string {% id %} b0 -> "<>" {% d => false %} c0 -> color {% id %} _greenFlag -> "flag" | "green" __ "flag" _turnLeft -> "ccw" | "left" _turnRight -> "cw" | "right" c0 -> "red" {% id %} | "orange" {% id %} | "yellow" {% id %} | "green" {% id %} | "blue" {% id %} | "purple" {% id %} | "black" {% id %} | "white" {% id %} | "pink" {% id %} | "brown" {% id %} m_attribute -> "x" __ "position" {% d => "x position" %} | "y" __ "position" {% d => "y position" %} | "direction" {% id %} | "costume" __ "#" {% d => "costume #" %} | "costume" __ "name" {% d => "costume name" %} | "backdrop" __ "#" {% d => "backdrop #" %} | "backdrop" __ "name" {% d => "backdrop name" %} | "size" {% id %} | "volume" {% id %} | "_" {% d => "" %} m_backdrop -> jpart {% id %} | "_" {% d => "" %} m_broadcast -> jpart {% id %} | "_" {% d => "" %} m_costume -> jpart {% id %} | "_" {% d => "" %} m_effect -> "color" {% id %} | "fisheye" {% id %} | "whirl" {% id %} | "pixelate" {% id %} | "mosaic" {% id %} | "brightness" {% id %} | "ghost" {% id %} | "_" {% d => "" %} m_key -> "space" {% id %} | "up" __ "arrow" {% d => "up arrow" %} | "down" __ "arrow" {% d => "down arrow" %} | "right" __ "arrow" {% d => "right arrow" %} | "left" __ "arrow" {% d => "left arrow" %} | "any" {% id %} | [a-z0-9] {% id %} | "_" {% d => "" %} m_list -> ListName {% id %} | "_" {% d => "" %} m_location -> jpart {% id %} | "mouse-pointer" {% d => "_mouse_" %} | "random" __ "position" {% d => "_random_" %} | "_" {% d => "" %} m_mathOp -> "abs" {% id %} | "floor" {% id %} | "ceiling" {% id %} | "sqrt" {% id %} | "sin" {% id %} | "cos" {% id %} | "tan" {% id %} | "asin" {% id %} | "acos" {% id %} | "atan" {% id %} | "ln" {% id %} | "log" {% id %} | "e" _ "^" {% d => "e ^" %} | "10" _ "^" {% d => "10 ^" %} | "_" {% d => "" %} m_rotationStyle -> "left-right" {% id %} | "don't" __ "rotate" {% d => "don't rotate" %} | "all" __ "around" {% d => "all around" %} | "_" {% d => "" %} m_scene -> jpart {% id %} | "_" {% d => "" %} m_sound -> jpart {% id %} | "_" {% d => "" %} m_spriteOnly -> jpart {% id %} | "myself" {% d => "_myself_" %} | "_" {% d => "" %} m_spriteOrMouse -> jpart {% id %} | "mouse-pointer" {% d => "_mouse_" %} | "_" {% d => "" %} m_spriteOrStage -> jpart {% id %} | "Stage" {% d => "_stage_" %} | "_" {% d => "" %} m_stageOrThis -> "Stage" {% d => "_stage_" %} | "this" __ "sprite" {% d => "this sprite" %} | "_" {% d => "" %} m_stop -> "all" {% id %} | "this" __ "script" {% d => "this script" %} | "other" __ "scripts" __ "in" __ "sprite" {% d => "other scripts in sprite" %} | "_" {% d => "" %} m_timeAndDate -> "year" {% id %} | "month" {% id %} | "date" {% id %} | "day" __ "of" __ "week" {% d => "day of week" %} | "hour" {% id %} | "minute" {% id %} | "second" {% id %} | "_" {% d => "" %} m_touching -> jpart {% id %} | "mouse-pointer" {% d => "_mouse_" %} | "edge" {% d => "_edge_" %} | "_" {% d => "" %} m_triggerSensor -> "loudness" {% id %} | "timer" {% id %} | "video" __ "motion" {% d => "video motion" %} | "_" {% d => "" %} m_var -> VariableName {% id %} | "_" {% d => "" %} m_varName -> VariableName {% id %} | "_" {% d => "" %} m_videoMotionType -> "motion" {% id %} | "direction" {% id %} | "_" {% d => "" %} m_videoState -> "off" {% id %} | "on" {% id %} | "on-flipped" {% id %} | "_" {% d => "" %} d_direction -> n {% id %} d_drum -> n {% id %} d_instrument -> n {% id %} d_listDeleteItem -> "last" {% id %} | "all" {% id %} | n {% id %} d_listItem -> "last" {% id %} | "random" {% id %} | n {% id %} d_note -> n {% id %} m_attribute -> jpart {% id %} block -> "move" __ n __ "steps" {% d => ["forward:", d[2]] %} | "turn" __ _turnRight __ n __ "degrees" {% d => ["turnRight:", d[2], d[4]] %} | "turn" __ _turnLeft __ n __ "degrees" {% d => ["turnLeft:", d[2], d[4]] %} | "point" __ "in" __ "direction" __ d_direction {% d => ["heading:", d[6]] %} | "point" __ "towards" __ m_spriteOrMouse {% d => ["pointTowards:", d[4]] %} | "go" __ "to" __ "x:" __ n __ "y:" __ n {% d => ["gotoX:y:", d[6], d[10]] %} | "go" __ "to" __ m_location {% d => ["gotoSpriteOrMouse:", d[4]] %} | "glide" __ n __ "secs" __ "to" __ "x:" __ n __ "y:" __ n {% d => ["glideSecs:toX:y:elapsed:from:", d[2], d[10], d[14]] %} | "change" __ "x" __ "by" __ n {% d => ["changeXposBy:", d[6]] %} | "set" __ "x" __ "to" __ n {% d => ["xpos:", d[6]] %} | "change" __ "y" __ "by" __ n {% d => ["changeYposBy:", d[6]] %} | "set" __ "y" __ "to" __ n {% d => ["ypos:", d[6]] %} | "set" __ "rotation" __ "style" __ m_rotationStyle {% d => ["setRotationStyle", d[6]] %} | "say" __ sb __ "for" __ n __ "secs" {% d => ["say:duration:elapsed:from:", d[2], d[6]] %} | "say" __ sb {% d => ["say:", d[2]] %} | "think" __ sb __ "for" __ n __ "secs" {% d => ["think:duration:elapsed:from:", d[2], d[6]] %} | "think" __ sb {% d => ["think:", d[2]] %} | "show" {% d => ["show"] %} | "hide" {% d => ["hide"] %} | "switch" __ "costume" __ "to" __ m_costume {% d => ["lookLike:", d[6]] %} | "next" __ "costume" {% d => ["nextCostume"] %} | "next" __ "backdrop" {% d => ["nextScene"] %} | "switch" __ "backdrop" __ "to" __ m_backdrop {% d => ["startScene", d[6]] %} | "switch" __ "backdrop" __ "to" __ m_backdrop __ "and" __ "wait" {% d => ["startSceneAndWait", d[6]] %} | "change" __ m_effect __ "effect" __ "by" __ n {% d => ["changeGraphicEffect:by:", d[2], d[8]] %} | "set" __ m_effect __ "effect" __ "to" __ n {% d => ["setGraphicEffect:to:", d[2], d[8]] %} | "clear" __ "graphic" __ "effects" {% d => ["filterReset"] %} | "change" __ "size" __ "by" __ n {% d => ["changeSizeBy:", d[6]] %} | "set" __ "size" __ "to" __ n __ "%" {% d => ["setSizeTo:", d[6]] %} | "go" __ "to" __ "front" {% d => ["comeToFront"] %} | "go" __ "back" __ n __ "layers" {% d => ["goBackByLayers:", d[4]] %} | "play" __ "sound" __ m_sound {% d => ["playSound:", d[4]] %} | "play" __ "sound" __ m_sound __ "until" __ "done" {% d => ["doPlaySoundAndWait", d[4]] %} | "stop" __ "all" __ "sounds" {% d => ["stopAllSounds"] %} | "play" __ "drum" __ d_drum __ "for" __ n __ "beats" {% d => ["playDrum", d[4], d[8]] %} | "rest" __ "for" __ n __ "beats" {% d => ["rest:elapsed:from:", d[4]] %} | "play" __ "note" __ d_note __ "for" __ n __ "beats" {% d => ["noteOn:duration:elapsed:from:", d[4], d[8]] %} | "set" __ "instrument" __ "to" __ d_instrument {% d => ["instrument:", d[6]] %} | "change" __ "volume" __ "by" __ n {% d => ["changeVolumeBy:", d[6]] %} | "set" __ "volume" __ "to" __ n __ "%" {% d => ["setVolumeTo:", d[6]] %} | "change" __ "tempo" __ "by" __ n {% d => ["changeTempoBy:", d[6]] %} | "set" __ "tempo" __ "to" __ n __ "bpm" {% d => ["setTempoTo:", d[6]] %} | "clear" {% d => ["clearPenTrails"] %} | "stamp" {% d => ["stampCostume"] %} | "pen" __ "down" {% d => ["putPenDown"] %} | "pen" __ "up" {% d => ["putPenUp"] %} | "set" __ "pen" __ "color" __ "to" __ c {% d => ["penColor:", d[8]] %} | "change" __ "pen" __ "hue" __ "by" __ n {% d => ["changePenHueBy:", d[8]] %} | "set" __ "pen" __ "hue" __ "to" __ n {% d => ["setPenHueTo:", d[8]] %} | "change" __ "pen" __ "shade" __ "by" __ n {% d => ["changePenShadeBy:", d[8]] %} | "set" __ "pen" __ "shade" __ "to" __ n {% d => ["setPenShadeTo:", d[8]] %} | "change" __ "pen" __ "size" __ "by" __ n {% d => ["changePenSizeBy:", d[8]] %} | "set" __ "pen" __ "size" __ "to" __ n {% d => ["penSize:", d[8]] %} | "when" __ _greenFlag __ "clicked" {% d => ["whenGreenFlag", d[2]] %} | "when" __ m_key __ "key" __ "pressed" {% d => ["whenKeyPressed", d[2]] %} | "when" __ "this" __ "sprite" __ "clicked" {% d => ["whenClicked"] %} | "when" __ "backdrop" __ "switches" __ "to" __ m_backdrop {% d => ["whenSceneStarts", d[8]] %} | "when" __ m_triggerSensor __ ">" __ n {% d => ["whenSensorGreaterThan", d[2], d[6]] %} | "when" __ "I" __ "receive" __ m_broadcast {% d => ["whenIReceive", d[6]] %} | "broadcast" __ m_broadcast {% d => ["broadcast:", d[2]] %} | "broadcast" __ m_broadcast __ "and" __ "wait" {% d => ["doBroadcastAndWait", d[2]] %} | "wait" __ n __ "secs" {% d => ["wait:elapsed:from:", d[2]] %} | "repeat" __ n {% d => ["doRepeat", d[2]] %} | "forever" {% d => ["doForever"] %} | "if" __ b __ "then" {% d => ["doIfElse", d[2]] %} | "wait" __ "until" __ b {% d => ["doWaitUntil", d[4]] %} | "repeat" __ "until" __ b {% d => ["doUntil", d[4]] %} | "stop" __ m_stop {% d => ["stopScripts", d[2]] %} | "when" __ "I" __ "start" __ "as" __ "a" __ "clone" {% d => ["whenCloned"] %} | "create" __ "clone" __ "of" __ m_spriteOnly {% d => ["createCloneOf", d[6]] %} | "delete" __ "this" __ "clone" {% d => ["deleteClone"] %} | "ask" __ sb __ "and" __ "wait" {% d => ["doAsk", d[2]] %} | "turn" __ "video" __ m_videoState {% d => ["setVideoState", d[4]] %} | "set" __ "video" __ "transparency" __ "to" __ n __ "%" {% d => ["setVideoTransparency", d[8]] %} | "reset" __ "timer" {% d => ["timerReset"] %} | "set" __ m_var __ "to" __ sb {% d => ["setVar:to:", d[2], d[6]] %} | "change" __ m_var __ "by" __ n {% d => ["changeVar:by:", d[2], d[6]] %} | "show" __ "variable" __ m_var {% d => ["showVariable:", d[4]] %} | "hide" __ "variable" __ m_var {% d => ["hideVariable:", d[4]] %} | "add" __ sb __ "to" __ m_list {% d => ["append:toList:", d[2], d[6]] %} | "delete" __ d_listDeleteItem __ "of" __ m_list {% d => ["deleteLine:ofList:", d[2], d[6]] %} | "if" __ "on" __ "edge," __ "bounce" {% d => ["bounceOffEdge"] %} | "insert" __ sb __ "at" __ d_listItem __ "of" __ m_list {% d => ["insert:at:ofList:", d[2], d[6], d[10]] %} | "replace" __ "item" __ d_listItem __ "of" __ m_list __ "with" __ sb {% d => ["setLine:ofList:to:", d[4], d[8], d[12]] %} | "show" __ "list" __ m_list {% d => ["showList:", d[4]] %} | "hide" __ "list" __ m_list {% d => ["hideList:", d[4]] %} simple_reporter -> "x" __ "position" {% d => ["xpos"] %} | "y" __ "position" {% d => ["ypos"] %} | "direction" {% d => ["heading"] %} | "costume" __ "#" {% d => ["costumeIndex"] %} | "size" {% d => ["scale"] %} | "backdrop" __ "name" {% d => ["sceneName"] %} | "backdrop" __ "#" {% d => ["backgroundIndex"] %} | "volume" {% d => ["volume"] %} | "tempo" {% d => ["tempo"] %} simple_predicate -> "touching" __ m_touching _ "?" {% d => ["touching:", d[2]] %} simple_reporter -> "answer" {% d => ["answer"] %} simple_predicate -> "key" __ m_key __ "pressed" _ "?" {% d => ["keyPressed:", d[2]] %} | "mouse" __ "down" _ "?" {% d => ["mousePressed"] %} simple_reporter -> "mouse" __ "x" {% d => ["mouseX"] %} | "mouse" __ "y" {% d => ["mouseY"] %} | "loudness" {% d => ["soundLevel"] %} | "video" __ m_videoMotionType __ "on" __ m_stageOrThis {% d => ["senseVideoMotion", d[2], d[6]] %} | "timer" {% d => ["timer"] %} | "current" __ m_timeAndDate {% d => ["timeAndDate", d[2]] %} | "days" __ "since" __ number {% d => ["timestamp", d[4]] %} | "username" {% d => ["getUserName"] %} | "item" __ d_listItem __ "of" __ m_list {% d => ["getLine:ofList:", d[2], d[6]] %} | "length" __ "of" __ m_list {% d => ["lineCountOfList:", d[4]] %} simple_reporter -> VariableName {% d => ['readVariable', d[0]] %} block -> "else" {% d => ["else"] %} | "end" {% d => ["end"] %} | "..." {% d => ["ellips"] %} _ -> [ ]:* {% d => null %} __ -> [ ]:+ {% d => null %} string -> "'hello'" {% d => 'hello' %} number -> digits {% d => parseInt(d[0]) %} number -> digits [.] digits {% d => parseFloat(d.join('')) %} digits -> [0-9]:+ {% d => d[0].join('') %} color -> [#] [0-9a-z] [0-9a-z] [0-9a-z] [0-9a-z] [0-9a-z] [0-9a-z] | [#] [0-9a-z] [0-9a-z] [0-9a-z] VariableName -> "foo" {% id %} ListName -> "list" {% id %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/examples/wikipedia.ne000066400000000000000000000002141376321042600244140ustar00rootroot00000000000000# https://en.wikipedia.org/wiki/Earley_parser#Example P -> S S -> S "+" M | M M -> M "*" T | T T -> "1" | "2" | "3" | "4"nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/index.html000066400000000000000000000551761376321042600223220ustar00rootroot00000000000000 Home - nearley.js - JS Parsing Toolkit

Home

Parsers turn strings of characters into meaningful data structures (like a JSON object!). nearley is a fast, feature-rich, and modern parser toolkit for JavaScript. nearley is an npm Staff Pick.

nearley 101

  1. Install: $ npm install -g nearley (or try nearley live in your browser here!)
  2. Write your grammar:
    # Match a CSS color
    # http://www.w3.org/TR/css3-color/#colorunits
    @builtin "whitespace.ne" # `_` means arbitrary amount of whitespace
    @builtin "number.ne"     # `int`, `decimal`, and `percentage` number primitives
    csscolor -> "#" hexdigit hexdigit hexdigit hexdigit hexdigit hexdigit
              | "#" hexdigit hexdigit hexdigit
              | "rgb"  _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")"
              | "hsl"  _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ ")"
              | "rgba" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")"
              | "hsla" _ "(" _ colnum _ "," _ colnum _ "," _ colnum _ "," _ decimal _ ")"
    hexdigit -> [a-fA-F0-9]
    colnum   -> int | percentage
  3. Compile your grammar:
    $ nearleyc csscolor.ne -o csscolor.js
  4. Test your grammar:
    $ nearley-test -i "#00ff00" csscolor.js
    Parse results:
    [ [ '#', [ '0' ], [ '0' ], [ 'f' ], [ 'f' ], [ '0' ], [ '0' ] ] ]
  5. Turn your grammar into a generator:
    $ nearley-unparse -n 3 csscolor.js
    #Ab21F2
    rgb  ( -29.889%,7,8172)
    #a40
  6. You try it! Type a CSS color here:
    …and the parsed output will appear here!
  7. Create beautiful railroad diagrams to document your grammar formally.
    $ nearley-railroad csscolor.ne -o csscolor.html
    See a demo here.

Features

  • nearley is the first JS parser to use the Earley algorithm (insert your own ‘early bird’ pun here). It also implements Joop Leo’s optimizations for right-recursion, making it effectively linear-time for LL(k) grammars.
  • nearley lives happily in node, but doesn’t mind the browser.
  • nearley outputs small files. And its expressive DSL comes with plenty of syntactic sugar to keep your source files short. And sweet.
  • nearley’s grammar language is powerful and expressive: you can use macros, import from a large builtin library of pre-defined parser-pieces, use a tokenizer for extra performance, and more!
  • nearley is built on an idiomatic streaming API. You even have access to partial parses to build predictive user interfaces.
  • nearley processes left recursion without choking. In fact, nearley will parse anything you throw at it without complaining or going into a sulk infinite loop.
  • nearley handles ambiguous grammars gracefully. Ambiguous grammars can be parsed in multiple ways: instead of getting confused, nearley gives you all the parsings (in a deterministic order!).
  • nearley allows for debugging with generous error detection. When it catches a parse-time error, nearley tells you exactly what went wrong and where.
  • nearley is powerful enough to be bootstrapped. That means nearley uses nearley to compile parts of nearley. nearleyception!
  • nearley parsers can be inverted to form generators which output random strings that match a grammar. Useful for writing test cases, fuzzers, and Mad-Libs.
  • You can export nearley parsers as railroad diagrams, which provide easy-to-understand documentation of your grammar.
  • nearley comes with fantastic tooling. You can find editor plug-ins for vim, Sublime Text, Atom, and VS Code; there are also plug-ins for Webpack and gulp.

Projects using nearley

Artificial Intelligence, NLP, Linguistics: Shrdlite is a programming project in Artificial Intelligence, a course given at the University of Gothenburg and Chalmers University of Technology. It uses nearley for reading instructions in natural language (i.e. English). lexicon-grammars was used to parse lexicons for a project at Australian National University.

Standard formats: node-dmi is a module that reads iconstate metadata from BYOND DMI files, edtf.js is a parser for Extended Date Time Format, node-krl-parser is a KRL parser for node, bibliography is a BibTeX-to-HTML converter, biblatex-csl-converter converts between bibtex/CSL/JSON, scalpel parses CSS selectors (powering enzyme, Airbnb’s React testing tool), rfc5545-rrule helps parse iCalendar data, mangudai parses RMS scripts for Age of Empires II, tf-hcl parses and generates HCL config files, css-selector-inspector parses and tokenizes CSS3 selectors, css-property-parser validates and expands CSS shorthands, node-scad-parser parses OpenSCAD 3D models, js-sql-parse parses SQL statements, pg-mem is an in-memory Postgres database emulator, resp-parser is a parser for the RESP protocol, celio parses Celestia star catalogs.

Templating and files: uPresent is a markdown-based presentation authoring system, saison is a minimal templating language, Packdown is a tool to generate human-readable archives of multiple files.

Programming languages: Carbon is a C subset that compiles to JavaScript, optimized for game development, ezlang is a simple language, tlnccuwagnf is a fun general-purpose language, nanalang is a silly esoteric language, english is a less esoteric programming language, ecmaless is an easily-extensible language, hm-parser parses Haskell-like Hindley-Milner type signatures, kozily implements the Oz language, abstract-machine inspects execution models, fbp-types provides typechecking primitives for flow-based systems, lp5562 is an assembler for the TI LP5562 LED driver, VSL is a Versatile Scripting Language, while-typescript is an implementation of the WHILE language, lo is a language for secure distributed systems, jaco is an implementation of CMU’s C0 teaching language, walt is a subset of JavaScript that targets WebAssembly.

Mathematics: Solvent is a powerful desktop calculator, Truth-table is a tool to visualize propositional logic in truth tables, Emunotes is a personal Wiki with inline graphing and computation, react-equation parses and renders equations in React, the mLab generates category theory papers.

Domain-specific languages: Hexant is a cellular automata simulator with a DSL for custom automata, Dicetower is an advanced dice plugin for hubot, deck.zone is a language to create board games, in-seconds is a time calculator for music applications, website-spec is a tool for functional web testing, pianola allows declarative function composition, idyll is a markup language for data-driven documents, virtsecgroup provides virtual AWS security groups, deadfad is a hex editor that lets you specify structs, bishbosh helps you create command-line interfaces, syso codifies aspects of French legal contracts, siteswap parses Siteswap notation for juggling patterns, jsgrep provides syntactic grep for JavaScript, electro-grammar parses descriptions of electronic components like resistors and capacitors, cicero helps create smart legal contracts, Eventbot is a calendar plugin for Slack used by thousands of teams, Obyte is a cryptocurrency platform, OptiCSS is a CSS optimizer built by LinkedIn, NESTUP is a language for specifying nested rhythmic tuplets.

Other: ProceduralPsychEpisode generates “random episodes of the hilarious but formulaic show”

Parsing libraries: nearley is a parser toolkit for JavaScript. It has a nearley-based DSL to specify parsers.

Give to nearley

nearley has been maintained by volunteers since 2014. If you want to help support us, contact @kach or @tjvr on GitHub. We’ll send over our PayPal information – and maybe something nice. :-).

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/000077500000000000000000000000001376321042600210555ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/compile.js000066400000000000000000000244511376321042600230510ustar00rootroot00000000000000(function(root, factory) { if (typeof module === 'object' && module.exports) { module.exports = factory(require('./nearley')); } else { root.Compile = factory(root.nearley); } }(this, function(nearley) { function Compile(structure, opts) { var unique = uniquer(); if (!opts.alreadycompiled) { opts.alreadycompiled = []; } var result = { rules: [], body: [], // @directives list customTokens: [], // %tokens config: {}, // @config value macros: {}, start: '', version: opts.version || 'unknown' }; for (var i = 0; i < structure.length; i++) { var productionRule = structure[i]; if (productionRule.body) { // This isn't a rule, it's an @directive. if (!opts.nojs) { result.body.push(productionRule.body); } } else if (productionRule.include) { // Include file var path; if (!productionRule.builtin) { path = require('path').resolve( opts.args[0] ? require('path').dirname(opts.args[0]) : process.cwd(), productionRule.include ); } else { path = require('path').resolve( __dirname, '../builtin/', productionRule.include ); } if (opts.alreadycompiled.indexOf(path) === -1) { opts.alreadycompiled.push(path); var f = require('fs').readFileSync(path).toString(); var parserGrammar = nearley.Grammar.fromCompiled(require('./nearley-language-bootstrapped.js')); var parser = new nearley.Parser(parserGrammar); parser.feed(f); var c = Compile(parser.results[0], {args: [path], __proto__:opts}); result.rules = result.rules.concat(c.rules); result.body = result.body.concat(c.body); result.customTokens = result.customTokens.concat(c.customTokens); Object.keys(c.config).forEach(function(k) { result.config[k] = c.config[k]; }); Object.keys(c.macros).forEach(function(k) { result.macros[k] = c.macros[k]; }); } } else if (productionRule.macro) { result.macros[productionRule.macro] = { 'args': productionRule.args, 'exprs': productionRule.exprs }; } else if (productionRule.config) { // This isn't a rule, it's an @config. result.config[productionRule.config] = productionRule.value } else { produceRules(productionRule.name, productionRule.rules, {}); if (!result.start) { result.start = productionRule.name; } } } return result; function produceRules(name, rules, env) { for (var i = 0; i < rules.length; i++) { var rule = buildRule(name, rules[i], env); if (opts.nojs) { rule.postprocess = null; } result.rules.push(rule); } } function buildRule(ruleName, rule, env) { var tokens = []; for (var i = 0; i < rule.tokens.length; i++) { var token = buildToken(ruleName, rule.tokens[i], env); if (token !== null) { tokens.push(token); } } return new nearley.Rule( ruleName, tokens, rule.postprocess ); } function buildToken(ruleName, token, env) { if (typeof token === 'string') { if (token === 'null') { return null; } return token; } if (token instanceof RegExp) { return token; } if (token.literal) { if (!token.literal.length) { return null; } if (token.literal.length === 1 || result.config.lexer) { return token; } return buildStringToken(ruleName, token, env); } if (token.token) { if (result.config.lexer) { var name = token.token; if (result.customTokens.indexOf(name) === -1) { result.customTokens.push(name); } var expr = result.config.lexer + ".has(" + JSON.stringify(name) + ") ? {type: " + JSON.stringify(name) + "} : " + name; return {token: "(" + expr + ")"}; } return token; } if (token.subexpression) { return buildSubExpressionToken(ruleName, token, env); } if (token.ebnf) { return buildEBNFToken(ruleName, token, env); } if (token.macrocall) { return buildMacroCallToken(ruleName, token, env); } if (token.mixin) { if (env[token.mixin]) { return buildToken(ruleName, env[token.mixin], env); } else { throw new Error("Unbound variable: " + token.mixin); } } throw new Error("unrecognized token: " + JSON.stringify(token)); } function buildStringToken(ruleName, token, env) { var newname = unique(ruleName + "$string"); produceRules(newname, [ { tokens: token.literal.split("").map(function charLiteral(d) { return { literal: d }; }), postprocess: {builtin: "joiner"} } ], env); return newname; } function buildSubExpressionToken(ruleName, token, env) { var data = token.subexpression; var name = unique(ruleName + "$subexpression"); //structure.push({"name": name, "rules": data}); produceRules(name, data, env); return name; } function buildEBNFToken(ruleName, token, env) { switch (token.modifier) { case ":+": return buildEBNFPlus(ruleName, token, env); case ":*": return buildEBNFStar(ruleName, token, env); case ":?": return buildEBNFOpt(ruleName, token, env); } } function buildEBNFPlus(ruleName, token, env) { var name = unique(ruleName + "$ebnf"); /* structure.push({ name: name, rules: [{ tokens: [token.ebnf], }, { tokens: [token.ebnf, name], postprocess: {builtin: "arrconcat"} }] }); */ produceRules(name, [{ tokens: [token.ebnf], }, { tokens: [name, token.ebnf], postprocess: {builtin: "arrpush"} }], env ); return name; } function buildEBNFStar(ruleName, token, env) { var name = unique(ruleName + "$ebnf"); /* structure.push({ name: name, rules: [{ tokens: [], }, { tokens: [token.ebnf, name], postprocess: {builtin: "arrconcat"} }] }); */ produceRules(name, [{ tokens: [], }, { tokens: [name, token.ebnf], postprocess: {builtin: "arrpush"} }], env ); return name; } function buildEBNFOpt(ruleName, token, env) { var name = unique(ruleName + "$ebnf"); /* structure.push({ name: name, rules: [{ tokens: [token.ebnf], postprocess: {builtin: "id"} }, { tokens: [], postprocess: {builtin: "nuller"} }] }); */ produceRules(name, [{ tokens: [token.ebnf], postprocess: {builtin: "id"} }, { tokens: [], postprocess: {builtin: "nuller"} }], env ); return name; } function buildMacroCallToken(ruleName, token, env) { var name = unique(ruleName + "$macrocall"); var macro = result.macros[token.macrocall]; if (!macro) { throw new Error("Unkown macro: "+token.macrocall); } if (macro.args.length !== token.args.length) { throw new Error("Argument count mismatch."); } var newenv = {__proto__: env}; for (var i=0; i d.join('')", "arrconcat": "(d) -> [d[0]].concat(d[1])", "arrpush": "(d) -> d[0].concat([d[1]])", "nuller": "() -> null", "id": "id" }; generate.ts = generate.typescript = function (parser, exportName) { var output = "// Generated automatically by nearley, version " + parser.version + "\n"; output += "// http://github.com/Hardmath123/nearley\n"; output += "// Bypasses TS6133. Allow declared but unused functions.\n"; output += "// @ts-ignore\n"; output += "function id(d: any[]): any { return d[0]; }\n"; output += parser.customTokens.map(function (token) { return "declare var " + token + ": any;\n" }).join("") output += parser.body.join('\n'); output += "\n"; output += "interface NearleyToken {\n"; output += " value: any;\n"; output += " [key: string]: any;\n"; output += "};\n"; output += "\n"; output += "interface NearleyLexer {\n"; output += " reset: (chunk: string, info: any) => void;\n"; output += " next: () => NearleyToken | undefined;\n"; output += " save: () => any;\n"; output += " formatError: (token: never) => string;\n"; output += " has: (tokenType: string) => boolean;\n"; output += "};\n"; output += "\n"; output += "interface NearleyRule {\n"; output += " name: string;\n"; output += " symbols: NearleySymbol[];\n"; output += " postprocess?: (d: any[], loc?: number, reject?: {}) => any;\n"; output += "};\n"; output += "\n"; output += "type NearleySymbol = string | { literal: any } | { test: (token: any) => boolean };\n"; output += "\n"; output += "interface Grammar {\n"; output += " Lexer: NearleyLexer | undefined;\n"; output += " ParserRules: NearleyRule[];\n"; output += " ParserStart: string;\n"; output += "};\n"; output += "\n"; output += "const grammar: Grammar = {\n"; output += " Lexer: " + parser.config.lexer + ",\n"; output += " ParserRules: " + serializeRules(parser.rules, generate.typescript.builtinPostprocessors, " ") + ",\n"; output += " ParserStart: " + JSON.stringify(parser.start) + ",\n"; output += "};\n"; output += "\n"; output += "export default grammar;\n"; return output; }; generate.typescript.builtinPostprocessors = { "joiner": "(d) => d.join('')", "arrconcat": "(d) => [d[0]].concat(d[1])", "arrpush": "(d) => d[0].concat([d[1]])", "nuller": "() => null", "id": "id" }; return generate; })); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/lint.js000066400000000000000000000012731376321042600223640ustar00rootroot00000000000000// Node-only var warn = function (opts, str) { opts.out.write("WARN"+"\t" + str + "\n"); } function lintNames(grm, opts) { var all = []; grm.rules.forEach(function(rule) { all.push(rule.name); }); grm.rules.forEach(function(rule) { rule.symbols.forEach(function(symbol) { if (!symbol.literal && !symbol.token && symbol.constructor !== RegExp) { if (all.indexOf(symbol) === -1) { warn(opts,"Undefined symbol `" + symbol + "` used."); } } }); }); } function lint(grm, opts) { if (!opts.out) opts.out = process.stderr; lintNames(grm, opts); } module.exports = lint; nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/nearley-language-bootstrapped.js000066400000000000000000000163721376321042600273500ustar00rootroot00000000000000// Generated automatically by nearley, version 2.19.5 // http://github.com/Hardmath123/nearley (function () { function id(x) { return x[0]; } function getValue(d) { return d[0].value } function literals(list) { var rules = {} for (var lit of list) { rules[lit] = {match: lit, next: 'main'} } return rules } var moo = require('moo') var rules = Object.assign({ ws: {match: /\s+/, lineBreaks: true, next: 'main'}, comment: /\#.*/, arrow: {match: /[=-]+\>/, next: 'main'}, js: { match: /\{\%(?:[^%]|\%[^}])*\%\}/, value: x => x.slice(2, -2), lineBreaks: true, }, word: {match: /[\w\?\+]+/, next: 'afterWord'}, string: { match: /"(?:[^\\"\n]|\\["\\/bfnrt]|\\u[a-fA-F0-9]{4})*"/, value: x => JSON.parse(x), next: 'main', }, btstring: { match: /`[^`]*`/, value: x => x.slice(1, -1), next: 'main', lineBreaks: true, }, }, literals([ ",", "|", "$", "%", "(", ")", ":?", ":*", ":+", "@include", "@builtin", "@", "]", ])) var lexer = moo.states({ main: Object.assign({}, rules, { charclass: { match: /\.|\[(?:\\.|[^\\\n])+?\]/, value: x => new RegExp(x), }, }), // Both macro arguments and charclasses are both enclosed in [ ]. // We disambiguate based on whether the previous token was a `word`. afterWord: Object.assign({}, rules, { "[": {match: "[", next: 'main'}, }), }) function insensitive(sl) { var s = sl.literal; var result = []; for (var i=0; i ({literal: d[0].value})}, {"name": "string", "symbols": [(lexer.has("btstring") ? {type: "btstring"} : btstring)], "postprocess": d => ({literal: d[0].value})}, {"name": "charclass", "symbols": [(lexer.has("charclass") ? {type: "charclass"} : charclass)], "postprocess": getValue}, {"name": "js", "symbols": [(lexer.has("js") ? {type: "js"} : js)], "postprocess": getValue}, {"name": "_$ebnf$1", "symbols": ["ws"], "postprocess": id}, {"name": "_$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "_", "symbols": ["_$ebnf$1"]}, {"name": "ws", "symbols": [(lexer.has("ws") ? {type: "ws"} : ws)]}, {"name": "ws$ebnf$1", "symbols": [(lexer.has("ws") ? {type: "ws"} : ws)], "postprocess": id}, {"name": "ws$ebnf$1", "symbols": [], "postprocess": function(d) {return null;}}, {"name": "ws", "symbols": ["ws$ebnf$1", (lexer.has("comment") ? {type: "comment"} : comment), "_"]} ] , ParserStart: "final" } if (typeof module !== 'undefined'&& typeof module.exports !== 'undefined') { module.exports = grammar; } else { window.grammar = grammar; } })(); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/nearley-language-bootstrapped.ne000066400000000000000000000100561376321042600273270ustar00rootroot00000000000000# nearley grammar @{% function getValue(d) { return d[0].value } function literals(list) { var rules = {} for (var lit of list) { rules[lit] = {match: lit, next: 'main'} } return rules } var moo = require('moo') var rules = Object.assign({ ws: {match: /\s+/, lineBreaks: true, next: 'main'}, comment: /\#.*/, arrow: {match: /[=-]+\>/, next: 'main'}, js: { match: /\{\%(?:[^%]|\%[^}])*\%\}/, value: x => x.slice(2, -2), lineBreaks: true, }, word: {match: /[\w\?\+]+/, next: 'afterWord'}, string: { match: /"(?:[^\\"\n]|\\["\\/bfnrt]|\\u[a-fA-F0-9]{4})*"/, value: x => JSON.parse(x), next: 'main', }, btstring: { match: /`[^`]*`/, value: x => x.slice(1, -1), next: 'main', lineBreaks: true, }, }, literals([ ",", "|", "$", "%", "(", ")", ":?", ":*", ":+", "@include", "@builtin", "@", "]", ])) var lexer = moo.states({ main: Object.assign({}, rules, { charclass: { match: /\.|\[(?:\\.|[^\\\n])+?\]/, value: x => new RegExp(x), }, }), // Both macro arguments and charclasses are both enclosed in [ ]. // We disambiguate based on whether the previous token was a `word`. afterWord: Object.assign({}, rules, { "[": {match: "[", next: 'main'}, }), }) function insensitive(sl) { var s = sl.literal; var result = []; for (var i=0; i _ prog _ %ws:? {% function(d) { return d[1]; } %} prog -> prod {% function(d) { return [d[0]]; } %} | prod ws prog {% function(d) { return [d[0]].concat(d[2]); } %} prod -> word _ %arrow _ expression+ {% function(d) { return {name: d[0], rules: d[4]}; } %} | word "[" _ wordlist _ "]" _ %arrow _ expression+ {% function(d) {return {macro: d[0], args: d[3], exprs: d[9]}} %} | "@" _ js {% function(d) { return {body: d[2]}; } %} | "@" word ws word {% function(d) { return {config: d[1], value: d[3]}; } %} | "@include" _ string {% function(d) {return {include: d[2].literal, builtin: false}} %} | "@builtin" _ string {% function(d) {return {include: d[2].literal, builtin: true }} %} expression+ -> completeexpression | expression+ _ "|" _ completeexpression {% function(d) { return d[0].concat([d[4]]); } %} expressionlist -> completeexpression | expressionlist _ "," _ completeexpression {% function(d) { return d[0].concat([d[4]]); } %} wordlist -> word | wordlist _ "," _ word {% function(d) { return d[0].concat([d[4]]); } %} completeexpression -> expr {% function(d) { return {tokens: d[0]}; } %} | expr _ js {% function(d) { return {tokens: d[0], postprocess: d[2]}; } %} expr_member -> word {% id %} | "$" word {% function(d) {return {mixin: d[1]}} %} | word "[" _ expressionlist _ "]" {% function(d) {return {macrocall: d[0], args: d[3]}} %} | string "i":? {% function(d) { if (d[1]) {return insensitive(d[0]); } else {return d[0]; } } %} | "%" word {% function(d) {return {token: d[1]}} %} | charclass {% id %} | "(" _ expression+ _ ")" {% function(d) {return {'subexpression': d[2]} ;} %} | expr_member _ ebnf_modifier {% function(d) {return {'ebnf': d[0], 'modifier': d[2]}; } %} ebnf_modifier -> ":+" {% getValue %} | ":*" {% getValue %} | ":?" {% getValue %} expr -> expr_member | expr ws expr_member {% function(d){ return d[0].concat([d[2]]); } %} word -> %word {% getValue %} string -> %string {% d => ({literal: d[0].value}) %} | %btstring {% d => ({literal: d[0].value}) %} charclass -> %charclass {% getValue %} js -> %js {% getValue %} _ -> ws:? ws -> %ws | %ws:? %comment _ nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/nearley.js000066400000000000000000000472241376321042600230630ustar00rootroot00000000000000(function(root, factory) { if (typeof module === 'object' && module.exports) { module.exports = factory(); } else { root.nearley = factory(); } }(this, function() { function Rule(name, symbols, postprocess) { this.id = ++Rule.highestId; this.name = name; this.symbols = symbols; // a list of literal | regex class | nonterminal this.postprocess = postprocess; return this; } Rule.highestId = 0; Rule.prototype.toString = function(withCursorAt) { var symbolSequence = (typeof withCursorAt === "undefined") ? this.symbols.map(getSymbolShortDisplay).join(' ') : ( this.symbols.slice(0, withCursorAt).map(getSymbolShortDisplay).join(' ') + " ● " + this.symbols.slice(withCursorAt).map(getSymbolShortDisplay).join(' ') ); return this.name + " → " + symbolSequence; } // a State is a rule at a position from a given starting point in the input stream (reference) function State(rule, dot, reference, wantedBy) { this.rule = rule; this.dot = dot; this.reference = reference; this.data = []; this.wantedBy = wantedBy; this.isComplete = this.dot === rule.symbols.length; } State.prototype.toString = function() { return "{" + this.rule.toString(this.dot) + "}, from: " + (this.reference || 0); }; State.prototype.nextState = function(child) { var state = new State(this.rule, this.dot + 1, this.reference, this.wantedBy); state.left = this; state.right = child; if (state.isComplete) { state.data = state.build(); // Having right set here will prevent the right state and its children // form being garbage collected state.right = undefined; } return state; }; State.prototype.build = function() { var children = []; var node = this; do { children.push(node.right.data); node = node.left; } while (node.left); children.reverse(); return children; }; State.prototype.finish = function() { if (this.rule.postprocess) { this.data = this.rule.postprocess(this.data, this.reference, Parser.fail); } }; function Column(grammar, index) { this.grammar = grammar; this.index = index; this.states = []; this.wants = {}; // states indexed by the non-terminal they expect this.scannable = []; // list of states that expect a token this.completed = {}; // states that are nullable } Column.prototype.process = function(nextColumn) { var states = this.states; var wants = this.wants; var completed = this.completed; for (var w = 0; w < states.length; w++) { // nb. we push() during iteration var state = states[w]; if (state.isComplete) { state.finish(); if (state.data !== Parser.fail) { // complete var wantedBy = state.wantedBy; for (var i = wantedBy.length; i--; ) { // this line is hot var left = wantedBy[i]; this.complete(left, state); } // special-case nullables if (state.reference === this.index) { // make sure future predictors of this rule get completed. var exp = state.rule.name; (this.completed[exp] = this.completed[exp] || []).push(state); } } } else { // queue scannable states var exp = state.rule.symbols[state.dot]; if (typeof exp !== 'string') { this.scannable.push(state); continue; } // predict if (wants[exp]) { wants[exp].push(state); if (completed.hasOwnProperty(exp)) { var nulls = completed[exp]; for (var i = 0; i < nulls.length; i++) { var right = nulls[i]; this.complete(state, right); } } } else { wants[exp] = [state]; this.predict(exp); } } } } Column.prototype.predict = function(exp) { var rules = this.grammar.byName[exp] || []; for (var i = 0; i < rules.length; i++) { var r = rules[i]; var wantedBy = this.wants[exp]; var s = new State(r, 0, this.index, wantedBy); this.states.push(s); } } Column.prototype.complete = function(left, right) { var copy = left.nextState(right); this.states.push(copy); } function Grammar(rules, start) { this.rules = rules; this.start = start || this.rules[0].name; var byName = this.byName = {}; this.rules.forEach(function(rule) { if (!byName.hasOwnProperty(rule.name)) { byName[rule.name] = []; } byName[rule.name].push(rule); }); } // So we can allow passing (rules, start) directly to Parser for backwards compatibility Grammar.fromCompiled = function(rules, start) { var lexer = rules.Lexer; if (rules.ParserStart) { start = rules.ParserStart; rules = rules.ParserRules; } var rules = rules.map(function (r) { return (new Rule(r.name, r.symbols, r.postprocess)); }); var g = new Grammar(rules, start); g.lexer = lexer; // nb. storing lexer on Grammar is iffy, but unavoidable return g; } function StreamLexer() { this.reset(""); } StreamLexer.prototype.reset = function(data, state) { this.buffer = data; this.index = 0; this.line = state ? state.line : 1; this.lastLineBreak = state ? -state.col : 0; } StreamLexer.prototype.next = function() { if (this.index < this.buffer.length) { var ch = this.buffer[this.index++]; if (ch === '\n') { this.line += 1; this.lastLineBreak = this.index; } return {value: ch}; } } StreamLexer.prototype.save = function() { return { line: this.line, col: this.index - this.lastLineBreak, } } StreamLexer.prototype.formatError = function(token, message) { // nb. this gets called after consuming the offending token, // so the culprit is index-1 var buffer = this.buffer; if (typeof buffer === 'string') { var lines = buffer .split("\n") .slice( Math.max(0, this.line - 5), this.line ); var nextLineBreak = buffer.indexOf('\n', this.index); if (nextLineBreak === -1) nextLineBreak = buffer.length; var col = this.index - this.lastLineBreak; var lastLineDigits = String(this.line).length; message += " at line " + this.line + " col " + col + ":\n\n"; message += lines .map(function(line, i) { return pad(this.line - lines.length + i + 1, lastLineDigits) + " " + line; }, this) .join("\n"); message += "\n" + pad("", lastLineDigits + col) + "^\n"; return message; } else { return message + " at index " + (this.index - 1); } function pad(n, length) { var s = String(n); return Array(length - s.length + 1).join(" ") + s; } } function Parser(rules, start, options) { if (rules instanceof Grammar) { var grammar = rules; var options = start; } else { var grammar = Grammar.fromCompiled(rules, start); } this.grammar = grammar; // Read options this.options = { keepHistory: false, lexer: grammar.lexer || new StreamLexer, }; for (var key in (options || {})) { this.options[key] = options[key]; } // Setup lexer this.lexer = this.options.lexer; this.lexerState = undefined; // Setup a table var column = new Column(grammar, 0); var table = this.table = [column]; // I could be expecting anything. column.wants[grammar.start] = []; column.predict(grammar.start); // TODO what if start rule is nullable? column.process(); this.current = 0; // token index } // create a reserved token for indicating a parse fail Parser.fail = {}; Parser.prototype.feed = function(chunk) { var lexer = this.lexer; lexer.reset(chunk, this.lexerState); var token; while (true) { try { token = lexer.next(); if (!token) { break; } } catch (e) { // Create the next column so that the error reporter // can display the correctly predicted states. var nextColumn = new Column(this.grammar, this.current + 1); this.table.push(nextColumn); var err = new Error(this.reportLexerError(e)); err.offset = this.current; err.token = e.token; throw err; } // We add new states to table[current+1] var column = this.table[this.current]; // GC unused states if (!this.options.keepHistory) { delete this.table[this.current - 1]; } var n = this.current + 1; var nextColumn = new Column(this.grammar, n); this.table.push(nextColumn); // Advance all tokens that expect the symbol var literal = token.text !== undefined ? token.text : token.value; var value = lexer.constructor === StreamLexer ? token.value : token; var scannable = column.scannable; for (var w = scannable.length; w--; ) { var state = scannable[w]; var expect = state.rule.symbols[state.dot]; // Try to consume the token // either regex or literal if (expect.test ? expect.test(value) : expect.type ? expect.type === token.type : expect.literal === literal) { // Add it var next = state.nextState({data: value, token: token, isToken: true, reference: n - 1}); nextColumn.states.push(next); } } // Next, for each of the rules, we either // (a) complete it, and try to see if the reference row expected that // rule // (b) predict the next nonterminal it expects by adding that // nonterminal's start state // To prevent duplication, we also keep track of rules we have already // added nextColumn.process(); // If needed, throw an error: if (nextColumn.states.length === 0) { // No states at all! This is not good. var err = new Error(this.reportError(token)); err.offset = this.current; err.token = token; throw err; } // maybe save lexer state if (this.options.keepHistory) { column.lexerState = lexer.save() } this.current++; } if (column) { this.lexerState = lexer.save() } // Incrementally keep track of results this.results = this.finish(); // Allow chaining, for whatever it's worth return this; }; Parser.prototype.reportLexerError = function(lexerError) { var tokenDisplay, lexerMessage; // Planning to add a token property to moo's thrown error // even on erroring tokens to be used in error display below var token = lexerError.token; if (token) { tokenDisplay = "input " + JSON.stringify(token.text[0]) + " (lexer error)"; lexerMessage = this.lexer.formatError(token, "Syntax error"); } else { tokenDisplay = "input (lexer error)"; lexerMessage = lexerError.message; } return this.reportErrorCommon(lexerMessage, tokenDisplay); }; Parser.prototype.reportError = function(token) { var tokenDisplay = (token.type ? token.type + " token: " : "") + JSON.stringify(token.value !== undefined ? token.value : token); var lexerMessage = this.lexer.formatError(token, "Syntax error"); return this.reportErrorCommon(lexerMessage, tokenDisplay); }; Parser.prototype.reportErrorCommon = function(lexerMessage, tokenDisplay) { var lines = []; lines.push(lexerMessage); var lastColumnIndex = this.table.length - 2; var lastColumn = this.table[lastColumnIndex]; var expectantStates = lastColumn.states .filter(function(state) { var nextSymbol = state.rule.symbols[state.dot]; return nextSymbol && typeof nextSymbol !== "string"; }); if (expectantStates.length === 0) { lines.push('Unexpected ' + tokenDisplay + '. I did not expect any more input. Here is the state of my parse table:\n'); this.displayStateStack(lastColumn.states, lines); } else { lines.push('Unexpected ' + tokenDisplay + '. Instead, I was expecting to see one of the following:\n'); // Display a "state stack" for each expectant state // - which shows you how this state came to be, step by step. // If there is more than one derivation, we only display the first one. var stateStacks = expectantStates .map(function(state) { return this.buildFirstStateStack(state, []) || [state]; }, this); // Display each state that is expecting a terminal symbol next. stateStacks.forEach(function(stateStack) { var state = stateStack[0]; var nextSymbol = state.rule.symbols[state.dot]; var symbolDisplay = this.getSymbolDisplay(nextSymbol); lines.push('A ' + symbolDisplay + ' based on:'); this.displayStateStack(stateStack, lines); }, this); } lines.push(""); return lines.join("\n"); } Parser.prototype.displayStateStack = function(stateStack, lines) { var lastDisplay; var sameDisplayCount = 0; for (var j = 0; j < stateStack.length; j++) { var state = stateStack[j]; var display = state.rule.toString(state.dot); if (display === lastDisplay) { sameDisplayCount++; } else { if (sameDisplayCount > 0) { lines.push(' ^ ' + sameDisplayCount + ' more lines identical to this'); } sameDisplayCount = 0; lines.push(' ' + display); } lastDisplay = display; } }; Parser.prototype.getSymbolDisplay = function(symbol) { return getSymbolLongDisplay(symbol); }; /* Builds a the first state stack. You can think of a state stack as the call stack of the recursive-descent parser which the Nearley parse algorithm simulates. A state stack is represented as an array of state objects. Within a state stack, the first item of the array will be the starting state, with each successive item in the array going further back into history. This function needs to be given a starting state and an empty array representing the visited states, and it returns an single state stack. */ Parser.prototype.buildFirstStateStack = function(state, visited) { if (visited.indexOf(state) !== -1) { // Found cycle, return null // to eliminate this path from the results, because // we don't know how to display it meaningfully return null; } if (state.wantedBy.length === 0) { return [state]; } var prevState = state.wantedBy[0]; var childVisited = [state].concat(visited); var childResult = this.buildFirstStateStack(prevState, childVisited); if (childResult === null) { return null; } return [state].concat(childResult); }; Parser.prototype.save = function() { var column = this.table[this.current]; column.lexerState = this.lexerState; return column; }; Parser.prototype.restore = function(column) { var index = column.index; this.current = index; this.table[index] = column; this.table.splice(index + 1); this.lexerState = column.lexerState; // Incrementally keep track of results this.results = this.finish(); }; // nb. deprecated: use save/restore instead! Parser.prototype.rewind = function(index) { if (!this.options.keepHistory) { throw new Error('set option `keepHistory` to enable rewinding') } // nb. recall column (table) indicies fall between token indicies. // col 0 -- token 0 -- col 1 this.restore(this.table[index]); }; Parser.prototype.finish = function() { // Return the possible parsings var considerations = []; var start = this.grammar.start; var column = this.table[this.table.length - 1] column.states.forEach(function (t) { if (t.rule.name === start && t.dot === t.rule.symbols.length && t.reference === 0 && t.data !== Parser.fail) { considerations.push(t); } }); return considerations.map(function(c) {return c.data; }); }; function getSymbolLongDisplay(symbol) { var type = typeof symbol; if (type === "string") { return symbol; } else if (type === "object") { if (symbol.literal) { return JSON.stringify(symbol.literal); } else if (symbol instanceof RegExp) { return 'character matching ' + symbol; } else if (symbol.type) { return symbol.type + ' token'; } else if (symbol.test) { return 'token matching ' + String(symbol.test); } else { throw new Error('Unknown symbol type: ' + symbol); } } } function getSymbolShortDisplay(symbol) { var type = typeof symbol; if (type === "string") { return symbol; } else if (type === "object") { if (symbol.literal) { return JSON.stringify(symbol.literal); } else if (symbol instanceof RegExp) { return symbol.toString(); } else if (symbol.type) { return '%' + symbol.type; } else if (symbol.test) { return '<' + String(symbol.test) + '>'; } else { throw new Error('Unknown symbol type: ' + symbol); } } } return { Parser: Parser, Grammar: Grammar, Rule: Rule, }; })); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/stream.js000066400000000000000000000006011376321042600227030ustar00rootroot00000000000000// Node-only var Writable = require('stream').Writable; var util = require('util'); function StreamWrapper(parser) { Writable.call(this); this._parser = parser; } util.inherits(StreamWrapper, Writable); StreamWrapper.prototype._write = function write(chunk, encoding, callback) { this._parser.feed(chunk.toString()); callback(); }; module.exports = StreamWrapper; nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/lib/unparse.js000066400000000000000000000116551376321042600231000ustar00rootroot00000000000000(function(root, factory) { if (typeof module === 'object' && module.exports) { module.exports = factory(require('./nearley')); } else { root.Unparser = factory(root.nearley); } }(this, function(nearley) { var randexp = require('randexp'); function genRandom(grammar, start) { // The first-generation generator. It just spews out stuff randomly, and is // not at all guaranteed to terminate. However, it is extremely performant. var output = ""; var stack = [start]; while (stack.length > 0) { var currentname = stack.pop(); if (typeof(currentname) === 'string') { var goodrules = grammar.rules.filter(function(x) { return x.name === currentname; }); if (goodrules.length > 0) { var chosen = goodrules[ Math.floor(Math.random()*goodrules.length) ]; for (var i=chosen.symbols.length-1; i>=0; i--) { stack.push(chosen.symbols[i]); } } else { throw new Error("Nothing matches rule: "+currentname+"!"); } } else if (currentname.test) { var c = new randexp(currentname).gen(); output += c; continue; } else if (currentname.literal) { output += currentname.literal; continue; } } return output; } function genBounded(grammar, start, depth) { // I guess you could call this the second-generation generator. // All it does is bound its output by a certain depth without having to // backtrack. It doesn't give guarantees on being uniformly random, but // that's doable if we *really* need it (by converting min_depth_rule, a // predicate, into something that counts the number of trees of depth d). var rules = grammar.rules; var min_depths_rule = []; function synth_nt(name, depth) { var good_rules = []; var min_min_depth = Infinity; for (var i=0; i 0) { return genBounded(grammar, start, depth); } else { return genRandom(grammar, start); } } return Unparse; })); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/package-lock.json000066400000000000000000014054421376321042600235350ustar00rootroot00000000000000{ "name": "nearley", "version": "2.20.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "version": "2.20.1", "license": "MIT", "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "bin": { "nearley-railroad": "bin/nearley-railroad.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearleyc": "bin/nearleyc.js" }, "devDependencies": { "@types/moo": "^0.3.0", "@types/node": "^7.0.27", "babel-cli": "^6.18.0", "babel-preset-env": "^1.6.0", "benchr": "^3.2.0", "coffee-script": "^1.10.0", "doctoc": "^1.3.0", "expect": "^1.20.2", "microtime": "^2.1.2", "mocha": "^8.2.1", "typescript": "^2.6.1" }, "funding": { "type": "individual", "url": "https://nearley.js.org/#give-to-nearley" } }, "node_modules/@textlint/ast-node-types": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.0.3.tgz", "integrity": "sha512-mkkqbuxZkCESmMCrVN5QEgmFqBJAcoAGIaZaQfziqKAyCQBLLgKVJzeFuup9mDm9mvCTKekhLk9yIaEFc8EFxA==", "dev": true }, "node_modules/@textlint/markdown-to-ast": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.0.9.tgz", "integrity": "sha512-hfAWBvTeUGh5t5kTn2U3uP3qOSM1BSrxzl1jF3nn0ywfZXpRBZr5yRjXnl4DzIYawCtZOshmRi/tI3/x4TE1jQ==", "dev": true, "dependencies": { "@textlint/ast-node-types": "^4.0.3", "debug": "^2.1.3", "remark-frontmatter": "^1.2.0", "remark-parse": "^5.0.0", "structured-source": "^3.0.2", "traverse": "^0.6.6", "unified": "^6.1.6" } }, "node_modules/@types/moo": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@types/moo/-/moo-0.3.0.tgz", "integrity": "sha512-GLZLDH6STLNmRtxU8TW4pqY7CmHfeB0MF7LMoG3uOOlRT+1yQOoH6sKbbNDRhwHFuGainBFZhJOB8pR44ASI2Q==", "dev": true }, "node_modules/@types/node": { "version": "7.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.2.tgz", "integrity": "sha512-RO4ig5taKmcrU4Rex8ojG1gpwFkjddzug9iPQSDvbewHN9vDpcFewevkaOK+KT+w1LeZnxbgOyfXwV4pxsQ4GQ==", "dev": true }, "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "node_modules/anchor-markdown-header": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", "dev": true, "dependencies": { "emoji-regex": "~6.1.0" } }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "node_modules/anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "optional": true, "dependencies": { "micromatch": "^2.1.5", "normalize-path": "^2.0.0" } }, "node_modules/aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, "node_modules/are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "optional": true, "dependencies": { "arr-flatten": "^1.0.1" } }, "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "optional": true }, "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, "optional": true }, "node_modules/array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true, "optional": true }, "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, "optional": true }, "node_modules/async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true, "optional": true }, "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, "optional": true }, "node_modules/babel-cli": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.18.0.tgz", "integrity": "sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=", "dev": true, "dependencies": { "babel-core": "^6.18.0", "babel-polyfill": "^6.16.0", "babel-register": "^6.18.0", "babel-runtime": "^6.9.0", "chokidar": "^1.0.0", "commander": "^2.8.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.0.0", "glob": "^5.0.5", "lodash": "^4.2.0", "output-file-sync": "^1.1.0", "path-is-absolute": "^1.0.0", "slash": "^1.0.0", "source-map": "^0.5.0", "v8flags": "^2.0.10" }, "bin": { "babel": "bin/babel.js", "babel-doctor": "bin/babel-doctor.js", "babel-external-helpers": "bin/babel-external-helpers.js", "babel-node": "bin/babel-node.js" }, "optionalDependencies": { "chokidar": "^1.0.0" } }, "node_modules/babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "dependencies": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" } }, "node_modules/babel-core": { "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "dependencies": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", "babel-helpers": "^6.24.1", "babel-messages": "^6.23.0", "babel-register": "^6.26.0", "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "convert-source-map": "^1.5.1", "debug": "^2.6.9", "json5": "^0.5.1", "lodash": "^4.17.4", "minimatch": "^3.0.4", "path-is-absolute": "^1.0.1", "private": "^0.1.8", "slash": "^1.0.0", "source-map": "^0.5.7" } }, "node_modules/babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "dependencies": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "detect-indent": "^4.0.0", "jsesc": "^1.3.0", "lodash": "^4.17.4", "source-map": "^0.5.7", "trim-right": "^1.0.1" } }, "node_modules/babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "dependencies": { "babel-helper-explode-assignable-expression": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "dependencies": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-define-map": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "dependencies": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, "node_modules/babel-helper-explode-assignable-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "dependencies": { "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-regex": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, "node_modules/babel-helper-remap-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "dependencies": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "dependencies": { "babel-helper-optimise-call-expression": "^6.24.1", "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "node_modules/babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "node_modules/babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, "node_modules/babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "dev": true }, "node_modules/babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "dependencies": { "babel-helper-remap-async-to-generator": "^6.24.1", "babel-plugin-syntax-async-functions": "^6.8.0", "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, "node_modules/babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "dependencies": { "babel-helper-define-map": "^6.24.1", "babel-helper-function-name": "^6.24.1", "babel-helper-optimise-call-expression": "^6.24.1", "babel-helper-replace-supers": "^6.24.1", "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "dependencies": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "dependencies": { "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "dependencies": { "babel-plugin-transform-strict-mode": "^6.24.1", "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-types": "^6.26.0" } }, "node_modules/babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "dependencies": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "dependencies": { "babel-plugin-transform-es2015-modules-amd": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "dependencies": { "babel-helper-replace-supers": "^6.24.1", "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "dependencies": { "babel-helper-call-delegate": "^6.24.1", "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "dependencies": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "dependencies": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", "regexpu-core": "^2.0.0" } }, "node_modules/babel-plugin-transform-exponentiation-operator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "dependencies": { "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", "babel-plugin-syntax-exponentiation-operator": "^6.8.0", "babel-runtime": "^6.22.0" } }, "node_modules/babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "dependencies": { "regenerator-transform": "^0.10.0" } }, "node_modules/babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "dependencies": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "node_modules/babel-polyfill": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "regenerator-runtime": "^0.10.5" } }, "node_modules/babel-polyfill/node_modules/regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true }, "node_modules/babel-preset-env": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "dependencies": { "babel-plugin-check-es2015-constants": "^6.22.0", "babel-plugin-syntax-trailing-function-commas": "^6.22.0", "babel-plugin-transform-async-to-generator": "^6.22.0", "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", "babel-plugin-transform-es2015-block-scoping": "^6.23.0", "babel-plugin-transform-es2015-classes": "^6.23.0", "babel-plugin-transform-es2015-computed-properties": "^6.22.0", "babel-plugin-transform-es2015-destructuring": "^6.23.0", "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", "babel-plugin-transform-es2015-for-of": "^6.23.0", "babel-plugin-transform-es2015-function-name": "^6.22.0", "babel-plugin-transform-es2015-literals": "^6.22.0", "babel-plugin-transform-es2015-modules-amd": "^6.22.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", "babel-plugin-transform-es2015-modules-umd": "^6.23.0", "babel-plugin-transform-es2015-object-super": "^6.22.0", "babel-plugin-transform-es2015-parameters": "^6.23.0", "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", "babel-plugin-transform-es2015-spread": "^6.22.0", "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", "babel-plugin-transform-es2015-template-literals": "^6.22.0", "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", "babel-plugin-transform-exponentiation-operator": "^6.22.0", "babel-plugin-transform-regenerator": "^6.22.0", "browserslist": "^3.2.6", "invariant": "^2.2.2", "semver": "^5.3.0" } }, "node_modules/babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "dependencies": { "babel-core": "^6.26.0", "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "home-or-tmp": "^2.0.0", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "source-map-support": "^0.4.15" } }, "node_modules/babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "dependencies": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, "node_modules/babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "lodash": "^4.17.4" } }, "node_modules/babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "dependencies": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" } }, "node_modules/babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "dependencies": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" } }, "node_modules/babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "node_modules/bail": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", "dev": true }, "node_modules/balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "optional": true, "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", "define-property": "^1.0.0", "isobject": "^3.0.1", "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" } }, "node_modules/base/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^1.0.0" } }, "node_modules/base/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/base/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/base/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "node_modules/base/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/base/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "dependencies": { "lodash": "^4.17.4", "platform": "^1.3.3" } }, "node_modules/benchr": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/benchr/-/benchr-3.4.0.tgz", "integrity": "sha1-O97q/ucgqdfAa+vlIdD3JIJKmTM=", "dev": true, "dependencies": { "benchmark": "^2.1.0", "chalk": "^1.1.3", "docopt": "^0.6.2", "easy-table": "^1.0.0" } }, "node_modules/binary-extensions": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true, "optional": true }, "node_modules/bindings": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz", "integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==", "dev": true }, "node_modules/bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, "node_modules/boundary": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", "dev": true }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "optional": true, "dependencies": { "expand-range": "^1.8.1", "preserve": "^0.2.0", "repeat-element": "^1.1.2" } }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "node_modules/browserslist": { "version": "3.2.8", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "dependencies": { "caniuse-lite": "^1.0.30000844", "electron-to-chromium": "^1.3.47" } }, "node_modules/buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" } }, "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", "dev": true }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "optional": true, "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", "has-value": "^1.0.0", "isobject": "^3.0.1", "set-value": "^2.0.0", "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" } }, "node_modules/cache-base/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/caniuse-lite": { "version": "1.0.30000923", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000923.tgz", "integrity": "sha512-j5ur7eeluOFjjPUkydtXP4KFAsmH3XaQNch5tvWSO+dLHYt5PE+VgJZLWtbVOodfWij6m6zas28T4gB/cLYq1w==", "dev": true }, "node_modules/chalk": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "node_modules/character-entities": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", "dev": true }, "node_modules/character-entities-legacy": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", "dev": true }, "node_modules/character-reference-invalid": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", "dev": true }, "node_modules/chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "optional": true, "dependencies": { "anymatch": "^1.3.0", "async-each": "^1.0.0", "fsevents": "^1.0.0", "glob-parent": "^2.0.0", "inherits": "^2.0.1", "is-binary-path": "^1.0.0", "is-glob": "^2.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.0.0" } }, "node_modules/chownr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "optional": true, "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" } }, "node_modules/class-utils/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^0.1.0" } }, "node_modules/class-utils/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "dependencies": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" } }, "node_modules/cliui/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/cliui/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "node_modules/cliui/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/cliui/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/cliui/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, "optional": true }, "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "node_modules/coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", "dev": true }, "node_modules/collapse-white-space": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", "dev": true }, "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "optional": true, "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { "color-name": "~1.1.4" }, "engines": { "node": ">=7.0.0" } }, "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "node_modules/commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" }, "node_modules/component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true, "optional": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "node_modules/convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "dependencies": { "safe-buffer": "~5.1.1" } }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true, "optional": true }, "node_modules/core-js": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==", "dev": true }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, "optional": true }, "node_modules/decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "dependencies": { "mimic-response": "^1.0.0" } }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "node_modules/defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "optional": true, "dependencies": { "clone": "^1.0.2" } }, "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "dependencies": { "object-keys": "^1.0.12" } }, "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" } }, "node_modules/define-property/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/define-property/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/define-property/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "node_modules/define-property/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/define-property/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, "node_modules/detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "dependencies": { "repeating": "^2.0.0" } }, "node_modules/detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, "engines": { "node": ">=0.3.1" } }, "node_modules/discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" }, "node_modules/docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", "dev": true }, "node_modules/doctoc": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/doctoc/-/doctoc-1.4.0.tgz", "integrity": "sha512-8IAq3KdMkxhXCUF+xdZxdJxwuz8N2j25sMgqiu4U4JWluN9tRKMlAalxGASszQjlZaBprdD2YfXpL3VPWUD4eg==", "dev": true, "dependencies": { "@textlint/markdown-to-ast": "~6.0.9", "anchor-markdown-header": "^0.5.5", "htmlparser2": "~3.9.2", "minimist": "~1.2.0", "underscore": "~1.8.3", "update-section": "^0.3.0" } }, "node_modules/dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "dependencies": { "domelementtype": "~1.1.1", "entities": "~1.1.1" } }, "node_modules/dom-serializer/node_modules/domelementtype": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", "dev": true }, "node_modules/domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "node_modules/domhandler": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "dependencies": { "domelementtype": "1" } }, "node_modules/domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "dependencies": { "dom-serializer": "0", "domelementtype": "1" } }, "node_modules/easy-table": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", "dev": true, "dependencies": { "ansi-regex": "^3.0.0", "wcwidth": ">=1.0.1" }, "optionalDependencies": { "wcwidth": ">=1.0.1" } }, "node_modules/easy-table/node_modules/ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true }, "node_modules/electron-to-chromium": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.95.tgz", "integrity": "sha512-0JZEDKOQAE05EO/4rk3vLAE+PYFI9OLCVLAS4QAq1y+Bb2y1N6MyQJz62ynzHN/y0Ka/nO5jVJcahbCEdfiXLQ==", "dev": true }, "node_modules/emoji-regex": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", "dev": true }, "node_modules/end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "dependencies": { "once": "^1.4.0" } }, "node_modules/entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "node_modules/es-abstract": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "dependencies": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", "has": "^1.0.1", "is-callable": "^1.1.3", "is-regex": "^1.0.4" } }, "node_modules/es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" }, "engines": { "node": ">=4" } }, "node_modules/esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, "node_modules/expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "optional": true, "dependencies": { "is-posix-bracket": "^0.1.0" } }, "node_modules/expand-range": { "version": "1.8.2", "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "optional": true, "dependencies": { "fill-range": "^2.1.0" } }, "node_modules/expand-template": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", "dev": true }, "node_modules/expect": { "version": "1.20.2", "resolved": "http://registry.npmjs.org/expect/-/expect-1.20.2.tgz", "integrity": "sha1-1Fj+TFYAQDa64yMkFqP2Nh8E+WU=", "dev": true, "dependencies": { "define-properties": "~1.1.2", "has": "^1.0.1", "is-equal": "^1.5.1", "is-regex": "^1.0.3", "object-inspect": "^1.1.0", "object-keys": "^1.0.9", "tmatch": "^2.0.1" } }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "optional": true, "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" } }, "node_modules/extend-shallow/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "optional": true, "dependencies": { "is-plain-object": "^2.0.4" } }, "node_modules/extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "optional": true, "dependencies": { "is-extglob": "^1.0.0" } }, "node_modules/fault": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.2.tgz", "integrity": "sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==", "dev": true, "dependencies": { "format": "^0.2.2" } }, "node_modules/filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true, "optional": true }, "node_modules/fill-range": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "optional": true, "dependencies": { "is-number": "^2.1.0", "isobject": "^2.0.0", "randomatic": "^3.0.0", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" } }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" } }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, "optional": true }, "node_modules/for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "optional": true, "dependencies": { "for-in": "^1.0.1" } }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "optional": true, "dependencies": { "map-cache": "^0.2.2" } }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "node_modules/fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "optional": true, "dependencies": { "minipass": "^2.6.0" } }, "node_modules/fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "node_modules/fsevents": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "dependencies": { "nan": "^2.9.2", "node-pre-gyp": "^0.10.0" } }, "node_modules/fsevents/node_modules/abbrev": { "version": "1.1.1", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/ansi-regex": { "version": "2.1.1", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/aproba": { "version": "1.2.0", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/are-we-there-yet": { "version": "1.1.4", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "node_modules/fsevents/node_modules/balanced-match": { "version": "1.0.0", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/brace-expansion": { "version": "1.1.11", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "node_modules/fsevents/node_modules/code-point-at": { "version": "1.1.0", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/concat-map": { "version": "0.0.1", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/console-control-strings": { "version": "1.1.0", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/core-util-is": { "version": "1.0.2", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "dependencies": { "ms": "2.0.0" } }, "node_modules/fsevents/node_modules/deep-extend": { "version": "0.5.1", "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/delegates": { "version": "1.0.0", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/detect-libc": { "version": "1.0.3", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/gauge": { "version": "2.7.4", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" } }, "node_modules/fsevents/node_modules/glob": { "version": "7.1.2", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "node_modules/fsevents/node_modules/has-unicode": { "version": "2.0.1", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/iconv-lite": { "version": "0.4.21", "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, "optional": true, "dependencies": { "safer-buffer": "^2.1.0" } }, "node_modules/fsevents/node_modules/ignore-walk": { "version": "3.0.1", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "dependencies": { "minimatch": "^3.0.4" } }, "node_modules/fsevents/node_modules/inherits": { "version": "2.0.3", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/ini": { "version": "1.3.5", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/is-fullwidth-code-point": { "version": "1.0.0", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, "dependencies": { "number-is-nan": "^1.0.0" } }, "node_modules/fsevents/node_modules/isarray": { "version": "1.0.0", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/minimatch": { "version": "3.0.4", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, "dependencies": { "brace-expansion": "^1.1.7" } }, "node_modules/fsevents/node_modules/ms": { "version": "2.0.0", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/needle": { "version": "2.2.0", "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "dev": true, "optional": true, "dependencies": { "debug": "^2.1.2", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node_modules/fsevents/node_modules/node-pre-gyp": { "version": "0.10.0", "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", "dev": true, "optional": true, "dependencies": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", "needle": "^2.2.0", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", "rc": "^1.1.7", "rimraf": "^2.6.1", "semver": "^5.3.0", "tar": "^4" } }, "node_modules/fsevents/node_modules/nopt": { "version": "4.0.1", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "dependencies": { "abbrev": "1", "osenv": "^0.1.4" } }, "node_modules/fsevents/node_modules/npm-bundled": { "version": "1.0.3", "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/npm-packlist": { "version": "1.1.10", "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, "optional": true, "dependencies": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" } }, "node_modules/fsevents/node_modules/npmlog": { "version": "4.1.2", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "node_modules/fsevents/node_modules/number-is-nan": { "version": "1.0.1", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/object-assign": { "version": "4.1.1", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/once": { "version": "1.4.0", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, "dependencies": { "wrappy": "1" } }, "node_modules/fsevents/node_modules/os-homedir": { "version": "1.0.2", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/os-tmpdir": { "version": "1.0.2", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/osenv": { "version": "0.1.5", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, "node_modules/fsevents/node_modules/path-is-absolute": { "version": "1.0.1", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/process-nextick-args": { "version": "2.0.0", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/rc": { "version": "1.2.7", "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "dev": true, "optional": true, "dependencies": { "deep-extend": "^0.5.1", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" } }, "node_modules/fsevents/node_modules/readable-stream": { "version": "2.3.6", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/fsevents/node_modules/rimraf": { "version": "2.6.2", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "optional": true, "dependencies": { "glob": "^7.0.5" } }, "node_modules/fsevents/node_modules/safe-buffer": { "version": "5.1.1", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/safer-buffer": { "version": "2.1.2", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/sax": { "version": "1.2.4", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/semver": { "version": "5.5.0", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/set-blocking": { "version": "2.0.0", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/signal-exit": { "version": "3.0.2", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/string_decoder": { "version": "1.1.1", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/fsevents/node_modules/string-width": { "version": "1.0.2", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "node_modules/fsevents/node_modules/strip-ansi": { "version": "3.0.1", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "dependencies": { "ansi-regex": "^2.0.0" } }, "node_modules/fsevents/node_modules/strip-json-comments": { "version": "2.0.1", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/util-deprecate": { "version": "1.0.2", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "node_modules/fsevents/node_modules/wide-align": { "version": "1.1.2", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "dependencies": { "string-width": "^1.0.2" } }, "node_modules/fsevents/node_modules/wrappy": { "version": "1.0.2", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "dependencies": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" } }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true, "optional": true }, "node_modules/github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", "dev": true }, "node_modules/glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "dependencies": { "inflight": "^1.0.4", "inherits": "2", "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" } }, "node_modules/glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "optional": true, "dependencies": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" } }, "node_modules/glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "optional": true, "dependencies": { "is-glob": "^2.0.0" } }, "node_modules/globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, "node_modules/graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true, "engines": { "node": ">=4.x" } }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "dependencies": { "function-bind": "^1.1.1" } }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" } }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "optional": true, "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" } }, "node_modules/has-value/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "optional": true, "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" } }, "node_modules/has-values/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" } }, "node_modules/has-values/node_modules/kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" } }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, "bin": { "he": "bin/he" } }, "node_modules/home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "dependencies": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.1" } }, "node_modules/htmlparser2": { "version": "3.9.2", "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "dev": true, "dependencies": { "domelementtype": "^1.3.0", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "node_modules/ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/is-accessor-descriptor": { "version": "0.1.6", "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/is-alphabetical": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", "dev": true }, "node_modules/is-alphanumerical": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", "dev": true, "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, "node_modules/is-arrow-function": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-arrow-function/-/is-arrow-function-2.0.3.tgz", "integrity": "sha1-Kb4sLY2UUIUri7r7Y1unuNjofsI=", "dev": true, "dependencies": { "is-callable": "^1.0.4" } }, "node_modules/is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "optional": true, "dependencies": { "binary-extensions": "^1.0.0" } }, "node_modules/is-boolean-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", "dev": true }, "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "node_modules/is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, "node_modules/is-decimal": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", "dev": true }, "node_modules/is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" } }, "node_modules/is-descriptor/node_modules/kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "optional": true }, "node_modules/is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "dev": true, "optional": true }, "node_modules/is-equal": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/is-equal/-/is-equal-1.5.5.tgz", "integrity": "sha1-XoXxlX4FKIMkf+s4aWWju6Ffuz0=", "dev": true, "dependencies": { "has": "^1.0.1", "is-arrow-function": "^2.0.3", "is-boolean-object": "^1.0.0", "is-callable": "^1.1.3", "is-date-object": "^1.0.1", "is-generator-function": "^1.0.6", "is-number-object": "^1.0.3", "is-regex": "^1.0.3", "is-string": "^1.0.4", "is-symbol": "^1.0.1", "object.entries": "^1.0.4" } }, "node_modules/is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "optional": true, "dependencies": { "is-primitive": "^2.0.0" } }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "optional": true }, "node_modules/is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true, "optional": true }, "node_modules/is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "dependencies": { "number-is-nan": "^1.0.0" } }, "node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "dependencies": { "number-is-nan": "^1.0.0" } }, "node_modules/is-generator-function": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", "dev": true }, "node_modules/is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "optional": true, "dependencies": { "is-extglob": "^1.0.0" } }, "node_modules/is-hexadecimal": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", "dev": true }, "node_modules/is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/is-number-object": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", "dev": true }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "optional": true, "dependencies": { "isobject": "^3.0.1" } }, "node_modules/is-plain-object/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true, "optional": true }, "node_modules/is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true, "optional": true }, "node_modules/is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "dependencies": { "has": "^1.0.1" } }, "node_modules/is-string": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", "dev": true }, "node_modules/is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "dependencies": { "has-symbols": "^1.0.0" } }, "node_modules/is-whitespace-character": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", "dev": true }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "optional": true }, "node_modules/is-word-character": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", "dev": true }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "optional": true, "dependencies": { "isarray": "1.0.0" } }, "node_modules/js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "node_modules/js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "node_modules/jsesc": { "version": "1.3.0", "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "node_modules/json5": { "version": "0.5.1", "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, "node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" } }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { "p-locate": "^5.0.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, "node_modules/log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "dependencies": { "chalk": "^4.0.0" }, "engines": { "node": ">=10" } }, "node_modules/log-symbols/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { "color-convert": "^2.0.1" }, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, "node_modules/log-symbols/node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/chalk/chalk?sponsor=1" } }, "node_modules/log-symbols/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true, "optional": true }, "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "optional": true, "dependencies": { "object-visit": "^1.0.0" } }, "node_modules/markdown-escapes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", "dev": true }, "node_modules/math-random": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", "dev": true, "optional": true }, "node_modules/micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "optional": true, "dependencies": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", "braces": "^1.8.2", "expand-brackets": "^0.1.4", "extglob": "^0.3.1", "filename-regex": "^2.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.1", "kind-of": "^3.0.2", "normalize-path": "^2.0.1", "object.omit": "^2.0.0", "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" } }, "node_modules/microtime": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/microtime/-/microtime-2.1.8.tgz", "integrity": "sha1-tDxMWrE+Un4XM3DQMG2eCku/QQ0=", "dev": true, "dependencies": { "bindings": "1.3.x", "nan": "2.10.x", "prebuild-install": "^2.1.0" } }, "node_modules/microtime/node_modules/nan": { "version": "2.10.0", "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", "dev": true }, "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, "node_modules/minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "dependencies": { "brace-expansion": "^1.1.7" } }, "node_modules/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "node_modules/minipass": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "optional": true, "dependencies": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "node_modules/minizlib": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "optional": true, "dependencies": { "minipass": "^2.9.0" } }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "optional": true, "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/mixin-deep/node_modules/is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "optional": true, "dependencies": { "is-plain-object": "^2.0.4" } }, "node_modules/mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "dependencies": { "minimist": "^1.2.5" }, "bin": { "mkdirp": "bin/cmd.js" } }, "node_modules/mocha": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", "dev": true, "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.4.3", "debug": "4.2.0", "diff": "4.0.2", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.14.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", "ms": "2.1.2", "nanoid": "3.1.12", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", "supports-color": "7.2.0", "which": "2.0.2", "wide-align": "1.1.3", "workerpool": "6.0.2", "yargs": "13.3.2", "yargs-parser": "13.1.2", "yargs-unparser": "2.0.0" }, "bin": { "_mocha": "bin/_mocha", "mocha": "bin/mocha" }, "engines": { "node": ">= 10.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mochajs" } }, "node_modules/mocha/node_modules/anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" }, "engines": { "node": ">= 8" } }, "node_modules/mocha/node_modules/binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/chokidar": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, "dependencies": { "anymatch": "~3.1.1", "braces": "~3.0.2", "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" }, "engines": { "node": ">= 8.10.0" }, "optionalDependencies": { "fsevents": "~2.1.2" } }, "node_modules/mocha/node_modules/debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" }, "peerDependenciesMeta": { "supports-color": { "optional": true } } }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "hasInstallScript": true, "optional": true, "os": [ "darwin" ], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, "node_modules/mocha/node_modules/glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/glob-parent": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "dependencies": { "is-glob": "^4.0.1" }, "engines": { "node": ">= 6" } }, "node_modules/mocha/node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/mocha/node_modules/is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/mocha/node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, "engines": { "node": ">=0.12.0" } }, "node_modules/mocha/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "node_modules/mocha/node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/mocha/node_modules/readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "dependencies": { "picomatch": "^2.2.1" }, "engines": { "node": ">=8.10.0" } }, "node_modules/mocha/node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, "engines": { "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "dependencies": { "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, "node_modules/mocha/node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "dependencies": { "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" } }, "node_modules/moo": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "node_modules/nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", "dev": true, "optional": true }, "node_modules/nanoid": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { "node": "^10 || ^12 || >=13.7" } }, "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "optional": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" } }, "node_modules/nanomatch/node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, "optional": true }, "node_modules/nanomatch/node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, "optional": true }, "node_modules/nanomatch/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/node-abi": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.5.0.tgz", "integrity": "sha512-9g2twBGSP6wIR5PW7tXvAWnEWKJDH/VskdXp168xsw9VVxpEGov8K4jsP4/VeoC7b2ZAyzckvMCuQuQlw44lXg==", "dev": true, "dependencies": { "semver": "^5.4.1" } }, "node_modules/noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", "dev": true }, "node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "optional": true, "dependencies": { "remove-trailing-separator": "^1.0.1" } }, "node_modules/npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "dependencies": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "optional": true, "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" } }, "node_modules/object-copy/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^0.1.0" } }, "node_modules/object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", "dev": true }, "node_modules/object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "optional": true, "dependencies": { "isobject": "^3.0.0" } }, "node_modules/object-visit/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/object.entries": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", "dev": true, "dependencies": { "define-properties": "^1.1.2", "es-abstract": "^1.6.1", "function-bind": "^1.1.0", "has": "^1.0.1" } }, "node_modules/object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "optional": true, "dependencies": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" } }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "optional": true, "dependencies": { "isobject": "^3.0.1" } }, "node_modules/object.pick/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "dependencies": { "wrappy": "1" } }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "node_modules/os-tmpdir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "node_modules/output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "dependencies": { "graceful-fs": "^4.1.4", "mkdirp": "^0.5.1", "object-assign": "^4.1.0" } }, "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { "yocto-queue": "^0.1.0" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { "p-limit": "^3.0.2" }, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/parse-entities": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", "dev": true, "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" } }, "node_modules/parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "optional": true, "dependencies": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.0" } }, "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true, "optional": true }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "node_modules/picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true, "engines": { "node": ">=8.6" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/platform": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", "dev": true }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true, "optional": true }, "node_modules/prebuild-install": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", "dev": true, "dependencies": { "detect-libc": "^1.0.3", "expand-template": "^1.0.2", "github-from-package": "0.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "node-abi": "^2.2.0", "noop-logger": "^0.1.1", "npmlog": "^4.0.1", "os-homedir": "^1.0.1", "pump": "^2.0.1", "rc": "^1.1.6", "simple-get": "^2.7.0", "tar-fs": "^1.13.0", "tunnel-agent": "^0.6.0", "which-pm-runs": "^1.0.0" } }, "node_modules/preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true, "optional": true }, "node_modules/private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, "node_modules/process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "node_modules/pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=" }, "node_modules/randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", "dependencies": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" } }, "node_modules/randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "optional": true, "dependencies": { "is-number": "^4.0.0", "kind-of": "^6.0.0", "math-random": "^1.0.1" } }, "node_modules/randomatic/node_modules/is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, "optional": true }, "node_modules/randomatic/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "dependencies": { "safe-buffer": "^5.1.0" } }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" } }, "node_modules/readable-stream": { "version": "2.3.6", "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "node_modules/readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "optional": true, "dependencies": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" } }, "node_modules/readdirp/node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, "optional": true }, "node_modules/readdirp/node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, "optional": true }, "node_modules/readdirp/node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "optional": true, "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", "fill-range": "^4.0.0", "isobject": "^3.0.1", "repeat-element": "^1.1.2", "snapdragon": "^0.8.1", "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" } }, "node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" } }, "node_modules/readdirp/node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "optional": true, "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "posix-character-classes": "^0.1.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^0.1.0" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/is-accessor-descriptor": { "version": "0.1.6", "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/is-accessor-descriptor/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/is-data-descriptor/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" } }, "node_modules/readdirp/node_modules/expand-brackets/node_modules/kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "optional": true }, "node_modules/readdirp/node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "optional": true, "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", "expand-brackets": "^2.1.4", "extend-shallow": "^2.0.1", "fragment-cache": "^0.2.1", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" } }, "node_modules/readdirp/node_modules/extglob/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^1.0.0" } }, "node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" } }, "node_modules/readdirp/node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "optional": true, "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" } }, "node_modules/readdirp/node_modules/fill-range/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" } }, "node_modules/readdirp/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/readdirp/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/readdirp/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "node_modules/readdirp/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/readdirp/node_modules/is-number/node_modules/kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "dependencies": { "is-buffer": "^1.1.5" } }, "node_modules/readdirp/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/readdirp/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/readdirp/node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "optional": true, "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "extglob": "^2.0.4", "fragment-cache": "^0.2.1", "kind-of": "^6.0.2", "nanomatch": "^1.2.9", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } }, "node_modules/regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, "node_modules/regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "node_modules/regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "dependencies": { "babel-runtime": "^6.18.0", "babel-types": "^6.19.0", "private": "^0.1.6" } }, "node_modules/regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "optional": true, "dependencies": { "is-equal-shallow": "^0.1.3" } }, "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "optional": true, "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" } }, "node_modules/regexpu-core": { "version": "2.0.0", "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "dependencies": { "regenerate": "^1.2.1", "regjsgen": "^0.2.0", "regjsparser": "^0.1.4" } }, "node_modules/regjsgen": { "version": "0.2.0", "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "node_modules/regjsparser": { "version": "0.1.5", "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "dependencies": { "jsesc": "~0.5.0" } }, "node_modules/regjsparser/node_modules/jsesc": { "version": "0.5.0", "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true }, "node_modules/remark-frontmatter": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.1.tgz", "integrity": "sha512-Zj/fDMYnSVgMCeKp8fXIhtMoZq4G6E1dnwfMoO8fVXrm/+oVSiN8YMREtwN2cctgK9EsnYSeS1ExX2hcX/fE1A==", "dev": true, "dependencies": { "fault": "^1.0.1", "xtend": "^4.0.1" } }, "node_modules/remark-parse": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", "dev": true, "dependencies": { "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0", "is-whitespace-character": "^1.0.0", "is-word-character": "^1.0.0", "markdown-escapes": "^1.0.0", "parse-entities": "^1.1.0", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", "trim": "0.0.1", "trim-trailing-lines": "^1.0.0", "unherit": "^1.0.4", "unist-util-remove-position": "^1.0.0", "vfile-location": "^2.0.0", "xtend": "^4.0.1" } }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true, "optional": true }, "node_modules/repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true, "optional": true }, "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "node_modules/repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "dependencies": { "is-finite": "^1.0.0" } }, "node_modules/replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true, "optional": true }, "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "node_modules/safe-regex": { "version": "1.1.0", "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "optional": true, "dependencies": { "ret": "~0.1.10" } }, "node_modules/semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "node_modules/serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "optional": true, "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/set-value/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" } }, "node_modules/signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "node_modules/simple-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", "dev": true }, "node_modules/simple-get": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", "dev": true, "dependencies": { "decompress-response": "^3.3.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "node_modules/slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "optional": true, "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "map-cache": "^0.2.2", "source-map": "^0.5.6", "source-map-resolve": "^0.5.0", "use": "^3.1.0" } }, "node_modules/snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "optional": true, "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" } }, "node_modules/snapdragon-node/node_modules/define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^1.0.0" } }, "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/snapdragon-node/node_modules/is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^6.0.0" } }, "node_modules/snapdragon-node/node_modules/is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "dependencies": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "node_modules/snapdragon-node/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/snapdragon-node/node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true, "engines": { "node": ">=0.10.0" } }, "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.2.0" } }, "node_modules/snapdragon/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^0.1.0" } }, "node_modules/snapdragon/node_modules/extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "dependencies": { "is-extendable": "^0.1.0" } }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "node_modules/source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "optional": true, "dependencies": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", "urix": "^0.1.0" } }, "node_modules/source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "dependencies": { "source-map": "^0.5.6" } }, "node_modules/source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true, "optional": true }, "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "optional": true, "dependencies": { "extend-shallow": "^3.0.0" } }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "node_modules/state-toggle": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", "dev": true }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "optional": true, "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" } }, "node_modules/static-extend/node_modules/define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "dependencies": { "is-descriptor": "^0.1.0" } }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/string-width": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" } }, "node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "node_modules/structured-source": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", "dev": true, "dependencies": { "boundary": "^1.0.1" } }, "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "node_modules/tar": { "version": "4.4.13", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "optional": true, "dependencies": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", "minipass": "^2.8.6", "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", "yallist": "^3.0.3" }, "engines": { "node": ">=4.5" } }, "node_modules/tar-fs": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", "dev": true, "dependencies": { "chownr": "^1.0.1", "mkdirp": "^0.5.1", "pump": "^1.0.0", "tar-stream": "^1.1.2" } }, "node_modules/tar-fs/node_modules/pump": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "node_modules/tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", "readable-stream": "^2.3.0", "to-buffer": "^1.1.1", "xtend": "^4.0.0" } }, "node_modules/tmatch": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", "dev": true }, "node_modules/to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, "node_modules/to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "optional": true, "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" } }, "node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "optional": true, "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" } }, "node_modules/to-regex-range/node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "dependencies": { "kind-of": "^3.0.2" } }, "node_modules/traverse": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", "dev": true }, "node_modules/trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, "node_modules/trim-trailing-lines": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", "dev": true }, "node_modules/trough": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", "dev": true }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "dependencies": { "safe-buffer": "^5.0.1" } }, "node_modules/typescript": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "node_modules/underscore": { "version": "1.8.3", "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", "dev": true }, "node_modules/unherit": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", "dev": true, "dependencies": { "inherits": "^2.0.1", "xtend": "^4.0.1" } }, "node_modules/unified": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", "dev": true, "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^1.1.0", "trough": "^1.0.0", "vfile": "^2.0.0", "x-is-string": "^0.1.0" } }, "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "optional": true, "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" }, "engines": { "node": ">=0.10.0" } }, "node_modules/unist-util-is": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", "dev": true }, "node_modules/unist-util-remove-position": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", "dev": true, "dependencies": { "unist-util-visit": "^1.1.0" } }, "node_modules/unist-util-stringify-position": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", "dev": true }, "node_modules/unist-util-visit": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", "dev": true, "dependencies": { "unist-util-visit-parents": "^2.0.0" } }, "node_modules/unist-util-visit-parents": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", "dev": true, "dependencies": { "unist-util-is": "^2.1.2" } }, "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "optional": true, "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" } }, "node_modules/unset-value/node_modules/has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "optional": true, "dependencies": { "get-value": "^2.0.3", "has-values": "^0.1.4", "isobject": "^2.0.0" } }, "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "optional": true, "dependencies": { "isarray": "1.0.0" } }, "node_modules/unset-value/node_modules/has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, "optional": true }, "node_modules/unset-value/node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "node_modules/update-section": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=", "dev": true }, "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true, "optional": true }, "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, "optional": true }, "node_modules/user-home": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", "dev": true }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "node_modules/v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "dependencies": { "user-home": "^1.1.1" } }, "node_modules/vfile": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", "dev": true, "dependencies": { "is-buffer": "^1.1.4", "replace-ext": "1.0.0", "unist-util-stringify-position": "^1.0.0", "vfile-message": "^1.0.0" } }, "node_modules/vfile-location": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz", "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==", "dev": true }, "node_modules/vfile-message": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "dev": true, "dependencies": { "unist-util-stringify-position": "^1.1.1" } }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "optional": true, "dependencies": { "defaults": "^1.0.3" } }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" }, "engines": { "node": ">= 8" } }, "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "node_modules/which-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", "dev": true }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "dependencies": { "string-width": "^1.0.2 || 2" } }, "node_modules/workerpool": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", "dev": true }, "node_modules/wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "dependencies": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "engines": { "node": ">=6" } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "dependencies": { "color-convert": "^1.9.0" }, "engines": { "node": ">=4" } }, "node_modules/wrap-ansi/node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "dependencies": { "color-name": "1.1.3" } }, "node_modules/wrap-ansi/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "node_modules/x-is-string": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", "dev": true }, "node_modules/xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, "node_modules/y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "optional": true }, "node_modules/yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "dependencies": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" } }, "node_modules/yargs-parser": { "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "engines": { "node": ">=10" } }, "node_modules/yargs-unparser/node_modules/camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs-unparser/node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, "engines": { "node": ">=8" } }, "node_modules/yargs/node_modules/ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "node_modules/yargs/node_modules/find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "dependencies": { "locate-path": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/yargs/node_modules/locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "dependencies": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "dependencies": { "p-try": "^2.0.0" }, "engines": { "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/yargs/node_modules/p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "dependencies": { "p-limit": "^2.0.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, "engines": { "node": ">=4" } }, "node_modules/yargs/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "dependencies": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" }, "engines": { "node": ">=6" } }, "node_modules/yargs/node_modules/strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { "ansi-regex": "^4.1.0" }, "engines": { "node": ">=6" } }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, "engines": { "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } } }, "dependencies": { "@textlint/ast-node-types": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-4.0.3.tgz", "integrity": "sha512-mkkqbuxZkCESmMCrVN5QEgmFqBJAcoAGIaZaQfziqKAyCQBLLgKVJzeFuup9mDm9mvCTKekhLk9yIaEFc8EFxA==", "dev": true }, "@textlint/markdown-to-ast": { "version": "6.0.9", "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-6.0.9.tgz", "integrity": "sha512-hfAWBvTeUGh5t5kTn2U3uP3qOSM1BSrxzl1jF3nn0ywfZXpRBZr5yRjXnl4DzIYawCtZOshmRi/tI3/x4TE1jQ==", "dev": true, "requires": { "@textlint/ast-node-types": "^4.0.3", "debug": "^2.1.3", "remark-frontmatter": "^1.2.0", "remark-parse": "^5.0.0", "structured-source": "^3.0.2", "traverse": "^0.6.6", "unified": "^6.1.6" } }, "@types/moo": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@types/moo/-/moo-0.3.0.tgz", "integrity": "sha512-GLZLDH6STLNmRtxU8TW4pqY7CmHfeB0MF7LMoG3uOOlRT+1yQOoH6sKbbNDRhwHFuGainBFZhJOB8pR44ASI2Q==", "dev": true }, "@types/node": { "version": "7.10.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-7.10.2.tgz", "integrity": "sha512-RO4ig5taKmcrU4Rex8ojG1gpwFkjddzug9iPQSDvbewHN9vDpcFewevkaOK+KT+w1LeZnxbgOyfXwV4pxsQ4GQ==", "dev": true }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, "anchor-markdown-header": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/anchor-markdown-header/-/anchor-markdown-header-0.5.7.tgz", "integrity": "sha1-BFBj125qH5zTJ6V6ASaqD97Dcac=", "dev": true, "requires": { "emoji-regex": "~6.1.0" } }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", "dev": true }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", "dev": true }, "anymatch": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "dev": true, "optional": true, "requires": { "micromatch": "^2.1.5", "normalize-path": "^2.0.0" } }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true }, "are-we-there-yet": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", "dev": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "optional": true, "requires": { "arr-flatten": "^1.0.1" } }, "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true, "optional": true }, "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", "dev": true, "optional": true }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", "dev": true, "optional": true }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", "dev": true, "optional": true }, "async-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true, "optional": true }, "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dev": true, "optional": true }, "babel-cli": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babel-cli/-/babel-cli-6.18.0.tgz", "integrity": "sha1-khF/NBrdnerZD2+n0Kl8DMCOwYY=", "dev": true, "requires": { "babel-core": "^6.18.0", "babel-polyfill": "^6.16.0", "babel-register": "^6.18.0", "babel-runtime": "^6.9.0", "chokidar": "^1.0.0", "commander": "^2.8.1", "convert-source-map": "^1.1.0", "fs-readdir-recursive": "^1.0.0", "glob": "^5.0.5", "lodash": "^4.2.0", "output-file-sync": "^1.1.0", "path-is-absolute": "^1.0.0", "slash": "^1.0.0", "source-map": "^0.5.0", "v8flags": "^2.0.10" } }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { "chalk": "^1.1.3", "esutils": "^2.0.2", "js-tokens": "^3.0.2" } }, "babel-core": { "version": "6.26.3", "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-generator": "^6.26.0", "babel-helpers": "^6.24.1", "babel-messages": "^6.23.0", "babel-register": "^6.26.0", "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "convert-source-map": "^1.5.1", "debug": "^2.6.9", "json5": "^0.5.1", "lodash": "^4.17.4", "minimatch": "^3.0.4", "path-is-absolute": "^1.0.1", "private": "^0.1.8", "slash": "^1.0.0", "source-map": "^0.5.7" } }, "babel-generator": { "version": "6.26.1", "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "detect-indent": "^4.0.0", "jsesc": "^1.3.0", "lodash": "^4.17.4", "source-map": "^0.5.7", "trim-right": "^1.0.1" } }, "babel-helper-builder-binary-assignment-operator-visitor": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", "dev": true, "requires": { "babel-helper-explode-assignable-expression": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-helper-call-delegate": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", "dev": true, "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-helper-define-map": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", "dev": true, "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, "babel-helper-explode-assignable-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-helper-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", "dev": true, "requires": { "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-helper-get-function-arity": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-helper-hoist-variables": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-helper-optimise-call-expression": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-helper-regex": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, "babel-helper-remap-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", "dev": true, "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-helper-replace-supers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", "dev": true, "requires": { "babel-helper-optimise-call-expression": "^6.24.1", "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-helpers": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "babel-messages": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-check-es2015-constants": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-syntax-async-functions": { "version": "6.13.0", "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", "dev": true }, "babel-plugin-syntax-exponentiation-operator": { "version": "6.13.0", "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", "dev": true }, "babel-plugin-syntax-trailing-function-commas": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", "dev": true }, "babel-plugin-transform-async-to-generator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", "dev": true, "requires": { "babel-helper-remap-async-to-generator": "^6.24.1", "babel-plugin-syntax-async-functions": "^6.8.0", "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-arrow-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoped-functions": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-block-scoping": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "lodash": "^4.17.4" } }, "babel-plugin-transform-es2015-classes": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", "dev": true, "requires": { "babel-helper-define-map": "^6.24.1", "babel-helper-function-name": "^6.24.1", "babel-helper-optimise-call-expression": "^6.24.1", "babel-helper-replace-supers": "^6.24.1", "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-computed-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-destructuring": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-duplicate-keys": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-for-of": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-function-name": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", "dev": true, "requires": { "babel-helper-function-name": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-modules-amd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", "dev": true, "requires": { "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-commonjs": { "version": "6.26.2", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { "babel-plugin-transform-strict-mode": "^6.24.1", "babel-runtime": "^6.26.0", "babel-template": "^6.26.0", "babel-types": "^6.26.0" } }, "babel-plugin-transform-es2015-modules-systemjs": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", "dev": true, "requires": { "babel-helper-hoist-variables": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-modules-umd": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", "dev": true, "requires": { "babel-plugin-transform-es2015-modules-amd": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1" } }, "babel-plugin-transform-es2015-object-super": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", "dev": true, "requires": { "babel-helper-replace-supers": "^6.24.1", "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-parameters": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", "dev": true, "requires": { "babel-helper-call-delegate": "^6.24.1", "babel-helper-get-function-arity": "^6.24.1", "babel-runtime": "^6.22.0", "babel-template": "^6.24.1", "babel-traverse": "^6.24.1", "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-shorthand-properties": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-spread": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-sticky-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", "dev": true, "requires": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-plugin-transform-es2015-template-literals": { "version": "6.22.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-typeof-symbol": { "version": "6.23.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", "dev": true, "requires": { "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-es2015-unicode-regex": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", "dev": true, "requires": { "babel-helper-regex": "^6.24.1", "babel-runtime": "^6.22.0", "regexpu-core": "^2.0.0" } }, "babel-plugin-transform-exponentiation-operator": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", "dev": true, "requires": { "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", "babel-plugin-syntax-exponentiation-operator": "^6.8.0", "babel-runtime": "^6.22.0" } }, "babel-plugin-transform-regenerator": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", "dev": true, "requires": { "regenerator-transform": "^0.10.0" } }, "babel-plugin-transform-strict-mode": { "version": "6.24.1", "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { "babel-runtime": "^6.22.0", "babel-types": "^6.24.1" } }, "babel-polyfill": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz", "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=", "dev": true, "requires": { "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "regenerator-runtime": "^0.10.5" }, "dependencies": { "regenerator-runtime": { "version": "0.10.5", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg=", "dev": true } } }, "babel-preset-env": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", "dev": true, "requires": { "babel-plugin-check-es2015-constants": "^6.22.0", "babel-plugin-syntax-trailing-function-commas": "^6.22.0", "babel-plugin-transform-async-to-generator": "^6.22.0", "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", "babel-plugin-transform-es2015-block-scoping": "^6.23.0", "babel-plugin-transform-es2015-classes": "^6.23.0", "babel-plugin-transform-es2015-computed-properties": "^6.22.0", "babel-plugin-transform-es2015-destructuring": "^6.23.0", "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", "babel-plugin-transform-es2015-for-of": "^6.23.0", "babel-plugin-transform-es2015-function-name": "^6.22.0", "babel-plugin-transform-es2015-literals": "^6.22.0", "babel-plugin-transform-es2015-modules-amd": "^6.22.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", "babel-plugin-transform-es2015-modules-umd": "^6.23.0", "babel-plugin-transform-es2015-object-super": "^6.22.0", "babel-plugin-transform-es2015-parameters": "^6.23.0", "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", "babel-plugin-transform-es2015-spread": "^6.22.0", "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", "babel-plugin-transform-es2015-template-literals": "^6.22.0", "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", "babel-plugin-transform-exponentiation-operator": "^6.22.0", "babel-plugin-transform-regenerator": "^6.22.0", "browserslist": "^3.2.6", "invariant": "^2.2.2", "semver": "^5.3.0" } }, "babel-register": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { "babel-core": "^6.26.0", "babel-runtime": "^6.26.0", "core-js": "^2.5.0", "home-or-tmp": "^2.0.0", "lodash": "^4.17.4", "mkdirp": "^0.5.1", "source-map-support": "^0.4.15" } }, "babel-runtime": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { "core-js": "^2.4.0", "regenerator-runtime": "^0.11.0" } }, "babel-template": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { "babel-runtime": "^6.26.0", "babel-traverse": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "lodash": "^4.17.4" } }, "babel-traverse": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { "babel-code-frame": "^6.26.0", "babel-messages": "^6.23.0", "babel-runtime": "^6.26.0", "babel-types": "^6.26.0", "babylon": "^6.18.0", "debug": "^2.6.8", "globals": "^9.18.0", "invariant": "^2.2.2", "lodash": "^4.17.4" } }, "babel-types": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { "babel-runtime": "^6.26.0", "esutils": "^2.0.2", "lodash": "^4.17.4", "to-fast-properties": "^1.0.3" } }, "babylon": { "version": "6.18.0", "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", "dev": true }, "bail": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.3.tgz", "integrity": "sha512-1X8CnjFVQ+a+KW36uBNMTU5s8+v5FzeqrP7hTG5aTb4aPreSbZJlhwPon9VKMuEVgV++JM+SQrALY3kr7eswdg==", "dev": true }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true }, "base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "optional": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", "define-property": "^1.0.0", "isobject": "^3.0.1", "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true } } }, "benchmark": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", "dev": true, "requires": { "lodash": "^4.17.4", "platform": "^1.3.3" } }, "benchr": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/benchr/-/benchr-3.4.0.tgz", "integrity": "sha1-O97q/ucgqdfAa+vlIdD3JIJKmTM=", "dev": true, "requires": { "benchmark": "^2.1.0", "chalk": "^1.1.3", "docopt": "^0.6.2", "easy-table": "^1.0.0" } }, "binary-extensions": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", "dev": true, "optional": true }, "bindings": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.3.1.tgz", "integrity": "sha512-i47mqjF9UbjxJhxGf+pZ6kSxrnI3wBLlnGI2ArWJ4r0VrvDS7ZYXkprq/pLaBWYq4GM0r4zdHY+NNRqEMU7uew==", "dev": true }, "bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, "requires": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, "boundary": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/boundary/-/boundary-1.0.1.tgz", "integrity": "sha1-TWfcJgLAzBbdm85+v4fpSCkPWBI=", "dev": true }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "optional": true, "requires": { "expand-range": "^1.8.1", "preserve": "^0.2.0", "repeat-element": "^1.1.2" } }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, "browserslist": { "version": "3.2.8", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", "dev": true, "requires": { "caniuse-lite": "^1.0.30000844", "electron-to-chromium": "^1.3.47" } }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, "requires": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" } }, "buffer-alloc-unsafe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, "buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", "dev": true }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "optional": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", "has-value": "^1.0.0", "isobject": "^3.0.1", "set-value": "^2.0.0", "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true }, "caniuse-lite": { "version": "1.0.30000923", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000923.tgz", "integrity": "sha512-j5ur7eeluOFjjPUkydtXP4KFAsmH3XaQNch5tvWSO+dLHYt5PE+VgJZLWtbVOodfWij6m6zas28T4gB/cLYq1w==", "dev": true }, "chalk": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" } }, "character-entities": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.2.tgz", "integrity": "sha512-sMoHX6/nBiy3KKfC78dnEalnpn0Az0oSNvqUWYTtYrhRI5iUIYsROU48G+E+kMFQzqXaJ8kHJZ85n7y6/PHgwQ==", "dev": true }, "character-entities-legacy": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.2.tgz", "integrity": "sha512-9NB2VbXtXYWdXzqrvAHykE/f0QJxzaKIpZ5QzNZrrgQ7Iyxr2vnfS8fCBNVW9nUEZE0lo57nxKRqnzY/dKrwlA==", "dev": true }, "character-reference-invalid": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.2.tgz", "integrity": "sha512-7I/xceXfKyUJmSAn/jw8ve/9DyOP7XxufNYLI9Px7CmsKgEUaZLUTax6nZxGQtaoiZCjpu6cHPj20xC/vqRReQ==", "dev": true }, "chokidar": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "dev": true, "optional": true, "requires": { "anymatch": "^1.3.0", "async-each": "^1.0.0", "fsevents": "^1.0.0", "glob-parent": "^2.0.0", "inherits": "^2.0.1", "is-binary-path": "^1.0.0", "is-glob": "^2.0.0", "path-is-absolute": "^1.0.0", "readdirp": "^2.0.0" } }, "chownr": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", "dev": true }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "optional": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^0.1.0" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "cliui": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", "wrap-ansi": "^5.1.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true, "optional": true }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, "coffee-script": { "version": "1.12.7", "resolved": "https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz", "integrity": "sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==", "dev": true }, "collapse-white-space": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.4.tgz", "integrity": "sha512-YfQ1tAUZm561vpYD+5eyWN8+UsceQbSrqqlc/6zDY2gtAE+uZLSdkkovhnGpmCThsvKBFakq4EdY/FF93E8XIw==", "dev": true }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "optional": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" } }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { "color-name": "~1.1.4" } }, "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, "commander": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==" }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true }, "convert-source-map": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true, "optional": true }, "core-js": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.1.tgz", "integrity": "sha512-L72mmmEayPJBejKIWe2pYtGis5r0tQ5NaJekdhyXgeMQTpJoBsH0NL4ElY2LfSoV15xeQWKQ+XTTOZdyero5Xg==", "dev": true }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.0.0" } }, "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", "dev": true }, "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "dev": true, "optional": true }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", "dev": true, "requires": { "mimic-response": "^1.0.0" } }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, "defaults": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "optional": true, "requires": { "clone": "^1.0.2" } }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, "requires": { "object-keys": "^1.0.12" } }, "define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "optional": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true } } }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true }, "detect-indent": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { "repeating": "^2.0.0" } }, "detect-libc": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true }, "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, "discontinuous-range": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=" }, "docopt": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/docopt/-/docopt-0.6.2.tgz", "integrity": "sha1-so6eIiDaXsSffqW7JKR3h0Be6xE=", "dev": true }, "doctoc": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/doctoc/-/doctoc-1.4.0.tgz", "integrity": "sha512-8IAq3KdMkxhXCUF+xdZxdJxwuz8N2j25sMgqiu4U4JWluN9tRKMlAalxGASszQjlZaBprdD2YfXpL3VPWUD4eg==", "dev": true, "requires": { "@textlint/markdown-to-ast": "~6.0.9", "anchor-markdown-header": "^0.5.5", "htmlparser2": "~3.9.2", "minimist": "~1.2.0", "underscore": "~1.8.3", "update-section": "^0.3.0" } }, "dom-serializer": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { "domelementtype": "~1.1.1", "entities": "~1.1.1" }, "dependencies": { "domelementtype": { "version": "1.1.3", "resolved": "http://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", "dev": true } } }, "domelementtype": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", "dev": true }, "domhandler": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", "dev": true, "requires": { "domelementtype": "1" } }, "domutils": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { "dom-serializer": "0", "domelementtype": "1" } }, "easy-table": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.1.tgz", "integrity": "sha512-C9Lvm0WFcn2RgxbMnTbXZenMIWcBtkzMr+dWqq/JsVoGFSVUVlPqeOa5LP5kM0I3zoOazFpckOEb2/0LDFfToQ==", "dev": true, "requires": { "ansi-regex": "^3.0.0", "wcwidth": ">=1.0.1" }, "dependencies": { "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", "dev": true } } }, "electron-to-chromium": { "version": "1.3.95", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.95.tgz", "integrity": "sha512-0JZEDKOQAE05EO/4rk3vLAE+PYFI9OLCVLAS4QAq1y+Bb2y1N6MyQJz62ynzHN/y0Ka/nO5jVJcahbCEdfiXLQ==", "dev": true }, "emoji-regex": { "version": "6.1.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.3.tgz", "integrity": "sha1-7HmjlpsC0uzytyJUJ5v5m8eoOTI=", "dev": true }, "end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { "once": "^1.4.0" } }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", "dev": true }, "es-abstract": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", "dev": true, "requires": { "es-to-primitive": "^1.1.1", "function-bind": "^1.1.1", "has": "^1.0.1", "is-callable": "^1.1.3", "is-regex": "^1.0.4" } }, "es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", "is-symbol": "^1.0.2" } }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", "dev": true }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "optional": true, "requires": { "is-posix-bracket": "^0.1.0" } }, "expand-range": { "version": "1.8.2", "resolved": "http://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "optional": true, "requires": { "fill-range": "^2.1.0" } }, "expand-template": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", "dev": true }, "expect": { "version": "1.20.2", "resolved": "http://registry.npmjs.org/expect/-/expect-1.20.2.tgz", "integrity": "sha1-1Fj+TFYAQDa64yMkFqP2Nh8E+WU=", "dev": true, "requires": { "define-properties": "~1.1.2", "has": "^1.0.1", "is-equal": "^1.5.1", "is-regex": "^1.0.3", "object-inspect": "^1.1.0", "object-keys": "^1.0.9", "tmatch": "^2.0.1" } }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "optional": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "optional": true, "requires": { "is-plain-object": "^2.0.4" } } } }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "optional": true, "requires": { "is-extglob": "^1.0.0" } }, "fault": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.2.tgz", "integrity": "sha512-o2eo/X2syzzERAtN5LcGbiVQ0WwZSlN3qLtadwAz3X8Bu+XWD16dja/KMsjZLiQr+BLGPDnHGkc4yUJf1Xpkpw==", "dev": true, "requires": { "format": "^0.2.2" } }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", "dev": true, "optional": true }, "fill-range": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "optional": true, "requires": { "is-number": "^2.1.0", "isobject": "^2.0.0", "randomatic": "^3.0.0", "repeat-element": "^1.1.2", "repeat-string": "^1.5.2" } }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true, "optional": true }, "for-own": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "optional": true, "requires": { "for-in": "^1.0.1" } }, "format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", "integrity": "sha1-1hcBB+nv3E7TDJ3DkBbflCtctYs=", "dev": true }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "optional": true, "requires": { "map-cache": "^0.2.2" } }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, "fs-minipass": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", "dev": true, "optional": true, "requires": { "minipass": "^2.6.0" } }, "fs-readdir-recursive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", "dev": true }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, "fsevents": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "dev": true, "optional": true, "requires": { "nan": "^2.9.2", "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { "version": "1.1.1", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "dev": true, "optional": true }, "ansi-regex": { "version": "2.1.1", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true, "optional": true }, "aproba": { "version": "1.2.0", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", "dev": true, "optional": true }, "are-we-there-yet": { "version": "1.1.4", "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=", "dev": true, "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" } }, "balanced-match": { "version": "1.0.0", "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", "dev": true, "optional": true }, "brace-expansion": { "version": "1.1.11", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "code-point-at": { "version": "1.1.0", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true, "optional": true }, "concat-map": { "version": "0.0.1", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true, "optional": true }, "console-control-strings": { "version": "1.1.0", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", "dev": true, "optional": true }, "core-util-is": { "version": "1.0.2", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true, "optional": true }, "debug": { "version": "2.6.9", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "optional": true, "requires": { "ms": "2.0.0" } }, "deep-extend": { "version": "0.5.1", "integrity": "sha512-N8vBdOa+DF7zkRrDCsaOXoCs/E2fJfx9B9MrKnnSiHNh4ws7eSys6YQE4KvT1cecKmOASYQBhbKjeuDD9lT81w==", "dev": true, "optional": true }, "delegates": { "version": "1.0.0", "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", "dev": true, "optional": true }, "detect-libc": { "version": "1.0.3", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", "dev": true, "optional": true }, "gauge": { "version": "2.7.4", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" } }, "glob": { "version": "7.1.2", "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "has-unicode": { "version": "2.0.1", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true, "optional": true }, "iconv-lite": { "version": "0.4.21", "integrity": "sha512-En5V9za5mBt2oUA03WGD3TwDv0MKAruqsuxstbMUZaj9W9k/m1CV/9py3l0L5kw9Bln8fdHQmzHSYtvpvTLpKw==", "dev": true, "optional": true, "requires": { "safer-buffer": "^2.1.0" } }, "ignore-walk": { "version": "3.0.1", "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", "dev": true, "optional": true, "requires": { "minimatch": "^3.0.4" } }, "inherits": { "version": "2.0.3", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true, "optional": true }, "ini": { "version": "1.3.5", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true, "optional": true }, "is-fullwidth-code-point": { "version": "1.0.0", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "optional": true, "requires": { "number-is-nan": "^1.0.0" } }, "isarray": { "version": "1.0.0", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true, "optional": true }, "minimatch": { "version": "3.0.4", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "optional": true, "requires": { "brace-expansion": "^1.1.7" } }, "ms": { "version": "2.0.0", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true, "optional": true }, "needle": { "version": "2.2.0", "integrity": "sha512-eFagy6c+TYayorXw/qtAdSvaUpEbBsDwDyxYFgLZ0lTojfH7K+OdBqAF7TAFwDokJaGpubpSGG0wO3iC0XPi8w==", "dev": true, "optional": true, "requires": { "debug": "^2.1.2", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { "version": "0.10.0", "integrity": "sha512-G7kEonQLRbcA/mOoFoxvlMrw6Q6dPf92+t/l0DFSMuSlDoWaI9JWIyPwK0jyE1bph//CUEL65/Fz1m2vJbmjQQ==", "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", "needle": "^2.2.0", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", "rc": "^1.1.7", "rimraf": "^2.6.1", "semver": "^5.3.0", "tar": "^4" } }, "nopt": { "version": "4.0.1", "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "optional": true, "requires": { "abbrev": "1", "osenv": "^0.1.4" } }, "npm-bundled": { "version": "1.0.3", "integrity": "sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow==", "dev": true, "optional": true }, "npm-packlist": { "version": "1.1.10", "integrity": "sha512-AQC0Dyhzn4EiYEfIUjCdMl0JJ61I2ER9ukf/sLxJUcZHfo+VyEfz2rMJgLZSS1v30OxPQe1cN0LZA1xbcaVfWA==", "dev": true, "optional": true, "requires": { "ignore-walk": "^3.0.1", "npm-bundled": "^1.0.1" } }, "npmlog": { "version": "4.1.2", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true, "optional": true }, "object-assign": { "version": "4.1.1", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true, "optional": true }, "once": { "version": "1.4.0", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "optional": true, "requires": { "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true, "optional": true }, "os-tmpdir": { "version": "1.0.2", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true, "optional": true }, "osenv": { "version": "0.1.5", "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "optional": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { "version": "1.0.1", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true, "optional": true }, "process-nextick-args": { "version": "2.0.0", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true, "optional": true }, "rc": { "version": "1.2.7", "integrity": "sha512-LdLD8xD4zzLsAT5xyushXDNscEjB7+2ulnl8+r1pnESlYtlJtVSoCMBGr30eDRJ3+2Gq89jK9P9e4tCEH1+ywA==", "dev": true, "optional": true, "requires": { "deep-extend": "^0.5.1", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" } }, "readable-stream": { "version": "2.3.6", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "optional": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "rimraf": { "version": "2.6.2", "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "optional": true, "requires": { "glob": "^7.0.5" } }, "safe-buffer": { "version": "5.1.1", "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", "dev": true, "optional": true }, "safer-buffer": { "version": "2.1.2", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true, "optional": true }, "sax": { "version": "1.2.4", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true, "optional": true }, "semver": { "version": "5.5.0", "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", "dev": true, "optional": true }, "set-blocking": { "version": "2.0.0", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true, "optional": true }, "signal-exit": { "version": "3.0.2", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true, "optional": true }, "string_decoder": { "version": "1.1.1", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "optional": true, "requires": { "safe-buffer": "~5.1.0" } }, "string-width": { "version": "1.0.2", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "optional": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, "optional": true }, "util-deprecate": { "version": "1.0.2", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true, "optional": true }, "wide-align": { "version": "1.1.2", "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==", "dev": true, "optional": true, "requires": { "string-width": "^1.0.2" } }, "wrappy": { "version": "1.0.2", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true, "optional": true } } }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", "dev": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", "has-unicode": "^2.0.0", "object-assign": "^4.1.0", "signal-exit": "^3.0.0", "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wide-align": "^1.1.0" } }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true, "optional": true }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", "dev": true }, "glob": { "version": "5.0.15", "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { "inflight": "^1.0.4", "inherits": "2", "minimatch": "2 || 3", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "optional": true, "requires": { "glob-parent": "^2.0.0", "is-glob": "^2.0.0" } }, "glob-parent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "optional": true, "requires": { "is-glob": "^2.0.0" } }, "globals": { "version": "9.18.0", "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", "dev": true }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", "dev": true }, "growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", "dev": true }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", "dev": true }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", "dev": true }, "has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "optional": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "optional": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" } } } }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" } } } }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { "os-homedir": "^1.0.0", "os-tmpdir": "^1.0.1" } }, "htmlparser2": { "version": "3.9.2", "resolved": "http://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", "dev": true, "requires": { "domelementtype": "^1.3.0", "domhandler": "^2.3.0", "domutils": "^1.5.1", "entities": "^1.1.1", "inherits": "^2.0.1", "readable-stream": "^2.0.2" } }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true }, "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", "dev": true }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { "loose-envify": "^1.0.0" } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" } }, "is-alphabetical": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.2.tgz", "integrity": "sha512-V0xN4BYezDHcBSKb1QHUFMlR4as/XEuCZBzMJUU4n7+Cbt33SmUnSol+pnXFvLxSHNq2CemUXNdaXV6Flg7+xg==", "dev": true }, "is-alphanumerical": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.2.tgz", "integrity": "sha512-pyfU/0kHdISIgslFfZN9nfY1Gk3MquQgUm1mJTjdkEPpkAKNWuBTSqFwewOpR7N351VkErCiyV71zX7mlQQqsg==", "dev": true, "requires": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" } }, "is-arrow-function": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-arrow-function/-/is-arrow-function-2.0.3.tgz", "integrity": "sha1-Kb4sLY2UUIUri7r7Y1unuNjofsI=", "dev": true, "requires": { "is-callable": "^1.0.4" } }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "optional": true, "requires": { "binary-extensions": "^1.0.0" } }, "is-boolean-object": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz", "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=", "dev": true }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", "dev": true }, "is-data-descriptor": { "version": "0.1.4", "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" } }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", "dev": true }, "is-decimal": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.2.tgz", "integrity": "sha512-TRzl7mOCchnhchN+f3ICUCzYvL9ul7R+TYOsZ8xia++knyZAJfv/uA1FvQXsAnYIl1T3B2X5E/J7Wb1QXiIBXg==", "dev": true }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "optional": true } } }, "is-dotfile": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", "dev": true, "optional": true }, "is-equal": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/is-equal/-/is-equal-1.5.5.tgz", "integrity": "sha1-XoXxlX4FKIMkf+s4aWWju6Ffuz0=", "dev": true, "requires": { "has": "^1.0.1", "is-arrow-function": "^2.0.3", "is-boolean-object": "^1.0.0", "is-callable": "^1.1.3", "is-date-object": "^1.0.1", "is-generator-function": "^1.0.6", "is-number-object": "^1.0.3", "is-regex": "^1.0.3", "is-string": "^1.0.4", "is-symbol": "^1.0.1", "object.entries": "^1.0.4" } }, "is-equal-shallow": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "optional": true, "requires": { "is-primitive": "^2.0.0" } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", "dev": true, "optional": true }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", "dev": true, "optional": true }, "is-finite": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { "number-is-nan": "^1.0.0" } }, "is-generator-function": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.7.tgz", "integrity": "sha512-YZc5EwyO4f2kWCax7oegfuSr9mFz1ZvieNYBEjmukLxgXfBUbxAWGVF7GZf0zidYtoBl3WvC07YK0wT76a+Rtw==", "dev": true }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "optional": true, "requires": { "is-extglob": "^1.0.0" } }, "is-hexadecimal": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.2.tgz", "integrity": "sha512-but/G3sapV3MNyqiDBLrOi4x8uCIw0RY3o/Vb5GT0sMFHrVV7731wFSVy41T5FO1og7G0gXLJh0MkgPRouko/A==", "dev": true }, "is-number": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" } }, "is-number-object": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz", "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=", "dev": true }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "optional": true, "requires": { "isobject": "^3.0.1" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "is-posix-bracket": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", "dev": true, "optional": true }, "is-primitive": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", "dev": true, "optional": true }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { "has": "^1.0.1" } }, "is-string": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz", "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=", "dev": true }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", "dev": true, "requires": { "has-symbols": "^1.0.0" } }, "is-whitespace-character": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.2.tgz", "integrity": "sha512-SzM+T5GKUCtLhlHFKt2SDAX2RFzfS6joT91F2/WSi9LxgFdsnhfPK/UIA+JhRR2xuyLdrCys2PiFDrtn1fU5hQ==", "dev": true }, "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true, "optional": true }, "is-word-character": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.2.tgz", "integrity": "sha512-T3FlsX8rCHAH8e7RE7PfOPZVFQlcV3XRF9eOOBQ1uf70OxO7CjjSOjeImMPCADBdYWcStAbVbYvJ1m2D3tb+EA==", "dev": true }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", "dev": true }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", "dev": true }, "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "optional": true, "requires": { "isarray": "1.0.0" } }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", "dev": true }, "js-yaml": { "version": "3.14.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" } }, "jsesc": { "version": "1.3.0", "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", "dev": true }, "json5": { "version": "0.5.1", "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" } }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { "p-locate": "^5.0.0" } }, "lodash": { "version": "4.17.20", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", "dev": true }, "log-symbols": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.0.0.tgz", "integrity": "sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA==", "dev": true, "requires": { "chalk": "^4.0.0" }, "dependencies": { "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, "chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } } } }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { "js-tokens": "^3.0.0 || ^4.0.0" } }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", "dev": true, "optional": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "optional": true, "requires": { "object-visit": "^1.0.0" } }, "markdown-escapes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.2.tgz", "integrity": "sha512-lbRZ2mE3Q9RtLjxZBZ9+IMl68DKIXaVAhwvwn9pmjnPLS0h/6kyBMgNhqi1xFJ/2yv6cSyv0jbiZavZv93JkkA==", "dev": true }, "math-random": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", "dev": true, "optional": true }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "optional": true, "requires": { "arr-diff": "^2.0.0", "array-unique": "^0.2.1", "braces": "^1.8.2", "expand-brackets": "^0.1.4", "extglob": "^0.3.1", "filename-regex": "^2.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.1", "kind-of": "^3.0.2", "normalize-path": "^2.0.1", "object.omit": "^2.0.0", "parse-glob": "^3.0.4", "regex-cache": "^0.4.2" } }, "microtime": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/microtime/-/microtime-2.1.8.tgz", "integrity": "sha1-tDxMWrE+Un4XM3DQMG2eCku/QQ0=", "dev": true, "requires": { "bindings": "1.3.x", "nan": "2.10.x", "prebuild-install": "^2.1.0" }, "dependencies": { "nan": { "version": "2.10.0", "resolved": "http://registry.npmjs.org/nan/-/nan-2.10.0.tgz", "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", "dev": true } } }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, "minipass": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", "dev": true, "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", "dev": true, "optional": true, "requires": { "minipass": "^2.9.0" } }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "optional": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "optional": true, "requires": { "is-plain-object": "^2.0.4" } } } }, "mkdirp": { "version": "0.5.5", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "dev": true, "requires": { "minimist": "^1.2.5" } }, "mocha": { "version": "8.2.1", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.2.1.tgz", "integrity": "sha512-cuLBVfyFfFqbNR0uUKbDGXKGk+UDFe6aR4os78XIrMQpZl/nv7JYHcvP5MFIAb374b2zFXsdgEGwmzMtP0Xg8w==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", "chokidar": "3.4.3", "debug": "4.2.0", "diff": "4.0.2", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", "glob": "7.1.6", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "3.14.0", "log-symbols": "4.0.0", "minimatch": "3.0.4", "ms": "2.1.2", "nanoid": "3.1.12", "serialize-javascript": "5.0.1", "strip-json-comments": "3.1.1", "supports-color": "7.2.0", "which": "2.0.2", "wide-align": "1.1.3", "workerpool": "6.0.2", "yargs": "13.3.2", "yargs-parser": "13.1.2", "yargs-unparser": "2.0.0" }, "dependencies": { "anymatch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "binary-extensions": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", "dev": true }, "braces": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "requires": { "fill-range": "^7.0.1" } }, "chokidar": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", "dev": true, "requires": { "anymatch": "~3.1.1", "braces": "~3.0.2", "fsevents": "~2.1.2", "glob-parent": "~5.1.0", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.5.0" } }, "debug": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", "dev": true, "requires": { "ms": "2.1.2" } }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "requires": { "to-regex-range": "^5.0.1" } }, "fsevents": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, "glob": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "glob-parent": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { "is-glob": "^4.0.1" } }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { "binary-extensions": "^2.0.0" } }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "dev": true }, "is-glob": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { "is-extglob": "^2.1.1" } }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, "readdirp": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", "dev": true, "requires": { "picomatch": "^2.2.1" } }, "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" } }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { "is-number": "^7.0.0" } } } }, "moo": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.1.tgz", "integrity": "sha512-I1mnb5xn4fO80BH9BLcF0yLypy2UKl+Cb01Fu0hJRkJjlCRtxZMWkTdAtDd5ZqCOxtCkhmRwyI57vWT+1iZ67w==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, "nan": { "version": "2.12.1", "resolved": "https://registry.npmjs.org/nan/-/nan-2.12.1.tgz", "integrity": "sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==", "dev": true, "optional": true }, "nanoid": { "version": "3.1.12", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", "dev": true }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "fragment-cache": "^0.2.1", "is-windows": "^1.0.2", "kind-of": "^6.0.2", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "dependencies": { "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, "optional": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, "optional": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true } } }, "node-abi": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.5.0.tgz", "integrity": "sha512-9g2twBGSP6wIR5PW7tXvAWnEWKJDH/VskdXp168xsw9VVxpEGov8K4jsP4/VeoC7b2ZAyzckvMCuQuQlw44lXg==", "dev": true, "requires": { "semver": "^5.4.1" } }, "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", "dev": true }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "optional": true, "requires": { "remove-trailing-separator": "^1.0.1" } }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", "gauge": "~2.7.3", "set-blocking": "~2.0.0" } }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "optional": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^0.1.0" } } } }, "object-inspect": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz", "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==", "dev": true }, "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", "dev": true }, "object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "optional": true, "requires": { "isobject": "^3.0.0" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "object.entries": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.6.1", "function-bind": "^1.1.0", "has": "^1.0.1" } }, "object.omit": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "optional": true, "requires": { "for-own": "^0.1.4", "is-extendable": "^0.1.1" } }, "object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "optional": true, "requires": { "isobject": "^3.0.1" }, "dependencies": { "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { "wrappy": "1" } }, "os-homedir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, "os-tmpdir": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, "output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", "integrity": "sha1-0KM+7+YaIF+suQCS6CZZjVJFznY=", "dev": true, "requires": { "graceful-fs": "^4.1.4", "mkdirp": "^0.5.1", "object-assign": "^4.1.0" } }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { "yocto-queue": "^0.1.0" } }, "p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { "p-limit": "^3.0.2" } }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, "parse-entities": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.0.tgz", "integrity": "sha512-XXtDdOPLSB0sHecbEapQi6/58U/ODj/KWfIXmmMCJF/eRn8laX6LZbOyioMoETOOJoWRW8/qTSl5VQkUIfKM5g==", "dev": true, "requires": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" } }, "parse-glob": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "optional": true, "requires": { "glob-base": "^0.3.0", "is-dotfile": "^1.0.0", "is-extglob": "^1.0.0", "is-glob": "^2.0.0" } }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true, "optional": true }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { "version": "1.0.1", "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, "picomatch": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", "dev": true }, "platform": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.5.tgz", "integrity": "sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q==", "dev": true }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true, "optional": true }, "prebuild-install": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", "dev": true, "requires": { "detect-libc": "^1.0.3", "expand-template": "^1.0.2", "github-from-package": "0.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", "node-abi": "^2.2.0", "noop-logger": "^0.1.1", "npmlog": "^4.0.1", "os-homedir": "^1.0.1", "pump": "^2.0.1", "rc": "^1.1.6", "simple-get": "^2.7.0", "tar-fs": "^1.13.0", "tunnel-agent": "^0.6.0", "which-pm-runs": "^1.0.0" } }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", "dev": true, "optional": true }, "private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", "dev": true }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "railroad-diagrams": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=" }, "randexp": { "version": "0.4.6", "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", "requires": { "discontinuous-range": "1.0.0", "ret": "~0.1.10" } }, "randomatic": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz", "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "optional": true, "requires": { "is-number": "^4.0.0", "kind-of": "^6.0.0", "math-random": "^1.0.1" }, "dependencies": { "is-number": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", "dev": true, "optional": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true } } }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { "safe-buffer": "^5.1.0" } }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" } }, "readable-stream": { "version": "2.3.6", "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "readdirp": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "optional": true, "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" }, "dependencies": { "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", "dev": true, "optional": true }, "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true, "optional": true }, "braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "optional": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", "fill-range": "^4.0.0", "isobject": "^3.0.1", "repeat-element": "^1.1.2", "snapdragon": "^0.8.1", "snapdragon-node": "^2.0.1", "split-string": "^3.0.2", "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" } } } }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "optional": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "posix-character-classes": "^0.1.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { "version": "0.1.6", "resolved": "http://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" } } } }, "is-data-descriptor": { "version": "0.1.4", "resolved": "http://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" } } } }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "optional": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" } }, "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", "dev": true, "optional": true } } }, "extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "optional": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", "expand-brackets": "^2.1.4", "extend-shallow": "^2.0.1", "fragment-cache": "^0.2.1", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^1.0.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" } } } }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" } } } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "optional": true, "requires": { "is-buffer": "^1.1.5" } } } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "optional": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "extglob": "^2.0.4", "fragment-cache": "^0.2.1", "kind-of": "^6.0.2", "nanomatch": "^1.2.9", "object.pick": "^1.3.0", "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" } } } }, "regenerate": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", "dev": true }, "regenerator-runtime": { "version": "0.11.1", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", "dev": true }, "regenerator-transform": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", "dev": true, "requires": { "babel-runtime": "^6.18.0", "babel-types": "^6.19.0", "private": "^0.1.6" } }, "regex-cache": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "optional": true, "requires": { "is-equal-shallow": "^0.1.3" } }, "regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "optional": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" } }, "regexpu-core": { "version": "2.0.0", "resolved": "http://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", "dev": true, "requires": { "regenerate": "^1.2.1", "regjsgen": "^0.2.0", "regjsparser": "^0.1.4" } }, "regjsgen": { "version": "0.2.0", "resolved": "http://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", "dev": true }, "regjsparser": { "version": "0.1.5", "resolved": "http://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "http://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", "dev": true } } }, "remark-frontmatter": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/remark-frontmatter/-/remark-frontmatter-1.3.1.tgz", "integrity": "sha512-Zj/fDMYnSVgMCeKp8fXIhtMoZq4G6E1dnwfMoO8fVXrm/+oVSiN8YMREtwN2cctgK9EsnYSeS1ExX2hcX/fE1A==", "dev": true, "requires": { "fault": "^1.0.1", "xtend": "^4.0.1" } }, "remark-parse": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", "dev": true, "requires": { "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0", "is-whitespace-character": "^1.0.0", "is-word-character": "^1.0.0", "markdown-escapes": "^1.0.0", "parse-entities": "^1.1.0", "repeat-string": "^1.5.4", "state-toggle": "^1.0.0", "trim": "0.0.1", "trim-trailing-lines": "^1.0.0", "unherit": "^1.0.4", "unist-util-remove-position": "^1.0.0", "vfile-location": "^2.0.0", "xtend": "^4.0.1" } }, "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true, "optional": true }, "repeat-element": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", "dev": true, "optional": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", "dev": true }, "repeating": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { "is-finite": "^1.0.0" } }, "replace-ext": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "dev": true }, "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", "dev": true, "optional": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, "safe-regex": { "version": "1.1.0", "resolved": "http://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "optional": true, "requires": { "ret": "~0.1.10" } }, "semver": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", "dev": true }, "serialize-javascript": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", "dev": true, "requires": { "randombytes": "^2.1.0" } }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, "set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "optional": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" } } } }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", "dev": true }, "simple-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", "dev": true }, "simple-get": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", "dev": true, "requires": { "decompress-response": "^3.3.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "optional": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", "map-cache": "^0.2.2", "source-map": "^0.5.6", "source-map-resolve": "^0.5.0", "use": "^3.1.0" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^0.1.0" } }, "extend-shallow": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "optional": true, "requires": { "is-extendable": "^0.1.0" } } } }, "snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "optional": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "optional": true, "requires": { "kind-of": "^6.0.0" } }, "is-descriptor": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "optional": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", "kind-of": "^6.0.2" } }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, "optional": true } } }, "snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "optional": true, "requires": { "kind-of": "^3.2.0" } }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", "dev": true }, "source-map-resolve": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "optional": true, "requires": { "atob": "^2.1.1", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", "urix": "^0.1.0" } }, "source-map-support": { "version": "0.4.18", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { "source-map": "^0.5.6" } }, "source-map-url": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true, "optional": true }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "optional": true, "requires": { "extend-shallow": "^3.0.0" } }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, "state-toggle": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.1.tgz", "integrity": "sha512-Qe8QntFrrpWTnHwvwj2FZTgv+PKIsp0B9VxLzLLbSpPXWOgRgc5LVj/aTiSfK1RqIeF9jeC1UeOH8Q8y60A7og==", "dev": true }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "optional": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" }, "dependencies": { "define-property": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "optional": true, "requires": { "is-descriptor": "^0.1.0" } } } }, "string_decoder": { "version": "1.1.1", "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { "safe-buffer": "~5.1.0" } }, "string-width": { "version": "1.0.2", "resolved": "http://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" } }, "strip-ansi": { "version": "3.0.1", "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true }, "structured-source": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/structured-source/-/structured-source-3.0.2.tgz", "integrity": "sha1-3YAkJeD1PcSm56yjdSkBoczaevU=", "dev": true, "requires": { "boundary": "^1.0.1" } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", "dev": true }, "tar": { "version": "4.4.13", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", "dev": true, "optional": true, "requires": { "chownr": "^1.1.1", "fs-minipass": "^1.2.5", "minipass": "^2.8.6", "minizlib": "^1.2.1", "mkdirp": "^0.5.0", "safe-buffer": "^5.1.2", "yallist": "^3.0.3" } }, "tar-fs": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", "integrity": "sha512-NvCeXpYx7OsmOh8zIOP/ebG55zZmxLE0etfWRbWok+q2Qo8x/vOR/IJT1taADXPe+jsiu9axDb3X4B+iIgNlKw==", "dev": true, "requires": { "chownr": "^1.0.1", "mkdirp": "^0.5.1", "pump": "^1.0.0", "tar-stream": "^1.1.2" }, "dependencies": { "pump": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz", "integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==", "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } } } }, "tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, "requires": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", "end-of-stream": "^1.0.0", "fs-constants": "^1.0.0", "readable-stream": "^2.3.0", "to-buffer": "^1.1.1", "xtend": "^4.0.0" } }, "tmatch": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-2.0.1.tgz", "integrity": "sha1-DFYkbzPzDaG409colauvFmYPOM8=", "dev": true }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, "to-fast-properties": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", "dev": true }, "to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" } }, "to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "optional": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" } }, "to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "optional": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" }, "dependencies": { "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "optional": true, "requires": { "kind-of": "^3.0.2" } } } }, "traverse": { "version": "0.6.6", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, "trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", "dev": true }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", "dev": true }, "trim-trailing-lines": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.1.tgz", "integrity": "sha512-bWLv9BbWbbd7mlqqs2oQYnLD/U/ZqeJeJwbO0FG2zA1aTq+HTvxfHNKFa/HGCVyJpDiioUYaBhfiT6rgk+l4mg==", "dev": true }, "trough": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.3.tgz", "integrity": "sha512-fwkLWH+DimvA4YCy+/nvJd61nWQQ2liO/nF/RjkTpiOGi+zxZzVkhb1mvbHIIW4b/8nDsYI8uTmAlc0nNkRMOw==", "dev": true }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { "safe-buffer": "^5.0.1" } }, "typescript": { "version": "2.9.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", "dev": true }, "underscore": { "version": "1.8.3", "resolved": "http://registry.npmjs.org/underscore/-/underscore-1.8.3.tgz", "integrity": "sha1-Tz+1OxBuYJf8+ctBCfKl6b36UCI=", "dev": true }, "unherit": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.1.tgz", "integrity": "sha512-+XZuV691Cn4zHsK0vkKYwBEwB74T3IZIcxrgn2E4rKwTfFyI1zCh7X7grwh9Re08fdPlarIdyWgI8aVB3F5A5g==", "dev": true, "requires": { "inherits": "^2.0.1", "xtend": "^4.0.1" } }, "unified": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", "dev": true, "requires": { "bail": "^1.0.0", "extend": "^3.0.0", "is-plain-obj": "^1.1.0", "trough": "^1.0.0", "vfile": "^2.0.0", "x-is-string": "^0.1.0" } }, "union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "optional": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" } }, "unist-util-is": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.2.tgz", "integrity": "sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw==", "dev": true }, "unist-util-remove-position": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.2.tgz", "integrity": "sha512-XxoNOBvq1WXRKXxgnSYbtCF76TJrRoe5++pD4cCBsssSiWSnPEktyFrFLE8LTk3JW5mt9hB0Sk5zn4x/JeWY7Q==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" } }, "unist-util-stringify-position": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", "dev": true }, "unist-util-visit": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.0.tgz", "integrity": "sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw==", "dev": true, "requires": { "unist-util-visit-parents": "^2.0.0" } }, "unist-util-visit-parents": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz", "integrity": "sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA==", "dev": true, "requires": { "unist-util-is": "^2.1.2" } }, "unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "optional": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" }, "dependencies": { "has-value": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "optional": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", "isobject": "^2.0.0" }, "dependencies": { "isobject": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", "dev": true, "optional": true, "requires": { "isarray": "1.0.0" } } } }, "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", "dev": true, "optional": true }, "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true, "optional": true } } }, "update-section": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/update-section/-/update-section-0.3.3.tgz", "integrity": "sha1-RY8Xgg03gg3GDiC4bZQ5GwASMVg=", "dev": true }, "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true, "optional": true }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true, "optional": true }, "user-home": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/user-home/-/user-home-1.1.1.tgz", "integrity": "sha1-K1viOjK2Onyd640PKNSFcko98ZA=", "dev": true }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, "v8flags": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-2.1.1.tgz", "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { "user-home": "^1.1.1" } }, "vfile": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", "dev": true, "requires": { "is-buffer": "^1.1.4", "replace-ext": "1.0.0", "unist-util-stringify-position": "^1.0.0", "vfile-message": "^1.0.0" } }, "vfile-location": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.4.tgz", "integrity": "sha512-KRL5uXQPoUKu+NGvQVL4XLORw45W62v4U4gxJ3vRlDfI9QsT4ZN1PNXn/zQpKUulqGDpYuT0XDfp5q9O87/y/w==", "dev": true }, "vfile-message": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", "dev": true, "requires": { "unist-util-stringify-position": "^1.1.1" } }, "wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", "dev": true, "optional": true, "requires": { "defaults": "^1.0.3" } }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "which-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", "dev": true }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", "dev": true, "requires": { "string-width": "^1.0.2 || 2" } }, "workerpool": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.2.tgz", "integrity": "sha512-DSNyvOpFKrNusaaUwk+ej6cBj1bmhLcBfj80elGk+ZIo5JSkq+unB1dLKEOcNfJDZgjGICfhQ0Q5TbP0PvF4+Q==", "dev": true }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", "strip-ansi": "^5.0.0" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" } }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, "requires": { "color-name": "1.1.3" } }, "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", "dev": true }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", "dev": true }, "x-is-string": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", "dev": true }, "xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", "dev": true }, "y18n": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", "dev": true }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true, "optional": true }, "yargs": { "version": "13.3.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", "string-width": "^3.0.0", "which-module": "^2.0.0", "y18n": "^4.0.0", "yargs-parser": "^13.1.2" }, "dependencies": { "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, "find-up": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { "locate-path": "^3.0.0" } }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { "p-locate": "^3.0.0", "path-exists": "^3.0.0" } }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { "p-try": "^2.0.0" } }, "p-locate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { "p-limit": "^2.0.0" } }, "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { "ansi-regex": "^4.1.0" } } } }, "yargs-parser": { "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, "dependencies": { "camelcase": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, "decamelize": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, "is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true } } }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true } } } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/package.json000066400000000000000000000033211376321042600225740ustar00rootroot00000000000000{ "name": "nearley", "version": "2.20.1", "description": "Simple, fast, powerful parser toolkit for JavaScript.", "main": "lib/nearley.js", "dependencies": { "commander": "^2.19.0", "moo": "^0.5.0", "railroad-diagrams": "^1.0.0", "randexp": "0.4.6" }, "files": [ "bin/", "lib/", "builtin/" ], "bin": { "nearleyc": "bin/nearleyc.js", "nearley-test": "bin/nearley-test.js", "nearley-unparse": "bin/nearley-unparse.js", "nearley-railroad": "bin/nearley-railroad.js" }, "keywords": [ "parser", "parse", "generator", "compiler", "compile", "grammar", "language" ], "scripts": { "bootstrap": "mocha test/bootstrap.test.js && bin/nearleyc.js lib/nearley-language-bootstrapped.ne > tmp && mv tmp lib/nearley-language-bootstrapped.js && echo bootstrapped ok", "benchmark": "benchr test/benchmark.js", "test": "mocha test/*.test.js", "doctoc": "doctoc --notitle README.md", "profile": "bin/nearleyc.js test/grammars/parens.ne > test/grammars/parens.js && node test/profile.js" }, "author": "Hardmath123", "contributors": "https://github.com/Hardmath123/nearley/graphs/contributors", "license": "MIT", "repository": { "type": "git", "url": "https://github.com/hardmath123/nearley.git" }, "devDependencies": { "@types/moo": "^0.3.0", "@types/node": "^7.0.27", "babel-cli": "^6.18.0", "babel-preset-env": "^1.6.0", "benchr": "^3.2.0", "coffee-script": "^1.10.0", "doctoc": "^1.3.0", "expect": "^1.20.2", "microtime": "^2.1.2", "mocha": "^8.2.1", "typescript": "^2.6.1" }, "funding": { "type": "individual", "url": "https://nearley.js.org/#give-to-nearley" } } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/000077500000000000000000000000001376321042600212665ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/_shared.js000066400000000000000000000024661376321042600232410ustar00rootroot00000000000000 var path = require('path'); var nearley = require('../lib/nearley'); var Compile = require('../lib/compile'); var parserGrammar = nearley.Grammar.fromCompiled(require('../lib/nearley-language-bootstrapped')); var generate = require('../lib/generate'); function parse(grammar, input) { var p = new nearley.Parser(grammar); p.feed(input); return p.results; } function nearleyc(source) { // parse var results = parse(parserGrammar, source); // compile var c = Compile(results[0], {}); // generate return generate(c, 'grammar'); } function compile(source) { var compiledGrammar = nearleyc(source); // eval return evalGrammar(compiledGrammar); } /* function requireFromString(source) { var filename = '.' var Module = module.constructor; var m = new Module(); m.paths = Module._nodeModulePaths(path.dirname(filename)) m._compile(source, filename); return m.exports; } */ function requireFromString(source) { var module = {exports: null}; eval(source) return module.exports; } function evalGrammar(compiledGrammar) { var exports = requireFromString(compiledGrammar); return new nearley.Grammar.fromCompiled(exports); } module.exports = { compile: compile, nearleyc: nearleyc, evalGrammar: evalGrammar, parse: parse, }; nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/benchmark.js000066400000000000000000000041021376321042600235530ustar00rootroot00000000000000 const fs = require('fs'); const nearley = require('../lib/nearley'); const {compile} = require('./_shared'); function read(filename) { return fs.readFileSync(filename, 'utf-8'); } function makeParser(neFile) { var grammar; try { grammar = compile(read(neFile)); } catch (e) { grammar = null; // oh dear } return function parse(input) { if (grammar === null) { throw 'grammar error'; } var p = new nearley.Parser(grammar); p.feed(input); return p.results; } } // Define benchmarks /*suite('nearley: parse scannerless-nearley.ne', () => { //const nearleyGrammar = read('lib/nearley-language-bootstrapped.ne') const nearleyGrammar = read('test/grammars/scannerless-nearley.ne') const parseLexer = makeParser('lib/nearley-language-bootstrapped.ne') benchmark('current', () => parseLexer(nearleyGrammar)) const parseScannerless = makeParser('test/grammars/scannerless-nearley.ne') benchmark('scannerless', () => parseScannerless(nearleyGrammar)) }) suite('nearley: parse tosh.ne', () => { const toshGrammar = read('examples/tosh.ne') const parseLexer = makeParser('lib/nearley-language-bootstrapped.ne') benchmark('current', () => parseLexer(toshGrammar)) const parseScannerless = makeParser('test/grammars/scannerless-nearley.ne') benchmark('scannerless', () => parseScannerless(toshGrammar)) })*/ suite('calculator: parse', () => { const exampleFile = 'ln (3 + 2*(8/e - sin(pi/5)))' const parse = makeParser('examples/calculator/arithmetic.ne') benchmark('nearley', () => parse(exampleFile)) }) suite('json: parse sample1k', () => { const jsonFile = read('test/grammars/sample1k.json') const parse = makeParser('examples/json.ne') benchmark('nearley', () => parse(jsonFile)) //benchmark('native JSON 😛', () => JSON.parse(jsonFile)) }) suite('tosh: parse', () => { const toshFile = 'set foo to 2 * e^ of ( foo * -0.05 + 0.5) * (1 - e ^ of (foo * -0.05 + 0.5))' const parse = makeParser('examples/tosh.ne') benchmark('nearley', () => parse(toshFile)) }) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/bootstrap.test.js000066400000000000000000000117631376321042600246270ustar00rootroot00000000000000/* * Tests that the parse trees generated by nearley-lanauge-bootstrapped.ne * match those generated by the old scannerless-nearley.ne. */ const fs = require('fs'); const expect = require('expect'); const nearley = require('../lib/nearley'); const shared = require('./_shared'); const compile = shared.compile; const parse = shared.parse; function read(filename) { return fs.readFileSync(filename, 'utf-8'); } describe('bootstrapped lexer', () => { const lexer = compile(read("lib/nearley-language-bootstrapped.ne")).lexer; function lex(source) { return Array.from(lexer.reset(source)).map(tok => tok.type + " " + tok.value) } function lexTypes(source) { return Array.from(lexer.reset(source)).map(tok => tok.type) } it('lexes directives', () => { expect(lex('@builtin "quxx"')).toEqual([ "@builtin @builtin", "ws ", "string quxx", ]) expect(lex("@lexer moo")).toEqual([ "@ @", "word lexer", "ws ", "word moo", ]) }) it('lexes a simple rule', () => { expect(lex("foo -> bar")).toEqual([ "word foo", "ws ", "arrow ->", "ws ", "word bar", ]) }) it('lexes arrows', () => { expect(lex("->")).toEqual(["arrow ->"]) expect(lex("=>")).toEqual(["arrow =>"]) expect(lex("-=->")).toEqual(["arrow -=->"]) }) it('lexes js code', () => { expect(lexTypes("{% foo % %}")).toEqual(['js']) expect(lexTypes("{% function() %}")).toEqual(['js']) expect(lexTypes("{% %}")).toEqual(['js']) expect(lexTypes("{%%}")).toEqual(['js']) }) it('lexes charclasses', () => { expect(lex(".")).toEqual([ "charclass /./", ]) expect(lex("[^a-z\\s]")).toEqual([ "charclass /[^a-z\\s]/", ]) expect(lex("foo->[^a-z\\s]")).toEqual([ "word foo", "arrow ->", "charclass /[^a-z\\s]/", ]) }) it('rejects newline in charclass', () => { expect(() => lex("[foo\n]")).toThrow() }) it('lexes macros', () => { expect(lex("foo[X, Y]")).toEqual([ "word foo", "[ [", "word X", ", ,", "ws ", "word Y", "] ]", ]) expect(lex("foo[[0-9]]")).toEqual([ "word foo", "[ [", "charclass /[0-9]/", "] ]", ]) }) it('lexes strings', () => { expect(lex(`"bar"`)).toEqual(['string bar']) expect(lex('"I\\"m\\\\"')).toEqual(["string I\"m\\"]) expect(lex('"foo\\"b\\\\ar\\n"')).toEqual(['string foo"b\\ar\n']) expect(lex('"\\u1234"')).toEqual(['string \u1234']) }) it('lexes strings non-greedily ', () => { expect(lexTypes('"foo" "bar"')).toEqual(["string", "ws", "string"]) }) it('lexes a rule', () => { expect(lex('Tp4 -> "(" _ Tp _ ")"')).toEqual([ "word Tp4", "ws ", "arrow ->", "ws ", "string (", "ws ", "word _", "ws ", "word Tp", "ws ", "word _", "ws ", "string )", ]) }) }) describe('bootstrapped parser', () => { const scannerless = compile(read("test/grammars/scannerless-nearley.ne")); const current = compile(read("lib/nearley-language-bootstrapped.ne")); const check = source => expect(parse(current, source)).toEqual(parse(scannerless, source)) it('parses directives', () => { check("@lexer moo") check('@include "foo"') check('@builtin "bar"') }) it('parses simple rules', () => { check('foo -> "waffle"') check("foo -> bar") }) it('parses postprocessors', () => { check('foo -> "waffle" {% d => d[0] %}') check('foo -> "waffle" {%\nfunction(d) { return d[0]; }\n%}') }) it('parses js code', () => { check("@{%\nconst moo = require('moo');\n%}") }) it('parses options', () => { check("foo -> bar\n | quxx") }) it('parses tokens', () => { check("foo -> %foo") }) it('parses strings', () => { check('foo -> "potato"') check('foo -> "("') //check("foo -> 'p'") }) it('parses charclasses', () => { check('char -> .') check('y -> x:+\nx -> [a-z0-9] | "\\n"') check('m_key -> "any" {% id %} | [a-z0-9] {% id %}') }) it('parses macro definitions', () => { check('foo[X] -> X') check('foo[X, Y] -> X') }) it('parses macro use', () => { check('Y -> foo[Q]') check('Y -> foo[Q, P]') check('Y -> foo["string"]') check('Y -> foo[%tok]') check('Y -> foo[(baz quxx)]') }) it('parses macro use', () => { check('Y -> foo[Q]') check('Y -> foo[Q, P]') check('Y -> foo["string"]') check('Y -> foo[%tok]') check('Y -> foo[(baz quxx)]') }) it('parses a rule', () => { check('Tp4 -> "(" _ Tp _ ")"') }) }) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/external.js000066400000000000000000000013511376321042600234460ustar00rootroot00000000000000 const fs = require('fs') const path = require('path') const child_process = require('child_process') const root = 'test/' function sh(cmd) { return child_process.spawnSync(cmd, {shell: true, encoding: 'utf-8', stdio: 'pipe', cwd: root}) } var highestId = 0 function externalNearleyc(input, ext, flags = []) { const outPath = 'tmp.' + path.basename(input) + (++highestId) const {stderr, stdout} = sh(`../bin/nearleyc.js ${flags.join(' ')} ${input} -o ${outPath}${ext}`); return {outPath, stderr, stdout} } function cleanup() { for (let name of fs.readdirSync(root)) { if (/^tmp\./.test(name)) { fs.unlinkSync(path.join(root, name)) } } } module.exports = {sh, externalNearleyc, cleanup} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/000077500000000000000000000000001376321042600230775ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/caseinsensitive.ne000066400000000000000000000001001376321042600266060ustar00rootroot00000000000000a -> "Les rêves des amoureux sont comme le bon vin!"i {% id %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/classic_crontab.results000066400000000000000000000021201376321042600276460ustar00rootroot00000000000000[{"cron":{"minutes":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"hours":[12,17,19],"daysOfMonth":[5,10,15,20,25,30],"monthsOfYear":[1,10,11,12],"daysOfWeek":[1,2,3,4,5],"shell":{"cmd":"python -mpdb /a/b/c.py","stdin":null}}},{"env":{"a":null}},{"env":{"b":"def"}},{"env":{"c":"abc\\'\""}},{"cron":{"minutes":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"hours":[12,17,19],"daysOfMonth":[5,10,15,20,25,30],"monthsOfYear":[1,10,11,12],"daysOfWeek":[5],"shell":{"cmd":"a","stdin":null}}},{"env":{"d":"\\a\\b\\c\\\\'\""}},{"cron":{"minutes":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"hours":[12,17,19],"daysOfMonth":[5,10,15,20,25,30],"monthsOfYear":[1,10,11,12],"daysOfWeek":[5],"shell":{"cmd":"echo \"\\%\" burger! \"\\%\"","stdin":" stdin"}}},{"env":{"e":"\\a\\b\\c\\'\\\""}},{"cron":{"minutes":[6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29],"hours":[12,17,19],"daysOfMonth":[5,10,15,20,25,30],"monthsOfYear":[1,10,11,12],"daysOfWeek":[5],"shell":{"cmd":"echo \"\\%\" burger! \"","stdin":"\" stdin"}}}] nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/classic_crontab.test000066400000000000000000000010131376321042600271240ustar00rootroot00000000000000####### 6-29 19,17,12 */5 dec,nov,oct,jan 5,3,1,4,1,2,4 python -mpdb /a/b/c.py # 6-29 19,17,12 */5 dec,nov,oct,jan 5,3,1,4,1,2,4 # Environment variables a= b=def # c=\a\b\c\\\'\" 6-29 19,17,12 */5 dec,nov,oct,jan fri a d="\a\b\c\\\'\"" # This is a valid cron statement and a valid shell command as well 6-29 19,17,12 */5 dec,nov,oct,jan fri echo "\%" burger! "\%" % stdin e='\a\b\c\\\'\"' # This is a valid cron statement but invalid shell command 6-29 19,17,12 */5 dec,nov,oct,jan fri echo "\%" burger! "%" stdin nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/coffeescript-test.ne000066400000000000000000000002121376321042600270470ustar00rootroot00000000000000@preprocessor coffee @{% test = (d)->d.join("") %} r -> l n l -> l [A-Z] {% test %} | null n -> n [0-9] {% (d) -> d[0] + d[1] %} | null nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/esmodules-test.ne000066400000000000000000000003511376321042600263770ustar00rootroot00000000000000@preprocessor esmodule @{% import { compile } from 'moo' const lexer = compile({ larrow: '<', rarrow: '>', integer: /[0-9]+/ }); %} @lexer lexer expression -> %larrow %integer %rarrow {% parts => parts.map(p => p.value) %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/folder-test.ne000066400000000000000000000000421376321042600256470ustar00rootroot00000000000000@include "folder/a.ne" main -> a nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/folder/000077500000000000000000000000001376321042600243525ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/folder/a.ne000066400000000000000000000000361376321042600251150ustar00rootroot00000000000000@include "b.ne" a -> "a" | b nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/folder/b.ne000066400000000000000000000000111376321042600251070ustar00rootroot00000000000000b -> "b" nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/indentation.ne000066400000000000000000000002211376321042600257320ustar00rootroot00000000000000cow -> "a" #test #test #test #test #test #test #test #test #test #this should finish in my lifetime nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/leobug.ne000066400000000000000000000002521376321042600246770ustar00rootroot00000000000000# https://github.com/Hardmath123/nearley/issues/159 S -> "a" "a" C "b" C | "a" C "b" C "a" C | "b" C "a" C "a" C C -> C "a" C "a" C | "b" C | "b" | null nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/macro-test.ne000066400000000000000000000001541376321042600255010ustar00rootroot00000000000000combine[X, Y] -> $X | $Y | $X "/" $Y | $Y "/" $X main -> combine["a", "b"] {% function() {return 'a/b'} %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/multi-include-test.ne000066400000000000000000000001131376321042600271460ustar00rootroot00000000000000@include "multi-include/a.ne" @include "multi-include/c.ne" main -> a | c nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/multi-include/000077500000000000000000000000001376321042600256525ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/multi-include/a.ne000066400000000000000000000000361376321042600264150ustar00rootroot00000000000000@include "b.ne" a -> "a" | b nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/multi-include/b.ne000066400000000000000000000000111376321042600264070ustar00rootroot00000000000000b -> "b" nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/multi-include/c.ne000066400000000000000000000000361376321042600264170ustar00rootroot00000000000000@include "b.ne" c -> "c" | b nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/parens.ne000066400000000000000000000002411376321042600247100ustar00rootroot00000000000000# mainly for profiling @{% /* This comment should exist. */ var f = 0; %} p -> "(" p ")" | [a-z] q {% function(d) {return 1;} %} q -> null | q ("c" "ow") nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/percent.ne000066400000000000000000000000521376321042600250600ustar00rootroot00000000000000a -> "a" {% function(d) {return "%"; } %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/sample1k.json000066400000000000000000000734771376321042600255310ustar00rootroot00000000000000[ { "_id": "5789f4e5688f478d31e213cb", "index": 0, "guid": "a601b360-938e-4326-8bd1-d78fd8c3d54b", "isActive": false, "balance": "$1,867.26", "picture": "http://placehold.it/32x32", "age": 40, "eyeColor": "brown", "name": "Gomez Rocha", "gender": "male", "company": "VERBUS", "email": "gomezrocha@verbus.com", "phone": "+1 (914) 572-3986", "address": "646 Blake Court, Cherokee, Colorado, 9616", "about": "In ipsum quis veniam consectetur commodo reprehenderit laboris pariatur fugiat culpa officia tempor excepteur do. Est duis elit deserunt ipsum consequat anim. Nulla adipisicing est labore labore incididunt exercitation proident enim eu voluptate laboris. Fugiat consequat occaecat est ut laborum culpa esse adipisicing Lorem incididunt fugiat aliqua labore ex.\r\n", "registered": "2015-01-16T05:01:25 -02:00", "latitude": 60.377082, "longitude": -50.078349, "tags": [ "elit", "sint", "ea", "enim", "nulla", "consectetur", "minim" ], "friends": [ { "id": 0, "name": "Rebekah Roy" }, { "id": 1, "name": "Callahan Barrera" }, { "id": 2, "name": "Cantu Fitzpatrick" } ], "greeting": "Hello, Gomez Rocha! You have 3 unread messages.", "favoriteFruit": "apple" }, { "_id": "5789f4e561c8bf01ed63c46a", "index": 1, "guid": "ebce58f2-e1f7-4dfc-bb84-b3bc2ebb799a", "isActive": true, "balance": "$1,062.96", "picture": "http://placehold.it/32x32", "age": 38, "eyeColor": "brown", "name": "Meagan Rutledge", "gender": "female", "company": "TWIGGERY", "email": "meaganrutledge@twiggery.com", "phone": "+1 (911) 471-3885", "address": "153 Church Lane, Avoca, Idaho, 7052", "about": "Exercitation dolore nisi nostrud quis do quis minim voluptate dolore ea eu esse. Ad velit in id velit nisi cillum commodo voluptate ut. Reprehenderit sit aute non aliqua ullamco fugiat laborum et est voluptate cillum Lorem reprehenderit. Occaecat id magna deserunt et non qui ea aliqua cupidatat ad. Reprehenderit occaecat elit et ullamco. Dolore id qui ullamco qui consectetur elit duis ipsum enim ex. Quis veniam ad ex elit duis deserunt voluptate consectetur eu tempor cupidatat nulla sit enim.\r\n", "registered": "2014-02-08T01:47:09 -02:00", "latitude": -65.072152, "longitude": 79.350832, "tags": [ "labore", "et", "culpa", "minim", "elit", "enim", "Lorem" ], "friends": [ { "id": 0, "name": "Macdonald Mckee" }, { "id": 1, "name": "Georgia Reynolds" }, { "id": 2, "name": "Puckett Mcfarland" } ], "greeting": "Hello, Meagan Rutledge! You have 7 unread messages.", "favoriteFruit": "banana" }, { "_id": "5789f4e53330326090a4a657", "index": 2, "guid": "7aa6f784-f1aa-497b-a8a5-10353413e37e", "isActive": true, "balance": "$2,026.11", "picture": "http://placehold.it/32x32", "age": 30, "eyeColor": "brown", "name": "Bradshaw Reilly", "gender": "male", "company": "GINKLE", "email": "bradshawreilly@ginkle.com", "phone": "+1 (898) 512-2689", "address": "204 Losee Terrace, Gasquet, Utah, 8110", "about": "Sit ullamco voluptate deserunt dolor mollit commodo fugiat reprehenderit fugiat dolor Lorem adipisicing laboris. Dolor ipsum id nostrud non. Sunt laboris mollit do ea mollit et. Minim aute aute cillum sit ex ad nostrud commodo. Irure ut nisi in et dolore quis. Duis magna quis voluptate irure incididunt nostrud.\r\n", "registered": "2014-08-07T11:44:47 -03:00", "latitude": -15.523501, "longitude": 1.30236, "tags": [ "Lorem", "eu", "occaecat", "duis", "ut", "veniam", "cillum" ], "friends": [ { "id": 0, "name": "Sarah Ratliff" }, { "id": 1, "name": "Lacy Key" }, { "id": 2, "name": "Lara Atkinson" } ], "greeting": "Hello, Bradshaw Reilly! You have 3 unread messages.", "favoriteFruit": "apple" }, { "_id": "5789f4e51e19a7f92b432464", "index": 3, "guid": "bb84ad96-7388-4510-b89c-a683f141f985", "isActive": false, "balance": "$3,791.84", "picture": "http://placehold.it/32x32", "age": 24, "eyeColor": "brown", "name": "Araceli Cole", "gender": "female", "company": "JETSILK", "email": "aracelicole@jetsilk.com", "phone": "+1 (864) 509-2264", "address": "184 Pierrepont Place, Beaverdale, Wisconsin, 5683", "about": "Quis labore proident deserunt dolor enim. Irure est veniam deserunt est ullamco fugiat et tempor fugiat minim ipsum minim elit deserunt. Est adipisicing minim amet sunt ad tempor nulla elit eu. Dolor proident amet qui voluptate voluptate veniam enim elit excepteur excepteur minim.\r\n", "registered": "2015-07-14T12:43:19 -03:00", "latitude": 32.53047, "longitude": -109.994191, "tags": [ "esse", "enim", "incididunt", "dolor", "anim", "ipsum", "deserunt" ], "friends": [ { "id": 0, "name": "Blanche Ortiz" }, { "id": 1, "name": "Carney Shaw" }, { "id": 2, "name": "Ethel Weeks" } ], "greeting": "Hello, Araceli Cole! You have 6 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e53abf914c434918f9", "index": 4, "guid": "3a9e01a2-8b49-4658-a075-d0a9d1fc1a56", "isActive": false, "balance": "$3,327.44", "picture": "http://placehold.it/32x32", "age": 33, "eyeColor": "brown", "name": "Kaye Casey", "gender": "female", "company": "ZAGGLES", "email": "kayecasey@zaggles.com", "phone": "+1 (877) 533-3531", "address": "555 Cranberry Street, Guthrie, Delaware, 7792", "about": "Eu sunt dolor amet mollit enim exercitation amet laborum magna incididunt. Ex et quis fugiat ipsum. Incididunt elit sunt anim eu fugiat nostrud voluptate ea fugiat ea. Enim labore magna qui proident culpa occaecat ullamco adipisicing incididunt sunt nisi adipisicing consectetur aute. Ullamco reprehenderit do occaecat ut laborum excepteur cupidatat pariatur ut non non et exercitation. Nulla dolor voluptate aliquip mollit proident id ullamco aliqua exercitation eiusmod. Laboris ullamco veniam ullamco veniam reprehenderit labore nostrud enim reprehenderit fugiat adipisicing cupidatat.\r\n", "registered": "2016-02-29T05:37:25 -02:00", "latitude": -82.825057, "longitude": -19.579575, "tags": [ "qui", "tempor", "laborum", "laborum", "sit", "sint", "anim" ], "friends": [ { "id": 0, "name": "Lilian Battle" }, { "id": 1, "name": "Sofia Fleming" }, { "id": 2, "name": "Weber Cotton" } ], "greeting": "Hello, Kaye Casey! You have 4 unread messages.", "favoriteFruit": "apple" }, { "_id": "5789f4e55574ed3d787366dd", "index": 5, "guid": "83be6aaf-b5e7-4115-af40-3c69517dff12", "isActive": false, "balance": "$1,318.24", "picture": "http://placehold.it/32x32", "age": 23, "eyeColor": "blue", "name": "Pate Horn", "gender": "male", "company": "GENESYNK", "email": "patehorn@genesynk.com", "phone": "+1 (826) 424-2702", "address": "619 Schweikerts Walk, Murillo, Virginia, 4331", "about": "Anim voluptate ut do nisi amet quis labore. Quis anim est labore commodo laboris irure consequat qui duis do ex reprehenderit magna. Commodo id occaecat magna eiusmod.\r\n", "registered": "2015-05-26T03:16:26 -03:00", "latitude": 62.068817, "longitude": 90.165296, "tags": [ "eu", "aliqua", "laborum", "ipsum", "non", "labore", "occaecat" ], "friends": [ { "id": 0, "name": "Lorraine Cherry" }, { "id": 1, "name": "Janice Melendez" }, { "id": 2, "name": "Tanya Warner" } ], "greeting": "Hello, Pate Horn! You have 4 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e5e067da500003a41e", "index": 6, "guid": "2aeb89b4-2166-48d1-b660-ea7be54c9f2b", "isActive": false, "balance": "$2,925.76", "picture": "http://placehold.it/32x32", "age": 25, "eyeColor": "green", "name": "Margarita Townsend", "gender": "female", "company": "LYRIA", "email": "margaritatownsend@lyria.com", "phone": "+1 (966) 572-3011", "address": "730 Judge Street, Enetai, Iowa, 5532", "about": "Ad deserunt veniam ut pariatur deserunt laboris aliquip consectetur exercitation ea sit. Sint anim elit aute veniam. Incididunt reprehenderit cillum quis velit minim ipsum culpa fugiat cupidatat laboris nisi nulla ullamco adipisicing.\r\n", "registered": "2015-07-26T07:19:27 -03:00", "latitude": -15.753305, "longitude": 44.857453, "tags": [ "mollit", "laborum", "incididunt", "ea", "ex", "minim", "magna" ], "friends": [ { "id": 0, "name": "Trevino Powell" }, { "id": 1, "name": "Acosta Roth" }, { "id": 2, "name": "Benson Garza" } ], "greeting": "Hello, Margarita Townsend! You have 7 unread messages.", "favoriteFruit": "apple" }, { "_id": "5789f4e5c2672507e2f18a45", "index": 7, "guid": "79e6945d-ba9c-441f-b37e-4ca5aaaa45ed", "isActive": false, "balance": "$3,673.04", "picture": "http://placehold.it/32x32", "age": 23, "eyeColor": "green", "name": "Cassie Cunningham", "gender": "female", "company": "GEEKOLOGY", "email": "cassiecunningham@geekology.com", "phone": "+1 (958) 484-3483", "address": "235 Doscher Street, Cawood, Nebraska, 4175", "about": "Magna ut Lorem amet cillum velit sit ut. Nisi reprehenderit irure consectetur officia do enim. Adipisicing Lorem ex proident pariatur nulla eu nulla in aute sit velit tempor.\r\n", "registered": "2014-08-18T11:24:59 -03:00", "latitude": 8.938399, "longitude": -103.017569, "tags": [ "aliquip", "aliqua", "minim", "magna", "amet", "sint", "irure" ], "friends": [ { "id": 0, "name": "Jordan Yang" }, { "id": 1, "name": "Mcfadden Wyatt" }, { "id": 2, "name": "Hutchinson Hyde" } ], "greeting": "Hello, Cassie Cunningham! You have 10 unread messages.", "favoriteFruit": "banana" }, { "_id": "5789f4e53aaa903d03bba918", "index": 8, "guid": "3b6df0a7-7a21-47a4-97f2-7f7ce60d50f6", "isActive": false, "balance": "$2,499.05", "picture": "http://placehold.it/32x32", "age": 22, "eyeColor": "brown", "name": "Yates Briggs", "gender": "male", "company": "FLUM", "email": "yatesbriggs@flum.com", "phone": "+1 (950) 581-3303", "address": "701 Remsen Street, Hachita, Oregon, 3684", "about": "Exercitation aute laboris quis nulla. Labore proident occaecat ea incididunt est id pariatur id ut do. Lorem enim tempor do enim Lorem veniam nisi laborum in elit pariatur laborum incididunt sint. Est ad sunt ex sint cupidatat ipsum esse ea qui esse.\r\n", "registered": "2015-04-18T01:37:38 -03:00", "latitude": 16.543165, "longitude": -104.303016, "tags": [ "dolor", "excepteur", "aliqua", "pariatur", "dolore", "consequat", "commodo" ], "friends": [ { "id": 0, "name": "Santos Hayden" }, { "id": 1, "name": "Holder Sharp" }, { "id": 2, "name": "Tracie Schmidt" } ], "greeting": "Hello, Yates Briggs! You have 1 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e5481d70c6ce6409e8", "index": 9, "guid": "15ac8c07-20b3-47db-a40a-d9b7b85c3ca3", "isActive": true, "balance": "$1,835.62", "picture": "http://placehold.it/32x32", "age": 26, "eyeColor": "green", "name": "Victoria Hicks", "gender": "female", "company": "KOFFEE", "email": "victoriahicks@koffee.com", "phone": "+1 (861) 494-3124", "address": "954 Montague Street, Lithium, New Jersey, 7450", "about": "Sunt mollit consequat fugiat consequat ea occaecat dolore reprehenderit ut sit excepteur tempor. Cillum nulla consequat aute pariatur commodo velit aute voluptate pariatur sint minim proident. Anim ea ex laboris labore minim. Qui velit do quis dolore irure et commodo voluptate aliquip et exercitation cillum dolor excepteur. Nisi excepteur labore incididunt enim proident cillum esse.\r\n", "registered": "2016-01-06T01:02:17 -02:00", "latitude": -44.625892, "longitude": -103.250696, "tags": [ "nostrud", "ullamco", "irure", "velit", "esse", "fugiat", "consectetur" ], "friends": [ { "id": 0, "name": "Joyner Gardner" }, { "id": 1, "name": "Knapp Estes" }, { "id": 2, "name": "Brigitte Blevins" } ], "greeting": "Hello, Victoria Hicks! You have 4 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e5cb20ad8e57ceea4d", "index": 10, "guid": "b4104037-8495-4f3b-aaf0-b1dcd3cabc35", "isActive": false, "balance": "$2,310.99", "picture": "http://placehold.it/32x32", "age": 34, "eyeColor": "green", "name": "Geneva Rivers", "gender": "female", "company": "CEPRENE", "email": "genevarivers@ceprene.com", "phone": "+1 (977) 442-3843", "address": "204 Bridgewater Street, Orviston, Pennsylvania, 113", "about": "Elit consectetur labore labore Lorem id commodo velit. Tempor quis nulla id officia velit ad aliquip deserunt elit eu adipisicing occaecat do. Laborum voluptate in fugiat quis culpa voluptate est.\r\n", "registered": "2015-01-14T02:57:57 -02:00", "latitude": 27.380443, "longitude": 50.795586, "tags": [ "eiusmod", "laborum", "reprehenderit", "proident", "adipisicing", "nulla", "ex" ], "friends": [ { "id": 0, "name": "Adams King" }, { "id": 1, "name": "Lucile Mccarthy" }, { "id": 2, "name": "Celia Nunez" } ], "greeting": "Hello, Geneva Rivers! You have 2 unread messages.", "favoriteFruit": "banana" }, { "_id": "5789f4e5651e3b37e60540ce", "index": 11, "guid": "5a815bba-fe38-481c-9462-919ac5bfc70c", "isActive": true, "balance": "$3,720.99", "picture": "http://placehold.it/32x32", "age": 25, "eyeColor": "blue", "name": "Geraldine Macias", "gender": "female", "company": "LIQUICOM", "email": "geraldinemacias@liquicom.com", "phone": "+1 (932) 414-2945", "address": "244 Garnet Street, Hobucken, Nevada, 9941", "about": "Sunt mollit nisi est do consequat proident veniam enim veniam. Anim id nisi tempor in dolor duis consequat duis sit incididunt excepteur dolor consectetur sit. Cillum sit laborum laboris sunt irure. Voluptate consectetur cupidatat id elit voluptate amet labore proident voluptate tempor aliquip excepteur proident enim. Qui Lorem officia ipsum commodo incididunt nulla laboris esse.\r\n", "registered": "2016-04-19T06:57:53 -03:00", "latitude": -30.787425, "longitude": 5.148991, "tags": [ "do", "voluptate", "do", "in", "minim", "elit", "fugiat" ], "friends": [ { "id": 0, "name": "Erika Norman" }, { "id": 1, "name": "Abby Reeves" }, { "id": 2, "name": "Carmen Kaufman" } ], "greeting": "Hello, Geraldine Macias! You have 7 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e5c2cfdbfe57f9cea6", "index": 12, "guid": "d3875a27-1dfe-47b4-b795-cbd66de8b3d9", "isActive": true, "balance": "$2,974.40", "picture": "http://placehold.it/32x32", "age": 29, "eyeColor": "brown", "name": "Rodriguez Torres", "gender": "male", "company": "ZYTRAC", "email": "rodrigueztorres@zytrac.com", "phone": "+1 (814) 459-2850", "address": "369 Seagate Terrace, Eureka, Massachusetts, 2193", "about": "Cillum magna culpa fugiat eiusmod aute sint consectetur nostrud cupidatat eiusmod ullamco magna aute aliqua. Exercitation laborum proident est excepteur elit ullamco veniam sunt eu. Eu cillum dolore ea tempor consectetur aliqua eu in sit qui nostrud culpa. Nisi enim sunt exercitation aliqua tempor ipsum anim magna laboris non aliqua ea. Anim veniam adipisicing incididunt duis nulla est consequat aliqua ex irure commodo consectetur elit. Aliquip laborum ad nulla ea reprehenderit ut voluptate nisi laboris. Commodo eiusmod veniam anim ipsum incididunt tempor sunt labore eiusmod.\r\n", "registered": "2015-11-05T08:14:44 -02:00", "latitude": -15.861528, "longitude": 82.818214, "tags": [ "laboris", "laborum", "irure", "aliqua", "proident", "laborum", "id" ], "friends": [ { "id": 0, "name": "Chris Booker" }, { "id": 1, "name": "Lilia Riddle" }, { "id": 2, "name": "Marsha Webb" } ], "greeting": "Hello, Rodriguez Torres! You have 8 unread messages.", "favoriteFruit": "banana" }, { "_id": "5789f4e57feb29fe1500fe39", "index": 13, "guid": "3b88055f-656d-455a-b40b-b132c1c9ea2c", "isActive": false, "balance": "$3,793.19", "picture": "http://placehold.it/32x32", "age": 23, "eyeColor": "blue", "name": "Levine Gillespie", "gender": "male", "company": "COMTOUR", "email": "levinegillespie@comtour.com", "phone": "+1 (829) 512-3201", "address": "231 Box Street, Springhill, Indiana, 3853", "about": "Ipsum sit velit occaecat veniam id est ut dolor esse tempor elit voluptate dolor. Exercitation esse nisi dolore proident culpa cillum pariatur cillum mollit nisi non nulla aliquip veniam. In consectetur ea ad excepteur sit enim commodo do eu.\r\n", "registered": "2016-03-25T03:07:49 -03:00", "latitude": -18.792521, "longitude": 23.43746, "tags": [ "voluptate", "adipisicing", "duis", "cillum", "ex", "magna", "Lorem" ], "friends": [ { "id": 0, "name": "Cecile Hardin" }, { "id": 1, "name": "Clarke Mckay" }, { "id": 2, "name": "Nannie Mcleod" } ], "greeting": "Hello, Levine Gillespie! You have 1 unread messages.", "favoriteFruit": "apple" }, { "_id": "5789f4e53c70d7929534ea57", "index": 14, "guid": "4866b124-bc51-4552-b4a7-d1cad948ab70", "isActive": true, "balance": "$2,998.00", "picture": "http://placehold.it/32x32", "age": 22, "eyeColor": "brown", "name": "Mcclure Patterson", "gender": "male", "company": "XURBAN", "email": "mcclurepatterson@xurban.com", "phone": "+1 (934) 409-3147", "address": "780 Louisiana Avenue, Hasty, Tennessee, 8442", "about": "Qui quis dolore laborum magna et veniam fugiat quis incididunt aute. Tempor sunt laboris aliquip esse nulla eu incididunt sit sint. Tempor labore veniam pariatur ullamco eu fugiat laborum.\r\n", "registered": "2014-06-13T12:29:58 -03:00", "latitude": 24.572164, "longitude": -166.514278, "tags": [ "in", "enim", "elit", "ex", "magna", "incididunt", "excepteur" ], "friends": [ { "id": 0, "name": "Robertson Koch" }, { "id": 1, "name": "Martina Rivera" }, { "id": 2, "name": "Faye Duke" } ], "greeting": "Hello, Mcclure Patterson! You have 5 unread messages.", "favoriteFruit": "banana" }, { "_id": "5789f4e509f0dd4bbd434dd5", "index": 15, "guid": "44360e39-36cc-428a-bc16-4b2ac28622c2", "isActive": true, "balance": "$3,047.90", "picture": "http://placehold.it/32x32", "age": 28, "eyeColor": "green", "name": "Carissa Willis", "gender": "female", "company": "EVENTIX", "email": "carissawillis@eventix.com", "phone": "+1 (865) 459-2663", "address": "770 Battery Avenue, Konterra, North Carolina, 798", "about": "Est fugiat veniam commodo elit ut fugiat laborum culpa consequat adipisicing. Aute ut minim exercitation incididunt aliquip consequat velit. Eu Lorem cillum esse sunt tempor adipisicing velit pariatur commodo duis tempor eiusmod mollit esse. Sunt culpa ullamco dolore dolore. Nisi in aute et occaecat consectetur qui aute duis aliquip sunt proident.\r\n", "registered": "2016-01-10T06:46:10 -02:00", "latitude": -33.306816, "longitude": 56.679905, "tags": [ "do", "anim", "reprehenderit", "nostrud", "adipisicing", "ut", "pariatur" ], "friends": [ { "id": 0, "name": "Roberts Edwards" }, { "id": 1, "name": "Roy Barlow" }, { "id": 2, "name": "Yesenia Conner" } ], "greeting": "Hello, Carissa Willis! You have 9 unread messages.", "favoriteFruit": "apple" }, { "_id": "5789f4e524182ab79ce74069", "index": 16, "guid": "a1cbf0af-af18-4e76-96b4-1e5e91678f50", "isActive": false, "balance": "$1,231.30", "picture": "http://placehold.it/32x32", "age": 40, "eyeColor": "green", "name": "Noelle Madden", "gender": "female", "company": "GEEKETRON", "email": "noellemadden@geeketron.com", "phone": "+1 (956) 549-2920", "address": "391 Richardson Street, Davenport, Mississippi, 3116", "about": "Duis id magna in ad magna ullamco ut velit minim est consequat. Deserunt nisi duis dolore Lorem adipisicing aliquip exercitation. Nulla do est ex duis quis dolore deserunt ipsum exercitation officia labore culpa cillum. Ullamco fugiat qui dolore sit. In ipsum officia enim non incididunt cupidatat labore id cillum Lorem id deserunt. Labore velit laboris consectetur qui deserunt quis consectetur pariatur deserunt. In cupidatat proident esse sunt esse adipisicing reprehenderit quis et anim ex.\r\n", "registered": "2014-11-05T11:34:15 -02:00", "latitude": 42.01655, "longitude": -154.431165, "tags": [ "exercitation", "cupidatat", "ipsum", "irure", "aliquip", "consequat", "eiusmod" ], "friends": [ { "id": 0, "name": "Olga Charles" }, { "id": 1, "name": "Morton Fuentes" }, { "id": 2, "name": "Melendez Randall" } ], "greeting": "Hello, Noelle Madden! You have 4 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e5a561722f88e2ae9c", "index": 17, "guid": "34f6b358-b8bc-4441-9081-592a2ef18c5f", "isActive": true, "balance": "$3,858.45", "picture": "http://placehold.it/32x32", "age": 36, "eyeColor": "brown", "name": "Lori Guzman", "gender": "female", "company": "MITROC", "email": "loriguzman@mitroc.com", "phone": "+1 (981) 455-3403", "address": "984 Ash Street, Eastmont, Kentucky, 8672", "about": "Nulla est laborum nulla voluptate non amet esse excepteur eiusmod ex ex. Proident cupidatat minim sunt qui deserunt elit aliquip magna culpa aliqua consequat nisi eiusmod irure. Est nostrud sunt officia consectetur dolore Lorem excepteur eiusmod id consequat ipsum consectetur. Adipisicing exercitation ad aliqua in pariatur adipisicing. Fugiat elit fugiat Lorem officia sit et exercitation id.\r\n", "registered": "2014-12-13T11:18:36 -02:00", "latitude": 14.713345, "longitude": -96.737292, "tags": [ "Lorem", "minim", "enim", "aliqua", "excepteur", "fugiat", "laboris" ], "friends": [ { "id": 0, "name": "Lindsey Oneill" }, { "id": 1, "name": "Audrey Rice" }, { "id": 2, "name": "Socorro Love" } ], "greeting": "Hello, Lori Guzman! You have 8 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e53edd06a58de93e1b", "index": 18, "guid": "cce3334f-3ff6-4bbd-97e5-cc5fb14a57cf", "isActive": false, "balance": "$2,671.49", "picture": "http://placehold.it/32x32", "age": 31, "eyeColor": "brown", "name": "Solis Underwood", "gender": "male", "company": "ECOSYS", "email": "solisunderwood@ecosys.com", "phone": "+1 (814) 476-2136", "address": "890 Menahan Street, Wells, Missouri, 1455", "about": "Non velit magna sunt magna et anim sit. Sit consequat eu labore et anim incididunt eu et in sint laboris pariatur est magna. Non consequat reprehenderit excepteur incididunt sit voluptate do in incididunt mollit proident commodo. Elit do fugiat incididunt laborum. Veniam deserunt laborum sit minim sint. Excepteur adipisicing commodo labore irure commodo mollit nisi ad aliquip. Irure cupidatat irure do enim elit ex est.\r\n", "registered": "2016-01-19T09:51:10 -02:00", "latitude": -54.575181, "longitude": 84.036429, "tags": [ "pariatur", "officia", "sunt", "aliqua", "reprehenderit", "amet", "qui" ], "friends": [ { "id": 0, "name": "Savannah Vargas" }, { "id": 1, "name": "Cornelia Pratt" }, { "id": 2, "name": "Bettie Odonnell" } ], "greeting": "Hello, Solis Underwood! You have 4 unread messages.", "favoriteFruit": "banana" }, { "_id": "5789f4e5f2fd7e8024c25058", "index": 19, "guid": "a2b250dd-2fe7-401b-824d-10bdc5168def", "isActive": true, "balance": "$1,027.87", "picture": "http://placehold.it/32x32", "age": 40, "eyeColor": "green", "name": "Kennedy Blackwell", "gender": "male", "company": "ACCRUEX", "email": "kennedyblackwell@accruex.com", "phone": "+1 (984) 418-3932", "address": "365 Garland Court, Orovada, Maryland, 7323", "about": "In ex pariatur irure labore. Aliqua quis aliquip cillum reprehenderit ad tempor reprehenderit ad. Qui tempor quis ad do culpa exercitation in non eiusmod esse sint. Pariatur aliquip elit duis culpa. Dolore ad deserunt laboris ullamco fugiat ex veniam pariatur enim laboris non. Est eiusmod dolor Lorem duis.\r\n", "registered": "2015-01-04T03:33:07 -02:00", "latitude": -87.117942, "longitude": 121.076386, "tags": [ "incididunt", "exercitation", "tempor", "sint", "eu", "non", "occaecat" ], "friends": [ { "id": 0, "name": "Wood Stephens" }, { "id": 1, "name": "Clemons Mayer" }, { "id": 2, "name": "Wong Wolf" } ], "greeting": "Hello, Kennedy Blackwell! You have 1 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e567a1ebc39e06f990", "index": 20, "guid": "3adc2be9-d985-41eb-8000-d32f922d96c4", "isActive": false, "balance": "$1,610.70", "picture": "http://placehold.it/32x32", "age": 37, "eyeColor": "blue", "name": "Coffey Mason", "gender": "male", "company": "PHOLIO", "email": "coffeymason@pholio.com", "phone": "+1 (936) 590-3032", "address": "635 Frost Street, Malo, California, 9398", "about": "Cupidatat nulla aute dolore fugiat. Fugiat eu labore do amet culpa incididunt ullamco do. Occaecat in quis do in. Labore elit exercitation anim ut duis deserunt labore amet quis. Mollit aliqua proident anim excepteur aliqua excepteur quis do Lorem minim sunt officia Lorem.\r\n", "registered": "2014-12-04T10:16:32 -02:00", "latitude": -31.999848, "longitude": -123.898345, "tags": [ "pariatur", "sint", "elit", "Lorem", "Lorem", "fugiat", "duis" ], "friends": [ { "id": 0, "name": "Shepard Rowland" }, { "id": 1, "name": "Caldwell George" }, { "id": 2, "name": "Howell Mccarty" } ], "greeting": "Hello, Coffey Mason! You have 4 unread messages.", "favoriteFruit": "strawberry" }, { "_id": "5789f4e5b3f86b2cb775595e", "index": 21, "guid": "73b9522e-ea10-43df-b221-61baa4c563ed", "isActive": false, "balance": "$2,434.93", "picture": "http://placehold.it/32x32", "age": 20, "eyeColor": "green", "name": "Soto Chase", "gender": "male", "company": "MONDICIL", "email": "sotochase@mondicil.com", "phone": "+1 (966) 490-3146", "address": "878 Beverly Road, Blende, Connecticut, 4465", "about": "Esse consequat in consequat veniam amet laboris occaecat et ea ipsum reprehenderit. Sunt officia anim labore nulla qui elit laborum et et excepteur dolor ex. Tempor elit aliquip labore et amet. Veniam aliquip sint minim tempor labore sunt. Officia est amet mollit qui mollit commodo adipisicing qui. Dolore anim consectetur enim dolore commodo sit ut et eiusmod occaecat esse tempor elit. Occaecat ad nulla adipisicing veniam veniam excepteur esse anim.\r\n", "registered": "2015-06-19T10:14:08 -03:00", "latitude": -47.396646, "longitude": -30.952543, "tags": [ "eu", "labore", "ipsum", "nisi", "incididunt", "sunt", "Lorem" ], "friends": [ { "id": 0, "name": "Susan Camacho" }, { "id": 1, "name": "Wilkerson Clements" }, { "id": 2, "name": "Mable Fletcher" } ], "greeting": "Hello, Soto Chase! You have 5 unread messages.", "favoriteFruit": "banana" } ] nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/scannerless-nearley.ne000066400000000000000000000101151376321042600273760ustar00rootroot00000000000000# nearley grammar @builtin "string.ne" @{% function insensitive(sl) { var s = sl.literal; var result = []; for (var i=0; i whit? prog whit? {% function(d) { return d[1]; } %} prog -> prod {% function(d) { return [d[0]]; } %} | prod whit prog {% function(d) { return [d[0]].concat(d[2]); } %} prod -> word whit? ("-"|"="):+ ">" whit? expression+ {% function(d) { return {name: d[0], rules: d[5]}; } %} | word "[" wordlist "]" whit? ("-"|"="):+ ">" whit? expression+ {% function(d) {return {macro: d[0], args: d[2], exprs: d[8]}} %} | "@" whit? js {% function(d) { return {body: d[2]}; } %} | "@" word whit word {% function(d) { return {config: d[1], value: d[3]}; } %} | "@include" whit? string {% function(d) {return {include: d[2].literal, builtin: false}} %} | "@builtin" whit? string {% function(d) {return {include: d[2].literal, builtin: true }} %} expression+ -> completeexpression | expression+ whit? "|" whit? completeexpression {% function(d) { return d[0].concat([d[4]]); } %} expressionlist -> completeexpression | expressionlist whit? "," whit? completeexpression {% function(d) { return d[0].concat([d[4]]); } %} wordlist -> word | wordlist whit? "," whit? word {% function(d) { return d[0].concat([d[4]]); } %} completeexpression -> expr {% function(d) { return {tokens: d[0]}; } %} | expr whit? js {% function(d) { return {tokens: d[0], postprocess: d[2]}; } %} expr_member -> word {% id %} | "$" word {% function(d) {return {mixin: d[1]}} %} | word "[" expressionlist "]" {% function(d) {return {macrocall: d[0], args: d[2]}} %} | string "i":? {% function(d) { if (d[1]) {return insensitive(d[0]); } else {return d[0]; } } %} | "%" word {% function(d) {return {token: d[1]}} %} | charclass {% id %} | "(" whit? expression+ whit? ")" {% function(d) {return {'subexpression': d[2]} ;} %} | expr_member whit? ebnf_modifier {% function(d) {return {'ebnf': d[0], 'modifier': d[2]}; } %} ebnf_modifier -> ":+" {% id %} | ":*" {% id %} | ":?" {% id %} expr -> expr_member | expr whit expr_member {% function(d){ return d[0].concat([d[2]]); } %} word -> [\w\?\+] {% function(d){ return d[0]; } %} | word [\w\?\+] {% function(d){ return d[0]+d[1]; } %} string -> dqstring {% function(d) {return { literal: d[0] }; } %} #string -> "\"" charset "\"" {% function(d) { return { literal: d[1].join("") }; } %} # #charset -> null # | charset char {% function(d) { return d[0].concat([d[1]]); } %} # #char -> [^\\"] {% function(d) { return d[0]; } %} # | "\\" . {% function(d) { return JSON.parse("\""+"\\"+d[1]+"\""); } %} charclass -> "." {% function(d) { return new RegExp("."); } %} | "[" charclassmembers "]" {% function(d) { return new RegExp("[" + d[1].join('') + "]"); } %} charclassmembers -> null | charclassmembers charclassmember {% function(d) { return d[0].concat([d[1]]); } %} charclassmember -> [^\\\]] {% function(d) { return d[0]; } %} | "\\" . {% function(d) { return d[0] + d[1]; } %} js -> "{" "%" jscode "%" "}" {% function(d) { return d[2]; } %} jscode -> null {% function() {return "";} %} | jscode [^%] {% function(d) {return d[0] + d[1];} %} | jscode "%" [^}] {% function(d) {return d[0] + d[1] + d[2]; } %} # Whitespace with a comment whit -> whitraw | whitraw? comment whit? # Optional whitespace with a comment whit? -> null | whit # Literally a string of whitespace whitraw -> [\s] | whitraw [\s] # A string of whitespace OR the empty string whitraw? -> null | whitraw comment -> "#" commentchars "\n" commentchars -> null | commentchars [^\n] nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/test1.json000066400000000000000000000001561376321042600250340ustar00rootroot00000000000000{ "a" : true, "b" : "䕧⡱a\\\"b\u4567\u2871䕧⡱\t\r\f\b\n", "c" : null, "d" : [null, true, false, null] } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/test2.json000066400000000000000000000002231376321042600250300ustar00rootroot00000000000000{ "a" : true, "b" : "䕧⡱a\\\"b\u4567\u2871䕧⡱\t\r\f\b\n\u0010\u001f\u005b\u005c\u005d", "c" : null, "d" : [null, true, false, -0.2345E+10] } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/trailing-comment.ne000066400000000000000000000000561376321042600266750ustar00rootroot00000000000000a -> "cow" # Please do NOT reformat this file.nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/tsconfig.json000066400000000000000000000001721376321042600256060ustar00rootroot00000000000000{ "compilerOptions": { "target": "es5", "strict": true }, "include": [ "./tmp.typescript-test.ts" ] } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/typescript-test.ne000066400000000000000000000003531376321042600266070ustar00rootroot00000000000000@preprocessor typescript @{% import { compile } from 'moo' const lexer = compile({ larrow: '<', rarrow: '>', integer: /[0-9]+/ }); %} @lexer lexer expression -> %larrow %integer %rarrow {% parts => parts.map(p => p.value) %} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/warning-undefined-test.ne000066400000000000000000000000601376321042600300000ustar00rootroot00000000000000@include "warning-undefined-test2.ne" main -> x nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/warning-undefined-test2.ne000066400000000000000000000000071376321042600300630ustar00rootroot00000000000000y -> z nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/grammars/whitespace.ne000066400000000000000000000001471376321042600255610ustar00rootroot00000000000000@builtin "whitespace.ne" d -> a a -> b _ "&" | b b -> letter | "(" _ d _ ")" letter -> [a-z] nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/lint.test.js000066400000000000000000000025561376321042600235600ustar00rootroot00000000000000const expect = require("expect"); const lint = require("../lib/lint"); describe("Linter", function() { var mockGrammar, mockOpts, writeSpy; beforeEach(function () { mockGrammar = { rules: [], config: {} }; mockOpts = { out: { write() {} } }; writeSpy = expect.spyOn(mockOpts.out, "write"); }) it("runs without warnings on empty rules", function () { lint(mockGrammar, mockOpts); expect(writeSpy).toNotHaveBeenCalled(); }); it("warns about undefined symbol", function () { mockGrammar.rules = [ {name: "a", symbols: ["non-existent"]} ]; lint(mockGrammar, mockOpts); expect(writeSpy).toHaveBeenCalled(); }); it("doesn't warn about defined symbol", function () { mockGrammar.rules = [ {name: "a", symbols: []}, {name: "b", symbols: ["a"]} ]; lint(mockGrammar, mockOpts); expect(writeSpy).toNotHaveBeenCalled(); }); it("doesn't warn about duplicate symbol", function () { mockGrammar.rules = [ {name: "a", symbols: []}, {name: "a", symbols: []}, {name: "b", symbols: ["a"]} ]; lint(mockGrammar, mockOpts); expect(writeSpy).toNotHaveBeenCalled(); }); }) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/nearleyc.test.js000066400000000000000000000233761376321042600244170ustar00rootroot00000000000000 const fs = require('fs'); const expect = require('expect'); const nearley = require('../lib/nearley'); const {compile, evalGrammar, parse, nearleyc} = require('./_shared'); const {sh, externalNearleyc, cleanup} = require('./external'); function read(filename) { return fs.readFileSync(filename, 'utf-8'); } function write(filename, contents) { fs.writeFileSync(filename, contents, 'utf-8'); } function prettyPrint(grammar) { return grammar.rules.map(g => g.toString()) } function typeScriptCheck(isStrict) { const {outPath, stdout, stderr} = externalNearleyc("grammars/typescript-test.ne", ".ts"); expect(stderr).toBe(""); expect(stdout).toBe(""); const spawnSync = sh(`tsc ${isStrict ? "--strict" : ""} ${outPath}.ts`); expect(spawnSync.stdout).toBe(""); // type errors get logged to stdout, not stderr const grammar = nearley.Grammar.fromCompiled(require(`./${outPath}.js`).default); expect(parse(grammar, "<123>")).toEqual([ [ '<', '123', '>' ] ]); } describe("bin/nearleyc", function() { after(cleanup) it('builds for ES5', function() { const {outPath, stdout, stderr} = externalNearleyc("grammars/parens.ne", '.js'); expect(stderr).toBe(""); expect(stdout).toBe(""); const grammar = nearley.Grammar.fromCompiled(require(`./${outPath}.js`)); }); it('builds for ES6+', function() { this.timeout(10000); // It takes a while to run babel! const {outPath, stdout, stderr} = externalNearleyc("grammars/esmodules-test.ne", '.js'); expect(stderr).toBe(""); expect(stdout).toBe(""); write(`test/${outPath}-parse.js`, `import {Grammar, Parser} from '../lib/nearley' import compiledGrammar from './${outPath}' const grammar = Grammar.fromCompiled(compiledGrammar) const parser = new Parser(grammar) parser.feed('<4>') console.log(JSON.stringify(parser.results))`); { const {stderr, stdout} = sh(`babel-node ${outPath}-parse.js --presets=env`); expect(stderr).toBe(""); expect(JSON.parse(stdout)).toEqual([ [ '<', '4', '>' ] ]); } }); it('builds for CoffeeScript', function() { const {outPath, stdout, stderr} = externalNearleyc("grammars/coffeescript-test.ne", ".coffee"); expect(stderr).toBe(""); expect(stdout).toBe(""); sh(`coffee -c ${outPath}.coffee`); const grammar = nearley.Grammar.fromCompiled(require(`./${outPath}.js`)); expect(parse(grammar, "ABCDEFZ12309")).toEqual([ [ 'ABCDEFZ', '12309' ] ]); }); it('builds for TypeScript', function() { this.timeout(10000); // It takes a while to run tsc! typeScriptCheck(false); }); it('builds for TypeScript with `--strict` with no type errors', function() { this.timeout(10000); typeScriptCheck(true); }); it('builds modules in folders', function() { const {outPath, stdout, stderr} = externalNearleyc("grammars/folder-test.ne", '.js'); expect(stderr).toBe(""); expect(stdout).toBe(""); const grammar = nearley.Grammar.fromCompiled(require(`./${outPath}.js`)); }); it('builds modules with multiple includes of the same file', function() { const {outPath, stdout, stderr} = externalNearleyc("grammars/multi-include-test.ne", '.js'); expect(stderr).toBe(""); expect(stdout).toBe(""); const grammar = nearley.Grammar.fromCompiled(require(`./${outPath}.js`)); }); it("warns about undefined symbol", function () { const {stdout, stderr} = externalNearleyc("grammars/warning-undefined-test.ne", '.js'); expect(stderr).toNotBe(""); expect(stdout).toBe(""); }); it("doesn't warn when used with the --quiet option", function () { const {stdout, stderr} = externalNearleyc("grammars/warning-undefined-test.ne", '.js', ['--quiet']); expect(stderr).toBe(""); expect(stdout).toBe(""); }); it("allows trailing comments without newline terminators", function () { const {stdout, stderr} = externalNearleyc("grammars/trailing-comment.ne", '.js'); expect(stderr).toBe(""); }); }) describe('nearleyc: example grammars', function() { it('calculator example', function() { const arith = compile(read("examples/calculator/arithmetic.ne")); expect(parse(arith, "ln (3 + 2*(8/e - sin(pi/5)))")).toEqual([ Math.log(3 + 2*(8/Math.exp(1) - Math.sin(Math.PI/5))) ]); }); it('csscolor example', function() { const cssc = compile(read("examples/csscolor.ne")); expect(parse(cssc, "#FF00FF")).toEqual([{r: 0xff, g: 0x00, b: 0xff}]); expect(parse(cssc, "#8A7")).toEqual([{r: 0x88, g: 0xaa, b: 0x77}]); expect(parse(cssc, "rgb(99,66,33)")).toEqual([{r: 99, g: 66, b: 33}]); expect(parse(cssc, "hsl(99,66,33)")).toEqual([{h: 99, s: 66, l: 33}]); expect(function() { parse(cssc, "#badcolor"); }).toThrow() }); it('exponential whitespace bug', function() { compile(read('test/grammars/indentation.ne')); }); it('percent bug', function() { compile(read('test/grammars/percent.ne')); }); it('json', function() { const grammar = compile(read("examples/json.ne")); expect(prettyPrint(grammar)).toEqual([ 'json$subexpression$1 → object', 'json$subexpression$1 → array', 'json → _ json$subexpression$1 _', 'object → "{" _ "}"', 'object$ebnf$1 → ', 'object$ebnf$1$subexpression$1 → _ "," _ pair', 'object$ebnf$1 → object$ebnf$1 object$ebnf$1$subexpression$1', 'object → "{" _ pair object$ebnf$1 _ "}"', 'array → "[" _ "]"', 'array$ebnf$1 → ', 'array$ebnf$1$subexpression$1 → _ "," _ value', 'array$ebnf$1 → array$ebnf$1 array$ebnf$1$subexpression$1', 'array → "[" _ value array$ebnf$1 _ "]"', 'value → object', 'value → array', 'value → number', 'value → string', 'value → "true"', 'value → "false"', 'value → "null"', 'number → %number', 'string → %string', 'pair → key _ ":" _ value', 'key → string', '_ → ', '_ → %space', ]) }); it('classic crontab', function() { // Try compiling the grammar const classicCrontab = compile(read("examples/classic_crontab.ne")); // Try parsing crontab file using the newly generated parser const crontabTest = read('test/grammars/classic_crontab.test'); const crontabResults = read('test/grammars/classic_crontab.results'); expect(parse(classicCrontab, crontabTest)).toEqual([JSON.parse(crontabResults)]); }); it('case-insensitive strings', function() { const caseinsensitive = compile(read("test/grammars/caseinsensitive.ne")); const passCases = [ "Les rêves des amoureux sont comme le bon vin!", "LES RÊVES DES AMOUREUX SONT COMME LE BON VIN!", "leS RêVeS DeS AmOuReUx sOnT CoMmE Le bOn vIn!", "LEs rÊvEs dEs aMoUrEuX SoNt cOmMe lE BoN ViN!" ]; passCases.forEach(function(c) { const p = parse(caseinsensitive, c); expect(p.length).toBe(1) expect(p[0].toUpperCase()).toBe(passCases[1]); }); }); it('scannerless nearley grammar', function() { compile(read("test/grammars/scannerless-nearley.ne")); }) }); describe('nearleyc: builtins', () => { it('generate includes id', () => { const source = nearleyc(` X -> "hat" {% id %} `) expect(source.indexOf('function id(')).toNotBe(-1) const g = evalGrammar(source) expect(parse(g, "hat")).toEqual(["hat"]) }) // TODO fix docs? it.skip('nuller', () => { //@builtin "postprocessors.ne" const source = nearleyc(` ws -> " " {% nuller %} `) const g = evalGrammar(source) expect(parse(g, " ")).toEqual([null]) }) }) describe('nearleyc: macros', () => { it('seems to work', () => { // Matches "'Hello?' 'Hello?' 'Hello?'" const grammar = compile(` matchThree[X] -> $X " " $X " " $X inQuotes[X] -> "'" $X "'" main -> matchThree[inQuotes["Hello?"]] `); expect(prettyPrint(grammar)).toEqual([ 'main$macrocall$2$macrocall$2$string$1 → "H" "e" "l" "l" "o" "?"', 'main$macrocall$2$macrocall$2 → main$macrocall$2$macrocall$2$string$1', 'main$macrocall$2$macrocall$1 → "\'" main$macrocall$2$macrocall$2 "\'"', 'main$macrocall$2 → main$macrocall$2$macrocall$1', 'main$macrocall$1 → main$macrocall$2 " " main$macrocall$2 " " main$macrocall$2', 'main → main$macrocall$1', ]); }); it('must be defined before use', () => { expect(() => compile(` main -> matchThree[inQuotes["Hello?"]] matchThree[X] -> $X " " $X " " $X inQuotes[X] -> "'" $X "'" `)).toThrow(); }); it('compiles a simple macro from external file', function() { const grammar = compile(read("test/grammars/macro-test.ne")); const passCases = [ "a", "b", "a/b", "b/a", ]; passCases.forEach(function(c) { const p = parse(grammar, c); expect(p.length).toBe(1); expect(p[0]).toBe("a/b"); }); expect(() => parse(grammar, "ab")).toThrow(); }); }) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/parser.test.js000066400000000000000000000206161376321042600241030ustar00rootroot00000000000000 const fs = require('fs'); const expect = require('expect'); const nearley = require('../lib/nearley'); const {compile, parse} = require('./_shared'); function read(filename) { return fs.readFileSync(filename, 'utf-8'); } describe('Parser: API', function() { let testGrammar = compile(` y -> x:+ x -> [a-z0-9] | "\\n" `) let testGrammar2 = compile(` input -> ws a ws a -> "a" ws -> null ws -> wsc ws wsc -> " "`) let testGrammar3 = compile(` input -> ws a ws a -> "a" ws -> [ ]:*`) let jsonGrammar = compile(read("examples/json.ne")) it('shows line number in errors', function() { expect(() => parse(testGrammar, 'abc\n12!')).toThrow( /line 2 col 3/ ) }) it('shows token index in errors', function() { expect(() => parse(testGrammar, ['1', '2', '!'])).toThrow( /at index 2/ ) }) it('shows user friend error with state stack info', function() { const expectedError = [ "Syntax error at line 2 col 3:", "", "1 abc", "2 12!", " ^", "", "Unexpected \"!\". Instead, I was expecting to see one of the following:", "", "A character matching /[a-z0-9]/ based on:", " x → ● /[a-z0-9]/", " y$ebnf$1 → y$ebnf$1 ● x", " y → ● y$ebnf$1", "A \"\\n\" based on:", " x → ● \"\\n\"", " y$ebnf$1 → y$ebnf$1 ● x", " y → ● y$ebnf$1", "" ].join("\n"); expect(() => parse(testGrammar, 'abc\n12!')).toThrow(expectedError); }); it('displays user friendly error even on lexer errors', function() { expect(() => parse(jsonGrammar, 'abc')) .toThrow(/\(lexer error\).*I was expecting to see one of the following:/); }); it('displays current parser state if no more token expected', function() { var grammar = compile(`input -> "abc"`); var expectedError = [ "Syntax error at line 1 col 4:", "", "1 abcd", " ^", "", "Unexpected \"d\". I did not expect any more input. Here is the state of my parse table:", "", " input$string$1 → \"a\" \"b\" \"c\" ● ", " input → input$string$1 ● ", "" ].join("\n"); expect(() => parse(grammar, "abcd")).toThrow(expectedError); }); it('collapes identical consecutive lines', function() { expect(() => parse(testGrammar2, ` b`)) .toThrow(/ws → wsc ● ws\n\s+\^ 3 more lines identical to this/) }); it('does not infinitely recurse on self-referential states', function() { // Would throw maximum call stack size exceeded // if infinite recursion expect(() => parse(testGrammar3, ` b`)) .toThrow(/Unexpected \"b\"/); }); var tosh = compile(read("examples/tosh.ne")); it('can save state', function() { let first = "say 'hello'"; let second = " for 2 secs"; let p = new nearley.Parser(tosh, { keepHistory: true }); p.feed(first); expect(p.current).toBe(11) expect(p.table.length).toBe(12) var col = p.save(); expect(col.index).toBe(11) expect(col.lexerState.col).toBe(first.length) }); it('can rewind', function() { let first = "say 'hello'"; let second = " for 2 secs"; let p = new nearley.Parser(tosh, { keepHistory: true }); p.feed(first); expect(p.current).toBe(11) expect(p.table.length).toBe(12) p.feed(second); p.rewind(first.length); expect(p.current).toBe(11) expect(p.table.length).toBe(12) expect(p.results).toEqual([['say:', 'hello']]); }); it("won't rewind without `keepHistory` option", function() { let p = new nearley.Parser(tosh, {}); expect(() => p.rewind()).toThrow() }) it('restores line numbers', function() { let p = new nearley.Parser(testGrammar); p.feed('abc\n') expect(p.save().lexerState.line).toBe(2) p.feed('123\n') var col = p.save(); expect(col.lexerState.line).toBe(3) p.feed('q') p.restore(col); expect(p.lexer.line).toBe(3) p.feed('z') }); it('restores column number', function() { let p = new nearley.Parser(testGrammar); p.feed('foo\nbar') var col = p.save(); expect(col.lexerState.line).toBe(2) expect(col.lexerState.col).toBe(3) p.feed('123'); expect(p.lexerState.col).toBe(6) p.restore(col); expect(p.lexerState.line).toBe(2) expect(p.lexerState.col).toBe(3) p.feed('456') expect(p.lexerState.col).toBe(6) }); // TODO: moo save/restore }); describe('Parser: examples', () => { it('nullable whitespace bug', function() { var wsb = compile(read("test/grammars/whitespace.ne")); expect(parse(wsb, "(x)")).toEqual( [ [ [ [ '(', null, [ [ [ [ 'x' ] ] ] ], null, ')' ] ] ] ]); }); const parentheses = compile(read("examples/parentheses.ne")); it('parentheses', () => { var passCases = [ '()', '[(){}<>]', '[(((<>)()({})())(()())(())[])]', '<<[([])]>([(<>[]{}{}<>())[{}[][]{}{}[]<>[]{}<>{}<>[]<>{}()][[][][]()()()]({})<[]>{(){}()<>}(<>[])]())({})>' ]; for (let i in passCases) { expect(parse(parentheses, passCases[i])).toEqual([true]); } var failCases = [ ' ', '[}', '[(){}><]', '(((())))(()))' ]; for (let i in failCases) { expect(function() { parse(parentheses, failCases[i]); }).toThrow() } // These are invalid inputs but the parser will not complain expect(parse(parentheses, '')).toEqual([]); expect(parse(parentheses, '((((())))(())()')).toEqual([]); }); it('tokens', function() { var tokc = compile(read("examples/token.ne")); expect(parse(tokc, [123, 456, " ", 789])).toEqual([ [123, [ [ 456, " ", 789 ] ]] ]); }); it('tokens 2', () => { var tokc = compile(read("examples/token-2.ne")); expect(() => parse(tokc, ["print", "blah", 12, ";", ";"])).toThrow(/A token matching x \=\> Number\.isInteger\(x\)/); }) const json = compile(read("examples/json.ne")); it('json', () => { const test1 = '{ "a" : true, "b" : "䕧⡱a\\\\\\"b\\u4567\\u2871䕧⡱\\t\\r\\f\\b\\n", "c" : null, "d" : [null, true, false, null] }\n' expect(parse(json, test1)).toEqual([JSON.parse(test1)]) const test2 = '{ "a" : true, "b" : "䕧⡱a\\\\\\"b\\u4567\\u2871䕧⡱\\t\\r\\f\\b\\n\\u0010\\u001f\\u005b\\u005c\\u005d", "c" : null, "d" : [null, true, false, -0.2345E+10] }\n' expect(parse(json, test2)).toEqual([JSON.parse(test2)]) }); it('tosh', () => { var tosh = compile(read("examples/tosh.ne")); expect(parse(tosh, "set foo to 2 * e^ of ( foo * -0.05 + 0.5) * (1 - e ^ of (foo * -0.05 + 0.5))")) .toEqual([["setVar:to:","foo",["*",["*",2,["computeFunction:of:","e ^",["+",["*",["readVariable","foo"],-0.05],0.5]]],["-",1,["computeFunction:of:","e ^",["+",["*",["readVariable","foo"],-0.05],0.5]]]]]]); }) it('fun-lang memory test (shouldn\'t use excessive memory for error reporting)', () => { var fun = compile(read("examples/fun-lang.ne")); expect(() => parse(fun, [ "fun count_smileys(faces) [", "return count(filter(fun (face) [", " has_eyes = face[0] == \":\" #", "], faces))" ].join("\n"))).toThrow(/Unexpected comment token/) }) it('should give accurate line and col counts in error reporting', () => { var nearley = compile(read("lib/nearley-language-bootstrapped.ne")); expect(() => parse(nearley, [ "", "", "@{%", "", "%}", "", "rule1 -> `", "", "", "`", "rule2 -> abc", " {%", " ([first]) =>", " first", " %} ]", "" ].join("\n"))).toThrow(/line 15 col 9/) }) }) nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/test/profile.js000077500000000000000000000042111376321042600232650ustar00rootroot00000000000000var nearley = require('../lib/nearley.js'); var parserGrammar = require('./grammars/parens.js'); function nspace(n) { var out = ""; for (var i=0; i \"(\" p \")\" | [a-z]"); console.log("An input of size n is 2n+1 characters long, and of the form (((...a...)))."); console.log(); console.log("Running time tests."); console.log("-------------------"); console.log("Each star corresponds to the time taken to parse an input of that size with a recursive grammar."); console.log(); console.log("SCALE"); console.log(nspace(20) + "0.25s"); console.log(nspace(40) + "0.50s"); console.log(nspace(60) + "0.75s"); console.log(nspace(80) + "1.00s"); for (var i=0; i<5e4; i+=2e3) { if (i%1e4 === 0) { console.log(i); } profile(i, "TIME"); } console.log("Running memory tests."); console.log("-------------------"); console.log("Each star corresponds to the memory taken to parse an input of that size with a recursive grammar."); console.log("Occasional outliers may be caused by gc runs. Nearley profiling doesn't explicitly call the gc before each run."); console.log(); console.log("SCALE"); console.log(nspace(20) + "025MB"); console.log(nspace(40) + "050MB"); console.log(nspace(60) + "075MB"); console.log(nspace(80) + "100MB"); for (var i=0; i<5e4; i+=2e3) { if (i%1e4 === 0) { console.log(i); } profile(i, "MEMO"); } nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/000077500000000000000000000000001376321042600211335ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/csscolor-railroad.html000066400000000000000000000030511376321042600254420ustar00rootroot00000000000000

hexdigit


/[a-fA-F0-9]/ nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/000077500000000000000000000000001376321042600220735ustar00rootroot00000000000000nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/favicon.png000066400000000000000000000007171376321042600242330ustar00rootroot00000000000000PNG  IHDRagAMA aIDAT8SJA3x!2YLk1DB? 44)^!iB$[ vf2j(,fH]cN4EMyS /+xI4 ,,fs4 |CW{wQ߮O&̴%"e'BA6Z.KXG,8Wl\};KseMRE5/J[0q6}R nkM7%;IuO|bc|>6],?cR%)afs#}la#7xٌ2Ó .2l@in.dkND08+#Aޖwa̘aFZ1>&x_s΢ TIENDB`nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley-logo.sketch000066400000000000000000002000001376321042600256630ustar00rootroot00000000000000SQLite format 3 @ .@ mmFetablepayloadpayloadCREATE TABLE payload (name text, value blob)IgtablemetadatametadataCREATE TABLE metadata (name text, value blob) g,< _O build streamtyped@NSNumberNSValueNSObject*qA !tappVersion streamtyped@NSStringNSObject+42e #8saveHistory streamtyped@NSArrayNSObjectiNSString+NONAPPSTORE.367810 Vcreated streamtyped@ NSDictionaryNSObjectiNSString+appcom.bohemiancoding.sketch3commit(566dab740f05650c87722a04bbcb154884097f92buildNSNumberNSValue*q appVersion42variant NONAPPSTOREversionWHvariant streamtyped@NSStringNSObject+ NONAPPSTOREOautosaved streamtyped@NSNumberNSValueNSObject*cS$app streamtyped@NSStringNSObject+com.bohemiancoding.sketch39nfonts streamtyped@NSArrayNSObjectiPlength streamtyped@NSNumberNSValueNSObject*qΦMversion streamtyped@NSNumberNSValueNSObject*qW/pagesAndArtboards streamtyped@ NSDictionaryNSObjectiNSString+$FC4C1A04-C4BE-4937-A55C-FC8C592CFA77namePage 1 artboardsNSMutableDictionary$DBFB1402-D4FF-4188-9378-7189ECFFACDBnearley-purple$D606694F-A175-4209-BCCC-6FF7C10EF05Cfavicon$A00D5557-3D0F-4284-8752-8F22FDA90581nearleyd@commit streamtyped@NSStringNSObject+(566dab740f05650c87722a04bbcb154884097f92  K!UIMetadatabplist00X$versionX$objectsY$archiverT$top" !"#$%&'/012789@DLMNOPX`hijks{U$null WNS.keysZNS.objectsV$class    !_$41E0775B-3BED-4DC6-9FDF-848B1376EA2C_$9CE2F54A-1BA9-4568-BA96-1D119DC90F01_$DFA5B02B-58AC-4BA6-A7F1-976819366BAD_$E89348DD-D157-4F5E-A149-B771A088B29A_$FC4C1A04-C4BE-4937-A55C-FC8C592CFA77_$68233D02-26C1-4DF3-8758-334C21BC2F56_$F2458A3D-0154-48DC-AB2F-61CCAFB2D013_$FC8B8C04-C9F2-4A9A-B043-C6D9A7DA9B1A (+.)* ,- ^pageListHeight_exportableLayerSelection# 3645_$A00D5557-3D0F-4284-8752-8F22FDA90581_$D606694F-A175-4209-BCCC-6FF7C10EF05C:;<=Z$classnameX$classes^NSMutableArray<>?WNSArrayXNSObject:;AB_NSMutableDictionaryAC?\NSDictionary EH.FGIJ\scrollOriginYzoomValueV{0, 0}#? QT.FGIJ Y\.FGIJ ad.bGef\scrollOriginZ{329, 274}#? lo.FGIJ tw.FGIJ |.FGIJ:;CC?_NSKeyedArchiverчTroot#-27\biq|,Sz09>ACEGn  ",3<CFHJMOQSZ]_adfhjqtvx{}  W(mainbplist00{|X$versionX$objectsY$archiverT$top%&24;=@BFMOQX\^gjluxz%&'.3489?@JTU^ajt{ %&+-017;IJKLSZ[\]dmz&+,0379<AFIYZ_adhlstuv}~ %&.348;?ADINQabgilpt{|}~   #%*+056:MNSUZ[chimptvy~  %'*.29:;<CDEFQdejlrsz !(16=@Mghmrw{ !"#$+,-.ABGILSXY]`dil|}       + , 1 3 8 ? D E I L P U X h i n p u y }       " & - 2 3 7 : > C F V W \ ^ a e i p q r s z { | }      ' ( ) * 1 D E J L O W \ ] a d h m p u z }      % - 5 7 : = @ Z [ ` c g l m t y z }         2 3 8 : @ H M N R U Y ^ a f k n ~    $&)-4<=EMUVX[^adgtU$null !"[layerStylesVassets_enableSliceInteractionUpages_currentPageIndexV$class[cloudUserID_layerTextStyles_enableLayerInteraction\cloudShareID[do_objectID\layerSymbols]cloudShareURLXuserInfo  _$41E0775B-3BED-4DC6-9FDF-848B1376EA2C'()*+,-./0YgradientsVcolors_imageCollectionVimages]exportPresets  35678Z$classnameX$classes^NSMutableArray79:WNSArrayXNSObject3*>? A 56CD_NSMutableDictionaryCE:\NSDictionary56GH_MSImmutableImageCollectionIJKL:_MSImmutableImageCollection__MSImmutableImageCollection_MSImmutableModelObject_MSModelObjectCommonN 569P9:56RS_MSImmutableAssetCollectionTUVW:_MSImmutableAssetCollection__MSImmutableAssetCollection_MSImmutableModelObject_MSModelObjectCommonYZ[Wobjects356_`_MSImmutableSharedStyleContainerabcdef:_MSImmutableSharedStyleContainer_ _MSImmutableSharedStyleContainer_ MSImmutableSharedObjectContainer_!_MSImmutableSharedObjectContainer_MSImmutableModelObject_MSModelObjectCommonYhi356mn_MSImmutableSymbolContaineropqrst:_MSImmutableSymbolContainer__MSImmutableSymbolContainer_ MSImmutableSharedObjectContainer_!_MSImmutableSharedObjectContainer_MSImmutableModelObject_MSModelObjectCommonYvw356{|_#MSImmutableSharedTextStyleContainer}~:_#MSImmutableSharedTextStyleContainer_$_MSImmutableSharedTextStyleContainer_MSImmutableSharedStyleContainer_ _MSImmutableSharedStyleContainer_ MSImmutableSharedObjectContainer_!_MSImmutableSharedObjectContainer_MSImmutableModelObject_MSModelObjectCommon3[NS.object.0_originalObjectID_isFlippedHorizontalUstyleXrotationUframe_hasClickThrough_layerListExpandedType]exportOptions_horizontalRulerData_includeInCloudUpload_verticalRulerData_isFlippedVertical\resizingType[nameIsFixedVlayersYisVisibleTnameTgridXisLockedVlayout_shouldBreakMaskChain^sharedObjectID #    " _$FC4C1A04-C4BE-4937-A55C-FC8C592CFA770ZshouldTrim_includedLayerIds\layerOptions]exportFormats 356_MSImmutableExportOptions:_MSImmutableExportOptions__MSImmutableExportOptions_MSImmutableModelObject_MSModelObjectCommonQy_constrainProportionsUwidthVheightQx#@r56_MSImmutableRect:_MSImmutableRect__MSImmutableRect_MSImmutableModelObject_MSModelObjectCommonVPage 1_startDecorationTypeZmiterLimitYtextStyle_endDecorationType! 56_MSImmutableStyle:_MSImmutableStyle__MSImmutableStyle_MSImmutableModelObject_MSModelObjectCommon3[NS.object.1[NS.object.2~# _hasBackgroundColor_backgroundColor_includeBackgroundColorInExport1/ %$ zw |} > 0x_$A00D5557-3D0F-4284-8752-8F22FDA905810 &3+'- !"#$\absoluteSizeZfileFormat\namingScheme_visibleScaleTypeUscale*()#?SpngP56()_MSImmutableExportFormat*+,-:_MSImmutableExportFormat__MSImmutableExportFormat_MSImmutableModelObject_MSModelObjectCommon !0#2*,)#@Ssvg !"72*(.S@4x:=>#@H#@p#@dWnearleyABCDGHWbordersUfillsTblur5!:2KLMNOPQSVradius[motionAngleYisEnabledTtypeVcenter#@43Z{0.5, 0.5}56VW_MSImmutableStyleBlurXYZ[\]:_MSImmutableStyleBlur__MSImmutableStyleBlur_MSImmutableStylePart__MSImmutableStylePart_MSImmutableModelObject_MSModelObjectCommon3`6bcMdefgiYthicknessXfillTypeXpositionUcolor#?9 7klmnopqrsSredUalphaTblueUgreen8#?l#?#?l#?l56uv_MSImmutableColorwxyz:_MSImmutableColor__MSImmutableColor_MSImmutableModelObject_MSModelObjectCommon56|}_MSImmutableStyleBorder~:_MSImmutableStyleBorder__MSImmutableStyleBorder_MSImmutableStyleBasicFill__MSImmutableStyleBasicFill_MSImmutableStylePart__MSImmutableStylePart_MSImmutableModelObject_MSModelObjectCommon3;ecMqUimage^noiseIntensity_patternFillType_patternTileScaleZnoiseIndex=< klmnoq8#?vȴ#?vȴ#?vȴ56_MSImmutableStyleFill:_MSImmutableStyleFill__MSImmutableStyleFill_MSImmutableStyleBasicFill__MSImmutableStyleBasicFill_MSImmutableStylePart__MSImmutableStylePart_MSImmutableModelObject_MSModelObjectCommon3[NS.object.7[NS.object.4[NS.object.6[NS.object.3[NS.object.5Pŀe?[windingRule_clippingMaskMode_hasClippingMaskECA@dP D_$FE6FF485-19EE-426E-BFB1-992538EFCFCD0 B3#@S#@J#@ #@gZright lineABC]borderOptionsJ!HMFKLMNOQ#@@4GZ{0.5, 0.5}M0]lineJoinStyle\lineCapStyle[dashPatternI 56_MSImmutableStyleBorderOptions:_MSImmutableStyleBorderOptions__MSImmutableStyleBorderOptions_MSImmutableStylePart__MSImmutableStylePart_MSImmutableModelObject_MSModelObjectCommon3KbcMdeg9 Lklmnoq83NecMq=Oklmno q  8#?vȴ#?vȴ#?vȴ3Q!#_booleanOperationVeditedTpathSU  WcRV_$2F36BBC7-3BAB-4227-B91C-5E615E21F2470* T3TPath2346VpointsXisClosedXb83:^Y<=>?@ABDEFG\hasCurveFromYcurveModeUpointYcurveFrom\cornerRadiusWcurveToZhasCurveTo]\Z[_({-3.715004485310605, 4.9166666666666661}_({-3.715004485310605, 4.9166666666666661}X{0, 0.5}56MN_MSImmutableCurvePointOPQR:_MSImmutableCurvePoint__MSImmutableCurvePoint_MSImmutableModelObject_MSModelObjectCommon<=>?@ABDVWX]a_`_){-3.7000246692083416, 14.249999999999996}_){-3.7000246692083416, 14.249999999999996}X{1, 0.5}56^__MSImmutableShapePath`abc:_MSImmutableShapePath__MSImmutableShapePath_MSImmutableModelObject_MSModelObjectCommon56ef_MSImmutableShapePathLayerghijkl:_MSImmutableShapePathLayer__MSImmutableShapePathLayer_MSImmutableLayer__MSImmutableLayer_MSImmutableModelObject_MSModelObjectCommon56no_MSImmutableShapeGrouppqrstuvwxy:_MSImmutableShapeGroup__MSImmutableShapeGroup_MSImmutableLayerGroup__MSImmutableLayerGroup_MSImmutableStyledLayer__MSImmutableStyledLayer_MSImmutableLayer__MSImmutableLayer_MSImmutableModelObject_MSModelObjectCommon}~kigfdu j_$DAC3DCCA-DB91-4AE9-95A0-ECFAFB8C85ED0 h3#@H#@0Yleft lineABCo!nrlKLMNOQ#@@4mZ{0.5, 0.5}M0I 3pbcMdeg9 qklmnoq83secMq=tklmnoq€8#?vȴ#?vȴ#?vȴ3ŀv#xz {cwV_$3F6D8E6C-5612-4747-9D7D-382CBDEDE7250 y3236|b3老}<=>?@ABD]~_*{-0.41862043297562168, 9.8333333333333286}_*{-0.41862043297562168, 9.8333333333333286}X{0, 0.5}<=>?@ABD]_{-0.40259041002419205, 28.5}_{-0.40259041002419205, 28.5}_{0.99033806835804161, 0.5} d _$804BAC6D-4B23-4065-B5AD-60331183FC790 32#@L#@?Xleft endABC"#$‏!KLMNO'Q*#@4Z{0.5, 0.5}M0I 32bcMdeg69 klmnoq83;ecM>q=klmnoCqDE8#?vȴ#?vȴ#?vȴ3HKLQU# cV_$4E902C2B-F0B3-4434-9F5F-C986E70D15E00^ 3223e6bi3k<=>?@ABDopq]_{-19.5, 0.21344866071428573}_{-19.5, 0.21344866071428573}X{0.5, 0}<=>?@ABDyz{]_{-19.5, 0.87636622643108242}_{-19.5, 0.87636622643108242}X{0.5, 1}d _$BC1E7926-F05E-442E-92FB-7983BE2F78590 3#@#@.]left end copyABC !KLMNOQ#@4Z{0.5, 0.5}M0I 3bcMdeg9 klmnoq83ecMq=klmnoqȀ8#?vȴ#?vȴ#?vȴ3ˀ# cV_$E1B65A42-996C-487C-A589-E0D56AC1D2F20 3#@#236b3<=>?@ABD]_){-19.499999999999964, 0.2491629464285714}_){-19.499999999999964, 0.2491629464285714}_{0.49999999999999911, 0}<=>?@ABD]Ā€_*{-19.499999999999964, 0.91208051214536812}_*{-19.499999999999964, 0.91208051214536812}_{0.50000000000000089, 1}   ˀǀƀd ʀ_$7AE4361A-0E0F-44CA-9EB1-3BCB0AFD18C00 3!2$#@J#@m_left end copy 3ABC'*+,π!΀Ҁ̀KLMNO/Q2#@4Z{0.5, 0.5}M0I 3:bcMdeg>9 klmnoq83CecMFq=ԀklmnoKqLM8#?vȴ#?vȴ#?vȴ3PSTY]#؀ cV_$47E1C37C-146B-4D82-9967-207721AC79340f 3223m6bq3s<=>?@ABDwxy]ހ_{-19.5, 0.20010811941964296}_{-19.5, 0.20010811941964296}X{0.5, 0}<=>?@ABD]_{-19.5, 0.82159333727914019}_{-19.5, 0.82159333727914019}_{0.5, 0.99999999999999989}d _$C009659C-FC6A-4F34-856F-8E66FE35695D0 32#@J#@k_left end copy 2ABC!KLMNOQ#@4Z{0.5, 0.5}M0I 3bcMdeg9 klmnoq83ƀecMq=klmnoqЀ8#?vȴ#?vȴ#?vȴ3Ӏ# cV_$830A5073-F076-4FB5-A8FA-E172CB2E280E0 32236b3<=>?@ABD]_{-19.5, 0.23359026227678575}_{-19.5, 0.23359026227678575}X{0.5, 0}<=>?@ABD]_{-19.5, 0.85507548013628298}_{-19.5, 0.85507548013628298}_{0.5, 0.99999999999999989}  O   _$6DFE9F34-2F91-41FA-8F02-870500792C290" 3&)#@K#@YUarrowC.! KLMNO1Q4#@)4 Z{0.5, 0.5}739/=>@ADGd _$C0AB70DA-03C7-4669-AF84-11BD85406CDE0R 3XXY#@>#@6VPath 3ABC\_`a!KLMNOdQg#@4Z{0.5, 0.5}M0I 3obcMdegs9 klmnoq83xecM{q=klmnoq8#?vȴ#?vȴ#?vȴ3 #"$ %c!V_$956AC2A4-C1D4-4DCD-9F52-64AC96FDBEED0 #3XX236&b3)'-<=>?@ABD](((V{0, 0}<=>?@ABD],*+_{0.99999999999999978, 0}_{0.99999999999999978, 0}_{0.99999999999999978, 0}<=>?@ABD]...V{1, 1}5310d? 4_$698D1EA6-EC50-4418-9655-2ED7A37491DD0 23# VPath 4ABC9!8<6KLMNOQ#@47Z{0.5, 0.5}M0I 3:bcMdeg9 ;klmnoq83=ecMq=>klmno q  8#?vȴ#?vȴ#?vȴ3@#BD EcAV_$34E7A20F-485A-4517-AA1A-1A1066792C4F0$ C323+6Fb/31KG<=>?@ABD567]JHI_{0.99999999999999944, 0}_{0.99999999999999944, 0}_{0.99999999999999944, 0}<=>?@ABD?@A]NLM_,{-0.010764778180457379, 0.96625685242139769}_,{-0.010764778180457379, 0.96625685242139769}V{0, 1}56GH_MSImmutableLayerGroupIJKLMNOP:_MSImmutableLayerGroup__MSImmutableLayerGroup_MSImmutableStyledLayer__MSImmutableStyledLayer_MSImmutableLayer__MSImmutableLayer_MSImmutableModelObject_MSModelObjectCommonTUWX[^VTRQdi U_$72D101FE-82C8-47C6-8600-F7A9C1BD8F990i S3mppq#@4 #@^#@QVcircleABCtwxY!\WKLMNO{Q~#@@4XZ{0.5, 0.5}3ZbcMdeg9 [klmnoq83]ecMqXgradient^=_klmnoq8#?#?#?_shouldSmoothenOpacity\gradientTypeTfromUstopsRto\elipseLengthh`agX{0.5, 1}3ebedcdklmnoqq8#?,56_MSImmutableGradientStop:_MSImmutableGradientStop__MSImmutableGradientStop_MSImmutableModelObject_MSModelObjectCommonedqfdklmnoqq8#?vBY $X{0.5, 0}56_MSImmutableGradient:_MSImmutableGradient__MSImmutableGradient_MSImmutableModelObject_MSModelObjectCommon3ƀj^_hasConvertedToNewRoundCorners[fixedRadius nklvo U#@S_$A1B1B238-46F2-4F14-8140-39A5105430910 m3pp236p b3[NS.object.3rqut<=>?@ABD]((#@S(<=>?@ABD]ss#@SsV{1, 0}<=>?@ABD]..#@S.<=>?@ABD???]NN#@SN56_MSImmutableRectangleShape:_MSImmutableRectangleShape__MSImmutableRectangleShape_MSImmutableCustomShapeLayer__MSImmutableCustomShapeLayer_MSImmutableShapePathLayer__MSImmutableShapePathLayer_MSImmutableLayer__MSImmutableLayer_MSImmutableModelObject_MSModelObjectCommonklmnoqqqq8"M#$&'^thickGridTimesXgridSizey56)*_MSImmutableSimpleGrid+,-./0:_MSImmutableSimpleGrid__MSImmutableSimpleGrid_MSImmutableBaseGrid__MSImmutableBaseGrid_MSImmutableModelObject_MSModelObjectCommon2305TbaseVguides {5678_MSImmutableRulerData9:;<:_MSImmutableRulerData__MSImmutableRulerData_MSImmutableModelObject_MSModelObjectCommon2305 {56AB_MSImmutableArtboardGroupCDEFGHIJKL:_MSImmutableArtboardGroup__MSImmutableArtboardGroup_MSImmutableLayerGroup__MSImmutableLayerGroup_MSImmutableStyledLayer__MSImmutableStyledLayer_MSImmutableLayer__MSImmutableLayer_MSImmutableModelObject_MSModelObjectCommonPQSTVWY]_a   }  _$DBFB1402-D4FF-4188-9378-7189ECFFACDB0l 3opq !"#v*()#? !0#2*,) !"72*(.:=>#@v@^nearley-purpleABC!KLMNOPQ4Z{0.5, 0.5}3bcMdeg#?9 klmnoq8#?l#?l#?l3ecMq= klmnoq8#?vȴ#?vȴ#?vȴ3[NS.object.7[NS.object.4[NS.object.6[NS.object.3[NS.object.5Ɂ}9d D_$EC9ADD93-8817-4282-A650-EC771D6D9B620 3׀AC!KLMNOQ#@@4Z{0.5, 0.5}M0I 3bcMdeg9 klmnoq8#?UUUUUU#?333333#?UUUUUU3# cV_$432385DF-758A-4053-9A72-EC072F682E120  3236b3<=>?@ABD]_({-3.715004485310605, 4.9166666666666661}_({-3.715004485310605, 4.9166666666666661}X{0, 0.5}<=>?@ABD'()]_){-3.7000246692083416, 14.249999999999996}_){-3.7000246692083416, 14.249999999999996}X{1, 0.5}12458d j_$3387CA42-F892-4F75-885B-2BED2DF2E1A50F 3ACMPQ!KLMNOTQW#@@4Z{0.5, 0.5}M0I 3_bcMdegc9 klmnofqgh8#?UUUUUU#?333333#?UUUUUU3knotx# cV_$96CF7677-05D8-4EB0-AD62-9B6A46B65A460 3236b3ŀ<=>?@ABD]ā_*{-0.41862043297562168, 9.8333333333333286}_*{-0.41862043297562168, 9.8333333333333286}X{0, 0.5}<=>?@ABD]ȁƁ_{-0.40259041002419205, 28.5}_{-0.40259041002419205, 28.5}_{0.99033806835804161, 0.5} ΁ˁʀd _$FBE6817F-5437-4FBA-9407-5F2491428C8E0 32ACҀ!сπKLMNOQ#@4Z{0.5, 0.5}M0I 3ԀbcMdeg؀9 klmnoq݀8#?UUUUUU#?333333#?UUUUUU3#؁ cV_$C82AB035-827E-4D95-9B0B-EE5B8718155D0 32236b 3 <=>?@ABD   ]ށ_{-19.5, 0.21344866071428573}_{-19.5, 0.21344866071428573}X{0.5, 0}<=>?@ABD   ]_{-19.5, 0.87636622643108242}_{-19.5, 0.87636622643108242}X{0.5, 1}     "d _$1922C290-D705-4AE9-B632-CEDC6EAB1AC00 0 3 6 7#@#@.AC 9 < =!KLMNO @Q C#@4Z{0.5, 0.5}M0I 3 KbcMdeg O9 klmno Rq S T8#?UUUUUU#?333333#?UUUUUU3 W Z [ ` d# cV_$46A5F7C6-EF5B-4D3D-9585-E2864E5E4F6C0 m 3 s t#@#<23 v6b z3 |<=>?@ABD ]_){-19.499999999999964, 0.2491629464285714}_){-19.499999999999964, 0.2491629464285714}_{0.49999999999999911, 0}<=>?@ABD ]_*{-19.499999999999964, 0.91208051214536812}_*{-19.499999999999964, 0.91208051214536812}_{0.50000000000000089, 1}   d ʀ_$93FD771A-BEAD-4B6E-A744-449FB066D9890  3 2$#@JAC   ! KLMNO Q #@4Z{0.5, 0.5}M0I 3 À bcMdeg ǀ9  klmno q ̀8#?UUUUUU#?333333#?UUUUUU3 π   # cV_$57830079-DDE7-42FD-BF25-9D5870F2A8AA0  3223 6b 3 <=>?@ABD ]_{-19.5, 0.20010811941964296}_{-19.5, 0.20010811941964296}X{0.5, 0}<=>?@ABD  ]_{-19.5, 0.82159333727914019}_{-19.5, 0.82159333727914019}_{0.5, 0.99999999999999989}   "!d) _$4CCD3BCF-0560-4664-8F37-D98C4C0FC3B40   3 #2#@JAC ' * +&!%#KLMNO .Q 1#@4$Z{0.5, 0.5}M0I 3 9'bcMdeg =9 (klmno @q A B8#?UUUUUU#?333333#?UUUUUU3 E* H I N R#,. /c+V_$EC55C716-A411-4EC6-9FF5-1BA542E460690 [ -3223 b60b f3 h51<=>?@ABD l m n]423_{-19.5, 0.23359026227678575}_{-19.5, 0.23359026227678575}X{0.5, 0}<=>?@ABD v w x]867_{-19.5, 0.85507548013628298}_{-19.5, 0.85507548013628298}_{0.5, 0.99999999999999989}  >=;:O A  _$F715C42D-6E79-464A-946B-85078B229F8F0  <3&)C !?KLMNO Q #@)4@Z{0.5, 0.5} 3 _B   GGFDCdQ _$8E1073D4-1A90-4B68-9C3B-B4E99F62EF690  E3XXYABC  K!JNHKLMNO Q #@4IZ{0.5, 0.5}M0I 3 ۀLbcMdeg ߀9 Mklmno q 8#?UUUUUU#?333333#?UUUUUU3 OecM q=Pklmno q 8#?vȴ#?vȴ#?vȴ3 R   #TV WcSV_$A36F3474-5B57-4B02-A7F6-73594EABB1920  U3XX23 6Xb3   ZY^<=>?@ABD](((<=>?@ABD # $ %]][\_{0.99999999999999978, 0}_{0.99999999999999978, 0}_{0.99999999999999978, 0}<=>?@ABD]... 4 5 7 8 ;dca`dn 4_$BD841886-70AA-4383-86DF-0FDC87CD7DA30 I b3ABC P S T Uh!gkeKLMNO XQ [#@4fZ{0.5, 0.5}M0I 3 cibcMdeg g9 jklmno jq k l8#?UUUUUU#?333333#?UUUUUU3 olecM rq=mklmno wq x y8#?vȴ#?vȴ#?vȴ3 |o    #qs tcpV_$6520A325-4471-482D-A8BE-9E096BF787F20  r3 #= 23 6ub 3 zv<=>?@ABD ]ywx_{0.99999999999999944, 0}_{0.99999999999999944, 0}_{0.99999999999999944, 0}<=>?@ABD? ]N{|_,{-0.010764778180457379, 0.96625685242139769}_,{-0.010764778180457379, 0.96625685242139769}  ^~d U_$99FE0EF5-4A77-41DC-8755-BA0E40E590FF0  3mppq AC  !KLMNO Q #@@4Z{0.5, 0.5}3 bcMdeg 9 klmno q 8#?UUUUUU#?333333#?UUUUUU3    ^  v U#@S_$489004C8-94D7-412B-B400-7C8F2CF97B480  3pp23 6 b 3    [NS.object.3<=>?@ABD ]((#@S(<=>?@ABD "]ss#@Ss<=>?@ABD *]..#@S.<=>?@ABD?? 2?]NN#@SNklmnoqqqq8"M#$&'y2305 {2305 { C D F G I J L P R T     }  _$D606694F-A175-4209-BCCC-6FF7C10EF05C0 _ 3 b !"#q*() h k#@uP#@WWfaviconABC n q r!KLMNO uQ x#?4Z{0.5, 0.5}3 |bcMde ~g #?9 klmno q 8#?l#?l#?l3 ecM q= klmno q 8#?vȴ#?vȴ#?vȴ3 Ɓ   d 4_$3186A554-E02C-4D17-ADCE-2A5A075235E10  3 #@#@#@#@ABC  !KLMNO Q #?4Z{0.5, 0.5}M0I 3 πbcMdeqg Ӏ9 klmno q ؀8#?UUUUUU#?333333#?UUUUUU3 ۀecM q=klmno q 8#?vȴ#?vȴ#?vȴ3    # cV_$92D3717F-C16D-428A-99A6-9D8FB94411C20  3  #@23 6b 3 À<=>?@ABD  ]s_+{1.0714285714285714, -0.071428571428571438}_+{1.0714285714285714, -0.071428571428571438}<=>?@ABD?  ]Nā_*{-0.14399558981683408, 1.0999115490650031}_*{-0.14399558981683408, 1.0999115490650031} " # % & )Gˁȁǀd _$15F46203-FD62-4DE9-A520-F575A8F775550 7 3 ; > ? #@#@#@ABC A D E Fπ!΁ҁ̀KLMNO IQ L#?4Z{0.5, 0.5}M0I 3 TbcMdeqg X9 klmno [q \ ]8#?UUUUUU#?333333#?UUUUUU3 `ecM cq=Ԁklmno hq i j8#?vȴ#?vȴ#?vȴ3 m p q v z#؁ cV_$7919EEF9-71F1-4121-8452-6B43A06741F60  3 #@#@23 6b3 ށ݁<=>?@ABD](((<=>?@ABD ]߁_{0.99999999999999956, 0}_{0.99999999999999956, 0}_{0.99999999999999956, 0}<=>?@ABD]...  ^d U_$6E729CCD-776D-4F1A-B3D9-471F2EA8866F0  3 ABC  !KLMNO Q #?4Z{0.5, 0.5}3 ـbcMdeqg ݀9 klmno q 8#?UUUUUU#?333333#?UUUUUU3 ecMq  =klmno q 8#?#?#? hX{0.5, 1} 3 ed dklmnoqq8#?,edqdklmnoqq8#?vBY $X{0.5, 0}3 ^  v U#@@_$ADEBCB92-E413-4464-BA81-776FDA82BAC80# 323*6 b.30123[NS.object.3<=>?@ABD9:]((#@@_{0, 0.49609406789143878}<=>?@ABDB]ss#@@s<=>?@ABDJ]..#@@.<=>?@ABD?QR?]N#@@N_{0, 0.51171779632568359}klmnoqqqq8"M#$&'y2305 {2305 {2305 {2305 {56hi_MSImmutablePagejklmnopqrs:_MSImmutablePage__MSImmutablePage_MSImmutableLayerGroup__MSImmutableLayerGroup_MSImmutableStyledLayer__MSImmutableStyledLayer_MSImmutableLayer__MSImmutableLayer_MSImmutableModelObject_MSModelObjectCommon56uv_MSImmutableDocumentDatawxyz:_MSImmutableDocumentData__MSImmutableDocumentData_MSImmutableModelObject_MSModelObjectCommonZMSArchiver}~Troot"+5:?ag #0<IW`bdegilnpqsuwy{#29AJOQZ\^cen   3 8 : C H Q n y  * 9 [ ~     . = Z x  1 D j  6 L U a c e  4BXo !"$%')+,./1Xmx3Ibd{0FQ[oqsuw"$'   8MNPRTegikm $?Xn)17<>@BDFHaht~0I_hjl!,?Sl#:Rk(1:Qd{*O[gs /124679;=?@BCDFHIJKMt !#%'@IKLNYn|*B[qz|~ ')+z$18ACDFSUWYz ! * 3 K V n ! !9!B!K!b!m!!!!!!!""8"K"_"x""""""##(#A#[#n###$$$$$$$$$$$!$"$#$%$'$($)$*$,$S$h$i$k$m$o$t$v$$$$$$$$$$$$$$$%% % % %%,%.%/%1%:%<%>%W%Y%Z%\%q%s%|%~%%%%%%%%%%%%%%&:&;&=&?&@&A&C&D&F&G&I&J&L&M&O&Q&x&&&&&&&&&&&&&&&&&&&&''''''4'a'j''''''''''(O(Q(R(T(V(W(Y([(](^(`(a(b(d(f(g(h(i(k(((((((((((((()))))))!)#)<)E)G)H)J)U)j)l)m)o)x)z)|)))))))))))))))** ***%*'*)*x*y*{*}*~**********************+++++++++;+<+>+@+B+D+E+d++++++++++++,],_,`,b,d,e,g,i,k,l,n,o,p,r,t,u,v,w,y,,,,,,,,,,,,,,-(-*-,-.-0-2-4-6-O-X-Z-[-]-h-}--------------------....&./.8.:.<........................//////'/)/*/,/9/;/=/?/`/a/c/e/g/i/j/////00000050b0}00000000000000000001141517191;1@1B1[1d1f1g1p11111111111111122222222+2-2.202E2G2P2R2T2y2{2}22222222223333333333333 3!3#3%3L3a3b3d3f3h3m3o333333333333333333344"4C4D4F4H4J4L4M4l4455 5 5 5555555555555 5!5#5J5_5`5b5d5f5k5m555555555555555666 6 66+6-6.60696;6=6V6X6Y6[6p6r6{6}66666666666666797:7<7>7?7@7B7C7E7F7H7I7K7L7N7P7w77777777777777777777888888'8F8O8p8q8s8v8y8|8}8889+9-9.919495989;9>9?9@9C9D9G9I9J9K9M9t999999999999999999: :::::%:2:5:7:::::::::::::::::::::::::::;;;;!;";+;4;;;d;g;i;k;n;q;t;v;;;;;;;;;;;;;;;;;<<<<<<:<<>>6>W>X>Z>]>`>c>d>k>>>>>>>>>>>>>>>>>>>??(?)?+?-?0?5?7?P?R?S?\?c?????????????????????@@@@@-@/@8@:@=@b@d@g@i@j@@@@@@@@@@@AAAAAAA A A AAAAA;APAQASAUAXA]A_AxAzA{AAAAAAAAAAAAAAAABB"BCBDBFBIBLBOBPBBBBBBCCC3CMC`CtCCDDDDD D DDDDDDDDDD D!D"D$DKD`DaDcDeDhDmDoDDDDDDDDDDDDDDDEEEE EEEE"E;E=E>EAEVEXEaEcEfEEEEEEEEEEEEEF FFF"F%F2F5F6F9FS?SBSWSYSbSkStS}SSSSSSSSSSSSSSSSSSTT(T)T+T-T0T5T7TPTRTST`TcTdTfTsTvTxT{TTTTTTTTTUU)U*U,U/U2U5U6UbUUUUUUUVVVVV V V VVVVVVVV>VSVTVVVXV[V`VbV{V}V~VVVVVVVVVVVVVVVVVWW W W&W(W)W,WAWCWLWUW^WgWiWlWWWWWWWWWWWWWWWWWXXXXXXX!X:XZ@ZCZHZJZcZeZfZZZZZZZZZZZZZZZZZZZZ[[[[[)[+[4[=[F[O[Q[T[[[[[[[[[[[[[[[[[[[[[\\\ \"\$\%\2\5\6\8\E\H\J\M\n\o\q\t\w\z\{\\\\\\\\\\]].]7]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^'^0^U^X^Z^\^_^b^d^}^^^^^^^^^^^^^^^^^^^______m_n_q_t_u_v_x_y_|_}__________________``````!`$`&`)`J`K`M`P`S`V`W``````````a%aRamaaaaaaaaaaaaaaaaaaabb)b*b,b.b1b6b8bQbZb\b]bbbbbbbbbbbbbbbbbbbbcccc c c"c+c4c=cFcHcKcccccccccccccccccccccccddddd)d,d-d/djAjLjYj\j^jajjjjjjjjjjjjjjjjjjjk kkk!k#k&k+k-kFkHkIkrkukwkyk|kkkkkkkkkkkkkkkkkkkkllll'l0l9l;l>lclelhljlklllllllllllmmmmmm m m m mmmmms?sBsEsFsIsLsNsOsRsSsTsWsYsZs[s\s^ssssssssssssssssst ttttt%t.t0t3tLtNtOtRtgtitrt{ttttttttttttttttuuuuuuu7uLuMuOuQuTuYu[utuvuwuuuuuuuuuuuuuuuuuuuvvvvvv#v&v'vHvIvKvNvQvZv]v^vvvvvvvvvvvvvvvvvvvwXwZw[w^wawbwewhwiwlwowpwswvwwwxw{w|wwwwwwwwwwwwwwwwwwwwxxx"x$x%x.x6x[x^x`xbxexhxjxxxxxxxxxxxxxxxxxxyyyyy8y:y=y?y@yUyWy`yiyryyyyyyyyyyyyyyzzzzzz z z z zz6zKzLzNzPzSzXzZzsz|z~zzzzzzzzzzzzzzzzz{{{{ {"{+{-{0{I{K{L{O{d{f{o{x{{{{{{{{{{{{{{{{{|K|L|O|R|S|T|V|W|Z|[|]|^|a|b|d|f||||||||||||||||||||}} }"}%}(}+},}Z}}}}}}}}}~~o~q~r~u~x~y~|~~~~~~~~~~~~~~~~~~~~~~ <?ACFILNgprsv-/245JLU^gpruĀŀȀˀ̀̀πЀӀԀր׀ڀۀ݀߁ #(*CEFOXehik|~ցׁف܁߁4UVX[^abÂĂǂʂ˂΂тӂԂׂ؂ق܂ނ߂  "$',.GIJortvy|~؃ڃۃރGJLNQRgir{ĄDŽɄ̄ل܄߄ ')2;DFIDž +-.;>?AVbdgjmp† #,/0QRTWZcfg͇χ҇߇(:Me~Ĉ؈*5Ojnearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley-purple.png000066400000000000000000000054141376321042600255510ustar00rootroot00000000000000PNG  IHDRP}gAMA a IDATx]M,Z+B|G!FsEqI2hP '?9DD2!bm6-vV$QcKQd@ v/!ƹ#@^nW75gf{fvOWUo<''''''''''''''OrZ.O|VIyV]/wҫ=O+ȻyCWG߫UY6B# ܀KBڷK;:=r.cFG^=30xݖg12L '&S602rd!=P"#&'w~XDyѷ p H,Ba ߗ?ywW 7[@|l5_0ЮmԹ~sO AE4r[ 0MD\}G|u^Qzϧ<:Bn~Ahu x9~FυV6T*7Ium Bnz]gmg>E?F[4tIՇO(6 R]'ܑ+uE'=oϧ^m\~FϻKyzuV&5< E{~6Vk xXxFpw#>)׀ z {އ]Bbiwz~JO0-d)yާbŕ7״ @-!zm^8˧9W^T+|4o: Fl^Xkj?xw}G_j+oąl mۡWC7Z_J|(z4i۝7> w C 6X 8 1 VەO 'W<;k a:6ۜ|vBP?cAg3}mذo0>oy77YqE8qSyfr*zssh}owq,{ja}a.xIʕJǡM#d7:yݤ40C?Jz}z ؒ\\G,ݿn.9,6?ͬ_ZНߩ\ RiU.bOɬw`b}Hu }2VoO56ei*% @wjffq7>eSoX@J1,vra`ߗNjZ`jʓ& #itB+Η _P?ƅ5zGbV[ϴ| c>v:Pmن3tS }zDVʧ x" 3/,gtʯ9聑8&:l>7:9GUG?JWx7^豶цbo䘠}9oHvjWgzR|=K kmЖ7a7FbG iy*_Av^\m \v=QQ J36{Apn,0o=(r| =VVHҸ`^ -9:)R.plyi1t t﷛TtAyP ŎShk `_׭T@Z,&O-37|U:5oZybVf5X@kxyR*Cs~뽯Y("w(Fꐰ|J>WHAt]G(B7u5KQ~x4.|,.7^tڹ׋ #9rD_R3UM4[*z(/+6>ÆF ToTfl:,HۆqnG4xCqo52:5<4m`$`'oj\Ĉ{!yR;A i]: 7#滞A,0 ac(HQYlޡrlG+^"L)dhS8\r/pQz\ bx_CP;=[iXa>•:gH@<5oyĭ5&`ڪehax9VgxK(1ju < "V<M< >>'ncwC}j3]|~ PF(Idl1)Z; v?E nl$8T?lԍ詾w?I@pdoB tl\"8\܏Gsp|<>?ϓIENDB`nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley-purple.svg000066400000000000000000000026271376321042600255670ustar00rootroot00000000000000 nearley-purple Created with Sketch. nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley-purple@4x.png000066400000000000000000000375401376321042600261320ustar00rootroot00000000000000PNG  IHDR@ gAMA a?IDATx uz!eɑ!C ;mJ @Z'cmG|HgaElKD016Ȓ%}L/,H}̭9twݺunWUWy?$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$@$095%HU|Ԇ}tkf(O{O<Պ M݌M+ߦdz̷RAy^~ ^sw~HH y$f8c GsПF Ōn,B`T4hk;}W0w8fݘ= LH jr[Gx'9x?z=Q$Q--M?\v z!p@2Kફz X^' }Ltѧ0ԠC6|oknwi,)DI V!1&xJM(<YmS  (024|~)J \RbqٯjI ` (%$`[U(݉?dA.ƶM2oC$P!U*P՘ɯ F0i"ao}|s MveY$H1mjttzvڻ ) 28v,\ۻ1N dLM`5g ->߇Tv^{%Ƿz uƆ\4xPy~dCͥRihh2 $x: ;rfLS/k7lXL" @I RDyK|f9ILp6.xBxCY(ٺl2qZ~ \SCK]xo)nhU޷Cmx7DEg=J|Γ> miG]؟ĻbTB% TF z0]^e]~|v7-{*-[?곆 \2eu0 Pyr5M? tۗBᑆ;)n@1kfm/[Z{:eCPn얈^M==۲bpM.`uf@#vם 0;)*  y[j-#q%pG CW}RnSfk vy+3OSx;l։@8K I+V|9N=7 E@Xd)76 o: )xnR =ܠ>+T6^Z –b#fcc !2H \B|t%BiV(OkУpy'TɐGJa"a,=]73!t`;fhL7 pf!E4l]PFpo9W6u=VKa`6a@˿S߄ B8j=w ^qy 6x a$hHaԅv}Cg6V 0¢ x)F7ݍ,C.ݡ!34`& z~rjIk.1C! 1 }7GAOv?SG8m{y9譹=Eo'u"I--#?UN2LY&wpk<]vyl[یm1JO6ud`!%DgYan5k\iB*:HSK Pͬ,ƐY0oP2P` C;} ck6k.plTcsc{x zBY]SM]vu.dΖ7n7 ^:wr5oqXJRJwΝ Թp!,K`P5 @jhx}eS" TG=qU wZkue).ۻoA2O4@"'%IO)okWOm13uԭ : R& 0xSoomfWc(3a {庥?Tk60aS*edr]$`O>jS&oؔKY$0Ν yA#;w>s-|ε"3xWsϊۑG)$ SgM|~m'G}nٷH08z`VF{#VF{X̿X\ @>7|FXe|y6 yA`H {޴,*GQ$i7`{62.ホ 1`%BO:Wbp|c,dCe@\LF؂r}R(I a4'3~eQ Acb(j \"䜁uQ:jTHO7B[;d\b@N[C]9;(%,D? {/ë-AʑUB?Wo_ڮ;ڴu ֜1<׹\CۦMKˢp@g睧Jxѿ-P=P,v]&~ q< Gceͨȱ6Vwǖ-={!olD$UCy{BCbA)?'2O%\ɿ/ԓqi8Rp$)giLS={ߥ @(uc *.%q"Ç^q*c;O939ss%8^RAQ^mˢ1Og{fpn@1=xBuaX0^{ڥGR̒T&՜ L 0L$/4 6tWJe/'iѵ&8$ƿL5"`׌.[[KSMݷ.}Ҏ4Iwٲy2fdfP"Cv$4~ww"h 7}Z7z1F?ǿ}:9<]=eAϭ7=elٻj=ɺPpz+BǞHK܂ J,I`$`+Ŭ= R5pۄu*Ӈ^ſL eQf l]KeLŘ`(;pLS&`F!A>Z.C >^qg! 3hr{%rױ`Tʸ}<,{~CYR9Ln m_q::/FF ӿnO[<Ƀ $`-Ʋ&T92 "Č<{_,0sT+4?K+U&aĭ9:\aAoD"L׷f m_fDixi6|把;]P*fή"xhuηum` TƐ?Q}\Kxħ9+wo8 -rЎW ISL=)6hhůA*L>l' ߱Ók+J@R-aAwȲQ16}LSj-j|PƗi& mJ<=n>16}Xi|P)ÃWGH 0;}j `T`_9ܗkל)@@􄗄R NAjOyt XoO}gl_!%:OקSԚ)5pffVC5`4`/ܗ4^1> K< 0n8O¬e2: ˭X%B#=ĪQ>ׄz;c#I'ߎ˾ˤKʾ-" ]Pf $6۵OmQZ 0H+FaWAID6MU)0׌L@Zt@CQB'r%>T! %3htꪻ^ Gg b&̟c"~ߚ fio`t`.{J30pX) n2L( m 1cXGdJ VN2l?}K7|TєDC@4pQSƇ É(,BU U]Po|H-y 4 >wTO>ɷHol(A` @s`f`bVS|o*n}xrO,'4    `P7.PL11174cG0ȜGXeIw"`K!hZCiRÛҡLOC2`Y {H[i%0O<+=X4@>I-Kq`y[|Ok5Ö&L i7ZKo+ZFTGE:|de(0yP/9\<66c@I!I}?Ȩ( FOS@d"OS܂|8x q ۟|~Sø2 |#YɁ1ɛ}&iY|jL$@jF{5`pkFỌȑt t @0  {Λy8o"A5̮vlm{^EDA9yr%ڗF}2 cA,C- Ԃ,6 &@}/Fr\E(!#wB qs`jpY"?KfYI@Na%4e g"ׁ9te ]4--#ϔC182󃾗SVP͆R)ǧMp`i305z^b`)RH'Va֟4J d빡;7X-b@ ctDz,ߎ$i0H7鎩zuUPOB^Fc`0&R{W ul-@L^J c1b̻ ǹH4qrp> ZBQoZ#̄j#թ(=b_?K$_ *ӲԞWIs 9~ţ0Y&W֊=Ue*$ׇ^U_Rߓ~4d.a`&MDON@1"cM˩hcNˤ1i'29WLh+}IL.X!F0Hyjf:k6ǛwƮ~3v rIt$wux${)Iϴc`?6sTkxngԖrǓ[{RO6=jo0x=}f"ϔg ?G41> ?߸朹\[Ns-=' K u`xΟZ &`_]U0 z_ߊb\ N3;1s\ƿsSQֺ?| ίjaJzKHz3]kBe\LvI }M>$߆(v |r6U_^ %91蜚,ƔDkω|>2P 0o2}hבΖrZ6Y~eϊnׯ9SDKֈI~Jf$;'t(EAwU` %AаCXwrE /=@ꞴkYctd`LYպ]8 9YJ?Kֶ_V 6PyQb0HQP;՞IoFj6ٰszjI`ྍ" ԅ(L'xN.5;0KWR- ,f}R Dw׏%vbMgWqB~g e29T5BU|l$s .ɞi"!cĩJKK18 0 Q@SD@cj"58%Đb]elLD>]˞nFcQj/w*wMл G $&?@ٷ;Q >^Cnu \PiaNPd?Z-?z>y3 TSV橏$`Ie$9=$[mm wZhڻ/q ƙ Ly650&Cny`ʫ!7o6>>x 4DEMfD'?ם2ubG. dlC$eRJt$wuNLFROm٧ap/ɝi]$EĪ41f,#CW&~j6( }I ߮Q)v 0E2ErU(TOQw(xw=jO;E@]ҝH %Z͗w9->0ySV*SOC`p,bq2s}^G8fIRe B1L6 fQk}RQZ/p)= ]lzAZe{1Hah4Jd+ȎwIJl|X$26׶K^xzHd@6Z(^_WR}˯$0B ~A@Y]cN!61U B^(uW 0p2襵o*f]|Jƿ*L(eET|X(J@Z-k\_AXP'Rl#̎'`gy@r9g ;yi>#},\յ?Qa\pc 6J\*-%ߕ`q\Pmef"3r]OeD#a~Xy!?m9[.'\ ?B.lC6wL 6+& R\N eH& ҫd&u]oa!t 4notu+„ظq/x51yGǪ7[R~e[Vq7kiErY"ȴQK2np*6lC5U}C礥mRL  agq){{~}K TNҳO\Q >GJ0}60ȆXxMCCVf9[)BqClk%& ,YЂ"A@"䆒XTAL|Jrw]/Z/hΙ75~,o.)(-8:}t{ ݸֻ "iXzOHn7:0}+]=X5]"I;"S"Cv$T}g%-xΝ=mT,.݉^G-I_r0>i|S*'%pI#OEgB &>)I;"Y"Cv$T}%ܰnS(}39َ,{RO>iߩ^j&t^'^:r7MR&Cr(!I;g-DwCS"Cv$4~umY m#tbi&@ԅb~@9xNje>R;( PҜb(H.ɵ3H<`(4םL l괩1$5f|$`B֙7@>ߍM}bc2\LfvRJ 7~v٣]ؐE$x|َ@v;(!Pö9ψ,sA q (ץXeG]S-*^Ee l>{aBvDk}hȣ7>Uhg. 9ٰsēϛ1Ky;XG1]p8҂03z޾ H~\XKoCKJܨ,d 0[PE$.SGM]VJIWwI֌@e<ӖM 7[( `ꨩdo}ɞDJ" FH:Ɩǖ`XwbK吀Mn:jQ枊YIQ$*_ lذpf ӖhlCQ `ꤩ6dg%rH`4,R G]n&Y{OYmk{3;w>dxS2 TGk/@\MzuU"XeTY '#ރ}[UP&m[2)j%n^ߏ/F@_Z$P BE|#~.c$p&+8i" T}6_a XW:ٰ ѳyo1Er%Pso`&nI$` ):6u='TwuWP*R: /$ f̨[ o@(8 :|0n8nC]mR7ԓiH Q/竾q+_x-Er"`np-- 0 o"h)%Kԭ  6  |a ~p1NK݂BFUF~[~k.oQ&E@UTA mxi[>Mۺl˦o]bԨ}M۲)!J&4SnխpLp٭E6l3}[\zz{v7 DMs&!`n <愅QDi\gB9ZT&KjF?hf/``{cH.0uJ]`[r?nږMy$P+JׇF+Vq ^͞7 ̈́l=bB1Ѡ|jpM $>nׯ5ʃrG _wR/o@{GXڣe_ߊ%rIVAFp>XprԤ0uԉ'f__Ɖ,a'@}%X [f}PkmDΨ҅# >2z>?b3p@YV `,nzѭ\MZ۩x9wZ* e/ KʄE0J 0dP =FO2RS g;G]0ukbM" D8 X1-R[a[_,X?[/:Gԣ9"?R~5ܜ($H1md̊xEnJ7`֍+ť/GA dnS%An^.e)A;T~1|]]= 9 P(h駻#h-3 G@xl)x=A@crn4]}AЄ``S|0v[9p_R{(~BԀ!S0J%A1)#>B3mDh߿|+}a i8 xi 0HyYzYݝh(n@P0Lpl6 7R4`+ 9?>BɄBC!10QA0m=d( @ 0H~4Ji*] OGqœއ{qKxߋc{q|7ߍ1GD?                                                                                                                                TscZ:5>IENDB`nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley.png000066400000000000000000000040251376321042600242410ustar00rootroot00000000000000PNG  IHDRP}gAMA aIDATx=UWv!MlaH i2* 6Q+U@HacaM- "U,_x&3sl΁s{vgfwc#%Hd Hd Hd H{=/K/H__~6~ޓ"VP23g?[*}/|L]){nJ/ Ǟwi4}ىE̓Y˜~Uz]9}-OһR 끗U: kcU5GOL88IWяeR#=!m+}[/|0%x G~M)[obRd}C/m%=#ZA,bz`cJ p)SFtl!&0uݵXg"zGx,s0@u{>WWzݗ Ot`'u_.v9TW0ksE/ 6? ! qS?KxVY<\dM霿`4ק ]xOyt WyAn7B){}:vxnIljRWAKdԨ/m}/T8?i$`+{Qݷ?eɵoJL&B/9kW>){R=rٗ>|Os_Mۤc|#,Lt͢ll) =7:۽XK:XV:,=9aE}Z_[M;Юd gqR.-u>KOn\pzZ:"7cz)CB1m(~J#1Vz|UJjN=C ~`֧?y{Z_[M;:)ʖ:\ɽX?Dv~9KWl6~(\*yXov2}PӦ˦ /\ɽX?D'x!?] ˻%|n>_fPdo pG ;M;WP'0Vkۯ8xWm)> !k&%קT\5#-=y)tʃPf`Ui; -U>ҵ*͍\GKdꑃȾ0ذ+Ya]ǪAaHCZ\avLiIN|fI%M{jdb0|ʲ,xPNSYjI%Mu\vB?TdODG`&@D#FWGWfXls 'rKiYy ~AnFZBN) \R3qŦE'QޗNH&yҁI;k>ґc,#s$;qdo#X3O!bȒ+C 1Ej_9_$ )[jƓĨ_0-eEv0x ;ҶB#O2SUyQʄ+MRQB_oo^Wy[\6NiO%#Beb;rҕ]712a8tߐ(S2!|ɜi5, ~N5{q'濏 )@2 $@2 $@2 $@2p4cjIENDB`nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley.svg000066400000000000000000000026121376321042600242540ustar00rootroot00000000000000 nearley Created with Sketch. nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/logo/nearley@4x.png000066400000000000000000000306741376321042600246260ustar00rootroot00000000000000PNG  IHDR@ gAMA a1sIDATx{-uy\cn 2v.F1~'\pRAA+VDUY&Ld)Q\ETTMEU?&I0$X< e^P#]_r~g֞{,i3^k}Z眙sq! @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ ބ@o?cz٦z~>$o<7}nY{o<^6}S'N.7G`E|LcZ4Ќ1 ߙ>hz!M@P:1,SMKew5>QNkz>Y@ pP$Bd_lz`G/G}TDѥ{MѻG 'ciZܵ_He%[vT':I@ p0dL4O` ȱڦojzߛ" 2eb fboLsh.  ~ٮMi)~b)b+ @ ;]FMu; X?d%L@2sך,yM5 @`R_4,e0\|Ts@uSh4W @`4U@s" ('X3eᯛPs9E @tWu:e1МjnA@ @5MY@sF <ΆOTLȚ>fϟ0}|'\']G{ʟ?zbzkgkמ*O~^x ҿVZ~㦯$k]LJL>jCsL3]u{y-?Ǧk$N-> m?ejKMY+R2kr xuiѓWL?fwKk](&ŦK=!Pn(G@X=~WKY_6_3%QYX2/JKa"G.aBw'L" 1RN3*$p;s/2})& Fb%fMB @7\@tM: LqN 2\*S L"a\ Ɲf*Ӛ#o%b)bk^S- #ߴGǹ>l6dZb,9N[1@8|/ͽ(l6o4`yW)@Hb霋fK"y k.4'srN@1Mssbz)R͉Fs4W>(\0 9lFtKfzӷ"ei4gsrQ9@hcn:[fkNDCk4wsrR@bc2cs H4wC9T" rrU_Lk=s \jNƀrT@@1S/6ej#r [ߧMJ 0-My w %PnL{|!,@O@K8V~DP Ȕ9= M‚Se]65z6F@2N|;"\@/خw}vi@rF3%r 4jTﶾfcm.{(wCS(@[æS`oq_uzrH4E*U Nq`HSSjcAdb\O!N,rkoT E8ޢstwE#(ǔkW5@ ,YQ#%F`P)Rj H[T/

n"iTsʽP E4ӔL c_TTr/'ӫtmfӔ:f!L}Ojf>@SHNS;$\L @j!USb+'SfT; * j^?l*It )s]B TG&8pk)s^5@o)_mRIgՔZB TAe[Vկɝ\MWª%@h{̻MSz#rVTS-@RԯZuY)OyHfTz~/c,@ TR!#py`H妿PiP+'~ÆOu{7(өC@()ŏLSt" #Nu?jM5@N̓O'LD /TGMc깶iԒ=;`ac;A`&mxe՜jF ?a>ƺ%Ӿ>QԒ~xJ/z[)A&"WlW!qrsۏ4Q+ V[I%q.3bt[kJ  0zݯDrsәa&SQ8*<~f_$\W{jfW5ó~{u%U>z%}P;} +kc)5ϟr>շTH7̸U7=ШWr_b̩MzJ B1i9^%={(UIXKd-lWr_b9]ç砅O|xW $r,%2}olWr_Z͡~YZpw\y~,}PR̗jR&n^yrn^K9e2cK쎽ƘbkCJ'@5ZHR&{rq䶟g0Lu,5F<_7(n69{rq䶟g{^}(es1\4P&R4vϰцmlj{~bYY|xk(esZ2@PmxYFxy6Ҹgl;\`/]{=glgAAQM|۪jW/x@nπr?/@^/rq^!%ayYrڨ6T#:S"rm뿻n0YCR,n`>1KE, s鵟ng\kcx9 |aMWOՊTw t@MoUt'g?rhxM5[=sr۾wrw֒jY5@`vπr۟x7nz~0DJyTS<[1x5~c^ `}1Ͻk_ݵ(mW*1ǯUմj5Y?kU?`.4S@gO 9֔j_L;'Տ @S<+#+1^7RmyrOgB` Gc\3X-<\> c/)?Ù>s~LM[Uc] v"~3j &)wN>+TmBa@_gy=XփcOSV$8'3/sOY`gT[1xkc WcXRy[mf^dcyds9Uc?VKLʶ>m۟$ƶگW"!1blxg .f76^ qZO7PwP٧ZoEbxx9Ǝ% v~O1^>7O1՚GM߂pPddv]7(ʑe`;1՚GM߂pPddv{Pе`dX˘_oyk xQ6 CcگsY}m.!P|M 5M/vx5VNoAh^w5d7!z|s+!ά!P|E_ɮIېmd^F]c% fvz?zZmͷjM5o{lӷ2c~,pM15"LPs~/cNdwg/{5ews`tni ':pޚ;g2T6a=<4_ ;?譹cC 㱫P{msk Ai4-sP]7dP{W jm^>Clu޿+!ۼ k2QjXHl^QI#^_18=npV1(8=?-^<+wژW`և<4O8=tሳ?X-SO,ا|9t'O`~0$d?&=OMg{xy!,[U[{گnL;۽h""e_4FR_B9%bl& 4K[{Ew;ǐ-"+k>ꦬ8*#$Idec(8Ȇ~1[L$ 󪨨,q0 Ey~{jo! p" eh&/'Kco⿍2S{˘lQp b .d/k>ڛncs$b3Xj'~pR ſ joFK4 guޘ^?9u`&jI2DNؼ ;o0;m+LN06C P{~M @ӟ$xޅ$8j-W}'j)'y/:B"%Y٨N*\~ca =S7 pφ=qO8NZ"Y8^s^A N h׍yޜK.cDw_ҥ/^>vy @O;wFɻ'#yv{;~; pO8c8ٟ /_{:`c3t֞gS`Ju}pfaV%ݛ^.I [NtM3߾]!,c;c7oݢ>$g0w{ nnek~Ko}l_XZ[o0OQ%^j/AW;ҥ+!ۼ|j뵟WPCyb~;v?`o4-יdڗڧ6K\-T{}lW/]b8xƎ絟L6Bc/^s0CYY,&x__깶iRE5ɘ}K P/1 2@h}^59âE5Y,LR!.1fjaje;f~?743>dB,o5D`s;$Cw}_66;x^<8oyk9XN0 B;uo;˳?>v {NbpPTduAui,N]vǽ'ޚ sC71k9"-Gn+h2*sEŘ}$EQh}^j 4v>1'5-GB&R7Tk}u]oAbxxƎ% fvh~?qo;25պji''Z֞yz`L765oOMk{PB#ſ { Tkֺ6}#s#Ƌ+4v>Z_bݳ5n.lN@5}V$GSh}^j 4v>Zl>gäj vF?Yg݀)X_lW[&6^NcymOS;ugΈii3?oUf!sju24v>;s6I_'+_/6FC 2$IUh}^j 4v>ss6IMKſ =RܧoIBǪ}^V16BmλD|E1jk}OQ[)jlJxWM>o016Bmk9m}_-w8ոij/?b[.6^^cygd71kp 6/[}_jJWw1UۭI P/1[QosںktqQS])ՖGf%sju64v>d?mæMKy_[jbUۭI P/1 2@h}^5 s:M_}T3@`4E@_5ݢb{k% fwr`vFHC_0ޏ5&Fi@ߙMv/X;}k↣{j "j "4v>Zn ~+9Pb[>6^ncys  `%}IQC|LDX*Po\cyK1 `ooT;ٮV-*1BmBc?&Pocy| Pj;&T;ڊ٧nYbxمƎ絟L6Bcگ| PM_]~b[F6^vcygd71k9i P)~!o,sPFU ,R>/6^ F~l'HYkܺWVju c#k?{Pp1گ,}Vu_'{WQ"drU7c^(%m7<L}5~ da.A뱯W]1AfA2ӫudU?W}0_kAx}|8.F,L~.|PtАm. \¬71lH]mt9deA&O>مʣTȫl9^ x7_R[0CmxkPR<PmlתQ5Cmmq6zՂz x7_R-__0X B]j#Ɨ˭ϐm^j뵟WPCyb?`uqMw%&@glT )yDvr\j{᯺mz 71l_ZP"2-=_d_ZOj@0V&*vцnz5{Czly]_^9 Ƽ?WDæG=UȱJs,ɶ6ZD{tc8Oڦ}P+G~"M ?n*3osMU}RIn(i1mmm))8|mu_5ȟ'+?0d6ajJrOGi\fvה@`"m_5 >3^AЙPrڦSSx_3GbVv?qVJP(ǕZݧC>GiV&ykڦ}SKnS74ϛBU:.=؛r[9}92@nh\=@Fm_5@NGP;}ypi (SZS! Eha1k_Q!5jZC E6&tv6-jzqfryH~st 09wgLC!>;Cr>VC IZ*tOL/+2JvTU7-@UM,b1tPΦ1VRm!&~.owޢ#9F@ziv>Ւj  P?w~T*W,3MCN7nCP'nrtHNokB TGTam!: 8 \VB TI"::h~J8dm @j2WVMD@~ @z[7n[؇;TOj'T.mmU+"fQmQm;ݯwa\Xdr-;j XyE~[{]=XjV e(׶ 2LFd9_N6mJ}rW@ 4A!sM$9 (Rj,Հj XMWÔ7ظw@S4I!R\uU $pEoSWW=~͔l2QTy>@i`?m>JX͎@`rg=R=W`3 dসZGM/[2ҵNs*xTrͿk@cz?5טi@> c͵|5S<*g <~,hms(}&ϕm Я6‽>`z) KW97DD-!v4=Ns2WVc+7 L@@6_ ⛏2{NCNK@sۜϩ^+'Wi!7d7}+'9\i6qœM@fZL:oO"eМhn4G6krP@.6{NuE%M4 I\MM9C @ #ͦS]_50qg+N9^A@} )M7s^bLK@z9ݴRA@ F"sa̓\4ۿfIC@,TlM;)@8|t >'u"siKB @m~$c~|p3\B @B77ͱl kw~t)*qS,\ »4ǂͦsc3=t)XbSͅrC9@ +\a#ӾO饦5;|]1(\PN>Cogt7Snb_<;dCxQr=Twy|= )?6]ӟ0>B %NRd Ӝ#_uȚ>f7}bG\;]znO;;ogzwTϯUn6?iZo@HC2Fw~}Lek@'OĮ4}ДY 3|i @&~ϔh5KV@N2}h4wC 0릜@sB @I \`}Tws2PͅM@kM52N0{́ J@wM5d`ZbLŜ; @ f.\mzK a b*b@%-MKZNJLİ6WC+<>sWLc M4T? 0N&˰!ڿT_U {L[⭦Z4 0Nf ]lz`G/G$,Qkz׎m+^@ 1 mL?hؕTWk/= @ B`?T'dp~sL2)æGL>ׂ鋦 P(N ܂@$nmx' AzǮzwO>a}@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ {#t"IENDB`nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/main.css000066400000000000000000000104351376321042600225740ustar00rootroot00000000000000body { font-family: BlinkMacSystemFont, -apple-system, Helvetica Neue, Open Sans, Ubuntu, Arial, Helvetica, sans-serif; font-weight: 300; font-size: 15pt; margin: 0px; padding: 0px; } #main a { color: #55a; } #main a:visited { color: #55a; } #main a:hover { color: #259; } h1 { font-size: 1.2em; font-weight: normal; letter-spacing: 0.2em; text-align: center; margin: 0em; padding: 1em; } h1 a { color: #559; text-decoration: none; } h1 a:hover { color: orange; cursor: pointer; } #version { background: orange; border-radius: 50%; font-weight: bold; color: white; width: 3em; height: 3em; display: inline-block; text-align: center; line-height: 3em; letter-spacing: 0em; } h2 { font-size: 1.5em; margin-top: 2em; } h3 { margin-top: 3em; } h4 { margin-top: 3em; } .center { padding-left: 2em; padding-right: 2em; margin-left: auto; margin-right: auto; } #main { max-width: 35em; } #main p, ul, ol { line-height: 1.5em; margin-bottom: 1em; } #main li { margin-top: 1em; margin-bottom: 1em; } #main ul li { list-style: none; min-width: 10em; } #main ul li:before { display: inline-block; content: "\2014"; margin-left: -1.5em; width: 1.5em; position: absolute; } #main textarea { width: 100%; height: 20em; resize: none; margin-top: 5px; margin-bottom: 5px; font-family: menlo, monaco, monospace; font-size: 10pt; padding: 5px; border: none; border-left: solid 1px #aaa; } #main textarea:focus { outline: none; } #main img { display: block; margin-left: auto; margin-right: auto; max-width: 100%; } img + .caption { text-align: center; font-size: 0.7em; color: #aaa; } #footer { margin-top: 10em; color: #aaa; font-size: 0.7em; padding: 5em; } code { margin-left: 0.2em; margin-right: 0.2em; padding: 0.2em; border-radius: 0.2em; background-color: #eee; } pre code { border-radius: 0.5em; padding: 0.5em; display: block; overflow: auto; } ol { counter-reset: tutorial-counter; position: relative; } ol li { list-style: none; } ol li:before { content: counter(tutorial-counter); counter-increment: tutorial-counter; font-weight: bold; border-radius: 50%; background-color: #559; width: 2em; height: 2em; display: inline-block; text-align: center; line-height: 2em; color: white; margin-left: -2em; position: absolute; left: 1em; } input[type="text"] { border: none; font-family: monospace; font-size: 1em; color: #559; } input[type="text"]:focus { outline: none; } nav { border-bottom: 2px solid #559; background: #fafafa; } nav ul { padding: 0; margin: 0; } nav ul a { text-decoration: none; color: #334; display: block; overflow: hidden; text-overflow: ellipsis; padding: 0.25em 0.5em; */ } .page { display: block; } .page-title-active, .page-heading-active a { color: #66f; } .page-heading { display: block; padding-left: 1.5em; } @media screen and (min-width: 36rem) { nav { position: fixed; width: 16rem; left: 0; top: 0; bottom: 0; white-space: nowrap; overflow-y: auto; font-size: 1rem; border-bottom: none; border-right: 2px solid #559; } body.docs-page { margin-left: 16rem; } } /* highlight.js */ .hljs{display:block;overflow-x:auto;padding:0.5em;background:#F0F0F0}.hljs,.hljs-subst{color:#444}.hljs-comment{color:#888888}.hljs-keyword,.hljs-attribute,.hljs-selector-tag,.hljs-meta-keyword,.hljs-doctag,.hljs-name{font-weight:bold}.hljs-type,.hljs-string,.hljs-number,.hljs-selector-id,.hljs-selector-class,.hljs-quote,.hljs-template-tag,.hljs-deletion{color:#880000}.hljs-title,.hljs-section{color:#880000;font-weight:bold}.hljs-regexp,.hljs-symbol,.hljs-variable,.hljs-template-variable,.hljs-link,.hljs-selector-attr,.hljs-selector-pseudo{color:#BC6060}.hljs-literal{color:#78A960}.hljs-built_in,.hljs-bullet,.hljs-code,.hljs-addition{color:#397300}.hljs-meta{color:#1f7199}.hljs-meta-string{color:#4d99bf}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:bold} nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/main.js000066400000000000000000000011621376321042600224150ustar00rootroot00000000000000window.addEventListener("load", function() { var grammarInput = document.getElementById("grammar-input"); var compileInput = document.getElementById("compile-grammar"); compileInput.addEventListener("click", function() { var grm = grammarInput.value; var parser = new nearley.Parser(grammar.ParserRules, grammar.ParserStart); parser.feed(grammarInput.value); var result = parser.results[0]; var compiled = Compile(result, {}); var js = generate(compiled); window.open("data:text/javascript;charset=utf-8,"+encodeURIComponent(js)); }, false); }, false); nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/playground.png000066400000000000000000013650341376321042600240410ustar00rootroot00000000000000PNG  IHDRGc iCCPICC ProfileHWTSIWR -)7AzދtB!TȢkAE+ ZYlX낊.lur{μ;wfPg Y\QT3!1I # PFw75X@"!N䰳 >r t@\XU @$K0O$8E61Q@X" <6QBl-؃@ 񄬬Y+R!6M.o1SbX1,E*d?~05,LQDAQaݪ2fJ04 R# V#;i~v/g/bXK!Έ,ڣ"5dY ۸9ѣ6`JCxgq+@ܑ: ?7|F$p6m( JfgYYұ!M b ܜQ bGapuD 3#Gm(Y9yѣ]p=LgDc12n8€/L -d=DrD3/g4B9c~>^.ȃ/cZJ{ Y&a-1GG%A6d .0; h:  ݄ )AJN9F."mC^#P 6jNDQo4A<4G Uh9ZGe:ڍ@1c LĜ1_,KR1+ʰJks}8L <gB|%Uh-LH  E2Q9wz D"hBt{3NG\IJ#"vI$ɂN H"&~IR,O%ےId\FG>A"?%)ɹEqʭ-$wEWnL1Sb(%rJ-卼ybr{?RUT_4zzFӼhI\*Z5 ]J!XHB^Kᥢ |2ÊW䔌|XJ *)TT+(G(g)Tާ|Q IX_RK#:F7s^Ujjjv55{89jjպØdfb`|={w܊qƽWU/VSIᯑVA&i9Es6sUǻg/h-T\+Jk.6Am@m&3: /t:'tt|'u3՘Lf9,s@OK/HOS]oHD?V@N `Ad5w䌜Ҍ67617^f`D$$ߤ)4۴,lY9j`f^a~p[l@2A0rMKeee*̪DÉINl:z]&׶l kv4Evv-o9&;,shq(rus2tJvtY9y"f\rtpl$ݓ뻳ww{0==vxt{y<+=zxqx=6NGs罯S~___f@yAAknkBB Fn}f& kNnppAxCXq?$2;))S*<M/]O꘻ؖ8ŸiqqK&&,HOlL"%%I?uiӊݘn2}34gd8>Sq&kdBr|ϬV%k0%8eKۗYsKOSSKSyx}iiei|_f3"2f gge Ttf͙) ]7dBE{r9&6$ȫ0;n9ss]1i~@/yy-/߳{΅”- .]j eIƒ J ._T]O?)n.s[}9}݊M+s/X|^^yg^}mkkkn\[U\_hu׿0s2)7nZ+|*hmYV֮m^jko/iǭ;++vwz;nw/οTS^NAk5}8wֲvg 8(>_o =rp#[ҏ#s;kirk:o{+_}rON?jrL™kgm?zgZ[O^p|KΗ.;^osh;G8]iphy˳U_|=znN}sۯ^}eTaG]c>b?z8''eOuV?}|CE*#y60Jj7o29]ֻ4>T}t)ӡٟI˿}ip%bIlhj*@Kgx(_RAdwF) hRq`gmALo; vvcmDrRleC0 1930 1536 F;@IDATx ]Uy)7<@!+ JPЈ819V[}Ym_V}l~,tu "(AC 2fӻ}ssg箵i==9XmƜ5k^Mp4fȧrHw @ @ @M ͐{-7SK> ƧQ4j䣃 @ @ @ @ Z84r Y;zkZ1 @ @ f$l4s׋c,y9#7zPu-i|D @ @ @j'lEzSuL3䐔_]un4/:XgZp @ @ @@khTQu_(7zJMO\^k2 @ @ @@ESd4ωF&Bm(4AQkWEJwA @ @ V*(kQ7r4j3 i{QiЍ\;mA @ @ 4Y,b"b*ǢV:FZR^k1Q{<+I[ur@@ @ @@ yg,=&yK{nrEF95WIYT\f6or @ @ DOWܼq3V&Jֈ5l<#V1쉙g,Ym 9T3 @ @ f(.Caϒ?yA @ @ a{Y5_d͡ߐzWm~۽UV'`-F-}֭%W| @ @ @h/*$ngO-Fھk)v.koySkzٓu?/*nz!@ @ @@ UxVzǫֵiZ'M.ٴka^ʺNOZ'i^qy͛=I@ @ @ jU5N-~(ZiVS:Mߎűz):VW>jqYXQG  @ @ !Pt11kZ޸Y|m4}IKfv+c?YרֿIWm^+*>2@ @ @ l,:ZfiiX#Mmڭ@W~įַH"cG=)]/*FZY=Jv @ @ z U5/}vUf\t49b.Ez5ƾl'b5~qŭ @ @ E bk[=ZXRP+zYW[m1 WMl>ŨoԺ @ @ @!Ш`u>mZ;=EϘj}̋&mڡpVj]_Z4vil ֮Z[{2V|% @ @ d!wxMcF٦P}V?Ok))ft^|+2ZcW6]}bKc>I׍S8Kծ= @ @ @MQ,V>4vilƲgOژfo}~;i̺V-wi&V^6Kbǰy,&= @ @ @ȃ@EZbIcWOefj6v^tykբ[y4yCHi[v ׯqyֺ~ @ @ 4?zj]4yC!i3,>[%J1 շbȜk']%Jz}Tɪ'd8fg}yp1 @ @ @yȣ`Xme=b1ٹ}->ҸI֤k[9JEݘ$6ڦ6٧!MLl @ @ @(Xm̴il\;gBtiXef-ƕ7j"bV~UTT+2jcOcdWYgUUں@uDW46[>ȣo< 1 @ @ @NY vY7m%Wc} rc&-Jf:I:Ʀ:u}Ҏ6vT**j㦵dE2-19xL*U: aKҩA%})JzZ/Oc/2@ @ @ D `WKҫNZ౯Ӗŷ!9}Һmy1Ӯ.ʹNFEXK4>lGZ$swoy9/;-%}T0b@ @ @ V&С'#ŝ?}o3+䊦V]%_kK_8g->GF+)"2̴-kƧM>N'cf:-]p'_{s248$CCC"q] @ @ @hZZ(꒮.?_ppbh.N^)^}Zs[RN]qҮΊ`w~Kd΍ VZN=-8(7ʒ @ @ @ h8Iy&1د޻xw\a4NE,f1yؙZhlDȱxj_ɧM../yO~}guH3 @ @ @cNgq0OCe8U*3iZ֌IW1ɷPxZ'd5r /3s{<*~+h @ @ @ а'?MW<ٛ.bQj mƖ&^J6q<#'M>MA @ @ @@65owZU5,`% "mkuJڒ^~~J|JUZ/ )w̤x|*TQdɒS3G<@ @ @ &'0j*L;֮k5. % LG}t6tL_m_DN(]N%e\T,ܷk'( @ @ @hjVޒv~|l3y~M9oKO4mJvI(]L/vpm12⟉ߔ3jC;x?_dhhH!]]]-'N^QYRk=ղ}VkV&VFr5g xݩ߮Zx\+3 @Gǚ @>x^V6m(^Q>l2-I7˴vf'.~Ey# źZrZVW|mWfC }ݻei2o޼fW ׃r/[liӦɓ#i=U lf&5ljFq:Q Fxݩ߮Zx\+7 @Gǚ L@kXVǺt΍'SyϿGxDs*|yNSҭl]I! "gg4+˿EZ0~jSSN2{J10i&ڵS!ڐ;A-ug @OͿy2 5 5coj wU_<ʧYʭ9~Qy2g, @@d@e ձ\nΝ(wf%S|;_e^d,yNeFP%{֟+sǾΟ8Nm|;Azsfg@N6Mo{So\S*oEJl4;^w;pN+@ 'q !^c?֍L6?u>jϵwm[r܈BBƨd2{^};yAZlbޯXZ iw/,};,*ͽz!xIwt9g @@ͿC2 в֥E+ycݘ$}0/j%K6klmYvy(eQz_z6YE%6sU\m]{AB KWgW!gB I;v`8ysOZ ڝ;p8 @@޸wHZ[rV( .XM,mu:azQ\׍KZ/I烎eIs_wu6ܹ7zN@?`KFq[҂G[K8#.FA@ѯ;zuիem6ٿ~ҤI2gYx,_\-Z$yuќs=B tMWRfΜY I C;ά5OQ|6.j'SyT6I:.qkŪ)$]]c,IŸkoV3exЧst֭_'Vs^293^0u'! @hBk֬{L;<9쳥++޸ :)A㝀[ұ?VY%ߊfXFSg;SbqέX(ۋ+tQr_Vܵ9D] ewɜSdҤ7qȔKym_+nt,yܢ9 x22gfL+-]SG <*{N=MYvvB][|mw'[.3'){Fu?{h`ܻafݷs_"W6YW!bgyFȁB?,#,OsNٻwh'|r]G":zXn-{hӧO7^F9sL8@ l߾]n&Y'~,[L5/\_7o,k[#oÂq/K.Df.4@ @0~)׾xJF ЮveJE^Y4cẉlT͏U~&\cXT\E}Y5syJ(:lF2D>8v~*{'Ȥpl\lKo ^Qhڃo\#4W o3$}sFЮ_ӿ>^?ɗFFܥ Wγ;8W&M ~+wk 7B 5\s>"qoooDNРߒ?E'tR%Iy{TyY$ڵKOOӔ,Oխ5ڋ@;Q֭['7kx+3ϔ#O6Me׼F%y;Yԛs{d @ダu۶mN;M.2tGVYc@ rkC{m6 UgcVn3ō}]yʴ$&[OĚ7y_VZ}J1\}3pdʿH͞!2ib\cAY'=7~[7y4f5ߖ)-G/*zs旰JGL'&NYU׮|e37cZyBM  }_!]TL~crd˖-r׏)_~2cFN]d1GX$:wޔ~8b^ĉAY<"yAqQtG9J/K%СoPh7qnHu䦹fMAi,>>ʳj{|E. Z$ִFsBkNj|<*?uj)rŞC1ᑠ]@*_veuEGckAxɒ%bV,^fMxEg^z-(qۭN/3oIܛ}" u[n 9|1ȥ^{z`}-kEY~dyoe]|!@ V1Q.hU#l GO#S'qQp(q$#?!k-}"5WޕEMfzWƭ!C~O+"gp7vXXۂ]p0[7wd젔:r嗞0]{Z.ٔsTYc샲-Ouk#2gBrĺ[4# ^/ˬ Hwۺukxi;x„ {#w=LZ ojzI"Y{뵠h..VɽY?뎞Wz_r%D5LU#o}[EUu @-N=8wbCM@_ 0k,9|ga`R~3тڞ}ͽnh@(>wX_y^'/N\NW2{vpJ-{' (W3F KX"/ӹ6ǡ2>d1Q(BEq$8]ܗswIJj|wTYvȳ^NTT Bku-{qA=31.Z+qv2qܴJz-Dp aky053ԅP;O]%];'k?.?޲J=,qę\G)+T1,tȴǏw-Le/ͮt˖-E5F9TӧֻL[xnQZKV_gkdGڗsG{df]S?}2ero9!Tu?f(0#^6՘;#osdb_1~4Ъ+(_ctgO s\"=Ḅk32,>O&V,PkX,b^44q&o֓Kߣ8Ov,!0 _Ѧ>"ES{#m1cF' /Agղ͹=h-zɸIozBd 2aJL}||mcLy̘8";7<"$M9-SO3TǁCʦ] zO_sۆѧv1E;ErŒ1;7k>\Ii Iq8mvJ;;F0Cu$]rxGupii]ws[;Jn2]Y3xA!v9ECgxDSf$ާE:OgI{k0MWF[?97IL'?K#XkLxD(%2Z,A~;+?K'c =J6^hIKc?$ZPۙz5Yk}gO I?-0Y!?{}c\,#^N/sy'|4u~W?&K@B bvB-H@?8xw~D&o')C぀V0e5rQGeLgs};wfil\j]ߦGT"/KBڢ|d~$WWim YorMVM||in#wL9:}5v}%] Xw'a6cGW3r9Kf^ܵN΁ICi"l~5w;8k܈*9Wϵb=M„^T,t/,qW=V&P@ۼb_îZ(#`Hײ8&yם9?b@Gছn78f71;{ֱ^yzir"/ʫpeLVr㗊Gh׿_/.yZ>v^p;>N Ыt? s\*_|,o2?oָWES;dgN A_{D)91?q\VWSMȎ!V&`WY~mQ%}WziWRY*%|J:W÷u6wc%LWWɧnB-؅\&K 7~c[^vطm3EY/*/ݟȣ׳jF5s۴^3^M@@v(ٿ5&O]D_y7&k)%fk $s%T@E˿ =S7rpZ'WsZ-]zl{˵D[N>yݲ#u|c]o@594@ l޼9Eլ (rF؇Ifqu^bX>M46ծ}3l0 xkrqm&ލcZ{7ViWW.1uL.#CQb\tScgm3zgy4xhQcJ[rYr<㭒~Zu 47+/^obŊ8DŶQB@M:7L>+ O}r=5b|c7?tE8>4[JΘ_: wշr/-{+}K>._XQV>Vm'8gn73cF_xwȧ?[opJ#sN߼Z>Tw;n';A՟C帻e9Q=@= k>ȧ>Θ߂IerRT͸Y_V6]Y15v=y1{lyo-Z,~lc-Z9ܱS֮]+VL3$|H2Dz_nZ{?nq?Qu[ɓKgu >Ԫtu+0v¾bĨ|`#p_/kWq7o2g8p_\n^a 9uJ!oor;ct#3ۙ"ȹG||4;2|\yi4/cki徝-&{);lZ[.|/ ˞OM#0ρ}_ ~G״Zeh08D?u<xh@  b!cc.ڪsǾmηmyߣQ7sz1l#2i ,0,\;.Il.aDcgm3Oe%y{Rr"vhTաmYwA}Z=O?ML?{WOc>h`|`>حfΜ:oj~_.~ŲtiL6=xc$^tkÍW.zC 3gNx5ϔ.WMĴU۴ySVעA@15+5tRErzrԈ?VT&ݥYroOoYs+_ȘYʵNTג>r5꽂ut-A]ۊTDI  =xݲgϞ̟ih mSNm>l8&P\X%|s2}Tq]ӥ}KZ(փQ&:\;63ϔ,ΙىA*]Gm-[0;@}Wyg5ߔ9AZY t8B]yEMUGЂoGnL8<ϗ>[qݷddNp)kKh$9hi0UU@{m}zp߰ƛn иV%Ks浧v=Hg/9qh_q9UWiJ룇*=j;N~_c=Vu7*(FAJck̹Ջ@(A@IDATץYycdbpmg,yduJ~)HҖꆃi|uZV1r(VisSer`Mڸyyb<,\+\IņmYYoCa話4:(]_*wkҨ4u@(~Kcjm^*7:)zrRcWciL݊M,b}sT?@ k֬iDW$gGB@ z.ygɧ}6>%۶m h+cj W~+Op`rL6ڬO'Dy85yz~ݜԂ:#Ke/9cM_d+g⻶W?yC' dN E`QV\:֖ԛε ?%c63־R<%Zl⬀IFs]dqkc!7Y6\/@)Aqʡl`>A 1j]'M6m|P9Óy^{uc14̫]0T~}x6b1Jqf̘!W\~L6-\'L K,|i& &O,zjUVEE"SO=u^IfkZ4@(j׻sp}=E':}…qeso5Nxs`ttxppoF9:o{wqR>|Fh˗/މaYvmͻR_4& ڊU]tS6ݍ*'sQilL>M$ lצ8J$3]>FuP66 y;eώ"Wi!3lAoEM7P_1Wch,Wv="Cohn*4Ƭgr]X3v?NpV %cU:4lEb-娵eG}eEu׍^6N[i P/}Ksy$8GHࡃr5׿1:7Itzغ #0_o~ѹM_M`'1rG/ȣc ~= _#yղgzSgHct߮NFF䂫,#_'=);#ʧcG59JVGqFzeJ}T u*f=[/~|&Sgoi)3i;c/;DL5U:& sHoT&Z$?m^#=+_zSȯ71R-nbr`g++g^"+ΧL>.Wz}}}r%M7$;w ~(+Wهn4 6+'xbxO%3hci9Y^q\VGHKz߳>[N[媫Y3S3p&d]a,uغO V2 , YZ5Cˇ>RXVΙEeg;\myձ9kCJ-',z'rwo}Fg~5j\>ʻ'93o~_.\Pw2(ϭPf5yY5rP>vsnQ+#g?|7 ?]k4F}jԖ 2^_|z8oy[dʔ)\]o;w1v^cR- I@h}kstQQ*Kj4>q,Tފ( oQ2Ɲص7ۧљX󨱻V]]Qg:?etO.~QqpIes <]'^!=eǚkYdͪ^9ȡ{gEz~@{]uf 3]+_X0K΃F~{~#_.ZմU3/RGŷvLtJ}{eEQ!?ˢ,45 .@֯[/(7+JW3AgUڈ~)Hc] Y @8,sz]GB;-Ǹ|s"רqZo/J5[Ή:/n9oMyN֎)>eoP( :}!go:Kw,al???{s ^QɫVwhxȮBG[8o|=|o^('BfXDx&^M?z["@mG1V, tQP4UO|6wIosmq9-3k5YڱŰq6+UVz{>ēɵd".CǁLujꣾE7-N˖3eݚҿ%8Ku~9\Y8okcNmV},۾{i+ =O(6 .}94<>t2թڪO;ԩSb޻Xz)S7}WM/3} 'gD`(*&8 @ twu6={رCjyǪ޳~޾}{Kcjl O`xx\O啟Ay]uMc&-)Yi #9r|x&9ɷ{O|b/ٓzGw _.Oo>uF.;ehh֙w6ȿ}o参/]]ve.OmOʅK˰[I_] *p~׻/Mjno}[r=Ȗ-[KR%yP:Q[M9z*&O@%`*f56nl\f1T^c܅j'&̷qՌ'sil]tYɍjFudG-a:;%'"g@:/nHûmwާqpuL.Sϕ9/Kߣ[~wMsߌc'͗ӧ=WΝ"Yט ?.m~ykDɻ=pyi0( ]Xo^:\yoFv_rI6ELaYIܫ_"_w(뮻N6n/΋2=Yj<lrW,;<  t UFz@1_&6|/I_|씭;GG&͐}3A|U9|{tU"Brtpu,҄ rAߜ9 s{ww۟I9gyIƉ ,XgR\{#Q2{c,^RҎ}y52uǕUS)/V4NiEj[8(/4If;V/\}Xڴ<0pi򬧍\՚^2Nl떯sZ/'^buM p{;V!? G}txOy}AIֵkO?꒗%،!@~F&K +-36;=wvM!?ߐcHhwˍ&ѫY]o䅷H/~|K&O\$SSήRF0@O?=|$mׁ$: 4fc+~X{m*Q& n<;.\[b>>vf5B%9:5׬~wǶ}fks@Oɺ-BoQK^ZI^ =i9thwzт^:y+_%֯zJn*%8%SE C|J!Lrxoi}!@ *qGu~l]u}]1ucrˣPlqLN|:64}/c٫?쫡!ꎿgU=c>Yd{뵠sϕys[9fx%K$ZhmT Ŏu!@ ?}}z?7O'Mڠ?ʫ_w,yC 7" N WQ7V߲.5v~,Ku=k:w}Q>UviCwmlmn}ck?lMzJCۢP<88'K?h=^:tb'oQk x!N#u8c@ O9Z]Q @8@`[YWDd'Jn0]}Lu>bqI+(VB%:wlDtfkill}tط9 u%3z)κ.\bni=^Lb'oIk@u't @h~Y7@[[6O}6d6d֛ΟUƉ'Ō󩻼 Հ6-J1}͵wǶ^jm(@oo/tzO;v`8ysOZ ڝ;p8 @@޸wHZ_kZ!||oۺzY޷VVMjl#Vt5$`rGdbP}I5 I&L xVfϐS&'6n}g9<[yO^z-h\䓰EKl4;^w*<^w\3 @O ͿK2 r]w^ZZEqvu25MMn346f}+QXRRKһ:wlds{Ο:VXm6ǝ!? P$>m]V^04'xBO.VޓG+3ɋAR'Nם#9 @h~y7n! $`,ve2PcnQ?wmq+sǮti~j1Y\o^6m]:ioc P8ɓ'~{ٳ\@/KtoӃ3}Xk=oE&YƿhirJם#9# @h~y7n! "֫l֯Lr1[3]\ovڛ+il\j]߆}NʓƪK3mQAXuVٹs+[!ݱg>Jq-(E5O.IV_ӊI T#_/Kѹ66N'٨'}]ܕYxYP(B gA 5Pu݇âSmOA饶F³khc9^Ҹ7 4bv%N}x\@ g/  ŗ+>dW^iQ6*j:Q8Y~aN۳葚%nLw6XyX\Lo!PZlt3o` @xݩXmp^ @ +qMX}\f:]]+kIgMVDϋXИxFq5@ɣ>ƦOۻ1ǕXK3Q=,k2 @ @ @E ve2$\ƝX{?^%WrUkBq==tMwvl?& @ @ @UYﯫr_'s}|LLN_%^('j]:wg>+z!@ @ @ Po~ʝ[.Q2Wgc֚};չ2~\rf4vc]-2qܹ+5\ܣG @ @ @N{L.jilձ28iqqZFgAʳY<[#d/ʧevFq>8q]?ֹ+ӽELn}q]w2 @ SXa@ @86m*.x}"U]3=d*k6 @ @ @@5+av$kv/L׈MvSصCHGo٨>>fuL @ @ @@= TaEq9q6*7qԵ=>8' ō-Wkocӥ75m/ @Fn  @ ]bnղ,_}izq,ʪ>nq5n3IĴ2'؍펣Mo}M[ a@ @ @ < Xʭ_ߍ'TEI+ixFqA˝ݹg:Η:[?6y2 @ 8wqv!@ M.;+]d֫G5mz8d;V?7ZX(z p'6K#z"Jv>b @ @`-9n3w<=nLw棽][z[}OepP{<} B 3ᇂ߻fwsGO F> @e``Dzzb-P@㓀]b}!7ڍg5.s;sX6:8Io5}>ϘKIRR( f/:ߋ"oqOrڞ?yvWf0uW[{o0^ IWOOӼ_~;7˥GrҼ.Js_ }/~:r+#c(ȲkJp#C=ky^TL -m¿Uzz'ɌYdƴymAuK#SfN;u̞;K&5woMK_ vz'NVn{i{d^Cc5@j Woa&6mC##6}̞=>Go [`B͞Tx'{gUgrMycG5Ɵ_0bkPJ( (()S`E)*V@T@zCHBf{gݽw393sfT9YYK+\wRQ ̟/Nc@~_xD1eۅ.؄ S|&kGa,W jڲ$UpU$96nڼ +UNGՅbwyލƨ>NJs~dsT͓\&9j4qIp8#mLHe–y7c_$4jQF=!_Ċo'c2stKx҆ٺ@.Jw/_/݃ïFTWޫi_a{y5YXFϘ;e~j[/{֗2tĐ@ўeux옇 Ҕqw=nǠ­b wX?o.*9%7}< Q ׎gk3:cX,>ߖ.Efӏ Qؾ/3=cF';m4 l],ãw>S_/=MLcnK=:&"1) 0ga:b0yز G<Π<~0:k>{uա>xq|,ׄh =ism`,ލ;$vWP,$q,(l%K77kC |?f06W(ǒ0+`"Lv!lj,L8&95j C7"SEU} p!8kq(875znlO 5eS\.R8m>^*[yyDqDj5hȡF J*E(_C{:Ml>Έpzx2|6I u-`yI٩C?tyv l˾)Dc%|`ωۓ5_'eA[aoaU{Ï:%ڋMJFUE (0b/-fiƇx'y~w5^v2ߌچ+7]n%6f,uV'Rz&k;+iQbcD^k I`N4k\HOsqݣ^N.xf?y?g g} ;Vg&㚴F'j{m9~$URAtC9ĬQ,oK,Qg\\C\E{KBٰY3>RŸ#}X}K snZu+oBh4VY;뎲ho5%WءƯ3V4gʄRVX1ai./P<6 b\Dœe c/LΡ%AL.lt_77d";I Nc(\P3c6+\ہRxZ%V)+\s n?5ԻiEb+N ݕOBjSi)U%-"w:&D %XW}k1,!g?dcaDL1MΝ]-[rn(P2R<i!B/!}=# 3>r#JS><u ᧱"ϙHqt~X]!/uD 5۳~I-%=}>y+FQo^cm&YxrjB'AM⋻6,Ó݄Wxc~2fn^:9t+n1(O`lV1#PgEvs,#l!W gt32.1f8‚}¦9Ya2B.x|n@FxFDs0(]PU0Msi\SEc2QvUN﷾ سQILDI ct*J)"5KFG0e.Ř\!-ی}'\4qQF=5tq%B+-FPe6ʅ#$:@Bl\<_|g*U M~E9ej*s./ǑJ*D#)>eg,{M.}dm5qdm˨R5 UXWC^ \Y5面RUnz+ &۸anr4,]% czEN6݌uY(Ea9R [;,eRLE6,Z=:Ā65˟/dmCψjе^_:$PE}S7Q!PvVR@Ⱥ^e4.!YDPf>. N֦]tw4iڂ$̊ÌOY2횃fZZɶH#쪲"?T@uC$6l(ڲUG軥ONFBؼUƿub` 'hl\Te<(zrS3boW(˹Nq \pcV!I*1)ڎ>mO}?<7z>Y*Tq H>ۂDio9}CR_CuɑШi#DI# q p$ۂIqg$"a1Ih}հUz (`e#'@6[r0zD.Yf4kؐޗ歶_2;OJޚ '*:ˎ3;qݕߝ/^ Ξ2W U}k?5"좷K`rJwxJP20ʇwly ]]T*Aw*ޝ&V~Ͼsf5o'{_w>p^"xw69= ホ߃²>73z뮬~ǤX*1שh&/?ʫCmWءo 0*N `i<ɸ'8ݢ`PT`>75 ILa~ mӾJ`)+޽<\CCwl|yEt+}|xorF.]phJf齆ᢞ9lMqAOTU./|M3ޱ`l(kb55a]64C^j|B8 tZ6 0_1+.ӐaD6sV$7@XzpV"ܙ @̯ÔDDO^Sm\W2<X| 9ԕiOGޒ{|pm5yQg} ]w(H>l\~mLZƇ_.!46f,G{d7ޛ-'#ӷ%r"up`yXv/7<뒥0QtF=9GXKsYz1-޴??<=w_}DڜPQzC,{oiáwsGko0=chiɫ9+u4Uϳ1WkE[Ke >5ۣ/ۑ]/ٿ"65rҙrc!-qAH6N, Dk^#فkk*o9YÏCLF_\73ghq8%m,K,/+(8(0`#]C 1:A;k㴋A4e,a?^I94.5.KPϱLzTn(ݷ3'-X"q""{ 礐@T|*hj;i]'GDKMO -=k* 1?y3OAqCUp+MHw;Nހ91<:`C{_^p:]-6]:.Wm mO5a#S0b?/O]qݻq)^,6=M }j\;x9 LĴY$N3Sdл)d%pdgM ^o=_^SnDh[/m(e(>]ٷd^;y?O14A>6'F!Y3;UiZ?Nw9H/xՀGI> DnGwy?@K﫲SqW_FL-GبV˟-L0TD=9qex$<{V۞}D[$@32%'&3G mB [no}7_ڻ6>z͓buy2˽KkQ|+29y6\n#KOezػ²wrn0^s$2?lA]cŮbBnrWW4x`yvtk ~滢h>  y-sx#Yx3m|Hcf3åsh3B:x4f-|pgy-6>.?#6U97p~4|fxq1fH6V~vɴq4QPDqE(k(tfatoVڦq3)cƕB (^bg& %ez=ycma[rW eƢkf [~;zƬq: nf2Ls@IDATUY$_mժ^2 .Μ)ew3%܎^ hۺVGEt_jSҵl; N_e\mJ> $I.Jvj=h39tlyX4ܪ!3&(M0}\} ߣq.u\pX3v̇vQw>1^O3>­^2E';GNX1{?NS$_S}?% ٩/U]eOhɖ1 EbԽ/Ze4~MCa%=S+O/™{\s8PF'U@\0Q6qXGv˷/&Oݦ9+;w/; w5O0|*$j9Gť#S-w࡛’z$䜬\b'Hx,}U-7EZuEb/;o =8za߁ʇߎj{ki2em3dwx7ѫh0:Ll:OMEAOޢEb+b8w"\{\6 3iqpo7O@ZdWmao-o_WO.m{6oe4WI~\}@xq+TFn Ba|VY5~0u);f95soY+4afTZ.\8/TE~ykX;d)osxt L2YOnԐPyh ޣS@2*4^72c m1lVOΫUZc0:LꛒZ89A}ЦXK:O[J:4h7CiPұ-?FLFX/jB3ظ>ƍymeq2ȤvHaE#poʯҧ#W;U<³DfX~6N@4,e׿~4^""R/x5y.LTNX\{ *sh̤6^taò\~ :D2AAG%FG)~>n9뢋&6)=.!y *p AFJp8J˗ʕm bQ65﮳}\,sQhyt<]Wx_ugl8fO0A\}nz*' %wbpm~rtޝKQi zb/R_uz.io:I(.|5Atn|=g\?K;N0kN"FŗZP!5y<&>ð4^AtE'޵w{eVtiڅipNh(A p|Q}wEz=5?_#B 655ExgUxmcZ oKOոcXWK}GۺlDO8UsK1m^%Nns9:]])K;UQZ橥y2zZ]s$3񯾈oσۗ]ofG~V0+zCߌF}AU4K/v;A&NswYqPq#aF[ȶvL"ZQTَ7rַ-gw|sIMzK8Dn1)U.eCuL} V(#Ɍ!;_(]+}{ƙ3f>-;Out^U˫Ky .{ݛvm;p*^~m#"N篤14Y+`W0O>GR@U P) ank~p1'fW1==Ta!>(AVFmΥȃl0_pu)|:/t;牓0zp'ӳtvaftYXɁ]KLfɼp]C]θ9̵0(39t;̣7 6"|+/?7NUgbgF䗹S/kO]ÿ {oO|eg` 3X礢YKc=Ea(%Ȼ.dP <5,QrX2v`m3:.Ih1!*=_qfp7Iu+pz-KvIaqYg-@E5ϧJ/̪翌pzRĦv: _v9]|)2锧i36~TP{vX\#J8m,?Da ]Yc)S7*ÛܲFvUW\Ny%SdoD !5״ժ!߁N瞞wJ)؋\5W.qρp^?Mo.eǎFŁ8\aMR]50{rzBJTnX"z3nmBF 4<GK= _?U[Y9i=zxLG<0M "1!c˘>XȪa0:rn uv7T3?zQtw@Dc%ݶ_D wigZ!.^"3BVӎh6:|G&IѤKYs[hvoDHaɝsqM.Piw$G^UEPTNzD>KUtݫ> +Z;f(Cu6s v)_KmScao>0VEu^l]pT6JM0<ԧ91$Ԝ :v֫y!VxǯӦ~7`o^x(i?"c{?m#NN0xu5>MߨGpވ[ip9bNdK½q5|pW-\iA*?» =!:Gx&t]'6qpacnZ7J7\t $ouZoћ"]fǁez"! /ݷ >n‡m0~@i8~|*]oz?UaY/_9_;mn+}}9wfy1/>[ܣa>|sJBnCz5qhRR/bvowkŲ>YCWh.jWO6FvfZã1vmƓԥ5mѿ5Yxi]o#^Vf:*Eξ珀J{!CӘ+ƪq- x-L.v[30fgs8޼$d#^RSBSH?xDžWUZ/ 춪jv0.~\UMcBo} >6N̠VRR\fpZa2 k(ǼPgx|^Q8{14S|/'OMoM7\~4;Ա_W7ѝfl:V3Ş4}',+fij90g(?)mXI5KW!p31̌e +vJw w:.p~xRlˋN)9B7Yﯘ:Y;28vEҖv%3фE8vR.].TTVU Q up(m?g@ޚPЯ9._kSZ{E)g,l^6aq7-5E5>YÇTʑvwKC3UPBͯ~WӞ]`'feMvYKҭ+R#)S7| lD!&!Q:a$-R -B\mQzܨ A(^yN]Ҏo t".{ iЌD1)@#xA&[0e}_\>G[Z Sap1lIkh, pFF#aXWd~Gcd4wIm΢ fSLF{gO4OTX7t:]LHG:7,wұ;qR{u"0éfBTFgz;`57<Yp 62:_^|)yov /mla`qFVS6sΘnϦcFG= 4 *~-O"n3\KQ"wUU UU4ΩDeYd*KGgd5^-hMך)BڏABFI i7ɸLo$Q魑h'onH8͸֍m'|Ev@C44qhecw)R?Q䡗h+O̙u ;{GWИꕒ415QFJQ^rmM M%7TPXB%rjD?isxiٜX _ۡa_r*rWF!,=і ft(׏>:#teSex>#iC$J_yy*+*પ 3eWo)Єt'Oєޔea缉wMc.@MDUsW;C,bس ]("?YsjbQhY HhY-*!,&٦mg%CD\:v;2?۬rmxd[mTTW~IۇMYp1|XOU7œIC'ӉFw`Zfi[Ը˩h.Fv  vڌ4X}2+0S=h\~׳=6@3' ^یgΓ6.d[rJ|FNOkQ܎py֙I>*iH狹M>b5yT|/oPtLFC,qFvg *Fު>Uʸ s+{9sIF·wn A<@ηpA8fqVwE|\,n88̌0 ںKpjz}w^}% wEk? -hDzx&:I2%hzJ5C`οGfNB3¶ӧ[pM%\b .tRf,LNk ffa̶ o ;Yք̃|2 s~K3ɴu,7MQioO7#XU&f̚ ;V"t|FkxMr$:Q|̤!r]Et4/s%I{PW93&mUsj^#3:Fl LE˿>v(.޿swAC{kNt嵷 T[vdY=Rrj:LDb]W7dlJ$Y1;=%;ي]]5=L2tF[0e"ɭqŰ*qۛꂙʢ?2 筢XGSҦТE>TΝu,Ε}۱-l [m;@V{#*۽YME'%u~k[FV.gܴ&uӀVae: BzvŔf' ڣd֎􋒀'ޑ˝m(:jTG  F i˛M7}ԱP,@|vDҩN/:6іvԮyϦ diOi&4R]o2ܴHc9\X cƇYt tM&zsrK [ZC: Ri!'fژCW3l,_ 6rbEK/N|)o_aUk]ƃS驸YjFVVA(: n4I zr@hg=JKҭfr Mu4pJw>;pMMMe6Lo@Oae.B%YيhW'O@"Nb,P _pUcʐ9Zte:-ċewcrd"-`_p;[MJ @]C;Shx 3W|o < Uaқ6E3vc۟˕cZ6K,#GV~Zcؿn-oЮ,#p [NՔF6Dl24U?6 M&m=Ȩ+zқX(UrQ 186c| V1lڬ p+i-CavdnZOdܲ[a¦jlz*[ڴv5\ѤVHH% !Є!Q&\(lo[ ٰiI6nي 7bo{%^޿fћ}; )@AE)Pmua(b%~E%Os?ϝG'OG&^VzYծ,l a-$݂/[^m/j{Xlf_)"Lj]M딾 ]ӊtV"\"hSeҙ- =faolow5B3UchE-)1uUdV+Z:JrޔoxLJEz|`({\Iwl1Igˀ}CJEmRLmmRTvőxgD-:2ƼqǝDZ(Vx@ OmR'OZ&!/NV;":cz @ߖ滘n8dǒ 4Nqzƀ-^o]i 7)yc…[:w l[kנYЩ v–S0aq-…MAiߙd!B޲#ݚfBbi^ L5|N6oNX"X;~Z &fVwIy i-0aq-…(LgnaDzaSxBƄhnF~e/OPz؃.8PlNәit 0AC +[D'2!9_oޅ":e2NBs_b p3 D sP;}J'gv鋜Ѩ)_Htjs~^rIyYسU;~i@Yߴ{O!dw3=e^JP&}Af~fDěsPp[Xrˆ0a5s co-U;"@Wa`#޷1hӭ>=*{:tzFף CJ8if8t^ H ܅92!>H,"[7R?{C6w9Q2M |5zTKǐ pd]sQZCi^I(Ħ#` d{OdnvZ +ԷCvXT4f^~.=6VСŎ'1ZB=.hȶoX8.5ރ#)xm܇VmNe׍ l18 w4,^& H'ٶ!R1hK}>?zjl(5d(f@"NJ)䜿i-=\yA)k7"ɤMa] [{BIx,nVpK'wb& VQ#,Ì|VozF-#vi;T\,8L/D +F:.ڰWbTy(7 Tdd.qQS 6YV4-40;%ݭ2&y}FcVWKU>.5;:-{N`3GEm Coą )JNunbu; QIh tK:HtK;}Oe-P܌F0aIij-ϋ6D 04h_h },Ă%Slm[+'_ ExUA^6nݯ9,I^ZsOU\ VY<[Ɉ s6n ,#2mۢo7q8G7A;a w9ڣ9;)ֶgNbiZfslZyra}W&bDVLޔ7ؚ",tlڪ'/v%+mٚ(W0r%5RsPr Un^.;b+M(Q/iOE^Zđ` 6Ct~",XFסO;8%PAWĺ<3k1$N G=;vBjZ$ <[.c\?x]t<.̑zޣmG$iH'2X ΙJx\-*0M"NH,w|rw0|1aeᜧ/&&ݗ^s]_yqiPm TW÷i8)]S˖bႅuLMF﹧b%7fo}u9?sk>Vt2$rJv M!nJ^HTmk!?t[?Jmf ʕdducOݭʅ]zY־4Ϊ||ԫ qz x\zH (%rB.`B;/?im{I06W9cWˌnD-ц e>Z<[׭GA'oa$H^7+a¬=*\n* @mnc|PǃS_|bSWWݧ?һuoPa58_R9*Dpڥ9rq ϘJ#+wK/ U񅇅˜} ,̘ޯI P\XB_( ^j$5bYVvy\Gيf.B~-*/y?c…8bDٜ>3;ׯCQSCSǩ3Mh&Tvnٰ#mѧ֟5*dc ʑ@ACf+?Tȁ͘2K.?0 .#3g`K϶a[446||9,Q9/w-IJE-D7w)(ݙt_`zi e)yv!ډ8gd,M'6LmB]H{ۑgll h9}6o}~|,[L$k`OGT,[,+l;TuPUy!R@ ,"/FtBG'&)X;I4uD|l/ W?+:UIWTK2o;Igi}V>)ژ.n>J3/ }Krܩ}~Z֪23-'d}56b}n`#QoS_tׁMFkx"PAV̝}hRLMD&uCdEwG=;# :zi o\eصzV6vpÞNi##a8mjR~-N0{a:wAUt%eto\]Av0!/,a>Kۂ]x gN۞î}_&ݬoʈcCq.RXYh(p2AAhюzxa-IaYF m?qDE.r.3!]=6+-3"NVR ňƇSZ%a>;K&6t >(`}bK>R%>?҄ JCEaoz<Ԝ7LfeEqy0y7h胗-q`Zs 5S!0NzE=pWe(K*v#Y߂m<(߅h _ۗ!*c5#n(!s_XX < Qo=~É-N/RHEf|cuO݊[HמG3)= |ZwP1\O?Ec F >@<6JĨW}eiE ]EgaK`MpL|ԡj]' d.O_{FWz²|7 !lYfEO ̅Ǥ *%hʾU _!?ZfqfaV6I|[0mn{<հͩƃxxB,℣wjaq+Ηjj\Xhl_A rڔO -C)U4 fZzDZ@`墯QK0,Y2 7 dfxD˰v"x5J!QX8 /řś ,WuamD{"!"\9"ߪ;(;-szy-^G7Ds.ˆ3jo@:" 5FA_\9e<"]4p)M34EDb*IJ$; XZ0 -M qѨjW] ^4.*4ȫ#٧i\\6)Øܪ/F7 Փ="qv3qu9N);Yx &`|u!sF+">r=uhu˳ 8Ѹ2#M#=)h_"ЪK7M]:6ܲ.W &=9ѻÓp'G4db82_< Zvgb~f/ dvE/ Ю,KiS%{Lĵnמ6Q|ITjF!tp_~o2Nt1FR$VgfӉ#: |Nvd_j >q w*=/y2Hzo~f/V.M/P:6Aܥ0F0|(dx64|9b20zĹTJm8tp2VVZ7ֽ_i T~5#5LZˆkFYgGa.ɭqaRoc Gr);V@'i;`yr8pA"W>I a[i <}6;6 ҔğDKcAQqJ;[%tO\6ƻg[g0 Q<7WCcyxxq3mrIAHUxH($/wx#ꂗ": 7?Gm? hۗY#cza LV˷YA1гgOKΤ 8_WNS0wybw.}ѢT.#O\CE1k+Mb[=YΑOT|w$:(tL(`T>Άxbjp-Kb8>+z]Kh@PkhH}8ڝy&:m zQ79M#ϳW(ta>,of"fqcog]|g:;3[2b0t/տYY;#`ݺ]]^*CX/hhc2w*!ہaWY0m=rn|4QzB}xnj6 s&;>Ai~oL C?حf)4^wibei^c9.B2ǩ`!*K-ܤ4GwOk'ͩOK@댘鱞.3Xf.Rc0p'mU02l?88c݌7/Vm^gn/È8/r&qa6Ӕ?{17]+ƮIf5UpUVuD46Rʤ 6Wa:׎\ħ l@ G|U NHJte%]Lj޵p 2 LutR]95 SLRG2ϭћ\1D6lAL8Ψ_ԫ˕-Ծ.(X@IDAT5~#Yu!apFKrT|Zt}z#stܞ!M3_ ~TRigK%Sd,E^}1>+~cbԠl{҈oWu?<-};'L#zbelSRiSI#9K]T;,adt7J>HRCa"o Qш'(}1vQr!H9}Vuŗ:y!&uvX[TTVtLsWY Mͅ++}h$bq q>;cF';O,\9DzrĊ-?mA)}CbT$s`1,rH6`·!*yqI [s|ZE0İ~1Z(ҏUcg]ѵ; GEY EON#&>) zL6#Ccڏhq[K/Q@j>}r%\R+<=[)n#ٔ"~fgg4|űpfd[p'vl1çx '`-Ӕ-([Bq́=A#2ۡ >Ƒ8#M!3QEزtQqv͓[ $y 6Ab 'dJYDD9<2R{j3u$s\hw16XO:kHۢ!;Y e w`FX0m#A$CgC%#Cߦ!45ؿsGv&^;CBȮ\6foۉQ5[OF63VJea._ٷ̅6xD'*rN Y+_(ҟUPv*ܷ/ ^QGoz2L Dѱ^']xVzd|w>w4Чuۗ~#e:"iw0=mհvD#t7=MASƛZOϺ6!"f$BfGϔPP)Y|-o|][7V}\FAdgP0խ}<3ޱ¯36Ͼ 9%q)B+1Nvh+ g]]L oΣѠl-3޵+?amx]ft,Pc;V8˭hYuG㬶Htc\-]L^wi"w%@;Li{4G6J>WEcv^wz"u׷WI9&sޛ:[0A}Wm2NidZ >ԻJ@a[MWw%PgF*4kB;cm=v%`|w?-K'[lXv,8qǵg>+aL>^6l]8%p`&TƐ62r}Nt v)PGv5,yAia"8mpҟGsxx O(p0N(+rl%-Q/hk΍\o)ч> GCзkkl$;%@2-(CK'&ҡ Gw/pQypQT0oZhfMk7mWr7v^7F¶^m7\J%VPi* 0 WUt! ۖjy촮^;d[WMo{tl}m~A5A 0A*`g)@ P(@ P(@ PtU$ :zXTy8K6~ae;ji4ʸ5._6OkLk;O>VDxdG P(@ P(@ P(@v yP荢ohe`qeSktԦ++ʧm4w>m:'ei٦ԛvapd?vyoe)@ P(@ P(@ P(.o~Yw/:ҫT_8(@ P(@ P(@ P4ƥ<]^K-@nm.C P(@ P(@ P(@eyZznvY@Z.}LE P(@ P(@ P( rԾfX%W))@ P(@ P(@ P(>1s2P9,(@ P(@ P(@ P%X72i(OP8;kRr-(@ P(@ P(@ Phpg%XFq g%=< P(@ P(@ P(@ tc[tbH:ȃXLB P(@ P(@ P(@vPbXʧV*:Uʗbdn(@ P(@ P(@ P8`Ǡٵǁ'%+(@ P(@ P(@ P~Ǭ#k;QJ;P(@ P(@ P(@ P#@%(@ P(@ P(@ P(Љ h[eSg(@ P(@ P(@ P/_[me˹k;\ P(@ P(@ P(@ PN٥a8%(@ P(@ P(@ Pa78G=ky 3WB P(@ P(@ P(cƹ| ('; P(@ P(@ P(@ cYW4@LL$;Ť(@ P(@ P(@ PP ީ c)@ P(@ P(@ P(@ x"@'j\(@ P(@ P(@ P@ 0P;E(@ P(@ P(@ P(Şq P(@ P(@ P(@ PA,@q<(@ P(@ P(@ P' {e(@ P(@ P(@ P(@ AXt P(@ P(@ P(@ P0P(@ P(@ P(@ P(  b(@ P(@ P(@ PP ܩ Nc)@ P(@ P(@ P(@ x#@7z\(@ P(@ P(@ P@ 0P;E(@ P(@ P(@ P(qY P(@ P(@ P(@ PA(@q4(@ P(@ P(@ P7 {e)@ P(@ P(@ P(@ AXd P(@ P(@ P(@ P0P(@ P(@ P(@ P( Nc)@ P(@ P(@ P(@ x#@7z\(@ P(@ P(@ P@ 0P;E(@ P(@ P(@ P(qY P(@ P(@ P(@ PA(@q4(@ P(@ P(@ P7o(@ P(@ P(@ P ^)Gcmbv*(ao>naRxڹpQoaO P(@ P(@ PjUVfɥ۫pS>LwGMf<1}`qwl*Ӽ*xMK~ ǛbYS6SXH rAe!q(s}N )@ P(@ P(@ P8͞8y+ȱشATz4z]mf:={Tkg+1ϧ>:$+v7k_׮ylrly!-i[8@૧Ϛk(@ P(@ P(@ PH(G28gEejk+5՗eҵBD\MQk>ktC(6(Y|Wp.@sΥ(@ P(@ P(@ P Dۚz7*x4NG]($tP(nGl(@ P(@ P(@m"^S,;v˒pOc]&Oд.95O{o؇}Xe(Dl8v$Ѐj#N,GEij P(@ P(@ PpW 1W*1q\/<؏qJ۳- >^']Bx{5nmYWFM)aVޏ & >!?<i왏܄Ra'mڴ}bz^<[]nrzjxr7OG(ը {lkkƢG+vQ8h<}4qF6|j4 hJoҩͳf;jXΧmZ965MISҩMM=85/WZ:qfF`{uxZXqo榑Vk< 'dPJo?YZeOږ*َ+Þ|.l~,Vl2z.2Y ]/ { [ʪ3 1lnſk8>з(@ P(@ P(@h Ub4~R+}ev` 1x:3 ?&[fV|P&H~mw18/o?~󦧌XV-;3_ߌi7#ѳXg=n$Ѐ7_kp]JQomE[i]k%O+ U26uuu5O,&5 ΀[#ڂSa8uyj ]kEl6qw޹mVA P(@ P(@ Praq YXK(Y 3$_h^&&R6hR,)"SVƲZR#H\Z`w=ؼmLxM,"J<-ӾiB$7#:EJ- #PG (j+~ͫjmljv?۾[V kȎ`1 |E_pi̙oRέǨPkߗxO?+\*_t9R(@ P(@ P@-AF(<|_sMhtU1v1[w7OyA)!`ZmE [eÑm$nYv~l˲OBOqlWjj 7vĵ΍LٲQmb4>i7Ӊ e9+l䡂6Cl۠XߓiL}~s qcc16V62<,T'а,/NU֠OH:}~ZAɑAz 0<"#۶;N X({/yqp8G 0(@ P)s:DXQۢEX•R@ .[7g .ʦVCワVQKKi3E0uUMC:ؤ 8 o,GjjCJ 0aTn}sLln~4NWcWW+S?m_Z%Ey}oE&}ZJ1Gw9*lZeV|P\s㾼0U)bV<0"m[G)>薱XJ[n(;ceW!$.8ǂ1cQ['.ֳ=T|5+ abX\ V8ZZ+BR:7)`,| Q XŅ(@ P{5.C in5K]*8N P\!<ڶnRրm~jUGm^A ^;鎨d 7;lojoŢUxb}:4lV:̷):Z}n;AXx%DӴ1m]b2ٷc8|LWTרw+5Te|bx@.E=\# 4UW>_DE#{Z\: #Shhp)Ny-=UG=c.Df; x(纤+TCעI}}aQ!$D$0nƊG~)xKU1;^񊗦W|3s3V̿+apwJB e$1?fK P(@ 4MDpùKiE[SGd9/}V\Vb!Q45؁y#k<7=?Fܾ%wiL(> -e1O%..7b^#'7wfZY2[eI_ t%כ@Xd,Λk@kQiΖ|O EEbF9G *BUPsm *ʱvAn|1I#Ft.XG^܁)Nҙɺ@T"&LJtʐP< e)gA 3GWI~ȟYR#ٍ, (@ PQ@9KN(,8Ҽ4L?kj HLanEdҊWw{(^¼?/ǡnX0= CP]QC_bë5x"ߊ_]|m/˺&JuEEqb;$ #&ˌEDA ׽X$(1R4y܀6j cq(f#^ht6هOc Ϋve H0PDfqp]0. [g()Fue,D#0DuGnO{r$pKЎ8k.Z;M[lQm3_@֌XXFTS_;sT(@ P/ N(V1qPZoM)]oD0BC?/W`~97]'Wl{Iw|W>T33-:8] ߔvZmӢ"caxym5dյY!_6_鼶m:jRO DH阌~P^-+P[['܊#ЭGğ3'K@Pv(*OjK0j@B>ˀU[`= e)@*5fTWW;55ƉcjJv0wrN@G|u(@ P]LQ*^\*Jh$*2-cݨx4<&^mގwrZYCJaΔBi^ PYSԢh>B.nzHf{W~u{"6Lx|eb<}8Vqsr8q,-3"vc2N@{]nc\|'?Cъ#2&Pꇨ8ڍc(?Vc%"44T#CC`=&Eш 9/®_oXV =bS K D%"!m(&݇oywN"bb, L@ | x(@ P]I_\Ra0߮$柫wRS ~?dơS2@ 5^:nX~4Ho EaHMXYmtӘ! i}-UE=: Dyc5~ʟNA\Dl_A06}īc7/<:ecElw®m6cFE`w Nncuզ\N(+sm_FT|_R!,0DDŠG0G#<2 K1 BX'GH!'hR*[訪țQ)PN H ˯F#GcxA|N:H{s(@ Pj:E^.jĞs=+MX6e=[KEaEJMie.qs%kv{}ʲ⳽l 1j}ǚ6E &v4me̘ضCtlO.?sZ0:4,.yDafqaOւjnMǼZCM˛ El[֏̚@| V]eQ.vbQ/=!(@ P ,km UPN ضh1 )|ۧGCP:|.PQYBxt}/ƱGMu¬u0vaሌE\so08w(^݈^>)QV4^jz ZS\,Ǿ,(beee}E&Ka@EKYİ(tMveF ^dӍbfJ3{Q`ʈǟ W{}4"Ŀ:p.C/MA]bM[.rU~m:$>sw|ݎ# vFF4nhl2U&&+ˆIcf 1h5bjq}u NJT:*DJ|m|[!7/12%Y\gFMcWCRy5ڹws}|{W,!נ` [VԴtv,Li[~YPVrUv~y~`]=loh3&cj(#vF8.hY>klfvx Kj3~TV/~3$\ڶexQ>KFz}mI@?hXBa%otpL; P(@ P!"Vzy^+l{ٌ;J/[Pz죛)nͽsPݛ8){D߻#>e}E߯?G|V?OD?PD?X2x臊OpяŢD*(_*D"Ѣ\+E?VW~TϷvbmػuM>f}MVb}vo}Ϻ|[e?gXg>uZzkG~reL gYqϲkg̓5caݛXW.םO֭k3P)i֍'dHMpz뒌4ߦ՛'nW+ƻuel^ZtfjV۔6շ>qg\/3GֱjO _Cs:WlR֚ܺq̫紞lֽ6,lsEb|6; w[Uv|u5(ncku?j Կ+WZ9on^.% B9h VTk Snݼ2í iֽ:ׯgS=:4ӻտMLC P(@;|˘]eɘmuɘ}ɘɘɘɘ` ɘ)q<ӓ=S}2'cJ ki7<sQ/nQuP]q\ u0֠ jV΄Hs~ Eq22g@Ehi:wW% ~fe JTqdqY2/Yӳ*pOt/<W\EȚ;}n ]q>36Mx_u/p ;7cpVώ6Y?Yk+M8ݭWGs^9o)ŚGs1oBL x{sŁk og{s{n,נ +[^ç"Ƚ5s4[KySbHD_ښ:`yy'#G~k*=q)yxqveFa@]\8̶]yo&+l1ûߏ=ٮaqHYCL-<9L P(@ P]cp%Xw?kML?Ax$[']#߉Q{ g*OOǹ>Ͼ؈UؚJrre?E`Q_PĝÐ4E0. k:Nm]Tܹລ[~xފtAW`wtC$ 7*Ꭿכ|9ެIqǏ?H]!T;T.OŜiIza:M ?t3䳜^tw{X.~P ,נ+ٲܲ!8,݅纪@ ? |OK7BatQTw_xQ.J P(@ Pb-`7rnW$S->O",B>ԅ#Eۇ8&eGp9%mzzQӀjeQȚq# 5n,m)0Y\iYzuC5S' A:I:+99KW]⩸kɢwaVz̹^ƽq/Ϟ|;Jl [2՗O /OauߞEk\=Ո05U\SUO{N;]퉗2xkgcƢ1h KO֜9$ms }Yҗ[^Oͼ 3r>>o)(=kăY-ۺP2r·|6us(@ PL wى3T HP(!{s,Μrrx AiT֑.[9YKvF((ݻcV_RU Iq$NWyMCFu9P]ih:ׯBv 9JR~CLQ5]\Vu+n<-x9n5])WrZiGokP~td\Ϳd[ܪvb{܇˔u[w7]uY^ڼ` 7nabHe-9bX6-/D/(zِ`* D?L^'te^6-L%KESD?Zoзl{x_#ofx:a=/~?Zl^֖ŵOg;zX~9Z__;`LXzҧYwWnщ*ir+TݮYfܩKOԨvИQΆw[=uz5ӚKZޞ͓[+nz K5{cj[7h^.Z`sl8]26K1oM)/hsu]M.:7a=(cul uճClݜjs۞f8yλ܍CG7vϿt',**H4u]^G"_T@=5G DMM~eIPOܛv"Ͽ&іBVރAT7G-oajVFnHJt<]x[pB<8ALG_כ/-t ]W.@WFq#jt 23GcWaGsphڣ(\&9o3oH[Y䵳-F7jjl񠜧%gpvE G7k޹o j?7'W#}: 7?$yKJ3`akvf Π(@ P(d1_N؃~b/ŨDh|m']A]]keʲCOxEXfZO-8R[#ufMhyKĽo0ͥOk5/&ߍons9* ωclIvRXca_㗉,G{mD%#E`Yu:db?Lת sɸwHtod'DAwqΛ-u[d̸^>Y'2!emvη-r/+/w]+jDu 1㞷4&&j|{.weԛwΛ]uO4fL6R.'b'w2Za@1ո+iUb5 |.!G)@ P(@ `%@ny[`1Hl)R$5 q*!a@߈l{y_ρ[&qa}*}\ӄs^)Ԧ܉~r&]{ …C>0}`o.Gkgnw8zubdνޭ ĉUu岈yZ`(C XtH7SuMd'usK*v\vt1u. :b;d/A=f9h< in?L?zsƿ;ʟ][5 ictV0pVL\Bngf֫c#vx?lunӉWOGV~Q=<>YR>YY{76r iMmn7E"ѽb53qexΛaR;bj33-yw6\]tFv|\{A1-u p]DwΛP$<%gތ}c/TC(b?VRMu-艢W-c* q͜(@ P\ x'\n KtW_L>{ow+0cƶVXz?zԈDVL;n~$dơH\0ix'uuX?&oFնq'.rhYyuK:! ֥#gcè3~iad9xFg>2qETdC6ٌ OWK|dDuu k VمG'zV%x)6Ne1iOUpc}4;WU$/IwƦjN{xĭג:|<.*|œ a+yݦCw(քst_(y5(njǾ#A_0YـlG/Ǒ#k/2:4C4bh/t y;uT=_uOI6cᰨ*>XL) e_ S(@ PpKQ V'N+=bEc_}Fhb#us5L55]g2"?jjp-߇S'P_o9pM5*CͻLHJQRR'ON%~xZEd׭ݍоlcљr(s\Dlۚ|;(^@_ Yˤ%I뚶l2O&Y)nFWTE~㍅y-ݗێrXE {A<2exηz81!s'c\ }Z̹z\:4n^bU}iǻ5Z]S}qTנ;Tdtד{.jk9o< *z(O<|w$rzX\'Fzn:<:[똎xKe (@ P(@EV$aoXf9**ʼn5KNDz7:gZ}%s9i ‡ ͷ DڄҀЈPt/P^;ơCːx/~ ffT NSٜ"<^3zr*I=XuDD2W"HܴqVCk`㜘0l-FlX*jѧpvH| mCO\_qQ}"!0DHWUUaժUCXoPw*wW3vΣH| 1֋ei7kb2Z~E<_W8-=/{cNJSN/\,m[ʚg?mw3H&)s1Qƽu,& ԱcҾ3 t΋O5ڒ,OEXxH䦯f|m8LwgEy} tcZp;j{^߷`Ea7yyk֣uޔR(@ P]M⮶p{&vw1gIlp|qj.Kc,!DX V\y;ܳgO̘1?<, ѥjKIx43YAl#TWkP}Up1^q *y LF0]%Cϫ]I P(@ 4 0PDv<b"!ϼ>2"R ^ -V {RRPRRJ>IOP់ejuU^-Knnji+ t5m&F㈯2CLSYy{LWی+# ǗT+sy4"q`&L}n/DMal]TY/BO8hy 84`c>G\d_9\=KWA7]dMNH~C`⒡N7͊H^3Uk܂q4 e01(@ P]G⮳bK#s'!`w>  u39h\E]2d CoºYj0 !eZZk[ӵא|j8=%7ڂ`Y7 U6-Ў"L2 ժϼdEM7s+>։g W%d ! 0qݚߟt}s^cC9{,A=u΅phAߡet@`|;Q>CԊ/>҅H:ʓytFeIphnvh |H߾%(@ P(@V[-8 d;\tX,k*imzDD~a̝;E߯UaIY'&dT.Di]O_] d'7 6;Ў2LE\ϾAcoВv ;:?|8"s^'=^TE^gcAu j1Cz4?Vt P}$b;;_Ƒ`_O%S/?\~?dnxVP}nW2pό)@ P(@5T8-(ĻEm \BFyW)OJ:*i:֪_s<\Pܜq+;<,b6Vח^U'3d i[SE+=%^uľ8Z˃{^zSGqjg׻ULܖ;q3;X;vCO7`x,/e 5}i7P/T"ZM`_?07 ( /7XP(@ PA @q$ѹ@}}=ʰ}6dee᩿k׾[!;;υs] Ħ܅mSyJT0whnUg-V<>s^'w aWGoXkڹD@KavΫm-ǂcz L ȩKIJ]k0OEŴK4ۗkk@ Z3 XdCHxُXϿ-K1A'is{tD-%X:e*9N P(@ PC=b!1>jQs,NDwaobΝf@Yָi)XuP4 e.n6_|+)†5K11$YyMOj3f m&j5W%^^5_Qp.'n^V\LevhdQ|:&gM*sIuVݨd,QUnd1DLĢ5PTR//kj|JQ:oSǂcI~t#1GOĪm3aòw\;I@֖/ĠTqGK>*$ ΏDLF5,\;K4~[*s X0`z,nCb6[M{AXFNM(@ P,J~fW²e˰O {޽{gϞqŸ+ѣG䞈Y+`d_ݫwcshWe͙9@Zz&^;' ABLP?Owl[?yO@-{(g.>}Z̺u,,:y~RW]昴]qbx`IBYEX8c^r蕺󺆁s'݃4(FȬ943Io=ke-Z2Φ#k"=s*M]-~ZZjPrk׋XѾޏ:Ir^ {,A=fHŸwFxz|1395C΋C՗y2]A6^q-Ƀ#~?~+ѯFX?v4E+p͠3^݀G]Ⅼ6we_dk'_Xpu`ޯ;agp(@ P(@ݛӑ!P=n6L:gEm⚚@qtt4"""ҞJlXt!Ħ>42߼,{] aǒT\8_3}9'OŘ1׏,i HĂ[gzV񣷬E,'w<3b7eux;9!9YޙGU}$!`%I%QQ: TZ,P} @y B Z.( L\DHD"D!@ d yϝ;sgLfξ|Ϲgsp&)=4o?$ 5t?1m*?yGE&Wybzؠ,7eAPSik<$kÜ~0c,ﲞk'`ɗ0;˘S""<\I\Ea":L @$ӑ\:L_ĝ:uBw ūʺM6E/Gѿs =aVWb1 _~;>db]Ґf9mRW?և,{wXz >Hȣ#4qf<)L^m&̻&F XSlK{::q}Rԝ:9 ` jĀ̬XGq< O D6 D^lDp!>e;pDI%6v,^*{23w|kP$_7i>#;C,6+: nϼG)Xiظ*Sij%8eوIÓ BS>rHv#42అ6 Yc iR`JDZ(ڜ[qւy !tUJO]}ɺzSFͲ/FNZ)z.8ZrIlR>1݂!z>6L͎gNZ+o"GMe%j'ߩ#45{} W;ۅnMؠތ_=_([؛iX+{Ɵz> qalk*Jw=_k;[0xmŐIMĖw}]/ĜG'%\uM`doAR7tޙx    NUVҮqEq[}+̼;+Ʃtj;*xSIzf;!t7 o\͔z_j} JZKޟ_խCOAq^HH n51d{$i  hYj?f.zmS'V$@$@$@$@$@$JR-w{2s{_wJ?N$xE$@$@$ ʱnX=g($n2`$$@$@h7[5=d@Ms @K @AqK(eHH "T|󋴒Z @S"tr7yjRkӈHHHHHHZ [F93$@$@N + `'4АHH R4~fhƇ-獔c:HHHHHHH =1 I`ϊ؀ٙ7"   4^?Vm6\1/}߬F IHHHHHHee3sI$@$hjsLO:R$j|LV:HHFjڽ-=,.EM4+vcLy&~3&Iӆ$@$@$@$@$@$@$R𜭖R' @ cO;b1]:wg/Kkg;c/hE$@$@"A;S|H7`@Lc(nLIBNz͕8zh?vzdthA$@$@$@$@$@$Rpm4I$@$ff|t2f0g+Klj'F$@$@#Д"Y4[ASLo$@$@$@$@$@$@$|S @# زp8wNIHKEc8q*:%C'      &A&QLL$ @"?n*S @!АX lͨ8N< @'@Aq/CHH BTںg!'NEk  &X\?,ߺ2ŗ2,Ǝz(} @$J\7wZvfJ/>_[Idpϯ$rejзa\.dŲL" ht(> ĸ+WR$&py $@$@C)c,/ǡ҃_ZҒC8 XuUUvHF$oJ__$EE e&HHHHHVZe'bرXWh!?ÆaXj+\WԂ"ҳnO'N`΅HOpW_v ?\"sآ -`%TP.`y_@YEj=ReX?3zsf>55UuqZ6/l(4RL%7fl{R1w~/nݭ/O͕㛹.S_7Zx?CZ, O,xDx2y$@2u2HR>7L/Vfbc֍HL ԋ9X1&RSgm$6D$$TQA$ -HFt;0O': @=ۖ<͓q0+ t| 4v"p@mêH 耥xL,FY $Jٛ;;ZIWrMO^DIsH^p3WǛ/{_Xо=P]} C逧fU_SS-|<^4y(/)cskAsxl![!,…ۢԹ:÷ݐ"g:W!BZׄ? )P@q[ES~./O}D`i%܉of?3T۾Z|mڻs_wʔ<|hHJ:hG󵩿`< U:Yj*ӰC;N}BqףKj,eyC3NNbw0z2,쿰\<⭙‘7TM{_G w׺hݸkPSvk_o_rr槗Xm 59UΗR;v ON“]yW``B+CiOÓgakܹ5&SGL ݗĵ?ҋ#uɘN"&>!!=AgHiƕC`4H& M˨8RrٟJ?R#3&"ӌ\Mg )4MIͦr˟ضNad8h]?6s7qL9wq[|b [8Yǚ`m0(xU0;4e>y"n啇S*>$qf׻QEE,pґ5!F1p_B%9R±;gݐQE&M}E9՘j`E4!7T<~H 4nIgE_?gt4*Cb$/mu㎪vw2֍fLb#'fLZu+د(Kb!mnjے]㶁&^.X*q 1X={;tSUP괜, D@y&1-&˲eQGqY!j|>MF]_{\E9zʌ5um|}^}&غ%rM\+Ȟ W@IDATZqNXY-{IDk "fॹuMhE%aA맩հnKH uSP}٢Z<_Z|h$SVa߬K^Rj4h`iI754l]6M5H00.;xvtxm!UcSJ1e=ή'ݗKIJoh]Z#.־cX/}O>TI=gqĦa 1 cBMKYoE۴H>{ơ^N>B"eUE[^=UD[//]J,ËҌD\ӑ@9d^ }'֍H3L[!S^6(@CH3HIjbF@BJ,h@S!yN6֍otDv\ޙ6*>O OkBX >B@Ocu}^]=2!(V/W^G~%F'>iaeAޏQ,߸Ql7 jJ}S%ټ&oSS5Lw!#jtOPֳNfVaSw cOqlD E`702eyuMx9j"d@"tHAҦh( 5i. x,>6tlGTT,\k}S%³Z+o1JT.BLW| |ǧ*W)/bbDPHE8ׄ|h|P_}qn7)DR^qI )eu)&F/kS-t yK]܀ "_Qգ@$IAv]@qx?SvD?⌨g1-Ekr]'Y}-DyY%OݮDb9NڑU_h+=( 'ڐݯ5@gGep.m:_"[Mhjk*qHʏUcゾba3?8A,39_u%_ -:/~kkuLcXA.q4 uG=M1ucPR< q0,H)/?8]YcEHW}}i:} .rNrֹ6!q4GcVUo^DXOBo*ӯǺusӖ )ڒ%@x n?C'^AT[%['&[Eq }zS/ \^m L.1CFVf.ތYIJ^_yt8%{+2}aHV*n`y#6c9 JP?oLvr\UՓ٪\mSaO FL*ũ{\N6?lrd&tfee}sO^0gm>6gp4f{l |M^ OÈEU)QrzLYp98\+Ͼ/Y|;W 2FsPBy_~"Ũ^?5k1ojc6^'P7Yr=Y&%ǟi,3aIMx:_J=c_\zn;v8(}sc#ݺ0`oNת8s\M-}߭.ʂOv=cª ~ܸ8\yҤW5n}P %]<,lj{K2Ciwo}W$nePucu VV sjP[^Ӑ@0'g 4 `=b/Ԯ{d$^Zwƒ*MپՔn'F`D,r4b# 4d`cʙ$ }SI8}trRC(e,XWkWf6$u4?_=8W\J3EX/HrO_IG;|޵o?80T<;/Aj: b =@#xɍIg~J|<E(J~ {ⅨOǭu.w/l7Y*ُFw`x8R7_~J@yg{j p չC/W !sc=Yk0pVHm.vM)6*VyZ7.mgtPeİ` =UΕͰ,O [es<`-%i̫K^*缴e!Ă{ȊFP `7)p\XAu}:y{A32P.S8{k1ϦHY:tZ+:8JxBb)lS wy ǪۼN6ޟm9 ~Vt3H=Ŝ{s^)$k5ԓ@d0Bv8T0Ũb΢7珘!Ƿc r,0BLYkEHxR)cN6 3y I4HNow1Sj/Z; K톚,{Mu55ů1Ѷ$d_]Q+LƔLvv 8Pl悵T \f`i8vX[彋IPm 3if2g \4ʍDk&/;b{)Y8չ-l{Fjh\nL.9E+=2qqw4s^Xz¸* o39M2Fj73S0ay=NوK^.9SOq5 uڻwUV?|5~>.C~<| wYdk<䪀 r1 ©xv{u:YsW-˰pa\~QyKGZ#gj;]w?R.bSf[Qq ҅eVF;ُG`x:EN] T)4K ^|Qn0N,o ME|,f.REaT^WitBOn(#vR {pάJq!&6 2,ASQ[ ױ5FTƭ: GOAFs?By0O-YuꬉqSZ/̖w xk"g_?";^13 {ɯEYlv߿QHn Ya&/c~ݿe^貯R\+O;w8"⵿͝.ࣜbKm׻l*stlЪPSU$׍Sx#?w#q8{ ~]kUũ=O!=XiR؉,cEɮpE{O"P.q1N4{fy ]YLv_6fN[n U\h4fۇ; ~| aoͰǕ<!nUxY?X5~YOO}X8*/ϝc> u_;;MġiPPa6 ueP >"AN3]NTSbu_$;jWjIRN6=nL:ukOcb΅)scgZ ڶO?$S>m }ݱ:t:vA| Io-l%Gev&fB@Z VZ=yQ4UPqK#V-;nn%niN/FoI%}ҫrR'W[uwW}Z]Ғ@OqK^-n۸FI+kŝ,q_/}[j)"_iN- $[=DC=Z3,M-1,P{a1djF&e̶W۱8CT*ՖUpaf8td=ْFVev;U"3r5u-H.8USisoH7Թ8>oe;FK[Fv#̥gW`YО}8.=U(UA:eY` ˪}e [*z)P -רWߜ0 CclZ*_]V תbڅFB15[2D)AB~ZnԻ^]Te㵗%g-cUqOt ;GmekIKԸ*fyZϑ]ڳKݒ?ez fU UnNY9j8۳}W.+p0S"Vkle(sNH̫\ڠzlvv )&.e[4PRID "vё g²ڲ ߒo TK}̴PwTgY5'Ӳ`iXuV) ?s8}k(!1̰lܧ56nζ]eo2^p SE20=nٚ#QAS;,FXI #{{yݑ9ה߱X?Βk)9.rK_g{ênUm7q'2f_q};HS呲ٸqZjזZ(b/=ҍP\U-)݉N:gY'SZ{-{_hyF<#%GGGߒS.}͹&`+tnm|bTtY'1,1GX h|=Ö9{2qqfB5T]|]XSsy8H; X;$4Ⱥ9 liQW]w ˳)rlc^ww.ZaK%(WXwl-]֥lvӪzkal9ͧvim˳⺣ۜ04_6K=/mA?p͡/ߚMRte&sM4Hlv4< 0Eo48<6Zj;~qV|CxL,;[]}%K˥:Vm_Q_(H'ԭW~se.Y+ |#™/1MtbY~VK139_wImNNj]ڠq"m_+hVX4R3>}z"ː;]z=*=)3^-ܐmz';P!%m i)^Ãݨ'yF,ܮ^R0iEYGYP}Rծ 8)Ҽat=~ZeqfY9]A|Jq&`ԕB՞-Z8w/nOeiظ_@ٲ=DޙҞEaԗvYSs 0k4ߕnñ0G6}я)s'qKv`KAv*^CGaڂzxoҚ*ك7=7:84o[ }q%%'Nu~.($uQ[ﰾ)G'Co8RAR[3ٽX$ Vƅ=Żݣ -ݭPa֍*e{>|Ǻ4XҌ;gp=&t]%v/c]=:,<m]Ī$K#u;>YF0?!zqQgَE5v .ir2E< t|\L9UkB*U[߁Ia7+t){3mEqm4T5(*ev"'1 9(`ٔA;8kՠ+VKbPR[?d 6f V$+LhBׅ 2Wd.Թ530|zVXUsN#n]ץyÃaSsChx7e*7U!3`UNd.Q ּ[ONϢ\=НSJR{G$$#Q 8$lT$FY檇)")W br.|EGˉZZ8(˛VZYԙy`:R1urF`(4fS]sG,Fv(o+ uvF7[cgrF5d[!Ks]whHnĊ#osk՝01^s$i jypz{SmGۃ~G[ƻ8q{w7zޡTmüU&sv}[/Wl$t~Adbӣhz@iڌY^p1ڻ& FN yhbhac(qofq{Uӻ_5^Ћi_ۆbUpd8_cݽw<ȝo[LQQr_f4H]OwYYOWb{aϰ-̞P`w#Ge+BVym'6FޛGo !ĈST`.bj~ d|`wPR aCCI:$_#5 X#X@9o26h= Yv;ʯ] yRNOU wO׬(%oe1#Ӣ*/)$j[?h*ye|0 lȠ*uGx6uXw e.PkST?l"e˽i{󺰵Ad73tºsF]L ՜SGao~pH% DS[Z8=Qxys1 .+=~*w_Dd75+pJH mul,7zTB_L[[qUH4i AT9^g 4FB4b}iq<]S3v_LgѲq XN;1*4OVomZi}W#)ۗ.TZse;LJw ڜS T}hn6oV_tBQܵ1B}޿yY?sˬXUP'm.Υ>~Yb9V I+hYy -_j!OGn0؂B%쵦njܩFgz1Ae3Qlxa0u,5tБcj_wӭ20 QĨTEr-?,NкĨ QUYYYa+_ Iܞ%T=쩡Tb_sAAJ@>,\(1OEZ@\͈2hwpB0,I-;'x;֬:ňQW:j-pm FoR襖vn; Bf'ν{NrW'Ez/⳿* E 8z>[q?^텁ȪQ;_w⎡נC@uCv4ƈr1KX:mŋO䥛pJ^|W[!y1W/ė]babpP~>>;h?Y­ _c~a$LG˶bɡf,|c>m+>.8"NKFn>  a*CG(^"4uw Р!;3\Ϧ8uGg \,kכQV$FqwD81118bV!խ{im{&!C!X}Z5\|`sky2(\ 3C+" d\w=JKFl5zҥ.1%))J[mXkۊ]w_eڌ5gv{i޴M(=Y#vx(=2a𸈨t tY~6q| in8v.͆Ao^WĴn zq=8q3lWzd$Gs=3'K Wx;gI ~!pv7ҟs9#u%k /qEaH2~ƒJ&p3# pSFM֠t'/WbZEKa!L(fAÛb׏tyvۼ?w?Xv[4yj!S܌~S/5=?NMAz_ۈO ZсVM!ݚ0ybG'Phw\"Ue ޤp )Xzo;NW/-^Q>==QEyoDeMsw}j;[򩽪#n~R8Gj5,McMqDE8{O壳+Krz̹2$2Tzf$'zjc"n& yQ<S7MliH D՞~^t 7ADLݘEc;Nscajkvٹ&u7oˆ@ofb`},Z4yE3UՊDgb1mzGK6Z_'Xvn hpo_Xz˿#0Z|6DR:l"uGb_+I /a٪yz[?jMHksz> 4uǚUu!rOAJiATJ7fmķ ~ G;G㗿 4Wb̜4y"~߀Oaϟx^đ\7:`;Uߊv0=)~?%L}#h_1 FѪWv𲨫nerycҏRvb 58 !P5~ۉ̤;WU~/}"q[A:<'Q^7` v;!+o'I}|o?'՜Ψ@(R4 l"uGb]+ 4V`X G8>. }^'Eim&O>a iekQuH43Г@L"?T/Vixi^gGN;`֧ѹN\%n֡.fi#@wf?RHɿ_H@(zWP|df7yoB4`0MTN r49'wYH@XRQ{</?-!l0f!SmPٿ𔲑l];4*3_ł{ۂ5^ȇ{B? O_wMƊX'*&L_߇RT6MKz_s6ӷw~D^ҪCtN}{#\hղ)q;=֜aKpdz}Pf|!aMU:q/"*6N*l6)p:h?q FޙNQm[c+lfe+_9=[UmP9Rݘ.>9] \w7G$p > 0ނc9w׏*F,,ImupD9~H=̖ۺcC=A;a.Zahբh ÀWw DRgQb=1ds,MһSTdA9z~[wk}}D;}C"6' )*z&pĊI)10(sVzW}q@os?-r9/V}#c]HO[2 fÅ'cb]Yw=HH8yq;#1]:*"@jG9g£ wJ%(7$:߈e !܊O4Uك¦;b+cpUߴ{zew )1otףJb浘hHr/]sUA4y GW8&dDFի}zc sҞ%&x[}F|;/Q3}ɒU|U!jtbZ\?sϤa^?6+puбU?<~h;3z Iz~eX xa=3e#%~cZWk"u#n}([ 1%‡$A|nQAB]EڕrZ˕ 'ջ.ߵA2eU!Voj_1n73evMAm+Gkabꂝf qwtsIb&ƄϿ]i8}؛wcɑ&nI ^;6g3ԹXӔ,Z4{ 86H嵀c(kbbr[="frI7a}K ^*)zaG:>C2eCU- U}Od?eحH< ;>+Bc̠ܱ28?(v%"Bb蟯Ѹ[x%EYSU .:k# [pvV1jo/-9 p:vKD0}jԝڇ{@Vڊo Iq#_S|UT&(kX5eX~PN@.xUa I'C'"JϨ8> ֯(SЦWO{ñT5͟{Kd~hM,{i*]r0Ԣ_)̮A4 ֍8t ??-Au_phc #Ɔg%_1'BbѢ|Q*r6<|,1\WseWS~@G:wcΈ ٮvܖ6Clh͟bBYr27t `Ùzhzf0s^+9E= _l65N6q4tq}xY$.|Cg{fC'P{9ۏ&5s->\ci6[ө0^\͎#C4U[4xiԔ]P7by%܀1η!ªW9n@X`ߜr> to+b5`*B8׾ף>~'؝,JoH.xS+AD21.5`)˜aV%N|^p&VEڈ)1 u(TB7?'DkA^m;xbq4Bfzp,LJkЍGZsQzKM5a5x 1GֺR1BwJ}UʽꗷS 釃V2{iR+$f.1gH`ǫΏ#׍H3ss<[kRUZ֐lâe>vtbuk+ni p21oRÈ)}U)C;cUȵHf)]R>f/V-aW䨕Pg eaPM%AbV(tEm2(T& ѹ $Q/n\FTT[W)WO6ωԶ) 4 |K7&Nr'& % /4{(CR3rxѡ)&9k~f@1Fsܔ]|\ByQLpn:& 6ìrua<$91TΘimZ ybg֍af\r|I/=Yk7oꊍA}P%l\]OJ]t"7be<ԋs=*ܼv'LP\Q b=^xJ݊ zڳ8Iƨqqw!K!oړR}\b./Ey8Aj2MK~QQQހwC{VRE)vkF]'35ծ(yrWz=f} ķnK{zܻK!X^Jd5qF]#SpCR|vxLiQE3Scԓ[lp猫8Mp6v|Cٴ~#n\yMwiBuK.Z7SE[uX縷+Te):'oi ]u CC~LmbLŤ0:XAGlyUѭFJ3W`O!7t"Y [TC.#G8uGU"k.kT Lˎ*u1#Y*Fkw%nv_"*nLKmPPъ~xbU__ަvYdwT@lu0Τ4m@yew}ݕuf ,gmL `9@?S:pMSQt|yRE<3Txh7@S.Þr Xî,+º%3ݾ ~[4!8B&ĬSdE0Q*m+ 7 a9% cη}KU Ad4׍aQ7 ]k]WEYyZv]+PmȌ(R ,J*1D!Zc FJ[}5xet4R]mEenϒ5R,6Z1i7_\sh˷xcj] VKKs{݉u&fmYbMwM_ħ싖6C`jDѶu9,]܃UmU,FLVnˆs]33-k΂PQycn~U-y4U(lܕq>Q*@|LNw0x1yҎ߄謰1Mr@IDATC+%P6`]Ө`u(jGq.Sgy^.V-n]6MJ2O]/| ucۡ5f{yHBIŋi51}#:Fx8[!27pҥQ޾ Kʯ7K[:5/ 0qrL8b ,APz۪7f/Vm}+TM_׉Rh`->Ȟ|{H@Eu.+" wձ~eTjOOwWV1bvKFO=ZRix.q?!&u~6uEZ5(Egc렺eAl+B R6zh1+v6:YW$g<K9Ikc"BޯR4rɓGe0f`4 S|LMsYKq.IKppS&PY'`:I "Q4`,|ICv^+ Pk4 hi!hؗ`kK)jcMD$#I;wٳڳgf̞Nvf}>y{=k LÁr5'csY)*ʱD$P5JhWM,Z.6>w ̓ ߎvT SՌb{Q+^ox̡g+s}J(2YQmKFLcb5v-$L3^h)7gݸ̻QB\.e/7U6(_/|7SLb% Ln+>܍NZ0? yԟG};4]G#/ (I$OalhԤl|`6yo|į?i>ݟK ﰅaN uA_ыJ&V|X9P7Nfhyw6th':Za{Y7ߔ,w6s8f?n|- 0X/O6ܵXu9lŨܺ2dI)&k^-\Xh"(wz˟x O< nǺEر΁]v6uZK&e-\۬ײ42:w!;2}v3v$jhTơ=lM,'d(m_cPlΪf_X2] x?߂Q?#.H0kJ{/ _eۃr:&H-UTczOSa ?VœŻqYXq;~ã F1%ŏ !3;~.bϪGh5fa&0EU>ep*|7nULꑰ;ikn5"9~GʨZ5EvPl,J& 9ݫ_lbIr;\e.6(nZ>vR>DClro$ʪO^-/ރDPkܬʃ6WF5JqB$Ӑ!2ˊl촰C _uH(܉!ր<BJVF.|l\:o"I[14lHil*L,Vf,VN>5X;tb-(\8O'7yN9D&!k.yY NC1)6ye =8.ïwN:I j:n?`ʃS+ه=|V@!RT_|^6-ԥ1~4UccuNj,C?vvU: E{_[9{؀vcp4(rw/-yO\{P =>ZP+NW~ϧ(f1m0 ,QBζვؽTK΋%]Dk"Ue7fylz=KԢ ^'fQ?p-8EݍaKy>eYq+Rq~o_O Ocs8>? LH{b+/ժbƓgͦo|z߅k1lOiWj دІI y>{w r81ɰb˕l'%XfيK`rxmU}Y&RWj_Qkllz2u%6-`.a_ `y]8VLcՇ],Tɧ@8>f`Fm&g< 9u֠ezآcM{ּuOrpeQq"p0!6ܷdp D|_'ƷC]k l~ m{{fqX"^OKuIh_{~/`9Yi,Zkcb+(vF,-]6wiPwqP ,j2Ǫ11#߳ 2W[۴v+ZkK;% )Eώ8JhdW`_UHc)Gjw dZt|E.)s_RRF[0% qP(mƷNY7ޓCl1@DP Z1C DsYҞ`V =x!V4ш:ari\vIJ:~( w`pwai±U}J .=V65a>4WI, oDæYzt4)S>0j܄f/kVT*0Zj"ށQ`)$hf) y|HM1&['3M1^ N5;&A20E؊nLS*׉ySģ 3R6d[ϣQNN!NtFcĤuȤhtWhؕh1Iuh$D>#I+X<*Os_Io9JNCQB[é% 3)شo=o?/\# Øӫ)#?~ ]-`rw-g"htG~`*nc'"=~V$Bm5(q U [1,=3ؓIe)a}]J6jf㠽phGރ8_ؠ\/JEu[}]ͨ*lvIE [zaî)[N¾U|r_WĔj|l;Տ d]CgZQSdib̠ȫ7-U5AĂ3''5d[4 _^a{50G$ R5 akݗZomτ;rspkӱlN.m5L 33II( d :QfFpz~Z7ɬG+f={(7%_ uS|ed4{{<a's'Jztloqkk{z'ϥ1ϱQq|fEξފNBXՇ bvL?ҋRA0FL뻗vˮ=Avn*|/ڄb!˾x4.>yKDZ6f3b{.vÅ4cYTdg(æߍSn bLiȠ7Bo_wC۱l/LKurrrbrNրNiǩ.;FUc1a$0Wog7`bȼ|Fg"wgpMVF ̈)T W+n `ٿîs8:̱Wf!Yُ1lĒpcNF'N؉ٓ%'"qof gزO_μ)%*!hẙ g;Α6K}pat6^ 1{{N6s#=?cWgoI骲 6i?90Ɲ#J޿_ǯʫ V3˒ ׺v˯'Yzqf.MG2+aYM oWQjk;)E8^C[d)>!@!@!@@\Irv+!0mycf8.; 8\rjrRdR' 0GbTOyܹ̕ u9_1N8֏  ' B B B B  _i߹0!@ć@7~IUA}틤$SM68V&tw] qW",NBP2 F.K0D B B B 4cهtoS+˓ !`yvvs;.w\*a/H̐ $ |sL6G * ݀YYHOَf g"e@I!@!@@<L.(.!@! "߆oNj[II"E B B` ^M,I@H!@!@!0lMVP8k-[Y= ٓ/ IJSJbثP27ݬr3 D ml#B=3VɈnFe->u y4X=\Y\- *C''o(B  7="rb¿ݧiZ0$ڐA݆-a#Flrlhdʼ/Tf{,z(!@ċ(AO ܧOEYDąA48ljըsD6!]\V Y[~VokzVyѓLˇ/hkG]L&u`3Y]hfPf#"QUzWcǸ}rnÖ'7zy-{4oENB9hݧ'v7=迈3['Z2o&03A"@'EIBI§Mr4JُDU2&yz`T#-?օw/GMbvŰp8|aX\z2b<Q!`ӝlojA㉿D8p(1[v*Ok^ǰNJE~"b _6үb=0p8pd8[˱ͷ[HheT.DPU0jf`=( B#@'CcC>9q[*{>_f92y}Y6Y\NmNpV!۰l!8@aiܕ[JE7Vƀv]zÄ$b zNyJF6qq3棸ԆۋoxtE_O1Ty 9WFJqcK1B@RB"NSnعYqgadL@g6:̞3YW 0#\0=3_ 8V\\afصx˸v,Y,cysivH{婥!kߘYr|,7qp 1ۖ{\*V2~q#0"G&l'>ΡΟ29r#/ԧ @H}tL̳ZUueU oGy/y7W-gUuX:7W'nV~9Ҍڍ4VY?y7\Azedm?7z$m/a WpiQ3~g(m 6dr ?K^tv~8w> 'NAiǏfvxfo5[dkGGK#<~Wlr[qϢN|͙ ?2_^0~MG//o>cm/YcJ;<^V]vA{` [SԺ ?gG@S#?B>qMa"|`ٟ\hӛ8)>&#G3n ;M$orLO>uT;9S19'+-,.r;vmu`\MXY#7tRY7WLm,h<8a?gm:153{Vi_|f7:Yl>cָƑYwļcAbRȌw(E7#/$?>pC6>&|ۣf|mMSd^>⣟1DfM;2L̲lG/9_SkT:lbi4[5F VF0ƍbBf~ڗ/߮l9,+د/G_1EJUc|d<{gW'w{e/ OfNeuNc|`,{gޛc޹ޛٻc/ߒy.fRwg<5N= ]>Dc?էӴfG>nKEjGeSGkԺWHi: aRkʟchJ7W K<5"2ҽqq W^x4y*6!=vIMG77 :jnsR ;9wb;SZlUzzYkЮ=iCU:lY9DޘQVϷz*C֓}%j&>ڧ wiھ0c9 VJK< ǒk6n6W oG Axظ9LFM2nz.5KcEԏuI*}(Sfʚ)r N61r0nJy<% |VE)iCOcwm(U9 1MT}P&K=ZX)~۪)*]74~2igv|0i8b^iqNǜv;9#;1ob1TF@#{v~ ANȾ$Bm\> {EAFČzxQ_W̯Oq`rWH+4 7J! I+kNObt.wffJ@g&@&$g?>:ōln`2*ױ͘1XL{>)z$PnWbyӉO?\[7*Y6( }'نHRX166qNX_yӜ*8>v2?%G̨<3x XS~>c6wh.ffY׉m\G0KzL.H8[6^.N|)Ue9ttF, b8 E %wX:_2?܇ xx%lv>EemzXWݢb&gy% o{ eP}h8ٮ{]`'(/*Gzиc7\Fm(*ݻ & >f[m}6udTvV(32Oc6V wbWfl.\ڝ%XtH|v#\>LCxyb~6'*U)־L`z"\=$䛆ؓ>cյ>o,? Ir۝E(y˹m7:^ʪ][v`V<6?/Cr>GǍ-ăZ+#%+!qQ`2χ7>>!z Գ`JA.2|}xJi%HBr{ >w+D5vb l˙LNL^Mvk;*Mu8,vԺ|ayi"j北pˏb^qD^R-_Gr$Է_D/ ,GٺH ڸMh ;5t,TdNefGX4:\Ů6?s-ls 6) 8Q_uЀ^kr]QokHGI%L=mޡqmG.G+`ͩ@7v޲r gwa/t` g1>P"y`;;q(X8 WO]Bjx_X_97I(~VJn_l|P M3W@zWa]z8PS_ئ[rC}^Y|~c%*qY;Yed6fqeNdka8˙9V[hӊiRZxrtxl<&̩ tsP{Vg[u7lJbM͞Rz]p;E]x5'+W,;a+\}F1Oē҉b5Olz3.uy=|rC|V7q>J8NGM vr6iP oF5ΗvOFO%#'@m咜W:VEXLb/W>9*peY9Oy*Q$0OzH#gVWlFtԆ[}}.k5-7¥f ]('}zvIm:(]0UcȼnYOsm}4wr^=QxϺZ|ɴ̰Ico?;B4ϛqb6mč*ʳK'5W WUbm9X&``C-ЉbUg)2E'7BN_=@ȱ Hx~fv J"~Ϛ#\ʰa!Q;3x>{1K'6 7M' 1;ۍyCfh/ǡ'6!?KgcO՝,_V]k S@pځܜ4ޫX"ʧA+E .U tDݧ^dHLC,1UrLFrK^7HxGW`B4Om-jr]3:<1GATG_z \±cuy=-Nf#Ob3%{ l+Eoni,?ɚ0cbwݏy!Nf``=4P-ZfL7)m41Y*bbAu6 cJrmRxw }=ŋv44lMsmDBMqZ8b< $ &R7y- vԟ|V"Jvri,fa=0- ;_ /߀=Af-6ja54 N2!.SB(/w7M)xt@5c3޳t-焩ɤ[K]׬Ix)ör.:`m$h>MMKyEzJm0t{" n,_㪛aa;HH}">]$c1 oeD,3w`1 3䔳 9$lP(V~ ]nmXnײ){7~ "T.kC]iXqJeYߖgk1w -Q'c2"V01yqwJbI!.eL] l Û*|1P!U~Mg𓒻 }@pĸX]2jxBK/1X S M0]*r~Վͫ⊆ *мjpųB-X[Rko4OOSe+?=V]VcZtGe}qQ`g]BL)v\ əj_l(9ham#{O|xVG0\ #.LAd☱ujPDr8Kf?.FhA)w8LSE!7!e\D%i}z"c4h]U#k 1779}Xɫlm z|T7 .bfc ŦsհL1J្*Z}(υHLf7]C:N][FwoIxe-ݿű;8Ҩn,47H@1޳z-i!7co_q΁h?![vAnyuӄÒDէ $cӃ`1i(-d*f"OV7ǁ rFk<Z)VG =VT:鎪+7W}?UVwzu fflƑc! qudXs4X/\iMAtrcG;DLrق;Qvz_|㭥Ͼ0E1!5A[.[&~oV2L>sTtzÄ)9CRژC$*DžT )hVOLUnŌɊ=],S#\t,@,Xfrd i89'UtlkkA4|>oO}L-<k刄Q0NSCvק' / e 3^́c̛9+YIqĺ6Bnt'&/#~,g潭`[`c6!o^fazL6 1ЅΈpo<090ō1xT%ln{P.6k?@wp sςE\1޳vh/gcrlՏO+mfO0/`ǻl aDv;j~t"Q7u4$ɪO1dcdaf1'13Cdш3jMs"7hm FƳqǖNu%Ya ކU:JG"Qquju aqekdR%5Tu\' Qz?Շ5 >G$>u ԘxFYP_{c&/JI)\TS A J|VL8SbT͎97H'袦 n6HִPw4ߵ@=>B^V:[P t \ hgKX6VXnD0 rƄ?g2 }g]aU[Qb)fL {W"ʵvܕa6wf=MMs J{?7{_=3t>D0??3@B% Y`w0Bv܀kRbdaRMaj 玾%׿H % v !:HV}O%L;& 3{}2,Z'vLjMo"7 Eξ|oa/Y׉߂݄:WC+Dq̴~D/XǛ勡)dݰH$q=R_ZjR7N٭YSТbyG 3>OuKy̱zA9 ,@5u|~VkLQ>n((pR}M1=gۚym9iw%VrZCPF-atRm3r2u3:vY .2)m1ק8tӅ@lc,T̐l $f?j>7`:!@|U>m]q  +97EꟄc=4.x:pzNFd|s3~~(e<] .^|O۰G-e:? m9b18f2vvG{=׶K.ﷲt;z; KgV-q\Jnd<gw$QVHMgvan+SJ=AƺL@IDATD礪24|| %ZY %-U^1MGkA S NY5i֒<~wJ^l!EzͿsĐT74"AdcGoYt~pz{x7_ÞcL- Xi;kcěBsI\ބZA# cd¼B6p=wݛ0lߌX0Xm'~Cuo#FKDa k_a&_m7$v2jt4vDɴl,(+;J~h:XZ,r$U|*~Hz=[, qXssB`sJr^3`#1iX~dE`\xio΅G]xn|~o_/]%>嬫u6 Wߎs};^<'Ոd*yNCi>}(f0A ߱֨iIux4AS,ijCp}#n1B͏j7 6__NNL _SmxnN]psZ͂= c6H=l|8/sEGO'e AnI4;v? eZ3TSGfY| YI`juRלPs[E~lZ;k0e`x2 u>݂fl'4t㈞" ?(*Lۺ|&'is৻$ ?8~BΆjԺ|Q|iא3j_,*Z"8ޭQx۟VkS8,Ͽr$BU!rNᅳBn8QCEo2x=01p%) o-4ݾ?Y`Xrm/}A4hLG/X~|7I];~佞_FB4ΎS=!q[ CK3[yM7Cu(λmdҍ۰®tz5?ںC dV}2O獍X"BoyPHϥ 8Rnf,4ezmP?ۋ J=!}% .-/g3BK>> 1֫)6?;CoU+|b6@n6wVp=1ضP pFk}WQ,onymofY3NƬ/B!/lَΠu6p%Džg=/^HYס&$s Z7ˎ]BS3$b<̨F_ nZK^9 ;jIASf1e+3_YMѽV{Vma۪b (_'ݯ+nsNX&u(Ӑ تh Ӆd}|XbYΘ1EvqtJb㵧Ê2X0#)?PŠ=>ǻ:d]v?-s{5^ k)ö^vn&EUVЙ6X1(/ o`ZYl&(T[vE6c2]*8@Z1"Gɻ> \eu3ԑ݂֏Ĵi!O8 1 ln{9]rcpQ $ݎ$ͪc頩Od'3*gcp|q)gALGtL_< ,@TS"qO ^v{;ER"/nd/Ǐi\MD}I nwy`+7Vr>;Z8R㫟GyU0Z-H|-RXC,Ve"H^݁L=usXst:Cz3K!R[`Ļ[= UpO`GMeE6vZX!GyN~@Ʈƛ(jr/ElcDm@KQbJe(vҥ"1WJNC1K;.ïw[$.lU-2bVuX&o(G%V kɩr3孼mI`SZ-osqQrkWDC-Ć?fjͦ5$o0v:A֟Z,X gi% Noe޶3٬mG 4q|f 2wceNlyJ,ڬ6 f`zYj+:`jz5ZFl7ϗ+nS](lކd n)9lyؼCK8R'{cw;v&Ĵ|Ƅlu+-v'܌k' r'(f` oLM$:Q|Vu`.m`"93>1;oY7.f$nr>J:+ہc+a[]ٰZqƅulM{

˾3;S{{;׳w:{;7^w{gw{of~ yRwg?盪Lr`̄_g+s%KS갅E5>٧{.z2W瓜=v!BR”x]o"X'/Bҡ&MTz&sEyj&-ErTEcŸ9y/ME=N<3 zZ65o%{%;h9~56O y+kR\DṉcLS\rچXmWHD34E{yQxPܚnWe|0Z7hzѴ/(j>iSW}fvs73l4eh6xsPoeT.)8ʙW|Į`>Yqaq]iqqq]yqׁq]׉qבq]יqסq]שqױq]׹Madr]qq]qݝ:=:>Eu\nP*zCE=HRK4UWqrV} C 7.`'UГ_Bk}%aUGW.U?̓ /†Z@ޚ"Bœl¥Sͨ)/O?iQ㄰xO *L޼}R-$S'm/oFjtElE܅]kUO{lC)y_@@ɾe[D?ywT^)쬜b{b4_Bs} Jm~Nd>婍}8d .2%)-gZQ ƮPI|5^SFk|an@c[T"ڋ*˻# !ΚX)u !*7ݶe`M N|hUn~kcgCNU7Kf\4No;lً*]g|r=5}Ofܖ[7's'^}S>1 N5+# 8gw%VX~c֩mmvĥ=e٢Dkf}2OGz>8ߌribsV٭2*ct|qTcl(j@W.$@d"fjZ'/zT75j'׳7-l8,fR6KN7nPSj֤oA~lODO Г2iۊnXXp۞x7%Ԭ>=`u^י׌n `cLlb6 [OY 6(چ !gMJ %Ulڨ> YX!3v=u)&sY yP_N,;4n<*̄L2fǙWd%v6>(6!l6:(pn=YW zPnJx#ֆs׺)vˀfvf9cJ&&FGs;i<.~;=3gC"ۉ^oQ1Ҳ'c\DK&yr@ow;.gҨ*t}>fxD`ntNs}Ȟ|: t EaТ{1Dʭ*no7mÉ.`4ksS/2S'MF@4f۬?ik>]l+T<ۗd\*1?y9uI7@m5 g^?EXv;Gp.u,Åțz=r:| v)G9;<{{VfNj]w%uZVv"3>b`^7|"Ə 09:rC+xBBVNqz]1"c>!.VngqcGN伩ģ&̿'ho+SXF%Kɇ!q mNǎ \ܩe|>`F RQztlӱؿauXg(]Ԅ2YݎKقc/O P3'l.Rb-,gVkF!1bD s7|Un„ eI˷ qqEbWάvpB=8FÉqfEp`Fpz~Z7ɬG+f={(7%_E٫ uSC@Q,Od!u)C@h2X FA؂jJ9%?zM@Q<# ]nB.,a '!`RK^Qi+9Z{(7uk4'`m0\~'ݩgݤ$&YK.\OyC),tCu KQ3A_]FתF)<Ǎ_*Z:p~Yۉ3'ecڴUO:[ӏs٭~^y_RkeM qdMxdoȏ*x Q8B  !@c ?z 1!0.MG2+aYM oW>ZV]ӽØyu˚}~zB B AWFJd1rE F@o3`8ַytAfB "! Mtt$\>"IOHEOG@E GX= z?h81N|?x B #Qs$)@5a.J^R$6@9Sڄ!@z}S`6LGhh^|#̢njbB@9!Fi ů4bXnֳrSUNkk;Q~+ W`n.}//Gq B ɣG-xǙfXudS`8vtIi-y% 5$?7uJ:A!@"ЏC}$=X>3Ybi2BG?a=f:Q,OfMk4'`V Fi ů4bXnֳrSUڰzZ7>1+B!@!@!@!@!@!`aHQ,)Eh9rSr[/' ' B B B B B B B a)Qf!@!@!@!@!@!@!@pHQL B B B B B B a)Y!@!@!@!@!@!@!@!@!@!@!@!@!@!@ R 'qupaˈ݂6N<='Fel2 ϴꅲ/:ENJR330*u ۯǮlx[Df '>ӿ?>cRB w{V ӈxR|Pާa$Jn1?@Ɗr˸q5i٘a`q@!h>usd¢)"n܆WBݲ~Oo( _dK.d!#p_E؆fSC8'32zO?=ۑkaF, KmA(!@!N]"J!`6#C ;0pkST90G;lH6|;P%Aɝ}I_0 l@`}QA}ϖ*]nhڭ4|~vMCw QhՅn7韸SЄA$Hh3ߙ}w{2&osgΙ3g̝˯6.].[p+/g{C+Ɠ9NXm;&[^ []TB"0>:h|ԳR" H qDID@" e6$<ho>c';O/&SӐs!-u&my l{ɐIJpKΈlP|)_"ڽܖڛ|줯Nbg-%s J "4pQJX9%XI;[Oյ o6dg?08L Ŕ璏cmL/?ë"NsbuK$GG7Li@𞖎 0/#͢pOMosD9ژ ptQИ/ܡa ._; Z}6u=Դq̈mڦ^tP;h:N}(MЍgU{ͼiƜh? ~w 9'ʗ}GZ:pc2ola% k4q߿Py6; Ym⯕;~ fNddjG('mW: b ιX27GpO;~&zH\'>?19h:IIϝh9wf_[0 Y46{+f f߀eTx/lN'Noh1۱!gێVhʙo,vև?m,oڙoΉ8rkK8zON[N&?A<>" ̃KgG?F=GYqv,\IY|`K@$3'}*U3X闅mt”@`Qp ifµ,t FfQ3 Lcͦ0Nq(̧ ؞ )Ha, )Lcnp+PXJN (|]>An )RتOiSl$a\ϐ=s8=;5gtf<򔦁=vOP>Y9VU=^p+$N)#Wj&Ҋj'E6D u6*y.z=gl<4+g}ʙ!JF̔ڰhUhS>>}啇G'|M }O|PnR <+Pn2߾6e_Yqi vϭV7 u#r$!OL}sg!2`cی8a6Ц3Bm{=pWQ;+J"uMylBjm\|3Jt6f~ >S kw~kPWt|ݨ2 YAH,TuV P_`﹔jkAxTrsg']JAYii>EK;:qDƕ^,LmP?ư5fJJhǚJ~*O9m#0ԖE!\^1jƙFuWIZi,rnz[^[]R ׊jOw+/}h+/eiTjWٹ˔΂LC>qiwy 'TϲqޙF~IտyJQ~sjU- Jog1GGs }|RWY(,Aɧ$a$/3foVr`&'Fت9(n 0zQTx]X?Yz)yU%Ja"IϧIi룓f-׼3iy劍gkGR MAo>k(ma|ԧϬt`,+ܧ,hspzQIc\[+2R?ƪ9Yw0!EhG|Nj?sۜ3puDOS1Ii(vn,^Ju K)ާ|:%2e+fCq} [tO;27ǫ4}{_ؖ+Po mR-v"OCm`@-m:E]-GRpB6b}1k6ֶ)r^ۣ# :?gDeԼ筝M?v9dQܥ_ysSؓ˅wY899zFqx9Tw+ʬڴ~x4(̹DU௃+PS%("&-ŷI+I}ٺ +Am_<"NCzK6f7c:?_Ih{pk0?uo.ʬؔNlqZq۫HqOI˰[(\ĕU8<[L\?Op^N-lc}e NV_Q|p2, эu؉y =Teܺmuށu/ޟfAo٢Z(jw^>r ic7B;o.[Zz_6[oP_n %~ƷT-q ~]oK,v:s{;ʋQR*qO'ۙ~8:/-~£eٸxlY֯Fv8DL]@e]ˍ"0~-n4B|oc`,[;&Yt`WzA"{}Y{U%*gCk;r `uOQX%HVݝ`%{!xn_kSS0#ȆuQu~Sޜ9, ߉byخMVmz/m/ փS" glO?a였,>/~"UcdLJZbݼ4 1ୗ(Z Y;obsv_rIHIwrfO@w0~{ ;ضOr_y*p]Sxd"3}?N-U2"kMM"D9qЃܓ1WS߈%ᵓcNC^h\F%39DqC]섴o+M7Bea@?xɎ혷i^x ވvh,9Wotz[KL +g]?俸w/J/vn,* m ,gA)FL箇O;oЈx6/>uG+kC|gяQFS.FG+nEO"{lcbyɀOx8O9hZ_gRYWr&xzc kБ(@¿Vj* j]q8 O+CēKlWw7%& 6[lr|2_ʯm#-l%CzI1}C@OR|HJ27HnBޙVVo(Pe^UW,v ?tqv։Xº֨S@G+?s޶B& r"l=D<p>Et`QEl%d:DvYM7dJ w+ J+}m:9s3(`zD&5Uz;"byŊ"`v|;41bNN]YVJݜ>1 (vOrd >TܚڸGGm_ҭ{urS+WǂNb>PL;Kp HAͣQ5Ц{iU*y^шwOblX:ȷIЩj~7wi 2A[ ,:qlg2i@*>ʊmSͼe铀A߀T߉MJ5C~o7ra6{q\%ͿKo yW}v 'QȟHo610UW o'M:ۅ2T*ӕsOܸoߣ*qK٧nCޚst̩AAhZlE,umLmQzޯxtE9spRocc8șz۰qP$DPѿڴGsDLD9 ijt}L S/ Q}+焛|XYLFP+ߩ]+e=]B5G $fQ<&Ʒ'  eu,mJr,5 JuTW/%*6:[? fr>{y e]beh;bb9Vlqx5FE 7Gz«AtDZ,Zem7Oi9`L@Up&'-ĭ =J~ަ׍PgE%{1V0@"<BJ9ttgyGv"fFDpM:%rYp3K2$~Փ|1O"αÉ rIuڋo Fi(vϡ!QuR 9. =֖~2*]&ʋ}{Qtt֩䉿C~:fBb>:|WSy1 m2o/:4YK`aqIOiip3F)rm2B>sB yLrx?`#&:d):On?mW͝^l^뭾eHBnXoOoڂHGg' ٜBkCPKvv̩,v+ ӏ ǸJ)t\ombq3'Z(# +g03[٭p hڦē3/^n^YN>EA%;Af(&})9&cQlwgyHC'1\v ɓ)L-oÅ}-\o'\E㋟2ޞ\ӧLo%"q8b3 FMգ'ejqeG3qTPAchN me(c IX@7=w*3c4>˾[Q}ux"02 ܷc_Loz;oܙ=ǔBPQ!N4.sw`VhMA/~{;K's/l%X<7H҄mͷN;އLRÿKs*5h=ُ\Bqn1Us)Pv9+3yy۱d!-#p>to2l؍y{7{JP%#{8l a?I,]$M-5M]oX2%P- |ɴj=[`#*?$O>ho&A$@rr2)'et[$PႫ9&dlD ;|(^/k5lVNB|6oQbK4f[x?}#ƽi-h[Q=@}O^u}%Yeg&wMx.Mkn괈mu\nlKnUwgw+m<`OA_ q[OYHhprI٤C(ص4/\V_ Y\'1K}$L1Խ~[,ߎ3H-p- S)_} ^mfX~6ێT_r?G 2RYa,Vz_XXbM= )gz*! Ov-}oOƋh(Y=^|j]߱:y$˿7jT EK6Q "]~˭X"ܒD2'1f_> UIZSHPg7,B97 U;Mh5?t !uOrEOŴIiHtE qF̫I"o\W/]W_`kLNbrroVYlLDG8rƪb~^Qo;,~'}m$?_{3Z\&{} &~xur )>qhQn w"2g*,YrGYR2E\3ZR+XQqqExʿhXOS'*l\;sp-Xu 2LW#^|F΃9CHDj|}km- ihq m0^;IN2ţmVm^5VF01}ơ Eᱏ;!z?=[i8GhlPHxMbuDG8 wyDܕېH?+ olF'S}:?ގXLWCaOy9 I* ,g8*{1롱)6 ۦh˙FX/6|F7F{(ShR!0aNs *(Dw`eP5[bv˰S"aOOMf"nynI:$Hs<0;ݡѰk0΍-' 6IȸMZkSwL R&_ZM+( /.Kx,iD8OiؑO݉\7twySH񃽗!Ϗ> .ĄDշwYf3ڒcZ_+uWq/N,i>ԚtlDVL*ZMXMYM1c4g8P5kyXv׽GQ>_}ͳW U"/dz2-g,\T91Q.ǷZS$o|^Nˆ!B tȢ$o= (]]U $Tį1 ljm#f<^R&|ґ| FsZ. fm 70{.xZx4 Ţ(_#aL7 NIbQMؐ%G#gc|˚|khÍgѰDD@E !c8+ѣI0oDw+șӲaS:6Ed!S*r:}k7V01u18n) ;`hxTc.ۨǜ1:}*DK1c(C6v0x8KN Xv$̚OZ⾀R[֏F6/9#gc$ܳt~jU}5&"PͫȾ<6+ D`dk ED 'Ok{DچW4Bo”l<4R%c~c_ÞnEf^P/-^0+(I"3jl=xjc/n_w鬦mY+#l~ bVڴhjƣm߂E[xlh6,I礛7?uW$ĸ)ZbΕ334xy )Z1`"ϴRZ3^okX9KT9s:e݌w}G0ᡯKƪe+Pw:w)ήь^9?:Aڰ]BGWE|qkDq#cΨOһgSoĪX,ze{6f#_>nNi3&'p4oh(1`zKcqѼrF7X_.]q#:,:}$DtG |,r-8tf<=Onex5I5u Md>8R*d@vq)Tܝ?r(y aT ({@z(QO70܃cp6V+~5#_C0 .;B۽'Gb,:(mUlHP*{8~r|Ps;lU[Ta]U7sCLjr;U8#Qr};Ek Gq݇aKX$ɺo2~[oէNLrWSatUsF@MEi梧@%i!R"9x6w"܉+O`\nɍ[jX|VLQ8m.A~1es mx 8u{94PZJSD0u[vO.M:fR|eܷw:[9q{߿ԣϕZ_{EoW30 VjLs?jHjޏ{``]o ExUʸgj4 ؋;c6pTO!pauAVsQZ%F%^ gG.ְQ 2HTfe2:ss ˱jnA /7&fch1D(+6~ZURԵv N$>"1 @oCyX\@ۗ!ȞCg 9{'į-fuKimqH|ۤoe`U!w޽ثz4{!nP 8͒I.ݍ/zCl>_h~VC{(\&NDSSP- c?;{?nx 3RB!gW|vBfݹ +&}sz{lŢbe:4]cxVx>< l_5;_ncKx#'6>"E8ȎP!Yf2VHXEMÝf"%i/(8ڌMKӂbz ޮ{}1;yE"@.)[2~lU}/p| ]ҲkZ;_JC~ͳN;ʛ1LUhl^ Gn.iz{'ceX=W7zג$T,a&cqW U?9D^LvmF٣5wfl^ij㡌%^n+vQfO݃g p

eIOvUϞJ;ʶyCp-U1T#xv+vsm1Y\%d򿴍hp|{}٨-(EM[غ]ӗU6-/K.]31u[ pP6䲎;Y,Mwh؄􊟢dc&.=S6ϪiD2T,@߽w㦔A^/~_WKO{q5 kM>iWm]gP5:~ *wZ̟7iwm@{6N_4{Y}le8t3Dsk}= 7L=NIom6ow -sజ)4cUyX{'u\Xw;wfM(>y:cACDOYZ3h!\yc9n0ęGQ՘q FmpRm:B}(knPg\ΙkCgW4'/kqCOꖄSm#cϢp;9|ꋐ3n6~͡_[:ڟFN}YFpRoXzۤ~oi;8ޮ/YA?Wބb#PHT9Ko5aOIl].7_`D-1'gQ|: D``K+(Ysb{jj`,&x W[”@`0-؈m:p-2]:a6? S`œGa>f@!B 7RXD!b 7S[(ns/2 pOPr *cS`@i`nEK(ShѭneOHGiרx82]k胻L4M2XGWh5|)-}M\xF;ŧ}m+} B>amw[V[j|C?8]m%}-wXQ=MahVa*PUAR4ﱬKr cgGWlcPt=Ng˞uI.M}fDx:*2-.c}Ѷya1:xd1SaA=>uLo&LEƂ8/?M\B{BsE)#c<-Ҁ}[9rы>`8}-t¾2[}j懵Df3\,z8:3ӏeuʐȔgNʆX [*͍d͡3JeNhR-BˬWIZC`*OUu*k#myS{F+Gˢ\} ةi|`P)x0G/T 5q5 6v#y;Nsj̩a =Z*sv*tNIbr'-bq3A>uB>NoTݸr9c>:c>;Sx̧|{ǧU ~BoUgDiYP_J1/dqM 6%`C"0S+QGnTÅ:t킋5G#% O5$;W^)ZczLeM4# <}-skhYQI۔1M.0>\Gyw-'_Sƕk#:uGakdc/cj)>&_Zn_*~\fwTd17{GLM#slByIRsMJ4jjF6Ԭxens\nĮ 0J^!Pܐ_ZΦ]п4"dŝU6`9'{M{,T dHI/zwHy{!d,؉ 8 W):GGr4sNLmc=*v~S2ib ~Yw^*P%bێ&gj8ߴ%0TҧT%`7/b=C4gV\I6/ᖩ_rm&(X SzR NQ}(/H@@<_iY욚/֍]_S*a- FB^tuٳ]p1WOKv<,Z8Qat.7S'"7/k 3 L! w 鼈i 1t"6fA:huGA'-3N_%i7faqfF DQsIǥӧI-@-ikph5SDZXGyS.Z<37~榅/A3Y'כpir:&]Dh2;߅x4KX0gK1G:{2.t aLHUŗ wH{wpue3#eRՂ|z{:ph+.LiCp\p#2.Ofj 98lUOA`]u< 3x{p"g:I1/sAcDӄ.6l7?)ٛ{8P%&qI.M;"l~"ކֶ@O.&#cH,aBGih\w%f]D+FG'qć4 ̼Z:YWbNHMQ4Vl6| =mӘ'q;тdjK>̌YTTWXKXvh'yC)yBem-aGrXr '&0>QH&L( zSHC lWGs4Vi{v~s5/U\cvX㟱&i}Ea.ޏOFfv~Ug>u5|l;H^H$GB2-H$  qJy̷?%Eo/WŃC9x@- 0|b/&.\/ ODqqp~L.:ʈD`Db;m85ҫ_gqxD@" H$D@" H$!;,*x:§Cb!HD~˭~V:uSDi]#BE^Ǯb~>V,e8bdT" " ņȋD@" H$D@" M66җoqRt9D*x m]ZD@"p"_pa:ls/B{Wua ˰n}bwكp6._I. uTdC" H$D@" HF6ix=b O?dpןK$ OOW!yd\" ɾ|kv1WC ,ij/ ,H$C@:B$9D@"0jzI$D@"0pWcCxsKd92ݐQ3$e I49qR:f:E"0~z;ʺù *6bD|L" IIeYD@" HGPU|99D" H$@ʬe(-]uɕdMؐĢ2OڀYHI,$5)iTWIF@'0%6 x@/me.[w?ɒWCX>%(nVH~,ntnvMMo}(u5Jj E %D@" H$D@" H$D@" H$DY&LP@9p‡ ~Yu5pTL>ƣ埱sv0{3v(D@" H$D@" H$D@" H$D@" GHG8lɪD@" H$D@" H$D@" H$D@" `HGD@" H$D@" H$D@" H$D@"0qV]D@" H$D@" H$D@" H$D@" R$D@" H$D@" H$D@" H$8C@:YٜsXnAw(J^߶+V`Ev6voCxU'`8yk6l5kDʑَX1!+HW@݆ W62)F`{I<}uryW"@vnUVCR/% wnsz_fF[a'Nӽر"`H-=#Q 9cyz9T4jQ;h ٚMCFG̨l*dKa*P" H Ie >c#\Y &48n DNԊ 78 ;rTޟ{?Q4CPZTPJ R[VPt́u.ūY!o^6|3GKL:exeu6,.{ {?*vE'QXSTcZ%ShFƥs0?Ξ>jT4/g~_7芔pD}ڣDP{Eg |~=g(/ G{+QTz6T2D@"HGqBT8 bȣT)$#@aZ&e*MGF\T(cc1K1'钔xc\h\ \F 1g $'!tt$Tk z@72ԭwx]/4=[0"9YqH)aپo}no Fx*WB09Y;++'d]21mTu9ؖI%1tъdK$c!6Ԏ\{RwP;_3zF{S-% ߋ]ů+Lݨ<,9 ?v$!%E8&:wxe5OL&טunJ5"9Rr$@!{Y;+q_rTk1/UB<%Ҧ.H}1.D@" +VG*oXv?=-!3/7-M+lT,{| s(oO1*H7<*(8 ;.GG];WZ6yҸNxKYlGX8INdjЌ0x'Ny-}%mYF2gD@"`K[*gQmDf`&<)INs˨eK%dh,HF|Z@LdKm&f{H HI P|k4Bf4ܛ/qKS2 $fp>GY" G V:l} OYp IJD@" P]Qz?Ds Nv~,~0 ~w 2&DDOO HJ bn17EBNIh~OQ6; Y13LJ?M1)iIpݙT-M=8}g.1HGrZ:¹3mB+ܖ?ތc')OLZKOa4]_qk.mݘZF1Gm.4{maAFcnjChMDBJ?8vWm&!=# CZjhYڳLj TJ`k)oZk;aiu+p?N;;k Em"CͷM_NL 7pO{I SeDWioőcvxK a 9e.yI;ڄw@;Ng#AہlOeGz5G0ɇOww/̴9usқG-ucבdL˲ 5yavd'\u;\7ک7]oKiV*v#y 0T8F zn%sܔe;E~씳5k q.nQć>ٸW\,E?qkq9aL' N$Id#D(_&>8__QN(|1/8HnsƉ)nB>ƶ=:N?g3Tɢ oqv޳.6d#vtF\ىL= bf~SՍ6--.FKd)957 ƪb ߷3%h4C6rBƼ>&IWp7$o6Cd&O,%;of8bz# {m8(KM;k_['Z{b _ 4R/:n+:< i^ cu?'?M[W;U>iґ1we8mS974{ ccɮX" `.; JgL>0k!5˫*MW0)&/ Wۘ)αp iNaF \Klf?[, F!l s(\Oa.ySX@ R" YS(BEV lo),Q8(|SȥU#G_s3+M)殩Y_%pV]trۇRJ^N֏۫eJgʐa*u>h|KJcb_P<V7`Pi{*[]w*6hS\&ty6eOVF&yĎsHRhwJeU6E@ҰT!f]ԵD+1˫lTLi+5ݘ<-O%I4xn4CJ2,=g 5k4AkS 9 c6nR N_G5)-^7d+:N(Y>{[? 8X>zIEXH$3Gi#:;(DrmU^QRmp+uiWRmbi h['y,(ۜ}f4u߬_:SxtrWiw"VZI{O+I,#l;O)̷}X˔F[QhpWA4PRiAaʶ2~S\S~Xlld't'h&5PhA284T}8-ccP&[}x؄)}c[#~)=}#ڢpE_z>Ԗ-q"Ovbÿ|_ 7ۏ5.g=jHf+6s -ŎzfODVؑsu?~?V 0sN%iGR=ƒ/; a1kӸ?=M/kr]9 bkq5X+,pzOG`ۆ:e?|׼k-P6ƷrT=//2Ub*fUs1eS2m~uzjx>x"DksXErˊsi`wӻjRyLY %5_ `<ӳyU@sU ֬ߏ!'O KBv?A_׌SjSqց[Waʊ}C=_[*Y<Oj]P;,A5E0{8Ac(%:Mr7Ccc㽵h'} 3iL3ac?\7}so#~-69Ό|tI,:ͼ^bi5\E+wn/~[CN3}َg|Άm ߋm^w.=Yl$p>-!+ڌ9YD~:hӛR_KE @ͣ*q%y'Z'[>=ԃXմ߬)ż遳]6S}z#ǯi:7@!mƏ ?MsJђK9i^|iq#[=]BI+x|D,,ݡ5ds.GZ:gtmoދIrh^#0֌[7iC1a_*1D@"p!:X %l':_'0|/~"Upnr>~(\yib2,Y[/{QK `C0v6dwmm$IwrfO@w0~{ ;F'KlW +\W0)kGߏSo>;p#ܐ1t_?`\lO?F꭯xb|8w[K[/n C:sȝ>*/&g ̱7ȿ3&G'!80p[$НĎ?äk!ߓGk)vE,ZoǁByȽ+ӓier4Uw"7@IDAT1^=enAџaVMP-B7Wɭ^\n|&.*PorMM}c }r0c)<- =Rf݂ ̘9=bֽ"[)V _<#g:q`'ڮ#ڍ/Elk{ %@pAo @|ۓZi5%nH6`@3Y'r I8z:b9C\((}+3[xfsO1o @}eoO{Pas簨dkBuǁo"$2u>uoV '}N)겊_!XX9 =G{Ŀin;HuA':[<-hǯ0 ;M % ɬ6 ۰ZF]ȝ䳥Nɧ˛Hm]{BtU>m@WdtHآ7ߞ(^VZ_g퓶2ԵC->6)6L;D\jx?Ԟ'}qCC@a >FDmmpV-ݺkS+W?X,rN)lmujULg (uvmv։H}MJ^֊CˡڻؖWW~^{ϔBI1A>ş;쫿 ! mZ揁 o+EYѯvӛ~+w[sE56~Ʀ5b.:ͨpԊNoڧG9h 8׉X['~Nxf#ۧnQ:>lƝ26ڿ9aiEeXɟ )n(r3FSjd?R Y߫y9s{f&U."Ÿ8A.zry8K &u$cNڗ q78a˸4LK:X(MT*l;%Ow/7A|N{F蹾sԾy\[u~% /YK'^/lvL$K™=>Шe既ip8VS}7OZ8s^kMk[)g+EZi>$#8hC,.1t}CVh8ԬXow15sbQ!=OWobzODUʪR&1FS>@W??19`ǝ.^4^@Usy+5ea^nOZ=?xژJ7SډOџ\mbuqU^ ͺZ`{Ax@XmZ⎡8RoU{K4`b+<|ҷkcV3Vc ۰]rjw^]y= Ly\_خ, {KҍY+; 3p|-%Ppur'FuP ]0 C[J,hoe;$+n4ux9ĶOS׮ޓ<2<`-s'?S*c!\m? 3ŲbǕ> 7ظm$!)wxNiOv26`VvՒ^u(|mD⾵㜶1tx-~xo՚ԬC*tL_xYe_[ iL> mbcPsڋ/+wLo xOA#"1iW05<]cÿu{6(E\ݵ2}]*M:-?1Tc0WK95ơ?P޿~bni0nm}{ 2}vڃYTb_{ <=] !UVlZ}(ބkͫzC$){ljkv5u쒙FSo \Z`:uSw\aj ^z94ARY2`Jj©~K76q!r.Fx: B(-*jYjwI /ʐ9݅o|۹*THQ6i:A>a We01f-~w f1rM2gRZibRfIV#H2 %% L`^5J 6/[J'7E{KrlXyNXT7 > QN[]k`gٞx Tl״ Ϻc;&LliXNf. TCO$rpH%F7C8 ES;[ @ա;@Q|ʯ[Sa8*B)WTLqP=6m/8(pHTi>vGM\~t׽\[q%H$ςΖql>$/1?3{ҋv n{M`rx/Pkq4_;oۋ򄨨(|0Zⶼ16yվ79随 -Gל>M+uTd`2"CH{)/C [$1r8=y <q]=(ey Juߥ ~zj}Y4F @ؙ>A8"^wߴ g"n&dA(P#LohS$ @p Aa)R!FY1ťϬ+~a>mbu/g\*wAI G]ȕ%S)wqu5b#ׅ89b,`a\<]ҳ0anD'ږ;o+lEJsա;ͽ;,Rޔ9{%"[MRvc8/u2U:t~҂5.,nwx IW2k\O?S7fx,8zW'] ZO :,ZZ], /iIK; Wu.C7\X3>>6[J|o?y6bgtEcK1wBO_N822 W #yY$_5V cpz.fkhC2 WR[/_**kZ ЮO $& \M7Z]贛DRX/1'1ʜ:cS6iIBݯS "h~G+_%j]TMi^o۶o2Zm*7*lZIIZr/m~Hbh4.UppY 8j..r~V/^S&`hy=V}P\zVIskږZz`"5S+#[#?1L3-i~:Fkdm[CZ͵8r9p%zwt)} ex>:m+E,q$ھ)y鍭Zy}kZbw}\{cHĭs sUx%Q:fN>CYg )2^\K6qSmA%e)VMh _J>@Wo4#'BۋT,xY>BD2hY@:Fgz@bAx qhbnɩq})e_֧?eaeC'q 6(L"WX8{:&]V5QB7x*Hs.Θ.;"@$pIqrIAba& S@?-jDz&nsNi{E[.C.-vq\2B8+scB oN}>,Ms%OuϜ{1{uuĉf߀&yfユxWL;^(nqRTmmDLv- cZs^W+|S0Mg̦_;q+՟>ÝbJ׸|9B>.湂94.4++mET??DkIc㎖+\Y9~`ZxZ0 @4jRK@vD=#yKMek)HNE)- qcɶM]3sL,˷Hixtw}eN2]@b9ς)܇m[6VOYרFlr]+ Ro͜1T~ʥk =+Yk׶n뛓b >nGRų.^QOk1$ńzZ;bBLGKvd5bh"".=6>mC@(8(+C@0̜.>rfBQ]w7|ӬП9i\ d-WAJDc{q7IƧ>>e=t{GLy3Ka?9A_Hy ̓M2i&҅;cӶ%2%9͋1=#GK!y | q((TJiB?9lRhʚ5N{f?AתhHĘ_RY#طs6<55#:&d};T&c$@a@[OA%QD@t(ܡZq֔14CZ\v ,( R* f1w{3)7c{_M)UbŋzY78 f)u8؀s-ro:RzV30՜>#7dSW_掗.\Aͦ*U[|4_'s6i'+ω)8@s%@%Nr@ª D̙Jћqg %RxȔJlϰPp{| C*%T++wmIbxe.*kwkh{x94(\e^r`+/M}q_~3HקPI^snM)2^ʼnG!w,]hXOē4xS)S&!TPeP ,ZRcD"8bh>YMUbW^]kǎ5og:FkVQm5lM1c _.Te{Jg[08^AI|vO#/lLHHr_.oGean9x}R\QdK<L\ɩK׳>ؽ6T_;ͺwY >VϦX5Nrss?a{ ~#Hsr3LG:X{㽃y8dlJʵ)%8_$ }~. o x}Cz{BVZ|58<[㷋J9:/gb߻] K3'<;o4kSC59o}I 5ua/6X)B~$r,n1Zr7!hҲvy%hni}[+iH'H€a #E$@tK̙+5ۂZz*\q馴bqC+Q*]-PVyȆg|<_1f9k /l>cIccb\V=`gs}GM.w-rtڜ8z22{UΘ QK&mTdJna;^ʑ9p2drdt#4o3;GݿgՖid\xjy82Vc*sk &IR*2%J ~~ ^5zPL<X9G҈29 5EcGҸr|~X \v<6 1 sሚn"ّc'pC>OtVh\J"c.@kSM15w 0/ڳ:kGb}ON!B<=s621,/)<˙9O][y ?" 70|U!(S_VDgg/܇ spXI#mȴh&?32s;܆/5*vʭIb*sx0g#J H-NJi1g[GR > $q#1I-w6:^>3Hh>6>=;|?}]O+34EK:m>qcn\pXV%c) u+k~diHϟ3/0֊-?܆xALt2? 8/؍ǽ]'8Gq0kM924R*q+QAA8o`{2%)C,Z(a\=hM~u8Ax+X1?VK1Ӥ\1v`[5q ~ҍEk&hJZfϏPAQŋgE| `<&(1I˫RGa\NW۾Z>}oV30GjȝV@:-|i T2 _Cseql5U-Tih d(jt_!-{܀kZ俳1]`]#̾JBlb"਋qtOc\G^c^v،i hLyl΀X$5+j6Kq9qA΍BG0Yzdg=++i/ $ՈmgG;:\{&qQQ*9{oׂm'1ѥIs3~uxnH0CLwL=L3_w,\+Ug)Th9 3gtz;-QuXm)gM|3٬, I,4અxs n/lߕh#-׊&sfN]W*Xr~=-_=cşfOW I+f/MN?2>8Mlm{>`">8u0[d%0*؆Fݿ G;D[dx1(nP"-zH 9~lF v*oS2_SywB:[l}$ .ѳasMAeO!{ɯ/NWomϖW V > #y}E u!2$)8%Z#2&y5H$&lqܻw{wc!n&;asϊrN33bK'zS7=Om qAMyL1_79۾ l_M# }o+ݴEoܟIe<{"2]x$ܔǡTΖii>L~w Cg纑Vl;?}96&5(jjΞsWe2Y[n hz寞_"Lo78U u!2'N6un_!eh#WKYOC ĦGi?b#Rx,?p\sCjflx+ϦgzS/DŽ=Q @E+vv-}5|d-؊esfLVyHL~}Pr@j>UG5|d+>/33aN@LG 7qW;ڟ|SP 2bk:%"S{SYbɵEǖ~MJ)`TǼ)c09_nI+GԿ#Nlc*S22JW fFfVRz7хO%ʑv_?`3Vk\9{R/ƟCyj"ޮöUtċBk}4av݋+By4Z!_Nt|T,^N<]w85pS܍#8n's֯v;)]\+mSV։9flk(j۴!%[(dKXy3${nvL(RЖ.#VWSƲYXjxՔ8jNmo+Dzy3ﶎ ?i3 }@M)P&S9TlsM?[8x8 W#6NdTAp Fs$t$22~tN3uBmSx6iBUlSٟ7C &wE|=tӆ3hɵd}K9̱xJV{ٮ[01; p@L)l xϏ9w(ų pYAp be wU}-xM[͵0_>°ۯ7Чh3OP s_Crjhs]_/[է/.>UdվE5?91yK%;d&b{q./#GpauYLJȮ!)kS!I>lfhy`B}UѝH \ BPO "r pː2G-F'CʍmQyuf,{hlCj,DrHΞёJ\9(ⵙ&k=UiOk9HSsڝ2i)o 2\]Xy?=KV6LYٮ6n0Dʫ)\XT҉K"δIl)6ztqbM¬5ؽe-f!a8]Fm V,\K:@N2&"F~_[㶉m)C[y 9"[H6]p+UC4g w<[rnH6zN:|f[YGS9im懋0\g^/Ϻ͋YbzYzֻ;HL!waxί/7H`͵SrRvX)?K 6{|09Ks}]U?v9c9XIUzlkjinU>LiK-X4j {},@st}s0]̼7Dv^U>xkE̔ݳœ0rqcl#;n 8Gq#܆3\8ݘ6laޡ̹ך7{]#,e$Ye)X < U8VPYZ=qJlcQ|VlWiI~ʝ+z},l?#(s9X*KO!B^QVv9Yk|RYCmH'O+*!/w1-Y*:֋g]+$&uϺYOUBAYȫٌ!BWZYz{!O! K>^(#%Wuq Bb;|2yW e!;'Âңpз=L?ꢐԽz${.`V/@smY)brD֋C1 )]C4e}VS5%Q.l!ğr&_ldwݞ_eCr8l3r)2q 'qR9M]8#?ld+UFvWnڕFz7b،,g3^9&hh!0"b(h3u_5{P2yLXMGIQ,>bҴM9@H>KF(w[ۆt(\!mO]D,7aiWOLSaA}C0~ ǒZ< 4kk‘ HbWVf^;F~8xE$>H'a6JbZI/+Qš HJ?cgy;$HMGeߙCb*7%qia!J*bWW7ەJw_߸] Fw hk̂HH 4}' `[Vk<)& 8V.΅Z_u͘2l-$@$@n Ԗ"v P &y80N M# ʎ@8ca~.֕xg}0;?KcO/ Kmvw 0O@T/᠑H|\3`HHF&6ub,|1u+19mI—27HL+w#pG~$@$@V^DZ*Y+9Th#@%xo*|HmKDDzyşٛaw$@͉Sm,$@$@nPQH $D`s=62#CB0 ACBzj4E%;s>AD& P_'eZ&yH$"2mƆ4.^6Z!~l#smX(߶SHŽ®(0 (c@OBF͒@3",Ǣhy<3:7EUp>h+3nčN4h v-/Zږ-E[MFi`3e@tX"&DT莽q혱q \6=p8Ǝxfw7=|v|+@E+6Wa0QH+m̍H&82=  P$p BypF~z7lWܖ>no!h%R/^L"            F%pee _ .l͝=-O"ˆ0 C%,5fK4Y:Q o03-'9Br{+ Z3[@'ٔU\w܎oU 34Nc2^H)+y d3hBgZ%0Ao1"38i^Q,im>FiLKrxtt($ xﭱ \]|!3^hf9L+49zHkR9 PQ6t%elpt˅ZDDFtP7;5n^YL˫ C,Pbp^$ ԟx> Hym4oYN3AՄ0k         bM{F%=EeS<:Ȉ_-&j8LIcz[đ1+|͂@(>X7,i5FB @#l#@fJC3[1prnۇĔ%LKif9L4`LHHHHHHHHH?L -un( n IsP)v-niQ( [O{j8BNѨ:YN XKяr[`%m7ۀ[S)5m~pVjܖE@)z8K>mE~0~} UQ1zvŀhiȮ\[oQڵJ(=V<v.bE(孏j!?NhҞ/6 >P\Y*#]⼭6#xmCo6_Ye5j eJAyy}>I&  - vaoRN[1LːI}WuUu 骆];wd$x? # 4=^dJ8sעÃSw~V>&TɿGNa,gWwly/S|9Ϥvۡ+[%5ȹ/X+9iľ{VR'XH#Ӵ7WILX'a`Og,?gr%#H[ܷ6ԯY_}v<jEX@IDATp8hK4ah,N-]}lfƃb?/  vY|y̓.hzf5mhLdu˫4d+t}4/uOA|uh %ύ_P+.5l`mJV:%q>IIlObUVg2VIDb[8.%60mCeJ~j;tEU!mį1~;4Jbs}Ӭr*ҘZha jD~ɥX%oa         MR?ɽqMeuMk= 6iG"1pJ7GU GW-HmjѾQD1^Z,2>'GeŊ;G~a18S( se)XWBZ ]TvV%C'P,ij #AnJMc:l>ANU,V';\TC9g>gj^MYz7"XFo;V@K M8Ryzb<5ei$1,%Vgh_v[DK@mV'mCVeJVue@DɃ 6)CQ)Y[v|cO݊YT hfZ6`@@=ޚ%v1nHs9H$@$@$@$@$@$@$@$@$f8fF$MՈ_yul}pW8)Jp:cQ§So<$ٚƏk_z]*a]{"K"q{ۃ3tԍ6w8ϸ/ea3O1z8hxɞ~xiUbc{?0pu#GmM>yu/k٣'s6w?Jl,'AaufS̴m>{ ,|b RUE?j,}W9i 'n=,?/\=&,Ğ7p( q$끹oPWX ٌrvZ]E8Zix7][h|7U(y3VLUĶm^$%(q*K >y~|,JbG&z߁(ʄnC(+"ZzubT`jRªe%-^D"&DҦ w;5sLfY6\j_2T{w8{ۣ(vjGg!):9րj>񏿎*BDŏW^WFIHHHHHHHHHI PQܤLUY5׺Bn*I!蓢T)攳UޒTe9!θ}{+Kߣu/Ԟ[֫W,~暺ᅴY՞R#10ȸ;] ؘƶUUiCIƠXI0YMRF⾵ܬo>.TR6iEmN4(>bpōӜu{M4~KYoY-OA\$wtKZ: {U&Ucf]&3UHHHHHHHHHH;& YI ̄_]npOLqX(JK[ڴ^f3#<;ZY/*'[,OHb@FjvA7 Rl8UAR'T(wJ W]ZMa=ʹu(bhWش( %5PHT8ER0Ӭ6+I164 0*PQN^;(Z< ) :P 7nvDiֆSG8[EI+O) |YcF~L#P[Il0iFBʹr!Fzƺ8/Ub;䴓PǞW Q%m%N/VIt5>q.|*>ZXm`CZhbugV WjK9>l܌MFDںdw03`r$@$@$@$@$@$@$@$@$@$n=$ !ˡ@3eL |C=ZaU37m G$n qĶ-qqbfkcG0S WviPbX\_$]w:V*he{.obu)jR:!e넫ĊCqh]Sln[E\z_#ۀ~zbz@+w8;CRjs̻$HHHHHHHHHL'׬$$슖#y+g۾wmw(*6մ}8mUh烤th-/Ow z㩜qhgX@$@$@$@$@$@$@$@$@$@͝ͽ["ڡPPkHd4.`fIJUs±q4W)>;yL!7?wS/Xʪ񴚯?/o^*5CO~׶=l-JYO;jBCllh;),^-&zbW\dYc5Cq?Ň4H7P9urV]i%         P'@Eq8W]UIn^!\Vr|ɿ-gB}b$Nm∛7Ul[؊Uo M150#}<PWN`'^ШN`Vaz6BryTּ3Wf]UB̻=]kĢ{^:Bz%z]V[gM?}3rS inЖa❍F,u# $@$@$@$@$@$@$@$@$@$lT07@ڭW[ԷZwh<>bF1wXS2-U^߈]-Y`\Gq Bwkœ.ڠ)6^e_+]0Jt 8(.V75Q,S^i}U#o3: U6I8A0߉]Y"*YOp64y⤺tRƸYf#kݱO'M*ObeBT>]p XH =Bު;)Z"X`P(~!Ź/]9ΏV         h,i gwv_~尊ޛ_E9o]f+e1hŋKԠ1}[]۠8Kc"R$S L8Tirݜk}^k/eM*}*uc[^5,4Y'w' q 5hX;Cm*l9h` @3'pee"*lxQ`UFvWniyY6)ӻvٟ_9;O+"˝prٮt8a6 wnݓ˯V1]{kWv*hBv̭v+_Q( $@$@$@$@$@$@$@$@$@$@$h(({elVCowf;v?prYQ<" CEڳa{.9`jb(4 2`$@$oo&FnȺw(FNB8ExOz>qkF=q(E#          *Ai 4Hm:^RJ6=IHHHHHHHHHHH9ͱVY& X*}XV0 =WHHHHHHHHHHHyy'KCoƞEWq$@$@$@!Mx}&#nv1!]cHH.=T_zuZ%Ԣ)6 11lUU.Mɮ%1ZFFv^$އ?8m1eR^i)% gcZdfk*PQ^ "-ZȖEh.MݮŶoq& HHH |/g%1LDT%UX@DXLD(\7 hHHθ5 ~uxkGЙ|~9&ij"î>6C@HP_켢>Dcus5nS!k= 1;m>v>l"tE>371θok^1gP\,e!f3/z#ݞYd ֌^,?u=* C;#wh䂔~CIؾgWZ}kg.؈>j-v56k{!k6bǻݨq;Vl۬K-=y~{DW_5" @s#`s|1/yBϨM6baF]y*-%]P#i`:"4-9[}97-H PQBE'c\Z/@>J@MخFڥymVCWv~n/ Jf.O@Ƹ, +Ki^=qE"`*my-mUW[$dwl۬\Kܲ+R;W7⽇p'*J$@ͅG%zT8]Jor8;.H@jsεN ϔ) 3*%H<쳒X%<_LlbD^~sIl̂2"pyHIc0I7eVqpX(j*N>;|J(Gڜ۬9ޯP>gX\H.ER1T؈9S:Lf8d\i" e$@$`#@E1B&,sW:=n uG'̅vI@C<.{!:L65÷Ox4F=qTX 3z;mp9b$"muH,m#hfaZv)iǀn!/7$  @{3j>F~9=.C45{Rˎ58S$3%l*wQ"}ثOS8ܤb;kn5 *C[_7ygbHA:Fs`jw_ZP[+Kh{bQAq×QQ7}S}ʂ d Iƭ-OP\Y(gAznVR {""aHXb+Fd %Z[,DTtvkU_,YHq;r49>9qݦ$9r{%(3CS:s=@rxC;}4MК4$ i|&'ȑȊmٖy-kKko?o^x.^J0:9v;,%(+wf9*ۨޛ6+@QS'OO@v&JV GP˟h?ǽNþƩ{5B U0i[6ZǴĂR+L|QdoN.r>=ui ˑҦSQ c?ׇ }ٓ|-68eX!6 J14G= 1H+H6vCc4ql-_ |=wcGm'Qw=Vy,F<4᧯oL1ПS=l:bg3m#cL ,<3|SYx -dW5*،?+B U,Y35Wŕ+N'P|- zW_Rn~Z3^)r6{KJXRȧ;w '{4y'z}p Ou`dSEܳ١!]6jwXG7>~sL~Uhn'z<ˣ "lۺffDpuǺ4e F+PeթUȇS>/F?kDyf|,Q);A#Ϡ ;j))=;R^lg!s^Pzm^MfEDzTœ{ک>*rzЌNJ~vΩ|zn^g\@MSl\OfPLtdVY zpvxnDݱ5 E4A?=IW5ޏzGOS>FBq)^:4Áɂm@]#.TpwGwg=fsU璐^._eͨ0IC)L2&Xbh^):6Kڟ_x/)i 7?ó> 7~?ӨL~Q8FV:oڵvcmep~74xj {ڲ||A$kHPsaIDXĤz5EPmKdHlPE.~V4&B * ,u;VƗ6ՇE)"}lh|:,<~_`UK)Zpmlյ4ԛrsC[x_I'bt oاiy$%:$=^ FENN 4)7ĠͺD%$3O$R=?gh'fm2x@+ˎJb)sPxl!AKuBXpgwTKC^i}>Ѿ:& n1F/&KM*g#a姘8HሎXN9">%GiHV S(aR\TU Π7XB0~wGa[\3) ^eZChiK$P;Zp'> <t@XJ4qHmLRvw4^f?N;FJwN$n>inŤtN,n`n,Y{:#:Jb:>:/i|ixX# P$)AX1 -t&5mXJC--GAzތr9 d`L 0𦽹~cИC2%$lbe}h{O6`kJbI=Ϡ!)}zy>OPܚZI,:_5K3N!=b[%_EcB#aHd", x_Xj\bFRn-^tW7v}MSф{ā5+sN ~;t4~rm4!zǍF`e-ˊ1AγL=|.ܿ6}%2|U7x9`L&"cC4ւ|MW3Goc!ʣT2`$W.ZM߆up6sO?8u6@Jjd*h5Fa{^꿁z}_Bh!@.Tw ոuKg=ZDh 6mTj(eCA|сkDũFTށn]It`#3!9)3`qkSROw0ΑⵦLYLtor"ǚUʋs8R;뛰YS;d9z8Y)9YQQۄYV}l=;NJsc@EO`83<]bQ.^} Yn ]$ܐ75ԨQ=&8a >.wSv)[$7z΃x5jPa/TVU$}?]Rqk v5u.y8y;?Cz殁0w&3M?;z=PtRNDo؆{tJ ;vT MߪUxÏ#OPqϭ^yw.bsͰyUР?u&`xBGIp[>myS[0J^?/h(kߏr F^>ю_"vyf^,a-w:j#^8M.ܵMW`RM\ΑLPU7%ʞY E(cs]苍P4mC콽:vwt @`vz?v\&'w5x򴦖' br `PoLP JOފ/ØN|F.;/Grb$GϤm%Wz;Ѵxŷ=zBۺHţվ_8~d<Z<9 3x)l| _bxb:&Fq?ԠRdnBA'hZ%qǽ;MPO0zk삼d1;ۄggx*3/N+8꿥PGb,]7y?aKUi*%)F uw Ѹl9d,<،D%q4ZmqU IVX[aYO \<`ͪ -(ߴK$J0Wۛ[_ 9"nKǙ|KS%X#F;X-\ hk^T $(1ʰyBPd v= 2sco<tr#>IYl,B8kPoi-[[wGt]};ЬQ۱Y$RPUޣ^_>{ϧР$(-tqGmԻf#YWpNکTGXP(VzO|Ux;R<Ĵs`L 0oQx'wOIOa xվ'~ǿ[lqf<z;no*TX ИLo&۫DKc1}%y2d>=֋xDZslFc{/!&z. @ԖSB\gRVfRzyx,bE%-ߊiG\I<OJ[R1E ?U$G4ug3ަ 較cR|MhU {“h Uh~mx{IGⲳIX6$sz˼ r&<$"@IDATb(h-VC 4FTg΂ dL !9,E3-df-aEh/#]dSZ@JZSǯهW$~d)ʐwȽ4 [` JO ^YLWwYJ+/R_9ӎwS '>(N c\z=R>R9`L FɢW I#4SP*9C _Gߏ;6bAc %P,fWJ{OOo[ Gz^jBfdM^b<<;I"莪W41W>,qA?[*1&B`_Rgr#h}NpUsU50e]w",hz^#=oB҄5s.J82J}l2?<!NkX=xBǰ23 "[4298.:OU'w=N:B2TǧJSi 9&+o衯"X, Պe6#:p/雚iεc YDwFZ=fbF{ѲΊ5eSjC*tSBW#U@h0i1ۗQQ~&NvH8a)]2ezuMv+Ѥ>/] )C>j ]SQ`"|dфQL-;⁔l<Aϯ%vHֳ8 d*,c+z>%7N`L"0v{4DOhkEgkK'oO!eftU7o"|6fa[˵cL ̊hqf&H >U86-sphZ- @}W3RK2pMh~);2oHI,<зJhY(_ zbfLowAt(% @J{6/Pj,I<끻ۅcG⽽-pdY:r=#%$e\ʹRXS]+jj=V.PO$V:UȨ9G#Wq9g mbEΑkdߖ,eDvx"d4YਪAܻc S#'0 \ٮ] ɯ| 5o ;yql=T䍤$O(֮yX{vm*8]ż4eL 0&x Ld0^-(19KmM?k [^Ń[_a0;NZrY%ī?xΒxLQbq±#ATg'[z:BKLXtR@Ju^ű4#FP}*i~p5aL d[g'K PA>F-8A&wFLMx/h"Cj^Ր*%__z&1:ӈݏŲ"?JёT/ckAͻlFohMFM sL0zި{֧DYlT:>æVg5W;PZx2tJFzMWA 4$wbj7>#:yBpwah;Ohoȃ݊(kX^ c 2@[bF2l >e?lB\ v+D$kY RB)+JYEY5mY'̅ lgNhA_ weq .CYL>%W+cROl^ϧnۛQ(Ius~j*E4%mvS`L&emxwɇL^$v,+;ޞ)-O+ gplYW߷VE$O%&ᰥ_zכ9|)"sz,B/^?pkyr0f@Zޗ#5 (u'nI4fo h} cl]cL0QӥuVuwVQ++Y9 ~+m>"GQ(3n UJY+iM*4쨢DS peh}g~Zr`΄W{.-۰LPlXD_t!Q-P}l:ҚfQHfP/*Nz:4t5wZ + -ŇKoߌii-~qGW~yQ4?_#⃶rP W@J&EM4w([z#xe/^<$T"zANJIh23Y氟-s`3&Xgd)Twe'G~Zy҅vBKO/_¶5J ! Y{A@KlKX];K4>%Ňr$qhD1]eʯW\gV2FҎ&Pɬ-[6 %&DGZ AsTVA{AɅ:X*0xEPHk]%1}.>WEɊ&/ΐze],%/qQ],- J\=0ӦaBvI ^mSK_0)楟-q;5tUfrKmtu+&B\ҬEŒoFƘM+W1xBkՋ>(+;<1i(AY+W=e#Y@)g(T$ޘ`L ܜ *kG__|kq3۱#Ooa)^/)K&LJgVP l9sXp>=^yQ$Aw?SRHo'ё\w\u⬾{}HD6sLOKi<w>d"楟-J2\i&@9J(#nb6|g56MJG1;QJ״ݨN=8RY4A77'(1ٍ7Yԃj^&̆p|$ū&&U5PM&9ըN2 PRϐD=u- 9jf|Lwwsn՚B6m׷D+xd=Opȵ9#8p^P<PYmWVZdOJjy.oaK~0Yi2)qRީ*qY*ezICB NKQ׬^Ogl=Gʙ.w@2i܄3ﳒ FI:B1pNC{,?lU+ڽtj OcV1 ;u54(~YZS FyvDDwI$xm8`L%PP1qO~ZWIV>ފ (>gŮc?,P[lHt>#W񿄊#J ogujFj&9-U+ŅL'/}ޕфH]y,bEڱZ4rF_t %:/ K&u C+MY$}on ܷuVtbKL{U.i}>~Vϟwxf+O,n>~N|t>Ƅ5%;ofb+i aA o_p.8ĩCKREbLķsrf~zPW# Q,JBqΗeZbmkz*xZ;ZjB{Gk+C>ZSP̜\4F؃||.A^pkdSث+m`x$۷Z.17ݠPk!ׅErMbB[^E7׺NyԀItGw=vJD}JcbU6l[kP8yvˣ.jvZkji tRwA};RLFׄ&t.'v3cFG/APOM+ζ?/LV3TfI;> 5 {q]~ :鞩|4Ӭ|*\|Pc 94&!+QEk\b?6miEq}OӔWam^RgL 0&pshmҼ[pxo`-Z[ oE-~F[7ˊR.fUa{G^B}^=-o+{?F7S~%jv1+ a;ƻTd&riӣ(ںixJ*<!~(h-\q ㏇0hi!u .~v]pL 0y!;/p!L<:~yt26=;9Igim&^AZz OhΦ]wo5(,˪R> 4s9cĪf>DFȫӼj J:ѺɥE~ Q0߇G).ҥfh!88^i}&q+YU|v[ =baGk ;VYxWLT<$K1;Ѝ3X +PFKfNOuc_ 8t>ytC)ѕ6'z{cp.-K9iE`VK}F9RuBav7jER|$rN+Wp8#iu\q+ACNĬ3\orX|ؿr'¸:8d])_Qsy=ň̐tE0z:]XLԷr1iױ^Dł$8A7b%n;@"e4JzSasjNBUj?rPyδzäZ7궸qȃvz~~jq`$l}d"oaLji`@rS" `~>_>5U/ӷQgr #[x6ꨓd&Zmz䡏#r)݆_lB=W3kA<5e+vUa^t\*arN*vX૯Rp%%ZTk"˿:XtFFF0AFCneq[w`]ن_T7I V4jWT8a=NTmߨ%IA%ERoO\$kZI,Ռ΀qw(ZQiN!YE,)SL%YkTW.F|C/)RIVlƶe[~6!,p4ر-D}Lk!/u4d0euQ#uO(D|fصZ5&KI}>쩯)t'9`fLkM84L.$GٶhQ4Tj0We:4> S%nTz}}۝$lCCHT^Y>IQp-C[Up_bgRHG^8RV:PhynFY0&X$cQw_NHh Fƣ%M1}pw4 LKC:ߖN̈́;r9dÊ"Qtgy3%dY]oinJz?g~zMzsy=d̈wI4NX$)"[v4cG}4Q,1GpZt.^Hv, 19߯Edk=Ǫz35p=q߶֦PrvsiR=3*A Ċ-gN 3slgL 0&@SniL }7ݝ,YX#Nw)^xjwϾGt<(>;x٧c;xMlE.ִ G+*[軏Vή;rEҲ=kÎmp|Ji\YuRPWsz"ktэETb皾sw܍ bO=˟BgYk bL ,8dFHN:NOg+Zzqrt~'V:xu/گ*==x!ncW<8wIݿG~-͏lnQ;Ն6ycmל aL38/LY`d17]r~xxM#vԦ; 1&L]!oL_(-=yl([ޭLi|K7ݕ+tiW~_ KjBNVidr,+C00p~x*ZlqXKw|laXoI ^%+.8}[Yiɗ$"Yx,bFc /]c3+#Y:c8q?UX>ɯV kiūFQu &qJVSy%VtK(')Y8, 0&hnDG"0AToL 0&X tHL 0,Tա*Y`L 0EO S6zU^]e䎲ИK^G1e'Vaúk f,[V* 0&`@u[aŹL 0&B7˙v2&`L 0 t'$e݂]R`L 0&`L 0&VgbL 0&`7pt1zߠҒ<eL 0&`L 0&X4XQhNW 0&`L dw}/*}Uj &m50zzن`L 0&`L 0&p] ™`L 0&%c,Q5ҙ`L 0&`L 0&'m. 0&`L 0&`L 0&`L 0&x`L 0&`L 0&`L 0&`L`> x>isYL 0&`L 0&`L 0&`L 0@(^'`L 0&`L 0&` T1.UPUV97\ &*Vg' cL 0&`L 0&`L 0EM t;PfԗuL 0&X 1&`L 0&`L 09"0jntKM#vtߌT+LzCN""HoVbkM]H9۾ 0&n`(O.7 0&`L 0&`L`MZщoƃs,qtM+YXYDխ`f6ζ%݇1,0܇4TorØ`L$s`L 0&`L 0&ҥ0DW#50 u/6q7eG^@>7;EJY'aGzG"Fj3[/cL 083^ 0&`L 0&`L ̊z+E>L&CSIlM~|#!rC-l!"| OMw8( 8j9}^Cbv^xQI4`L `EgL 0&`L 0&`B P0K2[z[)>T:59 _/Nuw8PXT++vS(+B&`^gQ'ISgqGY x|ҸnL 0& O&8-`L 0&`L 0&`Y# Q΄xмRVQ 4!MV'fSfno38Z…^o`L 08=N 0&`L 0&`L ,x a y(M +,@$^\1Asrr`/@ɒXf5's*@ aO[O (. qWsX;fR5Mar2^:'9Զq!]x\Zw:/&z,GJNɪyC~:y6b V0l:/>_Z.bZ zcZZ aJyi(5/B bFGalBSs`.G͜qݤzZU0xzM0`L 0EK 7EH8`L 0&`L 0& L=8Q;<&9qsQT j mgb) |;_:{U-fQF߹S8s^\ʼn)ScbSńE>;UpGؾc1*47èqh:j SGtI."lۺ4 tъU{Ӕ[Q!>;}^`Dyf|,R64?<^>[L.zv֕%(G|nwݨ]u ꓗe)~ Nk0)R^!w`L ,D<[g`L 0&`L 0&$0Z(e!>:/S~|^L$uwTC(J$28}r5P"LV3&0.g$$LVz[%kӅ{BP_VkˎIXJLJ+Qh4s\.wRG2u;ԃgsQKrF:x $bm8u-mIĒjWg[ 6rC0ܜ 0&B&1o!W`L 0&`L 0&@@Ѝ#= ' %pV9/ ߹ӎC%خ:7;>ըV;+CH*Hkl9ȗ 7eN`[y9 pAZ<>eQVYT򭭰ehdJvаr`h((U2*)_&!ko#D_ *rk>tE+c?[H. ΋պUh 4Gy6ܶԆ%yxeZFC8GU VҙdiPD pJZS]8[_tZQI/6ӢĞ qڼ`L`A׮>`L 0&`L 0&a ?T( jZH֖r !P]sA׿Ē &b#r^t8w"LmL *l6&][9Bg)u-7l[ށYf8aAE]*ĢÐU@}YïJb Em~X2/>I3Y wU.n=FTށn] :2:cjxiHQ>s.e3ر*R>vx&l58ׁ?sǚs$n#qZRR?zh*)bqL 0&ֳZĵeL 0&`L 0&`7|.* $2([[ʋ"^t]p;9Θ2LJ^MIPO EYfw6صmFqNS=*42N߫W {s46#iZ+uG%0̾40X̔9{=ei'BP͂SJ< +`;俀>%z.-Cˊ`OrsKQF}-(6.{cAOǏGL4:L+m k+`L ,=ACL 0&`L 0&`Lf"P"Ada@q!)G /  EK`R'P LD[u|I-;FXl_M->5 9Q-+kAS#SLFϦJޮqfƏmF/{hTX kW$K]EǢX-^ۈBLPcUR'OvN^NHt?$6n^@`L ̐+g1&`L 0&`L 0I`J*L c\vږ 81 ̤~|2Xpo:Q7EPR6u.FܔTbSMO~2UgՉ{.-۰Cײ:EU :H6(d1&!t31i+"oJf=*p&`sB@| X(`L 0&`L 0&`'PT,.6ƘYw5pE7pA?$MLB-[uĠybń=x-xtVByFg346T&RN9Ã+4:׺Jb@(c :֫Clu0R;GR4%eXjA&` ?1&`L 0&`L f,(T8sާO*APHRkKa3hTC {Bs2\&ICxQ6'򅓯KR)L59~ ~!E 9[8`hKd:ӗLR N>mEb_1Uq2r2C@PE"U :\$?qԿ3a6Ɓcp4y'OG0$ɜ\WXP>p#Vi<}JXҹ+UNN9[r!7:Z݇O])NANKbJXZ xLN*r 0&"$ExҸL 0&`L 0&`7#*W ʧB`2E8[؋w ЁNBtxDe-X5dž7XBC<\y˫ %QA_ o_pNZԡ?%)6L }}pV9? ų#iOfhWk`L 0&`L 0&nH\PTy+L1*qwҪ(۝$lCCU2Ţ VI;#>{ucTT-Eo׷ {{r;$":n % tzuL,@Rn,ޥ0z{*#(!9֢,w!C1%qd{T.4\uh^zKJ%qDz:J|_[QSQUw`L ,(^'`L 0&`L 0&p(tmDDSal ZѶ͔iQ*i nۅZE"cF]wд%J}"kfjWjD'k8ؼ5eBP̌;NEB [&T%d6c=c[]5%E0&[S">Bތ:gRUKy-vQH:dWg]߄P#~(m_#K\T7C}:_Uo;ԐJ<]z+ص UV9^ɶWcKcV&\q;nNlU9rx W@IDAT0&"!pKꙮd鴎Tax&bZ)'OWzJWb[W_J1&`L 0&`L 0V%X]sce2ح$d$kC~L<&WKJQj.LKhK1f(@Ax EXZ *FA816| + WԥZLi/Y l/c(0c"@kE[vFizl zqYSIF(Z˨lNuu^01\cTҔm{ ;v6܋ihƧBF=RۂbLf3}N#!OlA;`^دǩ2`i[ _ѯBZiKʕӫ}9<_1O/mRd<³y~DŽp 0&`L 0&`L 0OhkMcUʁbTTn79){&V'ǘ`L``E=u\q&`L 0&`L 0&"$0*`Dnag[1DKH1o"Se2+q 0&B%zf^L 0&`L 0&`L 0@{ mGza(jm5*W,9?v '6:7,YUX IbeX`L 0#c˒`L 0&ٻ;o0 %H"A5Q QD.vUJ? b[" ,kovIFZ~.. RxI  CH'sf2ɕ==>99   +񲚜_?:5v& c; @@@@@Xkp+֘7GJ1@.V@ʱ     @:ߙNjtXߜ=&v|?]+z[R_aU  P,@@@@@ݮME@`ܴ#@@@@@@@v&@mP       PL       @; P6(A@@@@@@ (&|@@@@@@@ (ng       b>        Jw@@@@@@@` 1@@@@@@hg;       @0      3l@@@@@@@ `BG@@@@@@ڙvA       L@q0!#      L@q;۠t@@@@@@&@8@@@@@@@v&@mP       PL       @; P6(A@@@@@@ (&|@@@@@@@ (ng       b>        Jw@@@@@@@` 1@@@@@@hg;       @0      3l@@@@@@@ `BG@@@@@@ڙvA       L@q0!#      L@q;۠t@@@@@@&@8@@@@@@@v&@mP       PL       @; P6(A@@@@@@ (&|@@@@@@@ (ng       b>        Jw@@@@@@@` 0u p&_+@@@@x9JXH(  @cQ=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ (n&#       P=E@@@@@@ڠ6h2       ōcY@@@@@@@ D6d@Z?uF]&?؄>2WN=EU7   ]HIQRdJIm"[;>D%\Gf>VNH/uR ;tʴ3R}MQ|t\QCLU|%߉8ü \P7yYA(H%'䉣DRBJ^/|'>gc^{h9~9b}5䳉c6mZ{Y oke*k /TOwt6_hl[UnK^%9]/YGej偭xjMxR&'Y0C#~G\'[>O]V|@?t&[,&tșwn~q=C>\eh¢:wڿ]־%{Y>Z_O]wهBK]>5:~ms=f.Zm4qyC#&-/:}e.kUxe5DkkOt*@@@UT҂O@AQۮ5v>2%0E~!]eh=k\#gvzzEv1?jݮ2 w}46W!mtg\!z \ߪyL0źAF(ٖN6ͻSYlkAEz+pE?0$`\[i' Uw4|_tue9^) B|ZO4}Jt`s=5̡:ٍW@@@(2G:/Hl6}M^SO?m-Y/Б#GjNҧlU_[vĤ y?qS۲mb@I2A/ fF)p5tadY{:6|B;&FEV5#M.XG z.{Hts`WomP_[Y4R_Ќ^#7ln^zJ8ՑOԶV`3F\yLUl_-!~7$\Y_:FKoVgk]8/"^- woڢOLV-uzKe/g9W`f.~~lұOY=Rojc0]jEN?VOL{uә:#qKkR4TH5~VڶDĪKby* v@BR^)̓/ ,'5YmmK~:)뗭 g7o{Dg*S8<+\    x Th'(ǖz<6s$::QJ5Q={񾭪vct ,6=m|XA}FV*,P$vή W*Vx%:څTBzmkeS+)n LXCRFnP9#G>>tl@нV^RT ͆&Uf ϯ 9:yFI c2kL>>  T{BYnVЯ/6>E[6&2/1   @QV6قĶ95!zakov銒"}1}[kI5sC<S]''Um*ԣ{OJ22P_>i&E]E}>gU O{0*%*Mm4ǥ?s3 W}gG7Zt<'Zs|c(mh96j_q3f=J5ǂ_^M 14MVh'ƺIwF{ﺶ[6?l4u,ucc͌\s;k^70wƼwaYO~i:s+kVų'iP͏ڞ[b} J!}MozýKȇwZI0wҽIޘ,   @3 WB$7l߆fM7Zwily*H'Mתv)~ғnFG RT֯1ZmK9P" H+snNY)Cts=A\_ӗۇmFN*rp紶f*TlFSQMOKմU۔|=NwfTZ㩴n‘UV&FG{?:7T!9דqE+m\ivjNYugv*'־ *?w3Ny_{o&hk;3ekm[sv[™/{w%5K L:ztXv۟ 4 s[A,7&mEWndU_Ii(qZl ^(]{X՗=_n:@o+8%wކu%ؽ\[_}`Hhdu/y}*s^ʬ)pNoԅ  -,Pα0ᆪFKsf,Y[_cfdg DD EIsju6mۺAKfW뱭ͺCg/PZbVXcݙ*itLg&hz{zVܹM/]赆UӆY@,eKgѺzvjb ky+/3&ݑ^ƱsVm;sZap{2 K= {Tmiy9ͣ{p7hf{myYN[v߹m6]acwy:mU\ tJ*J]9IɞD 5WkW,9xύ K4'}lז{fԷpMW{ڳ@.k74&4v*7։9*i9yQ ~!LnxS+gfX'~.+6#b|)s6hR}3|BVNjs.`3־oPl :Я׼OX>Mslveg3~+mrٳ}cwll[$i^ǴcDM7* yf/31C/Pb\$}uY\*AXdNlkovQXbow%/'~ '2iyNm_‡+o|=7Ѫ:֛mܯpևmRmrF; Q ּd5=MP܆37Qm2c'\blVqxZu֓;g=ߥV֚7?fy:u$O/]suRrMIfg6+)ky*vUm1zw޽1E;nҞyXϾ#9L3\sς`!$@@@T\+@Ɇf̿ո{k_܉xOwg~bZ-mŸ(@cU Z8Zo;5sI^7[=sX7!,gj}X{'zݩ3/3B..~a~ޯ*5׻\N mo:q JHpݮ|۞r)3wpw鞪ZoɎeZ-+mkSO`mC Zw ίJ$V[Յ;^mրOE l[wiprs ,ӶEouˍz=54VVC+ yM~[TZiY{n Tt>ש=˯$ki5^~E[4nH܆OvLLZ}MMUK}lbtJ>4wipRK_~+'@@@K ~5wqVV9Wƭ©nݼG4{D;i+۴w1306ɐ/ni뵶&(;vy n+c_]gW\asRm[lWOj~F7﹊V՞3:׶_ٷ{E0){1UUgw}}zk+7`r\7WQ}a{O3մkyd[tD󜥺 v伽ڛUm1C8A޿-x,ˬl˫:](]\!o"Շ䋫Kuj}~\vMGkT,ݘ>?L{Ak=7|hōZ󧧫UQJ/gxyOWnU ˢ)um{{h[OPN##|@-@uoKuNmCu[}cS;󯿖]8WIU3m%v%9Vf1MxEmv }d^P"0u:WNT]obwy砅jGoZS,,ekΫ"\0z*Mк-*~b4Ӧ2UF?=_i.buAg%%` @@h &mAUvP[v͘3A}:gure$jj!-媷Rfф]^^~R~8q>]wMX`;_Ρ,-=ߴ?[[{1sN=Κ*zz;Uuܒ٦uΫ\zԹqdf:BzIdai,9=!g󀴝DtzSOLTSD=zjY=[ڊ@KVhg>OO%mq!|)©?oM:~i qnT4%Бtd5[q+:q{9ЯvV,K@@@V-]m /_[84MpɶB RzqӺ{g̓&Pm)A3?6Ȓ+jr7~[|Wө|dqkk*c݋zagqp{W?b5<|<_ޟs+rw+SzlJܥ.=^#5' sj*x)+_JђUz Y45 1@>@$&*u1G UShK8K:ݬU/{xu*͍,-)th3KڡM$v~{I9nk ;[BL8ߣPTw?vKwF}oh\A0}>#lߛ狕 x!  -&2;֘sts 5%MOYi0Ĕϓgᆸ|b2j1=VʜٹNcsz7V+hOzz"XcUxEۚgRh|z5:cFlX8֫f4!T?@~ NyE5yZBO>T|ӷ5 @ PF7ͮ+phNUz ݼ?io*ؤc7WjlB:yVI!&˔렸`uUfֽ_hHbCoubSd1s?-:g&֯!QO/?UemMokƥ޸KygMnր  ,Xa6ݼɊ'm+\C <(MhbB͟/jMtĚ;Nfi'MtpDR?GyK]nn'ظh Ay"\嵏fT{@q"@I1)ڹb5uKv+#|!7x霷i˫j+q&k_;?ItMc"ppR_ f Tҝԭ_z$맞ߙ5?mXCG uS`u64#twޤJK]um3F?|ŷ9ծ?y%ݶ&d?1&e m$|͌&_kW=uFwϐ [xi~ջfy?YOO *@@@@)zl ,Ԯº|e.~ٶ:..zH,=NE%ͺ;}Ang,ۨzkVX%G3U)URƕ3aʳu=:n2w9ZͿ;Ez7EMڞX]7i-{,mt/?A&+s_Du6jfz'zW3^?Fy_QyiΊ:o|TSfQ佴`CO|g2%}n'jk԰g&[Lk;㌝麪N;FGV-Zjc>VR.e$ }o[%ut.w"? O*Z жM97hՎjׄ=$џ/OIuӾ$jof䃙fFptwЈ)c}HHp?A[dPlzb 'd:c{D=|V=uv<B[Sk9!-s)Syv\I# ~E_.כlN3:ǔ. @@.x=KUVLY6i0wiMK^]9^Ԃ=U:k~h4yT&8CV.3E4Q׻9jt_|Q>SeQi+k ,{fԋg4qpiO_ZӬN:L-(s߼>w&sdttUu 4HYf VUڶP`b2Ƴdȉa7y;c9ݯܩ poXﮨlc[|ўE},^5VyjcާL"~:# fP^-#umDFF,S~+۲; w엦^}?1#j;˾t.5kc5•r 2W^UEi۞~ Ƴtw5~iv.iۿ7['9?L#zlSn2H8`@IDAT [gZ3'U1N?]nu=&ݘ~թ5fTs[|g3.ݭ @@.!~Y}u2Rɸn3NPvn=Sn]<ݢꖊr|NQ/彡UNY_MѧŻuNbRڶnYn~Yӝ76cFsژd-^B3ַH%*?ΆFd5C{W:MKf#?q;6,1ZydڗPc?pzνڰp{=cɋ:LɶC^qb ~slis|l/kmL6% myh>7UToO^w4謞=2@}>U1 &@e60/:+oo}:X=!δ@y;ckԹ9>2 mqޜ?曳СB[ _͟Ƙw﴿2u ݬֳ^wy<;}1eKsN;_z7ϾLx'"Q_9| yuMs-/7=M"vTA@@@ZBR 1D 2rCZtKZ@Wt<䯼{=re= 5tU+a!󻵲f>mkP% WwPG%w_vaGK%ϔBUbon_T蛹̜Q1_Mq.7[}MLt-щ]u=܇)dggQ]tyaN kossf;F_b,*9qQ ѱߪ@'ҜwOuծ4YkuG}0a핡EVz*?٢zաFֿ_V~.vQ-ڢ F,Z#Յ]3u氿|&PfmfW\y7~U?rn++?iĝj'\?u_]~b.*ӗݫeglȩ5dCMޖ*n>Vxw5b|g_2rk}|&P\4lU3}lJS]Rhb}hzG׺뺩䯦vNe^r'Zٛ觶kXc&xx(Ї߮}U١oYz`eǞlD{G4ht&@@.=myJE{?XaD _ݯjwO㽩믧ݮ23]⫢mgg`Bnc+h^\ı]W霢~O`%ۻP؏AKJw%y:ۚJA:-=ur͠N~2C2шւGY?g5a*ծ>M/Ꙭ_r-yu;F;eh_ 5˪۽jj9n$Ǟ"v:F]mf_lSα>7F6Vw2"4<)5e/d&k[evN}j:Zv {:_$v{<}AbOeD^r\^5lmt۵son  [hZx/_5ixwM9/s+ʐ.o͉گlZy.ׂ{l}   \ uBנd ;~Ru)}xWG6>SێZł_n&fr{w JTW`E?'ɝeASn 3sOk!u1^_o<-ԵJ+ΩRjPn=q,MZ+>)NgNCG2MǷ6A^3S T>*rr 3QWƙCUWu"U^q+R7Vuc}maK`zt7G R}t&s;Uq|wOX}o̪vx &ud"^gisgT:֟=h;]xwwx jP?jǷnkxvҲv-POlz輭Ŷ kTL$&ϝ>@wD=sjw*S^܆6һ@.'uk2NEI[~ּFX?ywi~Y=˽oE^434"<2>Q=Gީf RAܢole~FL&6FQ2RTG^48[ֶlwh=Nsya}uh ^/PT{ߚ1B[}Քu?[bͳmVw8c Ҡ}²D[[v(ŏ0m1V^ 39^Gn3:bYN?8ΣVܖg5/Qm gB@ǎo(DUn: V=:1ot1̿WCj{Syg[i } Jmy'  )6=m_nC!@Z@3ϭ4 TWDs}~Wط4b8l?gt9$u~r5m;t|QU+i{\@_Eo-Nku-HlS2ٌ23~"%*:Y@Z4ZigDb]$fդ"b/t{.W&PrW6t kcnnu+:AJ~^q2zj緻=@H f z{{yͽJ =8ZѾy ݕwWL{nE=4RU{Owzg]=SO9]J/V;ttFn].|7^ydurF|U{N,0wḯawᰯ4  @W[Aߧ"}1}[]tIUbl΢\.SӸ~U(?O9uB'NO4ҴGꕔkq7&L>RaiO}=̠ACsIs޲W*:ZQ޽z%+%vFOoH @K x=%º/]Cy4Rm3Q;}x6pĖ^0a_J֊w[I 5eڞ[`۷[e:'VSFȏ}/u}qKb3:ut%9NJ}V>)f6C*Fv ,ڊ.*zT{CQkAMثmwwz}Uol4r96m%u˽/ YKbuL}6M@@ TgC_te:8=Κg+VOn:['gS$)==]cӔs==SYGͺSAs7^͔/id{< (ؾl}lm*+خJZ6J_]o(`><ERMI`:Ti}'-u')2uܼ/w( eYM8(,ݨjwE5i4(Uc5tP>8%s)|0*ƙ}#U|uc:UW1gԔI[`;Rs(v|z陙fM*ܷQsuP\Rs:t⺚>gwhK2=}Kg?k:XG[}m29oҹS!L{ۼӞ+sd}E1\Cg5Ofq7\eoHY6̱aEg_i3rk7sv4V\J @ 4wy{ڄ@98ś 3lg '!, WD5 RWӵB`s^/֤AK8ܮƨzغ ^UOŬ%>S\Bg2E:u{h+蛻_ܗ ^9G^:.9eŢ]/:U )׭Bc=k(AyG "Ov16(NC,e2gfk_zTOUmAt:̴|_zסʜy]լ24NK7{e{Mjf|WDN*r7i".>.е_uO~T_'7vd;kfT tVG?G… s+֞yY olAZ_Tg!rVSբNչMK6YcУߌJnQm%?Lx}{/+l-SRl;m;\ܤ_Rq>;WC%=' Xʿ5ϭmsMk* *XXGfQ@N{&]NWgJGgmE' qFQwG2w.9ϛsAk_3gsn wWSh#{jgT~O Ƿ^@@Z@taZdulby'(OA@c$ay4A Q>nɞ!y숞xhPKfBtlN+wD4c)T5hy B!^#tvY܍2~:IK@'8{@3,zv^d#nlA*c"LJyOkqea02i〆ծVC1ꖊ Cc+0`^J6g2Fd|<3~uPsHlRX7x8w?֤Z*n_4}v#K>piYóGUXǚkԮoE.G\We|xZ& ~KF`d4:';KZ8+p ^Îu vE#odJ d]=Bb,՜M!@!дח  1!4/Tux-9 ?bB;'<|?]Ɖ[Á VT}Fr*ucD,9RV܉/0#53f&Ү_* IX2A:d}}ǘւ4šGkZ!hr|} 8l4f =%;=*Ųt_+ӀSϪ&<'mńck|!L0Z9S^1bjf\Hx U^8ӈęNN4C6:3,Gbտ/¡$(r~]2O1]+nۑƈbt}Z9SwF+CqX=K2N9?B٫g3%.߱g)5/u͑UmSL—sqMapM!{ fVs tj+AAx$WD^[ʡDJUgȩev)I"/~Ϣ\Ul_Jf.\! fI03LCwzنuYECC[N3b&N؊6Z-!c-N4sje{O}Gp5)U Q4ed Nx'^ct@, 8RGG1nBm.Qjeݰq{1#C V=( VsQZU-G%OkE'B B/J% 51o7I,DpuSYeT1]I^5IbK*nAT2I,ԅ#` $cLyťtAg[c1 ǿIb]>w8rg|@Q.D;!"rZ$%0VZep~9ݡS֯Ό^J+=`ېbՄ6O$I$^D/%&CiMVwbf!/bGr%W2[>29=+8Xc%?ivvsٸ"I ³J>CalC,'C"k:o3CO}A`ضLoEء==d[jVmf>Er}ga#5$UqdThc7:mvUye*P6L+0h,YwRgRImU?&>'`8g~\6$< 0Gw±'MUD ݯ\/;(\ڻG>" ٱ7؊TdCZ5*KUuUnEŁplMEcčҪ\8ޜ>3վ mqpOk~ZhMIj uPճt_:;wKY8Ъ.h3J؀iPC)B B iYႇ'\O^};~v.@QVЀ,\1UYO@U[)U+>q];O*s ]?4B6j4G= 6I2٘2௘ǥlv*UBj-"e\}H4+Ħbh .@lՊហ3)5U\`5n|;/ r"@4 ؋K;W~܊ݜYU 8OCG/9#FxlHwhi2l|MukHI~U)V_zso@@:jwEW[av)Z+.o;7TҸ`߫9w 77Q1'"zDl+9Hsh=Cx<<_q}O(NF1ny;NB]Q I\Ɲ?̉lj;æ8tvݎHdϐt]Uw)sԤ]xNMamq{ mYxXP`N+ą0ȔE\\47ˢEM(4ai  \GG1< :+1ӄl:ś|77]X˿/ZsZUrj%ŖqEtZQEjD(KTzMi4u4>ѧӴ0:v›HID=[u<#b|t\Jj_uddNǀf:qdȳ}N@cW#Tͣ%7?G1rYIhZZm7qlr- s71t{\Hz;6#dV K5Y 'B]gʳANB B j"kb&!b&mlZh9S8UM:R+WE`v鋧F#.>m? :2pA.ba!ê@z5)aؘ0A4lȧ6qW$8܇"E]%-8OuAfc[krŹjmfzB\O ˭@%NC?wZD!^nhSnN Q' { r>#f&"h"3´漧TM 6{Rvi+eFŶEcxlRHIN2oDG $S/rAd8ˣ0ehy ꈎ ڕ<F޻rբ@.v!H*i1YtfvFlxl=*nh`nu$>lÁK/a6|vͤ)+Q#Q,o\:OSLNWk:v J%m0P!<mj4(U7?`,c8hZ$6,3Ibmp6B@8K;nG` :آ&W_H֬ E{DоgK=4±?$ԓ4M^^Ѥx/b39ĝ-&pYȻ*m2"B BC;q %h&/SnZrR0Q%u@Tm2@b $䷑w)G0 iӭ8"gɹ& C;O6X)o`='§%+9(dfV p >)(jH;hNʪuB IʫZ>oؕW嚢tڹ `0L}uX-/DžXb9,J>-?l-3]mz!7!@ &9:) !!6R_#kau. :؍+si\̽,J;/xioC"c7#)M,!p@j Haz:U_ڍծ\^:J)eRn=ܓG$iCq4'6 g M âU;p)Ypfkl]pɡ3=HS[3YNjCABڵUOy7 kE}x}_/MT~.E G oW0\wJadx },;VW]6W2U\iW dn_YC(3 &#rgGIw81硃]L0}[VT,>#䂘St B { pTh( {nAˆr[܇\mb&v]rD7~P?89M].9,L*!.6bOjI>v!xjE]o>}yfs "Nh%Y(V}yz6N3L _Ӕ 1?/xNUJnQQ1 s&*ܷ1H0Y"x5Rd-{q6j?Ɂay/̊ _ [/U ?#.˜Pf?<&4 } AԾ  R'X%ψ׼מ׀Ge`_8vp䮎E1G` b_BOY$$eQ>ϟ!jJ|=ϮfqJJ5vX}~@ln$=/Td\ƭwϑb i6,?a!50cb%VPXVGޝТ ECnGiSOB8EyB=$jz&O,^(ON@'n`p*Txܾ{}^x4]>((7Zsރ֥:ͬ>fl1LC-_<[PF`7X =]?Bp2~χ:-Q |R"R{yR`>mfl B B "@(L=۶Զ `ԛQVE'ۓKJC.A61#r&|̮3"a\8f""Yհ|zD.GOkt8"΅c_nd]acX^V@X.Fc?)GjbDVJ+gilX$: ODXP;1 36G"j\FBuq¼ tdo͊RL[5FϟM0"XwcoKvZ<ԩ6}+uqBܒ9xBS=.a0o`G&;9lU^-1UZ#n?7Zі ݦd <R< "E5[Uz`. Z݇(Dl3 1!r?1;v>sgS&{ǞY][᡽ߡʳS{<  ̮@!0z46Q!JW؍\O,쟏Ń UCSidR-LD0/7b8XmlNy1GcJ&"iuce l2Ebꅭ]:k0U>wFBh(4k(z8릭ym&ن(sW3xȚ5'Pkf=մ10lBܝ?S/^SoenZ l|%hݻ^ U™%ZOkރ똪=za,킟)@?BvCe3h r2辳3[Nk⡌]e͍!42ޡ]EXHюRbrs샀#H72-^Ԝ cx8oh ›Y+Y.e]6s=3s66hf\==+e&X' $B BD,LokcvxG XG`J8P~%"Z­qU;\Eqa*.(Ƒ ]p tlX:9m^,>BHL/5 `ŠB75mmrs+gH#ݯ =ar6oO,Api!s U0O;ohUY'OGҙXp֮$̓ X w7,7aa*CZ8^E74 $lv :@IDAT|T|X_S[X%^:>(L &n7Sמ "YA{]:}a煙+=C*HK>;r9~[?EqV6 ba=`Z*g15E~E0\-Zːs BU,a.Za-WO+ Z:p0ߜɸukfK/,ܹuwqsGnR˪6T$' Ēxi[Ut(BqFssIchξ^՜ԕ8 2s*VM]T$#l|gqWla"B B!)))ZR|ݢthTmNvM9a+=^;B[@mp1IjGX:^lWu(Kv,.e܄}rE@8Vc$?-^a/l60,A~N6z_/UE![4'Sstuak]^>~gu߫9iX2P,g> e8#d2܅G5Jo/\`ٟ`WpM eUˊԖɧ3 &|sn8/\BM]V [+i D&k RB B B B ,D7[CE1i 3HÜ&lXK 'myMZz14GrV r!@;T.c7`ʄ/ ,B2>Ԕ! p7c Q+zxؕ:!@!@!P.1GE?)`L$qMp<!@ |B @ 6CI3jV,#*Pv!Juլ D!@!@!иo1̍gǣ#I/ n͎:"!E״/VE8 BhP+A !@@cCnIYc]_{k5ZH!@!@!@κ:'nA\gⓩd<N!@7D B Gt(:ީJh3vP*zݚ ١!!@!@!@nB񉦚?A*MpB  %ƘDNj70\Sh_>W+׮#mƻ+zÑVgO "F Df S69CLE'k_ $b:]."@kK B B B B Bhh\ 5QB%Hb&b$vғڴXwŵr[@3 Q2B B B B B B BMLYH)_ȑÌHb l{1HNC.BQlCpI4!@!@!@!@!@!@ϰME@I&1##w`ܛpQ"t* B B B B B B#N;/-ug!ВK$nODj! ~PmB B B B B B jd1<"y4]eaT!@ JẂJ{D ]%Fes{YV^pr!KDoR.TH`SJr4ܜec*eȿYles'sѺ뺲=k8]p(>+7aW!ޮ;[Reޟ8p `[~_ѺX17|̷by ԭZ89h"5yYAA!@=@_CDe$VbB:CX: ɸ?8J ٚ9y@ӵ3{[ߞpR#lA ~C#^ɸ8Ȼh@%-8q7aRE+mMpmX@ݽ-5-Ts-ޚG+%H>q*rh@?焑yq:)Bh~}$foĿe7[1УUkPI,k*tM eY]b %waĹڊ-=blkaOKDp!, ؙ(j}3!tT!KpǮ,\!`~:O#Ϧ_Ll6qAl(ϓ]+COL[kT9i=\nln&XeԂ!@!@4 N Hbaq#13ĽI4Ѹ਱UqmSDWWTWc1W؎wM383y:O][Ѧ:QXva3L_O-RvA6yUm?9Hx.Qid^܊c;Y)_U܏ldݒ*{vnxoⓏSqKs=35lBMlj܈HAQuUmhcеnqԄbشH_u:JayPM_%m&W{V}?nMzً>'l۸l\qO!@!А`$ N}gKĬPr</Y,B:A@IT!@>B#-ۆfkUf@dD&LG1Yk`Џ_b)6e)bZrE¤o HbA roVqN{6Fl!ɻ-,5$1Vp)MA6{ܮ%}e_|)~^ܼ61ϼ)LVIkK/E1WM>%Nn`FQ4.qI}`CnS*prepޯoa]Z>Pͻ[{pȿ2Dx B Bh3UI-ڌw{xC`$nSFxm"ӈp[XpKny4$Xrcw|lYrٌ)v*qDj׎M̌C{  `Dqcd67_`hMTJ3;MP~'XkT39m{N}Z n75rZ=Tj9B B {8(r3v, gHQ 1Q>DKP:j&Ӱ@ʒurYiN Zys$ßsujFMF )Q?Y!$,g(a tz-ZLJeѹ?1)p>Z2 [e~ONFZʜWzEK{#P>7 ڀ#18f&19HzmJt^3?(qh7Јۢ&V3^m*KO >hZG(L;1|6.n6\H!OaiQ+X_֠=9 5/-llrgyP xLĐ6D_WwpM%S>B B BGLG$.D㍺nb+El/Bg$a4؇ m/Y+I8!Wa+ԫ/?#-PVƪ3D-[tGa?"+2љܕB}vjl-0; 7n=NmV+˸Y߾7m7Q|fVEK8TmNҞ@~f*rn`\hݦ=]LH{T8uf)i2{u HKɜzқ,An%,>v?9ȿ%,9{[G'x~qe"uܾS 7gqn*cR9&] /]_Օ֞~6giXcgoڲJSdSj{[Kb.+4ΧG}Z̼ j5Y,k)]6yҼCؼ#;nBEظRgZ kɩ3r:9KNەkBWq^2ܮZmWjV{`[!@!@*($4yXB<Ƕ}y"DkChuцhM=~ղjUrOzE<3etUƏ K-ZtN =˛>.r)ÊґMۣqI_p瑽KB?EB1Cim~3S.+xv5 _[Qi fW;_Fa-BR@)/o`kM,\XEJZ_u;HX~5{&)\Qw7-#}U1=~>US)R EϠ=#Cm~MKFVnҴ~Tk!#Mkw 7?0J f/A8lzey>G~]=$Xu,[a E7'5=L-;!qșeT:uD|Fс}CwXkd 9cϼ tIo3sA8~KPb|Q Zy7U'lf̣2Q d}3¶~Xb12l1l~i ›2!@!@+h' P, )XB Sf`:|! F/!`S0 6-vm}K:=#vۋʓCtҬXc0o@6Jፌo`^Y̢L:d3X$HVjӍDlǞӱ댉!ڵH{7<lz|I'۠vҬ8y1p|UQj;`g$:2+@`/dsꈷW$n^&%GxdyN"([DI#s{} ZF2qfۧ}y|8+⿱qWj@`[y,ӗY1xȺxVΩvIչlG`ZjW!s-{ǀTLow֚YGNT6:Hj)6ws$vg>2izXHĻ6ߟrt- sKlXDF{V/b B B /0=vXP? '.Bէf]՟i 8jے5v>R} _AW %"9f7fqfÔ҅\Ƌw+ 1bcGnbFծ,̬WryH|@ZWsrS1[vgϝiDZrUfoQ4CzfH?V/倂+qi^}'e/1"y};Bnև#x^E 3 Hb<ċw40\$F Jo(G1}{FP+Nڊ$>!OpqU9sN5yaZ%h ;۱_8ZSEUp|Ǣ{@3bN*!.q cdF%ql/ڄ"? 2r]6c 9x<OIl{!ځx`$G8Οb~_vcIܶ;ȿ6!U1!Y>f"(a$ Ejqh<=ypZkZ>[Ʀ9=*v&lsLlu 9l3J3\\L W.~s7HU-Ekရ|T.An; NL '7U\G ;x3X;cL QBm~ zHxC}PH »+7i{ ݹ>gHx/aceymyK`֙#s*Ă U.=CO gxOrr}08l|׻љء#3ce}#&'|3vDan*}ZQ+dyN=I+]7I9Н̙ } a kb?wgHw 滰 n| ~v0(ACDR]`~;Vn\x^UHb6w퇉(~C/;:;R}sAquۺFJzzt.Kۈ'#,nQǣЮ;}/uEFռ](k_6,ؑM*Ibm+GVIy'ⲟ+keF| @i =P}^sXP^06Z C1e|C<˞ԟ͞MˑN_Bk̓%G[);gn4fD1˷LJ':X1|~?u_pw*gFp}FJ,m^xM|eﻣ览X*Ȭ|:2eK!@!@@B[oXK[L,PjnEv~kKIF?'F vp4Ze}YA\ܚ+~E&PG C}\Ԓ6y5o7>i2^ <}>>+;A]{1LҠۘAқdOmW gc|lүK0#:})4"\8! |n$;y8RP>&A.>&H@N٦_n~bʃuv9$ňTu=9j _]b:WE;R)L1"JpS>*$:2]$nz GY)(ТYp37-c1h-W&7"ePmGOV+O4g: $n CI`eq>rj ]0a߃(oB4NVb;z!_<7kr,mbq}(֏ӮZD19\D dEVGe@El@kE4oY#pkUJVOP6rd6*ldžb[j$ì )`y+pxR9J!:{uq;s;} bK$Ecb!*܇HQy㢂58Z*Ɠu z`y ܪ#5Z(U|mOqÞaB@n ~%.ߐGs>Y ;f.\|EB2H*>?`ԳdS *.S8 xf-={Q!$qÃ!+An"fing+}@=gP9D]xM}),<; L}Lagg$WvyXz>Yk*%{gfCY49L+T~a3,k>*o< Jʡs0GTi&{k5~U6L篚8L𕗑)ma:wdrj +ͧF)~\?͹ qx1lNF*30#.f\^3 )CX W >&l^ & B B FYFUux>@IF* R"Ȋ;Uogx1\ [:=Mxꀽ[ϡݔmʯ`y\~;Gw SXϧjvn# te98H4yzK:3p1 ;Z=r .~Wo #TluY3SUXBZc~ $$^?r$ti8qZ&Q$s ^gG̋Gu#hpՏzs# C>(E`v:'_LGU-^lrXnlN\_{%\HD@6׹D3ߒ`QuQ&Ev,.M-p&.Fv )PNI?CcGb n?<nߢI'uOvnќ$`DL!Q66@m|0qq!e- M293O /[!ĬU8kS 7XYGq>=m\)9Y(ϛ eVX&RvHHa&{JObz<784_]t]0N Oln#Le; G {\4X^1X휥YLi/Ο%H:L 5 رyu+^V֚YKcP#zHh*Xr]U榦Z'\}19sDwsgpܯb)KGOSw0$#bU;I!B B B Peǽ@ Q'i.7r/3XZQ:F0xJ֠߳ߣM D<6ł-F%PдHD͞F\UhppC ObE"aףQ``~<TN;"*ڨJmn,7F+ #9ll;G.A!ܒ.nb?zr^Ξ5sʩrRF6^Ha#`9EH 02[ܕ zY&ِdž9HHJ9\Sh RQΫbC gOB%6i_DŽ* jݱtޡ/cO1bΜ gNoE!YC?KL  _>5{w} R5X+LqެEDAЅ:7Iv)ٰrw(jQV>zRUgq#);tl/3$;j4&5Nk*cAjYp&/ x|߫w8tb-fGJcȌHTg(gC:I~ {g~d-9R׹#̢9sSf,v$q|LX`ܟ+QZ7#,$ΞgOTy;nx}r.-ޫV/p%'!@!@!@MG4P C ROTyLhn41̷<ˣ̄ G>Mp]PՐ|buşgVkڐVZsΓq6Ds c񴤥*L'Y8/3w?~3<ۮ:.s䒧/[7u'E92pi88gn;<=Tf%!U.$J)am*ˋ8/㒩:-<甙=>g-{s ^TY.$ڑ,k*uYl|ob?# 8*W!.6 ,A}Ni^a56[*ޫ ~شKg,M^t<~3UwDn?6+(+eS&{rѲrxٟ{FHTbdg& %\F6F%ɝ=zw"-ub,ӗ]1zW.9.3?^6-G`ȸpX<#k;.LG0͎B_A֒#p)ϕ6{sSf,uW +]ֿ8?E(sw KߘQY;>Ɲ|ƉQȈbi{F!@!@@#@Dqk0=}m4XE%nQ侫5ONlÊ#ii:1/?aLB T4Sj G[CsGtf_ßSVU7 pr$Kxmf:8h3 _&?0 gYŔMt0Cj7{?@yR<#ꐿisb ?e({h)&^f-KQq )wɗI@7~` P+ǏZ96I 2QF=Mt#ۿ٢C_ 'I>p <&W?~$:mnTjO)ւmqկ[ ifgfqwF{ et5u:(9;#Pz{AҞ\D"@ D6A m4JT"o,1G7F['WZ-&áGֈ!]›e]!_yf#;N:mċcz݈^Fοc߀Y}cP̺\9q}XT<4>EҤ;-ak۟\wy.;FL ᲼2#Hm;:ph Ry?:nd!v^iڧN`uO`"ȇ<8ʹly/!)\_WWz߼9Vfz7#QNFp1|7bO`Cd]92oG[^i!?#X$#u~0Ν!Z,9,y*}|xNf0-_wWR$RqqQaZ9 ٢DZt'(-^*29c=afƵ,#y#`:8z[Ϯ.ެc UW!["=RdX6,O8znh2ꡋ10;EUub1#oemG|.4\HUQtVtk+wKi`3[v+ڜDlߝG7óL^g3H1wvv N%Rܑ 48zϻ1ZXt'xp2}R=eԚ.CE!XμZ1;q--yo{l{.VA!5,([q+fŮ "]JO0BRu߫fm/H"@ D"j X0:⭐SSbJl;GcpE(ڰl0i#="ί%vͺ{7i0]Jqm+7I 2%gisaA.10>'x>ð"3fj5,@.w 01OH$s0o:Gba` *%a_b>)q&['R E/^cb@w%oǞ^qO]ߠFGƥ)c $E(U#_#Q5; L3_~-U'ө YqT8H _(<($f;{E ƶO q䦟+Ȉ`D[a"^~ S x/{( wtCtRٻa&U򐁼#"rzH]/)8H^K PB=)"@ D" I@ Dݯ?Hk0hbYgSS x%0 Y oFo%7S 3(LqB)ltK- [>|B w>BX_AE*m~ }V] kyq$3z=>" F"_f$faBGbCeӷ"W09l11O_͏__Ef#McтL+p0yd,(NƖSFo3ZdgIo5n2t`׸^71#1Xv1pݫ8peUHReKRGY7qƎ*ڇ7UFA36@IHWQeP̶="_4dgk'pJҙor5)f;˽vI> URzufztzb̞0I\?93')I[AgTXAFJ/{=F'+-PoOcl3x%[rϴu=WCpFWWZVg!)1b~XY yvf3aȃb8ȖOCM-p +Bck}2i8^ՉV1"@ D"@Z5ZzUBX]pRw+pLx#gvN^EM_gps z=7L9p4#d 4$OE. {ID*͔c’#1Q3|cJ z^l0Td9Ж덤FmfCzù7XMf/jEGzG/ z[. $Ew <7t "Bs)[dFn=8Q*,6"D"@ DRʰN)4[sͧJ~sa| ytJaF(?XQ-DE~>_7jjpͣRkKttNp X1ZJq_Mŧ q}N9WA! lFglkȲ0Y>LkeUgW`P4[Bt)fk>GYc>/lJevf:v/xzC >ٞȹQ\&:9-dn/?1/9@h \ot9L'AB.o6Fb nX#?4i\ 7?^9B \Mfҝ޽VJi*BfbI UMb]=ы}rs_04E%M&P_py`$fJwoAw$I.w_ O6,kL_p$(EV;H-9kzRڈ=|!|8x D"@ DU U: DH>~ceЛx T$boInn#0w` 10?]SLD"@[wܞqf;vg@9 D"@ D"`_hF}҆'[q WSxi9S`2quyGbd'H?xt@m9޽G$#1^hf:xDN,+=`Bo/[S>хJ;t)qp*F]zי%m D"@ D"`ͳ"@ bzQUY =֬xI8 D"@ D"@H6I D"@ D"@ D"@ m) "@ D"@ D"@ D"@, Ce>K D"@ D"@ D"@hsh6wJBD$PE~I:'xsJEճ ܝ[Wp V1CcjTL uB8 .",YHZɽQ'ױ {R 1V{C 5ϲ,}&޼w4.?Go${^h`ZtRr"@ D"@H ŷY:WgS-ja ")_!u{bO0C_}~;'ʼn,:] 7qj# :}ax*NdVŰ50Ԗzs?؜epZtHUJdxbOFb( g^4wk'[:Cq66Qk%1hX?gGXDѩ· ,,BR¼DF7'rj|.C;|&4qhώ& ^ɔ:ME2LR!.|)Tf^ P D"@ Dp.D% sCդDN7!.]&8d(X*O7PSsd(>9B NhLI핀k$^X? :ٹ h^a>n^5I/ݚM@D@?Gz {mPz|A7JGi&Ίl[*_tq;PDнawD-O^fy$^wK[|I'\D"@ D"2Ad4cOty:u`V"ۋv!)vL߉4&VNՕ7Rwр#R+gL$qIҭ`sU}bsĹ3RVx-XM*d?L@UE)mwF8TE#TVB^AG"@ D"@@34E(J>c@5Q|MtbԞBQ;-Q.Ǟ@0Β X|Mg$|oV5$٨]+ CśquV$:5QoP#Pr̈oZT2h #VaA1'f#>#oAW\iv&\Fr=zgЕ@Z_Lj"@ D"@ vGz0z E]cX9.#K"S%9FXQl7K|eo\g>P|yG7_SaPW.ʻ;vk-R/:کzsUPթ|t1!j'P|U0;щ-#}<|lcR*b8\byc**6r.ˮ-k=zC'rVYZrtBkFbԲKѽ3d<*qVMaKFt _Z\:'*ޯaJ夣g>sw ק S`PNx JKwVV+qBG`۾ Zryu{Iɫk(<-c+JrU{]4+^W\7*3Af.;k ;'j=1S=ҳÚO D"@ D'`En"&~U/ɸ1.)M#v{>7;Ǡ7J SK*reGKke:[NrwcF$g"{{>t'c}o&O|~Nex(;?yyQv1e9۷rM,OTĊg'q*Kg6 6⥩&ᅸQ$ܤ್As1g*&;*N`sFX7 pP7mz^#|hCOHo98 >_M~g0dǷ;[$7?&ʩ [ޭWa#>/lvrtFϸ%xxjwI$lY'̴\"1j} <%zNM~8u9vZ'VBat|@DDZnWib{ʨ\&D"@ D"` %[-( PǏmMU6Kqۤe=jdE4%m U \/+N/OW:;1#\g3Kk.E# *'3m(Y$v*KۂןkH,(pfxO)cbe'aj%#$ ;9,b~U9X #G T4k,ԩ~48$U Fb!cUjM*gQ/[fWd!M4Os^sIlxiHMlHLH*<;T=_7! Jػr,V5c$_1R -0VA5~? hXP"o<,] 4:/_ ??d$2!={hAe½!T'<ɼXHT]眹VL-nHŦŃUH,,80@AL΍SlۡF{J(IgJ6"@ D"@ [ R=@;G3~6hESc2Sr* x%y]epfby9F ZQ\W۳9X[$Ag)}}׽5c{19wͬc]Y ]+.KSΖ9z$/?%k Sqm/ҥ U"3" PLXv,Y08^?mb?~hd:r9QO6c ȫDhxlڎN?CG&תjl9[Pp ɨi'۬'d?djf;,tqocof0C>;DCv WGhAW?A_Gu9D}JP".,mV._$1sF%>Zy"rP|իg@!vsm==;;!f._akV!r&ȩ?%uսOؓ%K[}Y`tpP̽_f{4P[3IH=~vj=uhߪ .J(j,Æ"MQ{veŧ֣{ _v\ zG" VVqpbCrL^e&^uSL ϗb)"@ D"@4mT9{%ਉ'S^[zl?g_^Pƙ~=qF+;Ĉg##Yml;hRqkwZܷfDY$ F7rf2'.azO>~CKLJJs3O?3 qCȬoMg7z<kõ }z#!":YZ_{rKᥫFF߃_@Yaܼ=mXv WDZP\IX)3`kR:ރ1{`0eo[8,QKNU,*,?=q{w0I3T${.UMA/^dax]%@A؜<1/6Ժ7<1it^0Xd@7#2BƢXX3 5.:1֮6(B23%;0b^ueiM91!(6<ǚOiY&Vo`6Rbr_P9-N7th1btQWtR^fkbolol1_Y }>bacF#I.7`ȕrdXaRhL[ϸ8S0 Y Hen&=b4`ב|p Fb&dS UM;H\UbLB !S @ 4eS5ϗ!D"@ D[@TQU[=JWCYpm6 6K橎Rmmb\ïa߀hoV=#qku)嗅u:pFbϖ>8YEtIWW-7[ƣK c{sRΕwOBh;Yom{;KոtNBB*:ʝCàOj".o'v:D#_`$6dNFʕ#K/y;g/]Quct5ghn^>dh%]wu)\٩Qo,idi>dA;Sf$y 򾖍]ްt/Wc_'qy3}b(8A|ru EJ\еw UPG46Ǹ 1@QH48w# -?Cd$YwU\9]gwJLN;Vi֔"@ D"@_t#NHt !g6˫anrod5Q2$Pw FعJИwp3,.9m–d_c0Bй=smgpag5<`B|c G-nĊbb8PC̉S\xG1v+ffXXTɀ9&BN})>-S0;¡. y5b^ 2j"[>%,u8+KA@W}"m3ԨdX:Tro 6\gUeIu^*1O*sq)Sld#-)G%:j;%b7yPK QTYvBJnkһE-9©*L4v0m2<)c_ǘ;w6F9س[r>r_G̿($ l- m47)f{JזD"@ D"@l#@b8Q c ? +NL"uqQoSP(x{:Po2¬ດWq>62M ]0UCy1M4?7kq$ãn>?Xȧ2UOzn?֏؇4!Qcx\,mejFgCrp2Y2. my. I4nHA\92uF 6g+ 9Dwi'~3p@"AұAʆҋrН۴T{en]M4Vnrn,[ P hAp`o3 sk>Y޻yG-T_@ $S6 K_]\ Ւ# 9F1Sjv=vl*C@'R[ FM 3] (Ȕ F(G[-r)fdyS+=ަ1~7mQ FcfTݮW-93)\qlnk(6H ] l).[:YO:;Lnu Tdp"شX#]l}i8ĊYA{MB K2Ju''65NBX/\lR(oMAr\.)ճck]`^>-6r.f0URN-+@^SO&Lc8~T6Ș 6VG;<6d`Ɇp}ko>nuOpt^GKŗp].>-i"@4{0Uξ t˖ܢ_0e7>?Hz*yZu:+EjQmů=&<~QPYѳBtؚu,\!3LWpаz?F; =p2Ο:S'~(f3||,Wke6뼷qvdE)ng@zFwW=Q҄YWbdRc+妱^}$:Mey kĶ3;5m8eIّgH3l]òbC0[?`޶q@cco2vQ|56&@$s^zǬ5hxSKPh-.eKw6timѵ[g1W#6NNLS!mթ7^xij,+yZ[\vxeqxӐ'&@K1elֳBMWjbCg/D6E2CceeP.bX9/P,zo)Gꆇ>GN/v1%?DYQәXy/0]yW~ˆZNŃvr`8tUA bwIA*LioUH)>/L &D"0Mް(5B.w. |9ۛhsOhkE\E FSpp})!שiisRr3yaxexЧ/ >}+j3PCؙske=1ۖ_t~XٙX%Qw5YnEdk J-@Q* ^ϺmdX` 3x [rٽ#_Թr1 6\?Hm'f{ÆsoGIT:_zg0? ޻pԒ#]El(u78*QaB#01g3ñ>; 2f(6hfI,WJ \mڎ@ʠOTATTzvԓKD6B6h$[2pkݲ2MsV6I8w"KX/F/1Ir:"x7{頽 TtfGX;7H f2U&IJs ;‡pvH"@-C[TVB uvNE;a|xo~眒!ًwœ#ϠpLR0Dz= Hy^#q=OFcul1OcK.NVNQgì0YG-9L^yIcgv 8pgXR:Dil1Jflqؒվ*Օiɞ6M4Z|i&|iIא7HfqbJh竑 D ڨfK5PK+"*mB?~-% >VV>DCV|jrn6wy5ԒLi&md0M0xXb{ʲ}vXJD T㟋Wb+T/@Xmu ?þ})Hx&](Ls;2/_SNCKpF}HcfnV$ä/? skivnwt@Q޷'l.L0>v0GƂE m m 9ZF5%-",G z"U\(⺼{*?a˃Gf; cߦe6Ӝ$hR,gS]}Yp֦|Ԓ#uJrQ^nZwkVK.sը_8 ,If$>ՀWIjf,r6.;+\q鲤lX-ﮊ>.OyS271N7Cij;CXKoXCfK68ԒT2VV{x-s71qBBM},PHJALANX1PWe)^¹e+A;'R1굧b8" EIi&[.^/58Qa7U7xgal]k܈US9v*Zgo\m~Z$Fdvl žX ?eqZr3bx,ZWY$|K t/ـT>/9gH^ k=<& _af0, ,L7c@Ws|^ɊІ\"@= C=[\v} q@(K3t dC)Cu*d> thhiVqMl-j7` $1i(f],oF.~*ڤJڡDZt'(PQf\=an~6\se? ^yܯLO؛eZrج #_أy׿\ZwHdxp lR y@]뎐3NJK{Q6.*ji1cϞwa되ȖQfߚD⻓XxlL(w=<v$&coR+91bvd VcC*K oz/1)[_bcL9%ӴIoH9'>_^^-DaIQ gi6*}fTsd0 9%$D"FHF+&>\/]cxx5yg-k?֘jQ8ghaV\_њ%g9 n!l6 ]:b`|<Nich݆a:s+%,? ^~< A]J;e9y>-Ur_]>Ν"&*Gs |zc۝d(3 [ވ/s1h_ydM@zs\&kLSxö~?ov\?t7#g\*6 = Šgp:Ϙ65ތcFνb0s  _*L MW?כJqQluj: Ń:+4|CZݯ-0̔.; lgT#`g Vg-I)8/C<Jq9)xrW^UGN-2Mp&;%i? ;NHꍉ}^0398 7z#(rzH22{5&eE XcY{D~}QYr 56@_65+NE7a׉K7ģr~!<5O#ʟkԞgxA@[$`0ס2w*o7lI%ne@e|fܛ8v%qCV}_ Ο4K[ꦿtGmI6Jm.N2벅Mƣ[9n)C{*/lc)c3|cٌ^_+yྦྷ=$*+0Z<5/ 1_RU.+F/r$[N[f){'+BU(NkEv#.̖f .\:9$+ (T*~3 OKI)"@̷T/[ 3u,:3e 7 s|0C)ͨYLVt˟4@I*읲}{˔ҥT]*u`f3zވ# #Xd&s7Rj&.p+j0֓I<=:M5T\I {4-‚9h6Ƃy `X84q5 5U Zd4)ɖgvI>W9g|dba g%C9X<& 1kF˲ӽ!?gkw#1XvD2 "suVUEvt @B3E>}xC.šϣ<}-@IDATЊ/W4GwٓeE E"@hZzq(W3pO6[턉VKjF9N8nd9.VtbJ .Q\bĚg{D|MF? NK y3:'F7.p wΚ0dQ?&,9-(F z^esr 9[ZJ6bɫȖeS6#g r4+QㅹgWq^2GӰ a$wAb`LנA&ף:g np5o3:toyػWlNn3XFDտ7yA0|F<2ByST]B7_K1 9Q^=7b:!y8y#X ដ=RRr xb/7by^bDYPBƊ+b~dM/);*-/R?ݕǦؒ5޴X%$D *,I>+̩e=olg^2m_ɩ>A.CKS?$ܱ`g$6{hVRVœ,I{3rAc`$e:kٲl0]^YtT~t#|Q,~s~2b`}r㳔Pk㞷ׁ8p&%%M?cEQ1Fr6JMW-N1Uf=VD"`bʰN)4[sͧJ~sa| ytJaF0PXU}A+ GqYjk+ 񗞊"9i/8vw/tO7hJ}'{z/MT{ssL+јBo"1?U}xÎ/%0T(dW^n>)"@jwc?[p+ͅY 7ʲ͊ԕɧ3 Fwc<ܦq_8 f{)}Tc"`$J`P٧q:%UrU н*ff3اGch > s{wMzVtpoc5-%/`_5RƴLg%DG08ix6 -7I-r ?F0D6TOl>,'Fbv>VyX$CXb1}8#bٲىHL8 -3{\ FW~dsFb2a[4r[ KlCq)ÖdD"@!@bu8"@@%p"m5_}mdS͈ M'qZ{b9 D[O:Czʗq6@mo#ߛX](-wUk2$AP<;gO6Q,ı5?'<\ݱ9)h.q̀#{F `qkkq1RXp,ud X7vW*>]J_8dؠxh(|PYRD~D,( Df#`Ml`"@h=*OLTu= D"`B@sb& D"p h؀mW3䳉O7Ͼ7 Փs>,,U%6hsp0 8.Rc U.Ob;o"7F|@z2|{E’'uzϖZYY0{V7旝Fm.l'4o7j cIۻ߁&@i[QwBÕ|0wi{2 {:t4 D"p C~P V>!  2"@nU~Um`͊h"@-Db#XD 4l5ǰ(c#K1f+.5Pt8WoD`Il ?T߸+]t%쿬;o.Zg;~֭thq@.A~0g,a2cx` {e•f7:#31rao@bgKbɥ6~cM<-ͦnB%M/$"@P$CD"@PK wM/ D"H. KA"@ @kX/3oߡCl-gϼnWZV5u_,.gjH=f jK7?67R0"`0#еp醑|{<@yP}_%ms{jnX{?>Ebâ98:,sxRX Q6 gZ#>{/ܸ"$wMs|DBظH,4/N fȭƀK f g~AZ] 2׬A 7Ctt:&*CE"@ -G3V"ոPlaam{i,Ik/aik)!9wFZ-Nu c' alvqn^?2̬_cI?í&yˌ< {" 1rBzc͙/`bvT11U;q-N+?S濙 GQ%S 82 G0gԗ)D"@  CHI  Dmpp7u7᤺aLep7oXRֶD-)\y[å;_VQfoڧΰBZ5]ӍgG9`#DcbC=oc~Kl4nbcrAӁu JY{`GtYAf%ʋf wl>0yc#ql|x`bqx#/%_|8z,4c7}֧cٲ։:_/=?͆+q+̨`.g*5ftKm7~l}бի= =DyBˆ D D"@Z=^V2 g&cim}$}ľNld{tk?>sĚuаW~4 =oG¬ Qr-JJJpTsh> \3I񃔌Zߴ`4§ؚi6RlE٨-zu*,ZGO ]اpNjswi: cT|4*D55;92zٔSZ0檒D"*(Z$ D"@ D"@ m؍_Oj*ԥ VhA6snffÉuਜ਼<)7!L%/c{^@fp2˱y6? 5G]NX&ezƤ; sg2  22~j%۲~innvn-ۦ[ڿںZ%%K4!" "w93sy̙a`y<}߇w'@bwB>"@ D"@ D"pXkhBQ0|1LHK|3 L~+dL2McwlrUl\ʆ*b{9(^\y==wϱv4WOu^6oM#yzn"@_a+Zyo-;r n501=LeU 7^o/ݻX:xz!0D ohbbN9n[jNዯ VY>R[RYl?C n[uKsp Ny}lW mYv nBg FIeF;CQF!go ΜkYf#5-ZmcsmNK D ??߀/W.oi+%I*Gグ#F#EוgIl/D"Б~_=?Kj/g]p jΪ4ɧ3=w>-y..[q|{y$ڼE"yYRܷJOg&K~rt_7@'9`Yk_$8ǎeȼ(F0{V kCzvדXg ')\kp5-BՂaTDKF&Th-o).ljAIЌ^Kcm(خ Mkhpɼ&t %\070mMҭԠL<=wLMO=nr΁l,ZdBd2RG9F[g>ES!@c=( D"@ D"@p$1sgA- g% A\W93]uE(.7jGhή(Ǖ|E(-F-O//xxOP6gg`V(8(D&0Mv5sa."ǘXiSm)K>yb]5QVvU WcSB D"@ D"@zv<+DZPjWaë,bᩙ,_eLJNC_.ķ'"d:7inJ**9^T=q"Q۶8GLSxclr~cPR;s SQ|*K)z7>۷Ha?I}tBzyq`Uq'KO*َ6ܙ|K?gw;DJv=7jǦ^÷}_sn>ןEE*c^QUxlչ:}\XMO݄4w,ތAuP7Ѿf*~t?{:oۨvl2X!d4M;Zs*o&v9>2 $Ŕ4Yu1&heVvmnb:M$LRzt'D"@ D"@ WROV%E_4sPZ*Pwe}& 5jD!Pd|zBCs市q9֖XQ3@M"7y%ЖVye/nTUH,}(r&Z do5ͫ'dAvHZȶ!(;ؾ~iۥ?hދBbH{$!sc^ƪ[s=ZJn*Ų𺊐X`X o!jR1I?y4U!PziX M6<Kϲ*$>/.>*NfJ54.²R I*Dlͭ+3v}˦XHXYeb63szJ D"@ D"@{λEgݗ@kEZjNU5 ֚\D Ofo'[ބ,v!w [!N Eƕte&Dhn[#_[t29!g : %>~N@j)|f@/|^ <,IP|Xn]d(Ze(އcGv &Y\64BlszmbB,5Qi|-|;6aXK úXګʂbDRȶWQ*q2S٤>cеG)+p.)ͨ)>7^D[lnUI-s1&44M$qUH 6íS@]Al+ 27;¹UBD"@ D"@ D" nzb=|!b^}(;[7fBb1<1l³xL-wsOjq1!JoHűOڜr3!V8!)GT6E1-38NHl7vk?ka~:ok$R~|BHlʾG4UE(Sxv,$6FC`~ˣj1z>,YsצbgV:r"@ D"@ DnGQ!PV( >a`|j%Ÿx,,kcf@E)w-ؿ,=o:fRw;KUHKHYOniNUsqt3 8{bMfZ ]f-1/4 jYrgG1O9E3MRp&K.p#;wo0Z xzpu'ߓ`6~t(EH+=(FL:_LE+#tu!9x8^\3"\D"@ D"@ D A  !#|ʃJ46}рHx\e6;U3a',C%s*Ǣ'މ>$DG %u7)Z) 0!W`\?R'z, 8>8"ϒ@%?E~#գ:51"A{(‚Ʒ!s}zGm*>L 'Kmh;8msqpwtlƞ7ٿmayfv#JV%0)"UolnZp G*#(:MRBgiʘhx3mǁvH7E@p)5cb(U}ʲ;!u\~Km,{_cAѓrFA0y $D"@ D"@ W82=}=MO;,|!-U`)IR$ou&>Im)S?HnGM޲ZWcô?oh\C=>#ϭ\EJN01m+r}.u6>FzkB{:&6v;_у:+*ǎK>1QBQ׏y5M$Ckp̑?a%Oy,p̮qUd $OBBh+E1GjJ*&%8PS))ȊON&*q/6ì&4fcCwc)Oy bPU7CF )D"@ D"@ DXroB@"PÝOl^$tSl0F#?sAXK?5#~aqf5O[e6f5sU9պ|uL):'p:eʢ'^ S3-A!B"w?Wz9mG=3+k0zfc465ܦ g>iO렋i# V|PTRuYfa}UvИwZV,? gMA$v/˓5?_YRHZG  VyړӞȗ/I 0LN9R1WkpqԄ ;> ` O{/ 'đDI.0J!)]D"@ D"@ D %`NJJ !Z1i^,wV3OLP\BPm|w/N7f4p:]Ue}#4o#h՗ma-b4:&(CWMCW`Y?!sM7,xr/472 :Z]!kXkԗ KV(/M0h%(l:z48!)F_Ǎy|L0ΝOm0W)Lh%3F"*jJ 9gk0p1?݉ D"@ D"@NLO_/@~=N˚:+đ`T_w9zvިp`ƕSH7z.hHhن@NrU9EyI~_-R3yԼ<;@ Je!`N]j/q12NwfAvhNjYmߕBPai;ZlE)|uD4ሒdnl;/iaT泰չX5;.aY!c!չONp}V@}Bkr=CpD]G+ܐ Yғ8u}b&5 az0wcDp8]2ڔLE>"@ D"@ D"pE AدN3ABI W$&QMKa7%Ulsf ?D'_ukNL r̪r 2ͼ9`vےיe'0!9NKѠݭRvSxB(kb7?uNȑN*|uL5XGOH1/nʱZk`lU"613R7g!t4|R\*]hGs%|3= o.arY>Vrm[ekO 8/ W#Ԅ88Bp1fj'ImѢ8"@ D"@ D+ s{ߪG=׻3G9θ56y-,8+'?7Krt V<<[լ\d!wm 7 Q ̈́X`◇e1PcS^rIrϜ}sbU q@.?w-h|UD.+סӞMgs)ԯ>}_}IWNspw<%>`ͳń5'E'l?_O f|:(<(|]ut~Gg*j U )Jwed8p4rQP,ĆޥЄFV]"ܕc9Xr-ʭ+<|1ۘ5 ;H\ |D"@ D"@ D[mvP*0ͬ*Z}Yx@ń3]#fܵ^ƬchZNDŽ4٬'/REOмsF?}[9XmFN P?U|9EZ֌he;GО+EJMC:&\H!ql˾h(G`L֮T<NR%TxtT^x-{ NE;n{9D{ iX-˽O5pvLh]>m i~@?byc=5i "kS98 QdKC=Rf_Hbˤ{Ҝ)!EpWyEbϋ8WZY459`S@3t'1dՠeR=FG%X/ ~swb]9h?N%>|h4Ҭϰ#S>]kDs x-oE@]X OBcuezЄ2!i(= r.3{Z%D"@ D"@ W2L 'nQ>mD4 EȠAV"$f>T@ah+BPM2~xk̶a3~9D V9KU(jj?l 5OQ8{M.% =p 3tƑۍ[cԅK1t열cYGVaz܁(^[.n%_dI4h8!jdX6(*$J{P)(fa/>u|Ty ph̻X}LUz3(|zcBP\cF RmJ`4ښVvjPX / { Pe1H Q LwdG l]/?nf K~6ìR~Ih"ܞ cg=Ʋ8P8wu߱V~t$D"@ D"@ W22=}%?#.6 `ܠ8PL+z$qKekd!ZP,'V<)`mY??zFZnQ_vU9|7Ii|Q*$ ϯ~fZj*)4^ݧcb#bKŔc1xXً_kw,'H1 cEK0Ӿl@ /%a̴:_f&:Gϝm˖!4V.U˂v܃lC-5-oQysm.yg9^ Ż1cDߏ/8wP,#=?+go!qBVfcl! x7cP0~R#H^AZ|m&D"@ D"@ ݛ\|{˰N-<iZޞ WKn&e_:_~e 請p\1ꙐÓ)y^}ط|5ejrU9je; U娮.$ @XH@_-'3|hC-q{ϲwi aH 1z墬+fЧO({w~9=毠jϫ4MctwZ桦R-O-le‘K8|\2f_83k#uZZ&}jPUG c,\>aOti*"D"@:@~Ȓ\o~K]( D"@~XN_+l n50[bYmY:ta_t6%e+co:>櫍R?Aܞo( f^*v!Q?ˢ:+E?$NmzWrzX\v@dٻD[r6k._˰Vv`ycsҎPD"@ D"@ D4T"D"@p@YI)kdKQ D"@ D"@ D%cF"@ ME9yRCuD"@ D"@ D@)Q D"xg.M="D"@ D"@ Dt$(H Dֲ(CL# D"@ D"@ D;6"@ DxDM3F(S-D"@ D"@ D mF+_|0>5x}"`"!ZA D"@ D"@HPm5$ iLT D"@ D"@ D"Б⎤Ke"@ D"@ D"@ D"@ܐ P D"@ D"@ D"@ II&D"@ D"@ D"@ D!:r  5\1kPV] !Zx3j@ei9Z=Xd3|zfQhgo ڎ9Ww]y)B++}&7Ֆ'BZ=hpK AT /p ŭwF`g Q7;98[g3+"}屦ѡ@GۂٔeQOZE^ @p ϡz{TǿŴ8B>mdd?ɒ+E^0U+21$,MEXMuX[V.(`E?bcDztd^4 { je˯Ps<?Cr):c7l=/zi"@z3ǾAU2nf,n߬6`cwb11nFuT]rwhw ;OpiFK=.95-BպaTD_)V\?6s4ԧsH1[",]z6755w Ӌ~xƍhCwx 7ki^o'_JX3@>_"@ D"@;zjjK!P)X`o|bn92P5z@q=J_bk,4܈b > !"#{O O9!i4+";Ss!_)`&"i_y%/hU[|FpiIPGKS<Ѯ2r2qZ{dnMKFܯS)vFwlAIX`;| }KHt&%y$Dž'ý*h#z9YM|lvR:afu@庅(8CT#<*9]e፶ 7`G:w;7rs7?oMM}9mīFz/rYRv9}Ia rgV{ __~OBaw׹=UNAM 0ܜ>0AsW1>崠 oD2c;օK3лܩZ.zBEϋ_8$D"@ D1׮`qGiM@|*4Q*`#*OBtq'x!p T̻^ #5"e |vy#pΰs1h(ט }!r2vI K'=oZ y;BSf`ZJ{)0|'daoߘX͍gq35gwKZP Ui<$܂RQiw3֢|ލ6HQgby{F˒oڙ\հ\|(Ȟ0(o`׶?**rmM@?ͅsskHudLxhk ݱEr\mI.7۴Gu8pG@ImA!g&}em.2ϡ7>Pk(ҮX ]RUI|%1o>/pxQj"@ D"@@g0+uRD@c 1!p'SVDQc@ɗPd+ !^3BZ wNF7&sz/AQְ\UWC3O?+uZ-s"a/&wac tPGkW#eLC_ךwlbXҜݘj\ZqVo$>!6[ge&i׵f&->%:A 9'-+`.Is#Me[ЯHc^Lܦ˗./ q;*p>OW YJzg8M|<#C,A%N#1oʦWĎ;r8Wĵ>9%o]VWi6>JJ[wx;*Y.erJuCA_BчmK "@ D"@@$@nzh#GyK*3̺VX2;vuP*#N2k˕-@[nyEģÐ-WCSȌno쏹<,IѱSĺuV7`־e}&-n: /#u!/9Ŷ.{MYBb!*gUWT^&+{Lpo0J-=+s&ZǠ13lN\ =ZRb}c"ÊbibpBc5/Km8qvRXiU;xlss'8p >w[]*NfJo]eI^3Gs=+l =wMC6Ū Y}VBy>-"C_\J|TYbXl'G !1R<gʭ6`po11RX\w̘S|i؉7bex Gk))&!j.ne[P82Ik W[9/tR#EBty[P$~з 8I$ʑoW:JD D"@!`3S^"`?13흓b@Ѿ DLC]_*E{GZ\x&4ƊZ&sYC︛ _2E@zhS/DzdWxYws/8fM ~"E6_P)ݤE)FwHgxKP܀dA&~r2碲 b8 :A'p7MYcqHJ`&>#[mu#Xh 4>ȶWQ*-_| )@f{Rbq%ρn/xp#8c"iN0 xr99߰zI{КxnDƿy ?2 #Clxt#s3,vz!0\^<O,(d* h+<_s27Om@a0)~bl?:- ?\x_ fM"n wD!r<ɛ'܉MKYOqź4;w[KKG^ aᏉ}8oGBCIK7,bA=^Fn 7ŇmZh^:;QPcH]>:(JvǹJp8Qco ҒiVS%/OO~~ArI<s1vV*i8fqH03~݆cM+Q:[V+p$V.x^io\ojOm)nSQ2"BCy۞MV 0>m\ryaڼ4)22>20Z;qEéQޱ֢᳷bxBqR=2:Rj-cF0Rs)\`39{B`C_xV2M2C5vJio\mvp6F-| (޾ӄb]haiagrx|h8Ec_$Ė~9cC"On6{/D-2(\r[ڧJG D"@3wУ.& HAZ)er☧E )2=#q^eaofq9ט*/3ɱtB:O~H1|/skL˘ ZϮ|};8UG~(r; .?Z=?ONk}^Հj{y5{8$Fֈj-ρlipmBNv\9::6Dj;,1;Cy?Xbj5jubY!Qpެt7֗Ighi7oUܢXH:)[(Ӿ{L*;ZPr0?fC7lpi:;'_S|L|RU-38I]Od[N^\e_oѓB׮uVkT"^S:&h֟4{ḯZ=|Kӥ kOb+V!e2;m64`wa..AH, OaXӐh;jPR tEӸLHl葇/g!}qzbڈBC\m[[K` _IsM,t{sk{'wjMX OCö9z8 |A!PZ d!l@qR]LcӾ"jzޱJX'.NvOBdIDRlz(%!1hslE@nSщ\E9%sp9BbcPDqKװ OsEx+Gm9X"VyED_g.܎=˶&D"@ DnIbc{5GIO:Ƅ*>K 琊bRU06b>_J2c 7 SmXa#SATJ:bO,ݟcb^ci|`bԝx5;7p5}4p.3I[Sh4s])͔}ìhI]uNȂjf ҂rpl$gڀs®_D_93ZJ&f eX -d nC2ϣl;8M&5EګMWpܡ?\ny[l*; s¡I~lt9#, >&m.(C\Te'}X'*[s~ۊnG^N>GP/fZ=n|bC>*JZ$~B ܱEʧI^vk }1I F }Ipfʥ˜@|@BFhoԟ9/?mF·MƼY'D"@ DnF]ÐF6UvGk"lj_?7KF \CJӾɹ[뇑vz"+t]ǡPխ1ҊP9k {&G4 ͊XO&o).m9{S@;ʎsg!~`j+k5sKpdtm|@geATeCtV>, +=Krs; OI_,O )8؎%o7W6|D"@ D"v5s Nuֵ<:LoJ! !(4?4>I۫mӦ-ؿ]D\b'(F+pGXSv1uL|-i%%6++vV]{40~M.Vw>Wwp`vi&/ ˉȥJ'7~Ξ [*vM"\EXH41V6~HI <ɜP^U̬>[+bwpӹ=˅s҄j؀;P%ՠ3r\@2Vs9@/t~lTs HQ/6 .y[\H̾մ_\8EqCtGiy3F-íKƌ|[Imc|w-dL_ !TPV*CCXk!9.~ÀOs-ٌE"@ D"@ ^6 E;enq*jW]ݷ@EA=B,]T~@4/iγB̜>H}_H5 uybo-v~,{>*~`DS2M7: Ym-tV3wv9.]#%1w q4'R{!apq]=8IX" 3PT= VBX7Z4=yiSFA,bǺsk{B(\4a &TG$vgjzXq<53فW"h+﹢DQ?,"XSwbwxڣ9h=R|-RBMr<@禢XW'8ZrՅy%>\'BG:_1N~k絠D]κ5Y'dAdxX:ţ/=M;_FE  D"@ F-vXө`"$w+x y{X\ny,[W8%3waڀr܇rz3-+N4!=w/GѻX8QuC|eR>s*|=&s%ػq%E^* U+k 4Ef: jQ-oIV6f=r:klkUtE!)gb&rϴVMN(2;$tV(@~_Q,ypCTklEÄX=3g Oօ¤Vt4*[ ENڞUꪹin (2 nP%8Z+tsmF<MKVZ7!e\zfeDVDԅ㟛6*4^sᔢY(U8Ƕw8-} !hLP~^ #%w݉ZaRP!E/%uFD/m3D"@ DN&@NNu hJ~5Wv4G^8aڷ^/QCnv{h睬O95/Δ_ƞcȡpy]DW>s16EX ȦGvJM>iL;;0BX9~q9Xtx+8'/LN3n)`]g?Lori+7UX":<k]w/Yx1{{W\ ;NsZi쯾} ]/xqi2Dx;({έy^\]W `"i{{y'{9mkU yk$quJe{W L`_p1NhBǻ>w=s橡bf[NQc--o]}|PU~kD/ru(/IrKrʲqn rsګ1r9K_I)Z{r",QfМ1Ǿ"fQ >F]r=nZMrԜG閿cϵ)Ӥyl'{XrvF8 G! \;jGrBYK`Ş̂SxF`_Vqh8\*M6ܭRܻyx4*|g]qϹ=ϫ.0﨩/6X,(='}%0Va,uՇxowrq-(7 RC;ĺjEBG=lWN'_~qP}Ë/^]oA'i}/!Gvp GO_h9w}tр?͜h琢͕atb/Wæ?݄CDY{ jX5/:`ҀSpې:$"@ D"@@ `Yh<5N n|EIo^·K9/y-qWޏ tMJo"Ec"|`δg9@.whr0dm.DOnfjXS9V<*Q0DK3 HZ HwbA; ~FM$f;ռZvꠋP7E+a}iZpDkϡ֗NEyQ'eBW6[JSc`B焩Q\K8>M믻W7נiڍ3}dTV8znur\8@uӂ'F4/5T+/qccj-w?D-ߛcO~-z!MhmWDЦo]ՁGbV\B[1G[\%wawvƲr) CKÇ *LxK.Bƣ9H| |pbϫ })HY,s\?V_.^pw>ɾMTfNB,Y_<2p†J'ĵyyǪJ(Ȝ@G|03J'LD D"@p{ڹ}k=ͥb{_iINz!ňHm {jw߅obINSV?(MJmoZZ9f#m.;jL2SёuZy 떹˱{"E/fB4hx!)nR1]1YGEqV*.K]=ynS&M !qW+Yd& [0Ƙ~.`16TveOoLR]76ٳq3m C\{g(Ϟus݉UXBY$oeBb2?ӹ<YؽaeLXpoV-&{Y*k,|x1>a#k|e[X{H)d_V<9!;V"i_lT5 DBze}(y"@ D"M\MI< 5?z_m_/ ix}SޙUUwIPP@FVޔ2!-Z]굛T,׼`52rHpVTp@D_ {އg{zwOg >O_SרT< V͝+@!I.5çpwC0+ؼngX5gfY=춀t& K,L(,Q5IIT]ԶhNp#4~NW@&#^ FuD4U8f ܔ逮=4:me'Gfw/؂KSׇILܱ7-+].F-F-F䂉 pHܢ02E}(f3*AR܃ W\t6AL !WH5~L@i`y!Ø!O t2Ƽ|V2DoM}w|c4-_kWbhՎ;T,ٰ0L]?.~ 7xq\DkebK cҘ5@D .F ӹT(q~ Ͼ.{fPl9|LF|̙- \"OCA;xGOh)k:jjʣ;_n7n hcvŷ&D?`?/Z("@ D"P I(Z2WW̧j~0[zg΂q^-Z2LFŠ.dg:4:Nk)ܛ§]xdz dL[\t1 ErP.oGӐ ˣ0%f`2pDq_c%a_3ONƾⵈS?U*K}yMi}мy0[ȗխ]MH-NXb­<<-/=bu^bO=NAAC[!$<ZȄܓlb#Kɞ6h"[λJL~1\o}Nќa:$ZϨ٬s(eUssozNտSPŹ[/qTAf~B9"@ Dfӟ4p J_,Zam:"eaəȭ!u88#m^frT'"@jB Z*inAA @-hv_-'DI>ril =b2LE#E1Rv/GgL _ rYx>ǙKFzG/BD"@ D@ "DOw:-wSi̅w?7sePF"@h(Ja3n5**fc>b[u}1 ےЙT_NjR"@ D"@@C#@vH_"@@$`BU0Qk(7 D4 'ÚQ"BAViRaӚը m&-jԯA"@ D"@P7QG JSY'D"P?Jc:!Q4X|~׀4 D"@ D{d(gB!D";t|ܨpYm-]A Dpit(|#Q)S+D6@~iT&D"@ Dj Cq5`QR"@9P4yvI Q\70|ڶ]|q.j._N D"@ 7o.*"@@%D%/jQ4HjOY*iH@'@zHA"@ D"@u)n*"@@#"`6SS]Q  DO/S  D"@pmND"@ D"@ D"@ D"(Q\F D"@ D"@ D"@ Dyd(v$D"@ D"@ D"@ D4 `ȽR&MJw s[s.;,wPzVu I#c7lrL!fhiW(c;34_x@?m pG_Px\;7ni?Cv% O[lpͽw+$4>ߌƆ<3fv"sﺹ OR'`oKYɞ}cxMظeXRt@.;%,ߞi 0g=x */"@ D"@rBޛEGV93x!]4к\L`{LH_>]4ФqHhg1WOTԆ5>ENIU6 Hlg]Q=$h.S&\{wnjE7o Pʲf`?sCz!x+:{Kpfl2@lG5k! n+עA<vm| g q!WR):i(R#85"!m$ F.+V#1)kҶG D"@ y*1!@ީt&~1 *ġ-Kqd)<*If("zɩI !k|.>.Vҳ]WFబ*g1WO=hu`2Ft:_!Ɣ|`Bmle~:&z5ј#c>[=EqѪ ,کIkW@7g=EWT^@&7!"2qyuZ۾ե D"@  J7wќ$*{S'{V0y1MPU9.ᇺħOj"8 /H8:͟(;;N: z-@|X X)QF\Y[J2^:5g ЙOѹcRA`:5z NfJfW zC p4žT2-K C5A.L|rxF`KMIg%G5bkPvᏻKBK)vyw$KxY&2wķkR߳}#E|gҰoQ-+ɾĵ~ 3kn^س=7O} G|Ďو ql\*~Jph=aFɗOzNά̹s,Yܧ;^˿x qyչmOn"@ D"@p]|D̰*L\5m6k=ɊBl]4k/_"1(F>ИKPC)k,Z/9P%a8'/cݏJ$'W! ޶wG@IDATz;-u!-4Ǯ7 RݹXp>n7~ ~FXwdxcU8#&o)G!n<"8&͵ŸmK\5yzyfI g_*K[)`F^{q 7V/DԒk&;j2(웱j¯nng^.z׳F |Vhs\jT2qmJ,{=1UآLtj*CH,$;S=3~No)6hp3K'9Ƭ_X8<،첄;XHgẋG E!"ݤpAH&N/dbyY8"|vY5R+|*sq:K⒵q8\'Yyxq񷘐[D-w^,D"@ D"`G vH(f,$+VXW<*KYVl&lC-UפWG#-<GXZiQSv2NDž9RĨkT0-:6B)f$bL:­|ߖgh+1:G#U+Fl,ĝ_WI<֜zyG0s]ǾbhoϨh*ľ]>q0Tsyvꪹ҇y+_`֞M0*:hٵ,pߖ"Kl$uEФYv޼wVi0qS7W^^Io!!D糪kՍ57FEXي*7cӗq 4m8o1}bP-q!3A1"zuo/ԧ3 D"@ D~7JQUC2LUK;äOc+ZW̺> u\t0{ Ͼ6֞/݇oW:2#qHһxRgG $`K[Vf|8ITIx -!_} r5:1E!̡Au|ﵸْC_v| '6˳ ,'p6#o9x.eށc{qz m@aP-A?)kK,PɶSc}Hze#MlnJZW$f{FWps~)sQzh}4峇bldsy25j}3ryXHl~c4~N?_99 gڅ:)> > AiX6@8 C|p;QwGlIa@sc&XbG\Cغ` 6̈́.nlb1,U11̶EB|"7 D~ukwΠ}"A6X'>q ,đM`eqb6iy 6װ/-~^?1 ,Ltll;AcoXÈڏq 'qIǢ}GOL#8ܱ; GC]g/˧r<9k7Ui\ȧal;HID|X1MP ž2Ųbk[J/GQ׫mo{AVQ"@ D"@ eRUah0QӿÝbyJ"Klh6]-Wl 0l៳˷K!ؾqݤV 3t_UλkqN)u jtj*Gz%tYʳ͠ ~ Sʁv{x.\4,;DY@`E,0];6(A' qO8AѬ;Mj3S+ l1p4BKF^k\M/.t<9LZ/#n,sP }3ܴ}7={s:4i gͧ&-`\j{!)0Cq5^gޞ!zx3ҷJƳ~Ob'Im6c6ɖ83h; F2[y{ZUUiv;gØdgRĚ~%^z}T bbُ ](A,*y1k<(VѓBCʎG![:İ-bvmѕ9j`5|VrK?>!|Ě a䈲b'ojЖ\=)~  Դmg{AҞ\D"@ DEUͭN AqjZў3>Ry'drcTĶ9Q)̘>K9с!frj^qN4wR^Q3kTkǢu)m7T-x kUugz%o>Ӿf|o.;mOOWM ;7MĂ[?|(ds dcg01QH,N~y;$>,{lBR!3Yyϖq{/6pkdNsEY|unwqP+\K]l& МIk!ͥK8 A3g[pϨhp5(Rʽa1Җ8Yw˸.H# 12c*GN R8#+S$M(K  /|^U@pm/D."@ D"@P#PUZ #@aNHX[Y,}'ym\qp+CIŖtsCYRzH8Y,SrV_ F<`"YC>Vr4n<)„󧥎Sa#Cm&>r/H"l.-T<_>>`r]U;ٹ(k; .ֱi޳+AI23/c<볱7U Dh`(@QNIsaU Kfz{;az {g*GOb*`!/z("(K(xȩ| m'˷ 6krɯ3?~_o2 ZCY.'ui^y_.RĶoMZ& ;{4 4]7 NKUOE%8wXj߶xKm{ͪP D"@ DX TzNOHt~ bbIV@&Ʒw.zc.ow[{>h>\2jmq;#\zv]@" bZ-|ׯ^ [L2hzٷ.K{OR^] %D"@ D@.9@ F: Džsb)f+Dq%X[,ć~V Vr;?Ң]_tҺ;};ݡqLNmԋ)u4VXuUj%EXT)=, J@p3uKj"y } iNQ *a.5CGxvi4($#-#ܤ,zqwBHBdokcֶ94ϧu[PT|xlƕ|m;-xw$C16g`(f}Kln/_͙ g@fC1. 'Ëe{b*߾圛)}jvfFpX6j8&\j`|XOr lnxzP|7+0u,ڄV>m[fW6t&D"@ Dm])_ɔsӺsҰ3D=؟l-G4e25 [[u&Sk*eE.9 i^c 6ZJ۵wRG=SGH̊?I."ѮS?G} KZ|ٿFoD)<+^IG,yòje^j++4Qk|rl'ڠ=P4o;f>dIIt&P E*pb:`8z+lYjg_ BٶYӦ3ۉ]kK"Ј y q/{ozbv_G.H W@@ ?] 5쯨L\1U#8">**&DC^Z&.pOKBj ,3KNډU'9:!aHXKbk,Gz/sJԪBטQqZй'3K?|۶אÏ'Iiv] Jp[S}8 ~7*Tsp]h7n>om?.7)yL_{i[7b,˂S%,{Q6~xIL*5[Z=C'Wq,&Qu Wz%ߥ׻;,FZvlYوITt^|hV:veK[+o_le ܴr,MƵEUn Vg6Z3)6 #{f}91?bTtWQJMʁʻI%ؘ'-qKpmpVdBeg>ÒA9d,xyA~~M)֥< "Db׏R.+FĿ'H[#+СdKUJ$AF y&ghWu*܏'C)Vƌ~0t!T g!LixzKSkTc9%X1xiq(% D#p-Wcp#%Ps- ]dBS1|2"dN͘>bXSP@=XhsFkJ#[R:Ny ƣU\ drQ `.S88O6m+ (oxZftMN e{%ȿ(O6cqlnz&?% 8c;^im>ٹ0; Lo…!?|G|Y; ^{*[Iϼ RHϦKzem=4ȖdWW U%ޜ-2,YioϾe>t^ڵ.,L;1*{>fFu3AǘL mi";r5o.=6xNYr.lײ%fᅶgچ(bJUC!L~n  *J!K4w ~ o~v^joRԶ 3 uM } D~;Z ky?>f~-IjWXw)u;ȇJQ@:ә^{vKgv_ZO1ɏPo(716s<KLpANv<ǽ%R:0̟-<Wt&D4r4_[z)vYk::L:U^BKlI!dغHr~|3M@+w++q#̻5 %9G`thfnė=Qx"[ _+&yp.6Z}cb&uר7Qm2 X2+CP.ˁNܤ+G;owΣ:!u_fYEcbn|PlT2sP~e@Yܝ @P_ؿ9KȤ<\fhE7 fN%?[-\2v/ES١-?ɖ?}[6YsV{Mh~#=uhM:xmA{N5c(fs,{ɯ7BwlW(= E@sA bf5ii\9luaؾ >˧q's&̌;]Tfc'S fڎoE/+E_<6Tn!cPzq K􋅏F,Ag :Evgu=~܍͕Iκ% b-zI2=Y۰}fRHEDY'߿'^FG;͵}ĞX{;_%/J۞CN"@6Ն}AZ(9y#Zш SJ\@4tgdu.`.#u{S{QS-)ג6zXqߨeb,TZ&Z g4KX\L-)  DPX&ꯢpDI\RK`ڌwnESW7xvǨ cIM;wI!2W#w%/#$[+pJ2gZBd:{+V?לVXW9r3a(Q/Į/'*]PF0Vt饏J(HGt ׉#{޳W#nļJrCoEY_ZZ=1FfDI %kwsiֿreό| ǂ,aa.ss!CmRzhz w|d>bw?`6Fj\½~1ckRe2it8wo}#Rg<#ߜjEεر3,?]>k^0؁ػyyvm1/y tfif8E[>o˲ҫ{%S~%f;ՅX<6r2o ?0emn&Q~Dv>wxG>Į[8 6g7(fk޶Eg"@ElHMe+=cFdz͎dɷ6-;`^AWrn{U"}:^n\tY AH{3x8F"uN~^R#KsG/؂KNj-f.{3pObbD.@.[FfM(Ba|}৕3cHo}V`4yս}W;!Ba5>zsecW.X "x,ai^%xeD(gO}IXHw^vG˨ exuɻQaKkWM;tk"0d?YzpVG~+$ _?2aYBpȠWu]L0 OR|#c0$NEHs9K\,&lċ<%.U?,uMRA"D. TdE*oD _GKD9#ĴoDoqK#J{Iu_zc2bFXNH_ ܱn;wrQ }N̙o4| "@?頱2SSܶ[ͯfKY0ΫS W KXѮ߅L*rO>,AK;1^P}nִ9E=nçK޴ L=ɼpEp {MS P,wʅiHkAx QQ\ȿ?"b\gpDp_?uZeg{ߛ7Íy6G0:V#((64ݿB5Z5%7frɋa9 _w} Rk ^%/WZo@ }cU-(2c ʞE}0$,;k8vcSXpW .miB7ojV-sR]/9Zor˜uOmsLc3u.N5w ZsVW~mͼlN+} ZFkֆϡ(I'pis7ک~2ͩt)ѱK*E,Ƌ0nnٟh'M]þ}`+-}øgcBSE=E?:v@-9Pd=ͮq;۴Cx+״7aדx-Z.0zVxK\+&95Bܔ}<.^eW=h޼o4XO̳λ*jj@r%y8s.hӺ-LynMӟ`+JXtYpdUufE)x]3Ǒ['CQpq6Gt?^fqpjwptdhOɻ] Xc[هي"6AXd|Z狻3aIRş26} JJ:|f. J)BNb3L!g(.32W/<fMąRm0Z} 'KϘ4aPƚWS^J`GňZ|6#x~%hvrijh#S8BČZcK-g#SMQ30󵗑dbeIy0}DOLo"b;}1N̝R>1e>Xp?:M ōR @t[wVsO \\& _VX%̈rc$}h\բ@cvv D߄nr5CaL1{cj,a\ q{0=lXϠ&)SUG-1@ Nx @e! #IVqvw#idX/"9"+ETڒ躰*t'02+Ə@o6/Y>h1[f 2Cf,&VbXJۚiIڣm,2 쎀|a{X' ŅG1jȷe Xn+fx¤#Ͽd%>M #0W!~Ee8~=Arٲ/<K>{3w<|0%lp+cDtжErDV493(m,"x`[g .HX5rihT}{`-9m\61$MHO8G-bcL+2ǀq5%ˑ3;akMD44:kh$H_"@E&]S:[R{ ?}m-:S J:H"DlxV"!APw{6.ޓ/ah'ÚQ"BAViRaӚA=qA"'B_َya͜p8\v #'hP=ՠ.)"7p7:1HmSHؐ^cތ(mڔl@4IdKhR)y3TH/A}b {lfoґMJXYfM_1 EΓ2oe* o:g4Lv쇔Uhxz=pݥj8p_Z`¸2k1JKHϵ&hVn2߉m[~m]itFLBCVPWl*OВ#1eI@+ۏGBd1QwDZgWxdtc2z1݉غpXf'GuTL5I259=XN{*Ür#qr ?:Aɥlm+{7Y{Ba `K񉘵x<:C1r4d(cK;Xs\**H,Id"W#[(Mxv'R:O@%@{mfDFISYWT)R i:`|pHlb}֬'MODlb->^CƓ~[ 6I=Y6-FSk¯k8=?,sbpϨdqޕҰkk[h_Lצ;'(`x\LP^יMP6؆U+ UȲ.wc+mMCwmKf~F$,$IA)XGf(#XuW%r#qalyG`ZX`$Le&;[8œFd2`X<hUb%VVKVMղ٢KKF|Ge:K4c{KGRp,=FZvG[p;RSӤg0X{>W93zɱifw>لON/8#Å9{4梒[@mMe;s39!Yq IТv^ba#b\Zp"\}o+.͖_RIbگlM|0A05,3`qvpK@#"@Ft1*DK>߃67*\V6ߖ. U>?NZE 7R D&;bzOCűRri9`xtT )#^.=38իTC?jOkDDtkOi֣[e[з> &M q s\|*&)ú7'tƨeG%#58$[="g]$qc)/k3lFi!BZXt P|&'.^D`Џ!u6rllW[.u&ͼ2#|熸szaZH?@DlR2[$91cn2 VEj,.ע^{紨H4~9 CByt)y͌q g([G#+m q-Y>پ3!EX\O> ̵μ^'McפWHK #y V%cx(KKR_D.G :wi5Xr>|&gbb 7fsou:b:ݗSUd'D onS- D"@n: (1u^zv+UO&^oM-G  jFjpj U8!K6Kn[. +-b]+f=*eO.<4nS<բwvloJ 3@Cm!lR^rkى3 Qc*+9m~7+#)w QQ[65sAWD!- 9Yx,+Ɖ\,ϻcHA-w`n>ʅHփ_0(_nkq3m^r8"V{J`m%#pb,0lEUK'd' k-+XxLQQqJy!ݽP @UF\u D"@$ 1z3M]EA@%PoSDSP8r3Zgf.Yr(&:fNe{cVޏ,Ui7 (-FIf_vfm.,XX5nw}>P g"ٺYk2d} шpǕmgmsb㌴49 '}ЃVNO{bO A&,Ap"Yh$~?яUo{(f[HU!މXЙa: D"@ D"@ $`:X{&u#xu+|Jl]D[תYr$wqdz_!IfNuVG2Orb۞"G:9XHag&9Xؑ$V| }و a21*ڰI7;7;_if'Xa keX_0/dSa(}&CU2\È|چ=7oeAQzqP-LCMV8u+̆/ҸVѣR/Љ;ȘChs;7)aO[W*@ D"@ D"@@m8[vZ( ?&;.0wD$OVC1[3c l]9]0zDْbЖm،bۺI1N6ɷG6g)dOƧ;ƣ v$We0YQg"°طzLi8C~OG+Le Q#J;IH/c{`{ӎXb[2@L}wŕm(b1 .dőQ! M_q$"@ D"@ DO [>:Yod'ce8o>Sww˲9'E;>3e4΀MR5sẦB*#*P1 qE5v܄-.ӟ[`m:pql@Rg-[fswօym)1atO c:m/vf۱%.ÒxoǠԜرa zqX '&] ~T%طÅ{I$rֵڭa^B!A+ˑB.59 E gJ]$Ga&ۗ{\qJn Wd{4]"T}dŽL6OC?ly MFL⨭2ּ# e Lq`.`.>]˲!hn2!-meדzty*P ~Bޓ(].;6Yq^Ja'D"@ D"@@֯qokL[>QH{QJ@IDATIJfW#VZg]1Z j$}E68H>aΪIòǐ4"Hc(A_]n)@Ғ.%2$i%#eml,T// ̒9\* w}i\RgOL(0eb:JDS^83{/^+)ñY4ڶ"ͮP[8 m{^c.GmN]x1>{PLeK" W3( Л@!F63;uۏlĢqTvDi&Ȅɵ/Pj(ʫ bٷrTkb2#?cU+e"@ D"@;mz#3Vb`hmvM q| g3"7RMŐuxxPUP,čfwrT- Ƿ=0lm^%W/$w&xr]_W3u0ce6v `%gҚ͒r.R-Ð>x\/ĉmX5jLN 1$aMxWN샃;f!u6bϺe8&ܒZ݃l"mK‘hM$'):ϭ4UXw~y6|8K^U<*<xH1Z@ۣf KTx.ۊԅ;f8߰l~ :^uaC%P our7"b3P݉h8cʙL.=p&”>m̃niǑ:)I2Zv ϲlc6Rt=𹔎wM+q:m%?5e%к%/Ɩ\~g Jz폞*ꓱp"9>q[װEgL'"@@UܪJ;&D@QQ\@AS-DMQǥRLe-.Әc:+3ߚr$,JͥTAYD<Ͻ܇^{_^Y{w{=@}g?\>y]`~d^$oYREc?(2]6I0D̽9[3~L.OR&U8/njFy=fapXK^% $ 7=~)8FQ᳔tk,G#jB"@ D"@ E D J7*0W*'em<;[D:RC(b*eWhe䄸nD^ b:?WVbN/`b &8 ŔukˢN;&Ya0XtRLdrŽ3+ a(? YhDDȺ挻g<_ EyyFI`9Ҵ᫘~I% T_/s<Yehӄ$1JN3X\)D} YAbP +oy`ꌭܠXXb30yGmE*c\#l=ɰzy$flh7FV@{(DPl %'į!7(L+}MQY-la Ϣ (.YXVz?_C M0wc%!k1^(v>s+}uܣ.hs Z8DZVp?ooU_2"D"@ D"@S13DŽf}Lu7O^Jz(Q;De!h߱'"-\ MX U٣ߨ ٍ?N|Ba875T6ʭ`0L79ґrB#&B}w^/<`l9oq+MlӞH!]6`PN7JI6>XbUή*笼JS˸UPf(7^I60~s |ffT2 3j~/ ޟĖr١s lvc|-T?4j#AnΙ%Ȋ ñcFS sF>1C2!1Dz˯u_ vbF}!tV0jsS\1}sy7VB,a8DsUEA ZEwEa"(ʩb~u|Y!7&QQXZqod`{ $a+8ǀ$\:>lߚlE[T Uw8)FMV qz}z7ˍR|tXqnPOUTe; _)q(Y_4x6 D"@ D4p: oJnryJP}C(R^вqtJ4iP <]g0w@Orߜ*Yd$".10gѾmx˩zI1nޙ\;ӵoc꒚vjI^bűclXrt+T-dDR8O.uU?|ⴒ#Klbn> C+Wwttwςl!3.{]IZ0^U>2Y>՝vhpun\ mO$]c;{eۅTTV̫ʑ5++7Nb&GNEa 1Z}nZ+}H̔>O"E D"@ Ds_HFb&?^uٙw]^}38{v>ԭjM#^X9z"ݴS[=l}+{T>2 ^Sƚ}ZOMmT6m*6T.z)[\}'>+KKf%gЖ]Fƾru[Os" D"@ D"datnR<ʳrO& D"Ф IF9VhƩ6f0к3abm? m+nQqzqQ!dͧhzKֈBD"@ D"@9i&/XX-5zrkּ%I DK.j] `N"C:ġ;IG5\ƕqEkh yկ|nf:SWDW`Qt=4~5ӌF-Ug"D"@ D"@.GWcμ / dvQ  D"@6~$`.d]CgLorz t+k fVD|to뗹זNeR(G"@ D"@ Dh@ t.o\Yr0 D"@G]߿DH"OW^MHuҬaYt`!ơUuhXˬ;bC(CVT"@ D"@x YÕ-V̆ɱ@ D"@uE֐Z?x087wWԳrd#Uy(زC_tbQ_oZW!D"@ D"@ D"@hPOp\=4h z}A'?5ߡ=ۑ'eTn |33 Ѳՠ_l?j6zP"@ D"@ D"@ 2? gssZFfBYa3n"To>sK1/+;.`d8n(Hq"@ D"@ D"@ D<2PȜQ3Jz=;lyKp*z ]~9URUTu 85n˪' Bt鸙T_7cV>Q7  D"@ D"@ X@̿G˱a9T˟]Gi+N 9GSh*5S$s3f-| >i?2iu=ۆV^qGg\ |&2\|S.{krn|\!\m+JRppeC\~ߴCbH D"@ DL*!)f9g7ۨx@?"&pUiƢR>-1u?+CD"@UU('Pl!d 2Y{JON6* 5-)U|EŪfE2Lec/H= kj$P.JH-CQu"@ D"@ DN X;•vsHx%`Ջ͙P݅-ɝG\BD"@>zFCx ü}64^ߟ(-+`"1s6Ushz3Ot {4sANeWU lY,zV;apC89ת_F "@ D"@ M@u nZ=X+%l ("@ Pi#jrBa_ 䧥h٥l,FmyOSӌRF[U-V?Sl0S{<1۔ c™*0aT[L 7Td1#q2 Э|:* &?4vBNBbܹ uy ڽ;>^_||Bzb̝P'6u bs_8A D8GCi/V|#ꗕN|/wARh("ŋIiωx*{]7H#yvr)gT[IOb՜T=u{YQ&A*6R' D"@ D"@И@9LH, \Ӹq5qE_t3e$)ccj/'?3^//MD7U#P$}[#IU# :@EIIK2ֵskH,sFtθ]b[bv4UubA#P)r8$>0e^Fb,8_܎:VGѡ}q[F7H,G̃XH^vC1}AیB'<uaw}Pg _ $y=j$Gn Ij*HP!@cKTP D"@ D"@ (+33'BA6Ȼ uJ WI]$yaY /dF7zb?^; FYH܊Kezw9m:bh(3iR:&{VmV(~4Ǝ]b֬Np5G~~l% 0Bi8,- c͐gaҬ` H3w5Fw}d?#9ru "@X+UeS{3g ]M ,,q..v煰0¯>a5“S[]X؅9^Zaw`GG;ٰeGݍ=ۅ_GllvOwfۻ]xstc{w`{O ^lv? .qc{} G}^mD"@ D"@  @\\\J{ \@FCe. ;(Uʍ "(,Bvϫ:L'Y[˒ϖ-uFteD*8m=l-2>iâuȹ|cSi!RFWJzeWrC=3+ m Z, lYWgYYկj^PWbF]\eF׼TԺ_Ζq ħ@s؇vO<;e~P^ q5LNKq}i OUysd֟=s.[2,*K MR_Y +%ز`l\Ky /&`ldL 3&`[llMu`[`lsN 6;v'`l|O 6@(mPvCю(E;csVVE;hR8vL8T Ί|"@ D"@ D"P=lx0@)V:f ujKƒVku9c3 j%GVE n7kys<̐*%Dځ)4 [ߐ!FcI222t{vA R<8P_VPl ƹ9N]m\_/t)Z-ERG$=}36E򺑄b}KȬ>It做Ѵ_>]0 SGIa.Hl=TGbPq`63lX-%=;aSL^w9@"N\n}mXobe J'D"@ D"@ DmdlA8RtnDr r˶Y> gj%Gha_'_r[pr67><6]zC}q3NNN5'e  ۉ}huHpe͸}a2̇oNfo:1R\|گAugSJi(;fWXw'Pu# ѹ 9fN]M!567\[$D! :F D"@ D"@`n ,Â'b@͹X=5+wV+1@ j;wئ KsrVr$bg)`x f"l!٦+)`/Й{uBwDƒ:C}Ar4x>G ovRZCq`I\d״ˀG+}h <Ms;W~^YZħaT=;&0(=ܹ< "@jJ^c5U"@ D"@ D"p "eX4jbdR~AHP 7L0n ²H>^A,Ϳr 9yAfh./L+`ŭpGQAlHb'0۟Y,/3e8Φ#Q8EnI) Jsp7F*3kˋs&aQxRQϴ|\dõӀUcPu*,J D@[d(֖'I#D"@ D"@  בK{% jF3pE<#~>GPJC~~&<][,y=*|#~d^t?n(=bF j"d4NAHC.`d;bOPҽAڻ=kJ\g7օKMW-@y>M_5T5;)FМcK$D"@ D"@ DװBO#bm[+q%~Yx6X2X(Qk]^/3F^)D@DCv~%8Z{Q leY3N.`aVt6c몔ú+l-#+WP蔙:xy;.MOE~|1pkQN*t[Np+[#bV`ጡf{-U>et [YTgz-rawM1(Ɏw/p9ZtOӪWqn>j=O[yӥΓ5gH  D<l<G;`(*c/L+U%<MVm]!/vp͡Q/3f#X9.$`m,N\^ WKpi86nvpv7QDPOöt$Z'\ /Yٱx wMG71TŞj=Zbi$>'s"_ݨEhAR5$Gڡ_s|)9*;0*oa.tEǝ 2(f'+I)q`AO] &vYQjo='K(i/vA]OL[+_"tiYxߚ ӆueOS~XcwŮ>sX<߉C߫iTh<8~"%3 ?`ygIDy7l Pu1_Ď o`j&/䟉GD D( vL &t (+2X܌m5 H,h@!ŕRy+6mvŶFF~rd$]ys\cvb>cgڕj|jEjg#%!Sզ_|VH0ܬ|b4gO "@h,269}iX%ARMܴd;2*WXL.1|$3]gDc;'b!("S&a{RM3wz+~huȹ2先0rPaeGV2<ΙgFs2%sEXSQgAns)ApeF5~ HN.I@#%H;Aj7 3YsF7_w{śUN#mm[_jOY1ag%2c#F_-;@Pa06(VpQyJ;+ie۵1toHUG.0 @G/7e)"@h\Jul04<98=vU51%VsX44|*^7NCH/ 3W5z xt]HC@J(O>Fcok~yoaP]rۨԀ|>F0gF(u4~ Kpnm\,d!b)1mtl?YCUcaUP(h3:?xp;>sk,S cp h}V`8v`9Ҕ]Vi#KSwmؓ"@SF@yht[?-MCW}*)L$_n3h::L!,brA|ZLƹ̓ċ~r"dg6NɍBi,,Q2drYU(B$yg[5bxJv㼤aq)Gq~mD(JTI/OᘆMI8(@ D(gE:fU~Qp + F.þX'Y!E3 1{O2^[rlz)WQchKpau&*Fb;M+f[ƜF0sC Į-p?ye4 Ɉ@ډ7Ȋ^hQ _ jg7< [Fb4݀NLP,T1p@*`bVhӣTcb׬E(qfy W6BcV:lu ЂV 6:J\mچf mbT   M=0#oÑQ ;/=,e45ՈgeB߰=K`I8xBW_a,^/Jx7&'w&*@C!DnJvUxܕ9{8 D eNpnIcU9 $D"и xbQ2 P[⭸Uަ,{&`mT:-榡˶S7GP-Z?|vT6#qhN31EpM;ZQ]sV4Vz>)qC2q3^.# +g? Ajg;;\=ۙ`fh+˥0as.~޺Xj8l“;kzEj҆2tΥc[0׃-76Cy ;ų;ljr|vgJ( ܚ/vrt "(tl_p{Ys3[B6/mP |{*JEX29u|ÞƩ9b7 5kUUJ))hڠԑRC9Ⱦ()fׂ58wsjZQuNnrRq36 ^f[¥SW6bcyȾ{9(|P[gҶ-\a]U8ܺu%K7L$N}`]kB*_K9f#-%wr 0kc#VEB動!39Y\֯-ͥZ   3)Yw=+i䦧 NZ~=pK%2o!3vMC*%Uo}>tyٓ|^~VRӄ̬Ѳ[C#U(L DpKtGyHOKCf]gZ8e'<`oU/"*]L;x:E"a-ZC[g2焪hzFTq(\CQ1=dzO\rɛQv !kPV=WNelS {ܵlPLT2ԑF`({fb.!ۗ[{˓[ⓙޓ+[_kɧbsvwٴ5v͇2n3eeӍ3mS^S*g+KD4mU=Դ P>ߑz\Va&~el3G ܁WYuJYZȺKWErXpsH6s0~l<_ ;GA.? -KİJG\snUMUk8u]*V_>Ÿ@O<*cp׈M4+t@1~|:ؿd ]z!";zb[yR~_0J+9\B0?XNhv1&5= ;%Y؀ =kNuaO#|oP('I {_tYt[?&Sn/ã“_86؞>{f܆ GSU|4篈{TOX7dtn3b^SMz%Pu'Lk<_X~׵v6U2 mz Oas;{7XFz$ہ]_rCS^Z_ ػ{}t^)U2y("@#DƞMv>fptk_9lL4fOxͶɹf}Z `oWJ(T%! DuDV@ Sik=6R SKJ7`"4#t݊йus yq9?5J$ݫiFb_i;c@쿒]̈>x}W#F&N}6vr v#^ƕsbmrW8Y1X9u,O+9`Ö{}mH,&ǨufMmؼ^/y{TĂ8z!A 3(E .w2݊ؠb$*L܈\4RTl7a$ ;VH,D,(Pԁ D"@ DG3kYuX^Y3/_GGaFNBR啠 <.={RYpD.HCV@䖥է3io@\FKo+x*%J<~4!u's[1; LۀIҝ֮CZ~C%^#ǽɐñNBM8 ^OZ`1J 'Ri*J3LO[/j<x/=qw0)۴^+ּmy2;g^ApL_S¹H*߹ܓ^'Yo,r (L 硘iM{(ރ0pAiIcOU ƱDx ƽC>BS7*b-i<ӳ7 X+̨vkC }}-{_cz~$űmwn\Gxx3c]dc7L3$k'+ 0<=sfb3={UX!ˠq妃Ͻ+1W#@џ!VY. .+ЋWއ=ƱMܫ@Tk)[w30~;7һML.3Q)bD"@ D"@_mZ#֪@U,s1W:*^>?,Ԃo4l팭ұ [l^ :H,#@P2,xy"MLi![1?;w Xw5RocFKg *-)M0aoT6l|a*fvjU}4q˵h[gf|rX]¦-טpK<#=ON=Y|d ]n K}ȾY߅'oe'L3=.ϙ(OkXIG MM*^8j\Gbx[汦Rc81bp9.q@IDATcpmko/ iƝu>lZ]i;kFM_{5#.O-؊i!xoFLoH,x .KF=s rv 1ڋ`+9bikL|vD)чb@I/i}һq*E w?wvfp\=ElS .r5qd9to,B&\bʊuF3&0[zeǴzpC;4qfd:v`KdKȝB?U10ą{gaPxoJCWҨ?.gS\ zKq3iLT*G1"@ DIkҽ"@ @-rv'w$$3Tc3rZM07=gժ7RflӱD/yغLXe<7a$]?D˵jjfqHN38nTRm4%y?楗jH`-lsFsB#ztdb;Jj??/8l'{PoȲ0ʿVJiq N~KN]Fb}{nAW;qANngcg_V(WdNK3J8n;t ӽ!Q i']6sH,.0y!g&{5/x]<3FPt 1Y]SY}i-q^.Ȼ_L~=fBRf>j1K r@g,BD"@@S%9G$|TL"D1jW wm##К@wӞcƟ+hyWPeD.hƎ Fb!C8> q#uEʨឭBW엽&]ex0V H7l; >D2VZw&5QhkzX/u[ K*Rv y&}$9׏I6C$CiQEɘv7D\5sؠZJTDzfDP30zDEdd$i̚[)ǾQ ""%01$NE)1R(C܅qQ$$G3ډ@yfi] gdqWS[z/`M;7Uc~bv4ޤi| ks9yLƊS[H^B۲AʫWNv<׺JkwHm Uz3Wvzʠ34+M@xóZF QPMk:t| o׷T5_v3%#gH[̓V@9`80>wv[i'Бo?lJz4C`;:3Gf؈߸wK ːQ>pOnמSг;z[* 0‰J,_8NłYq\d?r2Y`slPK}~; ¦:D_{tbpw[GHUlbf9BEƽ#ԅiŞlg*/?cppL]ڼWK$)a ;KCx散w{9XqLQQȶkr_kk~L\?LU/t5}/]PQ[G D"@ Dt$NERV9cq9#1[r#աKd(K$JdUlBBr*L0 ۠7|\_,Q 5Wa[4S^,̃eu\w[(lUӧ$OMu$Nvh`86d^`acKܢW(evV<3xΡɣ eMKl|$%NJ 9/h!]ΚIl:L|܌*6K9߶U )۷gئds}։VV*Y9vS:'(?Uk3aJ*bQi)̻-屉C޹ }țWZWj(~I7铭0p(Mm#O~p\ :1C{IO܋z G'j~,BG;?hg:_ah75DŽy[zߎ.тd4"Ĝ YT)8gSQǞ;X>W΢F1"@ D"@ ΌP1bv#Obf$^|4(ӔxJ'&Ž2IHȃs@oxeØZjVWUQsy(W^0.Yb4ЧEZRض1c"#*ec%"g|{7!OuӮp^R܆*La$DYn@CX!y3]<^dp5ϦΕ xbp|,Qf6` 4fNRCh .K!pe^u+TrqG flQA%p:*s[riaCZ*(c::jyhn,w +2J |q$͈ZR!p |NµKqϸtJ2W_4GVZ{LjunX8Ö8bxQ&]z/WZx t{!Te{/r֞1%KM*^z}?\F D"@ DԍŶc$Sg$^IFb#,c':nȻ0_=0WMbݗzoz-d'E_`ټU0//sF»_}#)oc%^aQXQw\֕T2D >p>[^O pGrGwNN.7wg\SRM'/03Lϭ֤o hn-)U@mkV鵫!]'XRȀ_B,nڼ\?7~+C7Zg L %_Ɉ3wtWoP3ڹn]Zkg))ˢP `.u8D\JS_koadS=O>pdO`& lhq0|}Q{w? QbA~s2CrG5 D"@ D%f,iA$X}6Fm5݆sDXV;3?rٕ']R0զݚսs?/&˴, +NhFbF56nqV!n$.υR35R!3}E*RRT\DyR5ϦDGl7[iFҬ/…tsaREF.⵱sƺaY>Ħ?W"$5Ej,^!+ w4m_߁ƭס)󠊗8m{p:e %.SJԥ3aہ#y8\9/;I-Uxfsm5.9oMg϶ZY;͞j7tUJo]%CDUjS#P<.U`*Iiu/ֺS/|)Hr[cu=O 'gp)VZd !} P+}`8$/\W+F,1Ž\!7q;+S|}Ji8^*skri^U,`<8 ]\\ µ?qR3~]cKKzhJ"@ D"@qy?!/˭/B)DȒj0l] Oik f +0 ɸ%KRIa}%)Hp)mC%Y\A'q[g$(ك5`+PxYZ'c(h9hPJW g9\ QxC,ˎ=jb*7弎B7 yC;E6^+i{<$fm+O;Z2YvT7>ҴU'dvz<0C/>K@ F*uoV/ccND&4h!J:5apI < F%S`cq KoX! 3χxwV lP􆝫-;ԏqe٧7&) _̆j!!;n& }#5 ֱcHsdV?yM|gD,2VLj_wB97=y%GACDZ5?-lhMÑcviKpn#I.v=m5FWaznu]uŘv퇟^}zyq6o_C|&y¾eyYz5֙TSC ܉?+մ{K,`!ѫܽjqzYΑXF  8h ^~p2jܫ;t$Jk²^`0ٳQ>:a68h}L i܈+JS6@ԉ?:z c uo"2̮O 7,w <:cv|^;YL!M1 ߫eT!E8赟=_|>u~y 6 D K~ D“=sҐxWO#-;Cx"Mı-qQ9FAz<. اr> D"@ DT@63-\e13j:q6+}H(@4 [4F"@ #H#pY֪ϮWU=:ޒ 1mm~Mt*MϭIx_߃q[5FD(CLr̹uMU/8*QF|hgSzWׄ].35\X$0_).&/['\qKYvZ.5,\{>bKnO3/biakцE)0ap.]i?ⷃl7Lj?*1ޫy#{i4Z^BD& Ў@K?~k6m)fkp7~vΖ'z[-7UP}rQ 0fCWc0m2T?#_̬=-Ҁ [:cЦ9k˞חO"mrpStľ<.> 9~^&  )t4zyEM{{3e|f0Q D"@ D&`H|f`$o# 2 XLP+P IUQQ9<4>^YX̯Α/+U9 yrjib\0=`{u?G7p}][:cgXԯ|Iv .`1suGn_U9ּCyH;-֦ +Pwpm"Dpnn@;-H2;oiIבqu\m-aNX[̈Dl>7ˠؚI1Hi~ђaűNҮ5s:]M_[铝t7o ggl vx} >9".0s795ܼMS0dYp@YUwj $b0ePO7BӟkTIl Kvu DɾRyfMatVkFØ@h$LL`;s{gf`Mssy{/sEco$_uf;sя}ۮA[w?Orwqqz_>#n77^798̉qc @/܆p׈q{>ӧD ^Lj)I\w$+;\L)Ymq SK맜rҤq;%nښ,̭mwWSy~&lfqJ ;m^6vi_9}=IW⵭V1Κdj̸xgn91sx8}YS =ɒW2n>ddtj]%K\:ޝ..LҠAc'r̯UǘږcÉ @ @ՓWY8Wdf;%aqݪC&$Cx @Zsqtvq_ƿ|QW @ @c78Z]r MwW[6_XJ"p'Ju @&nؓ<ȾSݒ+M,H70/9* @ @@ Coܴ @ @ zr/ @ @ @ p'Z @ @ @ pܥ$8-;㮅7ǓFwjʁ}̉}cslGD@o|_Sm @ @ @*@@P\zhe<>6ʵ[b Q_ҀCI)UD @ @ȸ8{zHJgŅIbZ赂=*&̪ڤG'.64t9c @ @ @@?  R5!Ps}8Sx.ؼqlp @ @ @` :HۥY$-'˶9wu @ @ @@%+aQ ?cJ @ @ 04Csܴ @ @ @, (>f:'YqϞh{  @ @ @AIaw 4?pY1yqFq\  @ @ @CH@P<KSĶne )cGU\XWkRoh;&}-9: @ @ @E@u\ͱVDz{6tB.$1g)%@ @ @A^88Ɗշ 1y\u  @ @ @APv Kz]hE,[xCΜ @ @ @'E@P|R]4Kk jcp\  @ @ @CH@P<KS@}!T_Jg, @ @ȮL&cgA@Yc48UĘhnjUCB @ @ p4MkKIkhC8-1d֚S.}snE @ @ @&p걝,2#r8vwי7G2x_wsu @ @ @ Q١͞_?w~}+v߿QM%:rZ|q}xx /u8|8O4Ɣ zuW69oFp;/:N @ @ 0Ńzxݸ_~UK?TSUsbIUL}uL>iwa @ @ @@ tjH= @ @ @*B5̼q7*Nyܕ @ @ @@+fcGcIaD @ @ @ n=9 @ @ @t0 @ @r-}m;uĘ8md?q_nI:S5"Fg1~u8mܘhU{i0*M_U6K @ @`4D 6,ȑ82ltLSз/6'6GL袘3z{hK>?!ib{z8='aj~N,.ƥKrKr6zlMeūJӖxF.=ud)v~ٶd̿˟TŶ~xHy_l|pLWjڷ/yɏQ>2,N'IǶIH==+ @ @@sC8~zl(kq]l9>ft{ޘ~OYQ+ ծ:aw/++ߨߙ)|5we./;Q[U#xiËW}ۨgʩߓ Gu9#~[廹Ȟ{YnVn99E1gAq? @ @hyGŐ6Έ7S{n6U>&GϽ޾=#ѫ3Ɏܫ.:}[ݘh554G}E┳ޝԕC،>#7fŸB}R P)Ji$@ @ pz)毾|#q3m[_}5wܫ.ߘ"~۸Ÿ/ea~m1n?wE\h~%O:^0/+n6)gk;K&TTM'76#ݓWqn/sp @?. @ @h^ſ& w=Ld^óċƋ75ā_h?ƞ ?{"u;=qV|OE݌ euYn,7uV8;lt̺cEu1!=y*|rsY-^>6pfzkQXow^?>33iug]R-sd%w=w,[ƂxX2iKͪwԒk܅6jV_o|51:fmgD45C-#bL@㟾X/I_._*R֟EisM[oΥ|  @@ @ @ ~x/\rKaiZg׮SG[4"{wn;&_*Z>֮ZI5_^Զ/ە;jC|~Y1iiOnlkNJƦ[bcEmuT܊2[ m WKc,9cuwsYq# oʹgQcbvuTZSlT claʩ/6lT~9iOd?Su\k4|Y5q'WvG_"@ @ @` qqWbs}Om,\n;IxY)~tk옰[ W͏M/9 ł>ltWj;kզX}[ܮ=)^ɓo_]3cvLqmi?OomcԎn|ce~򍟎;[ۉ\%ON{a],.v5>_,זݱ9ϟunt{i1c+j}*Tzc+1Oky?ٻ׊N^/-(Pe,M @ @80øўd6'ha͊qmÆ ztEq%!qx$mpnO_L޶jVlJB1g̈qjL>$nIn5Fc9*N!ts&um_^}vu|>>PHXt烱y۫wx-jQm-ԕ;e;Md [/C+\9qVW 04Cc @ @8=ךy[6[V+$noNBd}Kypλ~?&cWv{\qG ~6:eXr[mƒ's_x/Eo=zA-G%+M;qq}!fNƌ gĭmn{jsj7Yks 39Xq'رW"jN$@& (0Z @ @ x?ϼgޖ&NjxdÆذvx~T ]o{9U  @ @ 8ڀ8OӲ'%ϼ Xlbݺ=RǮi/"&g]-4gs.\,N[ijXq3@~omL4KϿ0_B<Кk*fW3o󳩏ͱ+KnR͖.>/ٲ/ޖx3_s.ٝ]q\OL t,^Pzsϼo陷MQ=2=ܹaEܘk/釵_x>uH~4Ldͱ>4f^M i67c϶^eqnO)5 @T(NeQH @ @Q ?Īpso3ry"=k?yG̺X>sH#oGɭ/o\8%swsYqnOlsG)ܺyC|e'Κ[p]m1Vs3ovX#bG)w5SBŚ^ns_iCFQA^zQ޴; w$_i䁼tcں䄶Ֆk/u^yɲnR5सU7wz6? ͩM*o;.'f>'%ϼ=ؔ4aY].CNwr/KB^sSe'sO_56F5|_׷_ dNB @ @uti4LWL1]sup6n_8xǁ..?7=M?oy뮽ppls׶fQؖd]wYZ_ޫgXMu|~lY}CZn~*f]Sb.O-tM O}k @ @i͟Ā㙷zgٹ1rdkBV\52&M>p_ܻxV9s?{u8BDs2 *K'cbB+7&-Kh~%577K6 Vmr8ZCy%DoT?hHmP @H!t$@ @ @ Kx?cnXK^YlY_U<ؐ`<ܳkm3CDMByO|aYqGkb$*f~C]CyמGg7kZ7{ 0Ń} @ @@@{Gkjڃᆆ}JnQwBݤЛck/k"{Tq+.9؝L.6Bk8g||F͍jeωn%=wm#hu)оqi:n^4?KͭmwWV8/?Oشe%u=Yomm'E @ 0H^~嶖5>|O9(Ko|'^?iؘ1c:K"BCCSNYtG~cҚ,̭mwWSy~&lfqJ ;m^6vi_9}=zϿU<  @ @ SZ  @fz @ @ @ @@ +hu @ @ @9A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @A @ @ @*L@P\a @ @ @{ @ @ @ @6K @ @ @* @ @ g]ק}:A @Gs. @ @ @Cp4 @ @` wyCZL Y33;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @t @ @ @Ȭ8Cc @ @ @H(%@ @ @ @@fřZ#@ @ @ @@8E) @ @ @2+ ( @ @ @.J  @ @ @ YAqfV @ @ @ . (NwQJ @ @ @ 3;:F @ @ @tAqR @ @ @dV@P١1 @ @ @ ] @ @ @ @  @ @ @ @ ]@P @ @ @gvhu @ @ @UJ  @ @O_~?S @0L @ @ @'`F3-&@ @wl& @ {ۻ"%`Fqe @ @ @ @  @ @ @0Aq  @ @ @ @@P=@ @ @ @ W؀. @ @ @ @ @ @0Aq  @ @ @ @@P=@ @ @ @ W؀. @ @ @ @ @ @0Aq  @ @ @ @@P=@ @ @ @ W؀. @ @ @ @ @ @0Aq  @ @ @ @@P=@ @ @ @ W؀. @ @ @ @ @ @0Aq  @ @ @ @@P=@ @ @ @ W؀. @ @ @ @ @ @0Aq  @ @ @ @@P<4CZM @ @ ATA4M&@ @ @ mbUWUӧg~\mp\u*oUU @K4;omس1Zt pbNe\ @ @x7Ŭ3ry#}s<֘ok!+㪹孟G}4DGjƔyߎvckoD̽#6}]T[ "prvņu݋W亴6-n_Fv٩'T@P|B] @ @-@Kֵuؑ%/;u/쿚, /[{~TY?CIip-L=}7 Q6_rT{{ܯe𪏕sKM3;H85>}b&0tf}O\?+b yEs㮨_o\&>׃~4(G p @ @*U`_lfq;F}ƜqjQ5fBLMW[1dGŗɓKJ2::cѝZ⑻?K#篎L|>^]|r>Ls=D[@P|܄* @ @ @`@#ǚCE|p-k/\97i+yW̩q@/kv>[~r4?qQͤټUQz^iݼ/xgImÓF\jN3w>&6pGop$ΟӧN86/naλ%Ƙw ΍'鱾hɷ*d==Nԣ @ @8N#zB*W,;+;EG(f($;y(y~q I˫yg|Ϯ%:j8.oR>|9fII:Ψ[>{AִύidՓ 渤yS<(M^KW+oeL#.XbA8kزfʪ-W`#ߌҷ{}:?eƛ)|UEmXgq$J'[xW|y{6vz;?WMM?y!A2}B[e d4fwDͱfC}{ο64,F*|}Ƣ_cGI]I MYےL-€|,5~x xkre_%:/o%T’(,%%-isܒ/2*-Hw1ϱɒ;<+Yre7>Yޝ_r7~yOLHeb7Yr 9;YIy29Y$d,$巒eZ侥/Ldd4Y.K&d,W$d&Ynm"@ @;wl-^ phK?8'K]떃PG?wӊ|;rmi]ڑ|ͯ./1Zko{/*=HˏI[;k 6?W#{/+{Ʋ>5}c㭵%ªM[d]ݺ?C/=qLrUF6m_yʏ*ڶdֶ m{2ߛ֕VT?n]]~i[Y6[Zھ6ZWlz-u6u#]T^ߪ-i%:}7PhU>EnZ58l]]|.]ݺ~7YWY\Yiz2f&K.eW +e2\˸rYW.e_ ,2\6rYY.3eg -2\rY[.s;'YN\r\.eu.r\r_!e BNX 9b!W,#csK!,䒹2c~f9hn4W~Jc.58 _P5ZA @ @@^%6χ:4jK'7׬ͭVR*Y.cryWEłnW:v޹9n{zǫj; ڳ/i[3{[bwvY8ooί%euqۢe992Yf4`h  @ @hi.KDˡ7#]$r\sh`_-/wHekmT]SXM~5ecVn^SWu}|U֔x͇rwxve䢇B^[jrw,y, #V%!#ϿZ8GYSyI +5Wf6ܳ:hNf립_+vɎ,j_V&iac^XB͹MXY^Ɉ]kf&{ݽ?IS?ɧqs٧1Er~]lf.o] dҖkx2>?Vwa\pd`ҹ+6./i{JB6]5*|o.ߞ]I%VJ~z5,Ko<",=ZߞԹ}o ?/QI gB'׭i[ .Z_b ` Yɗ@Wl蓫kk๿Yk:dn K̏*By~6uousގw_8ھwX;8}Ju'NYϭ@%@y[5a&@ @ 0g7C3abϞV_)ǎ|:V)Kv7Kq Sv @ٱ+ЌrmgDQ]o[~#GİcU5aN2=O2zt׹;ܿw l9=peB'_=7tW*A'9u_uUfN7^/wi{>kq{~ur\e'p^+PΏow?s/xϦrox|'Wz3mOfXz]2(>Q< /{ @ @ ~Y[{iu3~C~xe >󏓺zo}#v̽޷-L=2?ku+^x_ {?{Cfz髿gn'gSu9|7 ǂo~tu_p&wنoo^? %ˬp;3Ե[2(^~ j@ @ @>qN{_Sr׾o Eu7wcP7B?:} s+%{9>0vE#2}n`{;)pcOn~c LuO>WV ?9#2G;;Ntm+Mo'YߝwxK |SwO| Ɖ7u~t?߾ܟ>[|_,.fW='0cj/X' @ @ ~}tM^7g_SG/koqs]~lR< wJWW ~^;vjn~tg+wr4=^7{W`WgxO?2?9}7\;:9[}C?'y.Wӱ[k]/zfN?>hTU#owwoLp|t{Nk [7|?Ճ&G>q?ӵ_?׽guk{\{7Mo~9ɇ7M͟׿;βPuK po>릷n4ݴ]B7ywoŭ\7嵯ouӷ:}<8?mzו3y_{>PX]_?ݾ K6_鹛|/mL]"ncۼ߮?M6_7>}[wp{.;+c[mr͟;wCO?}sK -~3-W~/kz[_>}vd?/?TA,>Hf;kc} ]p{qˋR @ @ p{3O|zz~)k̇?/;{+KnA4u7l@IDAToN˞&o1ol8u߻Xmzl_cl~S{-β6M5WzO?Խ>tW +-YNDP m>ϟ۟^=z?Kf˪7i?65/ߕ͟;Wny?+#W 7v^73{GNR O={'wTrt={7L~ӫ&M6\_}hhCM_;6{z~&|εy;F/c{~OO?mucZ~Wϙo_}>X.@ @ %WO_zBuQ}wԝ}/~7TU/y'?sү.h*\=䓏>8}#xy/~'7whzM7t{O4=6%ӗK7}.)?zyco/_ ׍]۵G?:}{|nӋ6ݰϿ>ȃowO^yO|rz_8gi٬pEzֳ޴Yeԗ fvUL6FvǼֲ?תY'ٺ]6jR.z{tY.+?b3|\ha~5i||bP@ @) <1NnnN@ǠWi[g= nW,浖59]:Yye ̝>}֯}?ڠx.އګc> @ @ @@Z35s zaow+ie @ @ @@aes.\-'\Qӫ+}xأ23ȗmՒ @ @ @4_{~8>YSϺMz+b>sA @ @ @`_Q}v_i6Z=e>얮\b)>Zj@ @ @ @ ԌMoYZLhKY\iZ>ҝ=A=އ:azYbx<_Iuo}! @ @ @ <5}lfJnD=>ʙmv/w:(j'{ ,f*? @ @ @{"ԌӛlfefXղyZcԮgt߽/ӠxpG^uųF˟͇zwck@ @ @ 삀ͦlFq!Xt0(}Qzu|IZgy{WW?3?3 @ @ @ ٔͨ67_6gYy{3vuΝ=A=x s }w}@ @ @ ͦ6͗ͪ+7νZǜؾgsӠx=|^>fƧ?.@ @ @ ]Yͤl6o>~ϯuřthos^H+5]b˗m奓^kyY}o:?G?O~ٗ}_@ @ %#\os9 c!8e"`&{6'6͗ͩ 5mdqmEe,&}fGY]A=8̭ŢV[h-o4Uy-]f}-f/?>c|g>>9zֳcB.@ @ `_?._Vu>tXk>6_^1gk_/|]!b]#ϬS>:l}tyb~++/ӔbKjK=C @ @N@m׺Lc~};_ˏbίk~ٺS[;Uъŵ37_Uo[V/6t櫗b>'_z=-VX[Ӷr95O<#`k٬g_+/J.I?b]vN_ 3߾S־YjlA|mʞQcZj{lMc9.[,K1fuy۫5 @ @ C@V]1u\Z_.Ƶ6+5@~{|i~zubQc떮zbk5;A%Lz[g:{Tiլd_x#=7LՖ~Xy?:;[?>DZS*m+_R{ @ @ \}̹Vm-|9+ٖE?[bjOZ.>&?˩x.Ƴi\Y]+f=g=;ARr%sjJ,}Jg.IVqo3k_˾mVvikVoyeUm/,&zH+&M).U^wt @ @ S#}~Gj3mŵlo,6}:R_g1]~,c[\g~{rBwJ@aA^{|멜Y,+kÇ+޶V^cV^(ZGk]]m?c.Nl/Eޖj @ @ q?Fr^};r-W?[bZ]^l?lV>ҏh|mn>cזuvIg9~VcO>X;>(ܭ]ukZ.:ִ֪+X_).Z_H17Wz|_'bzhoOuK'xgyi-gzkcWK}mv @ @ @~?Dv4޷|YWLV9처Ǥ]~~*e>>jk4>-rk}}P<=lpų[o.;bu):cfUXo9o_YtYLuʛU_fkLB @ @ kl+e1K/+ Z:ZV5^}[g1ے6UZ*:Y+'/)FM\,ŬN?A\o^:}ǵjƬ]|Y^m3k7-f{(nke1T]g=zS7Qҙ&l3%s)?bիVS;_ @ @ @u?e˗bʙiqiٳV{כobG+W]UܯRf5{-C/b;ԋ:_ҙ+F>WY_+:UL5:j:XVOXCb.ˬis @ @ ?겘eVq,4ztv)&֊ɗƬ.im-bZ_[뫟kV/겘r|QiPd/qQ)/Y]~o-'?ZT兩RN:k+&+l)kVίukN1@ @ @#ho'WL(mD0l2?^>^%zWL缯/$pb{JCQ_{̷t>i.ƶΆZj8Ztrfs[XLZtX.Fb<jVug󺥾gi/!@ @ @ݏfڞ4z.ZZ\~ŸY>Lcų![{Mh_b>'lv^9[\^}~%͚J{?Aq =8r3򲙦'zKhMcZg,֞zqOe3[Y.;OIiG> @ @ Xg^\1i-ެ}}G_^Zbvy,DՆ3>zH6cs%1Ξڠx~= 3kᅪ?}=jtߓLc_>Y}/ŤgQ9@ @ @|M7Z4z>EFh|LϩdV[WjGXcKy1(?v{4,YieK,*_FZ3k?V9Y1=SMW[UmO@ @ @@{tye|,YK^}ie]-^7Z7/\ Ig_S?,}FlPNVG[Ǵ\e~GZdq鲘Օʙ9o]OHj @ @ jJq#~-'*c3/Kqo}>MkW=HYޘ!Ӯu9AA]s޷9y6MpT6)mU̴Π~^}טl_rϞ @ @ c$3z#bs޷_gHLJyMK%k:y6ӨϬ45S:_}ek9iְgYaPl7g m7hίVqi>{\ĸUc}.xo1]}l3gY߳, @ @ @Dg6On$.Zerf/EM4yKg6j}~o{|VY^3g=Ҟ#{sPl@5-gN}Vc1{UgkbLiXmgQ'Lb]ڟG_ҨbX@ @ @.@[k;du~-_6S.>V.t*?b=~:CjLSiS{-j9(>s7y7|L~k֟EzX72ls%_u>بvef=׿ :B @ @. a4cLkY#-_6ŜQgk}޺ˬ4z%}͏W1+/[IsRv߃bX9@էt5M)eޏrYL}|սHcvRjJ}u>{sޗ&Y.g1B @ @ 8|1em̏VF?}/}4vתjS^ȗVkYLy/[򶕯}Z~>}bdvrY<ڧ|<:ZjgyߧW/_l][z龖 @ @ $=ǚ3S[=Z_~,Yie}.G_}ԫ,Vr?Tz=9g}<וΩZשlW.ZZtlZO˖nW/ @ @ @.-]Z9Y;O+c+=mJ%g%+%?;{u*1gV>1ߣv3)a1vihY\5+I=|^1+WZ+~Vd\v=!@ @ @h?oWlkc~-_6^}kc^+߬]^kO}(k|yƸ>}GmG+?AmP,qS^W&g5YtxQku˖z)|zm_o=:@ @ @.7lCUqm{Ę_˗׺fE֭%eMg~v)m*Y3F٬ZR])v>Cʆk_=}֟E9|0]>fk||]H筯~Yc#c:;g @ @ @ 'c*MV׊okjP١0G3mO^6ޗ.l+WżL[[Nzhm+oMZ==LJ @ @ @p g#',Ք;Ř_˗=Y||FsdZ#9/).s5T^}VӠ8a{p//RmSXimq=)l?}"Fzi3M-[KjΫ֟w/_S:OoR=q@ @ @e$3^.=j,cZF|iz񖯺ϯ'5.ŽfKsu^1T蜉:ω,(>(wlCC?֗־4sbVc?ֱ_^-|C9Ok&Ƥzkd[ydG+YekW|@ @ @ p4XFzz41޷/-bw-c|^u>o4>.mek_~sc.uO)n}j`VC̞AcW,F}.^5:[K9|b\Uw(Ϊ3>FX@ @ @~ֿƉZJ,cϵ|qk+cQmERm|N1YZ6bF_1)֗}PCICI=kө^51fkK7mb]LkW-f%}-{մ @ @ @XN`g5mZ5s7bWk,_Z(sc <{PZu|6뱙̏k9u)Vqb^sҫr1/ @ @ 0r1V[\Wf3? |bZ˖b6E_7k[1['m}R)F=\?]=l3.ZcR|rY Ywԏ5Z1wue,k}. @ @ @[u|>bm,5/j1-n^͜zT}5wiq˽w}W9.!Diޯox?Ftv)63kK?ۃ:@ @ @ ~XmՕ1^[\W^A~f[1~11x9ִ^絊 )z|JV5ZN{X05\T?VlVs~]tk9rki-K:)^Ֆz*n:1%bܯ| @ @ g3HO&˵b>򕗵ّך"\kuqzj|%]|mk_ͭݯw.!nCd`A'_bvioיF-f,xV~T'Y?>zѭ @ @ @br1޷W,Z_sޏ3?r6Z[ۥjs>tϱks<{iSizb^SE[ycb^:sՂG׾rKo )s:i--_˩J} @ @ !Y@N_e}}lhl>ZkkbW>^5Wϩb-m>YN}Q^C{_oJ=kV>^7ۥsr\ջx=V:Ň @ @ @`]߷vt16W,Z~-u5?˩r>%zKyo>W[V^{uҗZ}J7X]>(V:o.;bWn5kFyΤ_{_]X;ԿGk3}F|jڞ @ @ @Ngsջ1޷|YWL6Ϭy_=|Icۥ^%[^}KXu>~?/kXɀpy_rF]\{>nV4vvO~Omgv?yژe/\5!@ @ @%;5u)KX9~r.j5{kţt>Zz<(i5iVP֙_^2]j똋zoCLbT˙6u~i>/{' @ @ ZMkbޯ[-x5|=)u+gz|m,1I#+֙duG;A=!݈azƼf+fk}rץu{}{r^ͯVkh-+Zc!@ @ @GNP1Zͯ3_hUٺsNkomyz=lϔHm VTàn@|›J9ie3ceSά|~.]{=Jq\6]֮ZZP,ۻ'@ @ @@{Q|ںq=[,ƳHkkωXnZ>&_5Z1{M\m]YkX%(ydף:SXWYdbYzGi[Xz=v\:T/ix:5lX_+X,^^\oLMSų\_}d3 1@ @ @~/sJiK,ފ~޷:e}ϱYM)V,u-Y[|e12kxK~&EE}(dCYqܳ.euKky]b^)+fo|~-Σ=c.Mjq̖\l @ @ @`>G:zY#1Kg?sZ7 -^N![kϚox:|L4* GoL5eѺ޴=5!@ @ @s]{j2MO,jzė6ZuZt>V>Z]mW?==[)JZOMu#FJ~˖:P-]Q~QZ[Q,-xZ٨c @ @ @ю@񊱑[lo\16t>Ztύ'>(Tѯ[zHNyٚSYlו峘z׽jѵ|ej:i2{dy]G @ @ p ~.5]k_'_Yl=r>}%rĸ4^cڣqPlbm\gGcuɪ-PM1gXK#Kuvxr^+bY/Fm=Z @ @ eFV_ӗrY1[֟#j-K9*&|L*iZk;S蜥j,_ӨOz|@ @ @.f='6(xV݋|,\iFs5٣6sb&.3}~`kh9nO}wV=+ْ-9vݧw(ţNLLoqjQfS5g3י  @ @ 5 ~v?OO&ļvve}Y^9V5Cf1S|~Xk\jz4YbKg{hb)ZkfFzy}>vY^i-+qiu_ٞ1VSo#gҴtg  @ @ ޟtY'5~=gZva{zh]0ZsZۺu}ZV~^WO|e1_7[͖zzMK51^!Zy|KcU, @ @ @O@?mQ4qm5>Z:ŢXMYh-fWoVT6{nI>kOqPl4Z_hbnzNOϤL5͚o⥜(MK{kT @ @ @b @}MelY{mb=9i%ưT__Ǿr12(>pk|Sl=UgmԫgTLԣƬzSMfB @ @ ?9HiKWymј-Z4kk=,]:\Ԟz!`wO}Mzb^uϙ:E?}ꍕW(lLG  @ @ '0:,K,ފż_g~xhJkvgSHٞ=j3+ixD_V1YbW{KK_Zjxvec5 @ @ @K@?+k2Sd}ϒfxm/~C+6j{zhF]EbI /K7\gx?2_1Y_l-'M%&YL|M_R[J4g:߯'.l^^iZMRgi|d5YlF/F;= @ @ @?z5stY<1ޏZј~?ZvtZƸ_{_h{4fTkn5hӣr=~V禘Xj|Nim6䛨x)mDYLJ @ @ @@guj_Uۻ'b1#~UL]~\j].e-._T'5ҔꔗI 3r(K詯iJ,c~}7ns{*R^]6YUoz @ @ !\K峘>ߛtEsZ4YǼǵ9[5h9^Qm_:WZ7zKx3]-֓i3QǼ|]B-s}-> @ @ @I`t>У/'zQW[F=̯Ŕ=r%3?weRlNjts+6bwŠyMXoNwY,Kw־ש/@ @ @L `G]mݓ󚖟k9{T+cѷ]%6{ugQ>KꩯiJ,cuOkZ~ez{m|׏u]g-'UFښ]Omr @ @ C`aO16?f1{*G|oWo.jzJZEۣ5~*v^)qV,cz>&_6+i}\{숶cIܾfRhZ@ @ @?zYlz\5])[}.ݫkZ}|>ήbі4riP,c-_eY{i/McW+Uchg(} j@ @ @2rNۻ+xOkozߪo{|˵ط>swvae)cld%ߟYljib֭ҮoL}ٷkB @ @ plsvgjiKxԍCY~+_Z_=}Lu=Lc1bmtYyڭWo16]s{\ҵr1-fc~Ҵy;C @ @ pz [5|oZLUu-wVjngWӌ2mֽ9dZld1ZY~ܻU}sQfN]y@ @ @ p\ zf 5MEMms%ߞr>6z>%{}{֦WKֻ\}K&zt\E_ȤuqO_}zմ5 @ @ @8s|=u5Mu7~=Q}|JLZLhzij9iִ{o߃b@GKWg޼Qs{un]>ba!@ @ @E;멫iJ,cK־ޯ/ʯ#l]g1˕ۧY.bP,k {z4|{1\\{{ufԯssYgF @ @ @#0w8SҔY<Ɩk>oOWŷP.3ӪonT:GV8vR2'IDAT5Y,|J~_әVWMsoճ^7}&e @ @ @D`ɐsc9.:__}b>[[teڣ}Pl{-M)?z׹]X}2M)fڕA @ @ 9 {kkR.Ģ^#F{nc.[b^K jkX3]ևxΧ6j>5r6ۯ @ @ @0K}=-M){bQ3i}>\zG:Ož D+Xwj{%W-ʩG @ @ @8b4\jE89Dіt[Qg/۠@kHXgX7ޕ6c4#vem3g=3yoIN @ @ @8U{jkR.ύźƲ;ӌJZgP$Et]orY-Gױh{=jZx>-c?/ĚY1@ @ @./CÞ&g1{:Y=ښfN.bx+i׌[/Jot~ڵ[oۡѷ4|)F|zqJzQV{xm @ @ @s,ַt\&g1cVKϬC}9zjjs~+TCW+?^K>ZrNj!@ @ @h0q^u-]-_]Tܞ\i%9D;&ދc}9zjZZ+rZV'߫1=(?b5/Z@ @ @C^=+ՔrxFoTvD#lO_i{z_=ŠoNϞ_;v?{sWO?-5zz @ @ @5k Gzhksk3ֵ=^kO?!.9goMMWKURN3IӺ/~oXt}Q.=7 @ @ c4 YG[%ZܜDڞ^VdG욽 @ @ @շtKڹ9{j=y>ɎUײw( nh޽]MSZk{5uyc> @ @ @ 'pögȽh[%]VAիd1 }C9=GjZC @ @ o8Zɹ}ͩ1>sviic)uok3ǾW%C @ @ }qi߹k޾G}zβs5Zj2._=؋wY @ @ @\q}Z=KW^Ͻzϴ2 }k췴EǗsybC]_6>Ǿ+?1PB @ @ pq3{{r((B E? @ @ @%5}C<g(!PA @ @ &pC8ʇv?Ceu:3?i @ @ @dOPuPoq|"~,y @ @ @`Wey<՗a,lW1q =2@@ @ @a8A11Xn11<.2f'@ @ @0u1q=VƀkO8Vz @ @ @$pc=Ae Ͽ# @ @ @8 >`=[Ppw؞ @ @ \,S\ v.pS @ @  pO|e%6]fޗi@ @ @ pe^{?znׄpϹdQXeTA @ @ p z?%XZEn Y1eghi @ @ @;{G޵!ϥ nD vunW\rA @ @ LȃHI @ @ @8: 1<@!@ @ @ p?xn0!@ @ @. >SR%g @ @ @O?cG+V @ @ @&P&ϳZ<5( @ @ .§ls8.>zn @ @ KJ%}m"=!@ @ @{&u"80KG8< @ @ @GD!=C=*ýC}2\ys @ @ L^ނ %B{G @ @  `(; 9 @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @]2tbIENDB`nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/quick-compiler.html000066400000000000000000000040501376321042600247440ustar00rootroot00000000000000 nearley

nearley.js2.0.0

Quick compiler

Enter a nearley grammar here and press the button. nearley will parse it into an AST and compile the AST into a JavaScript file. (Note: some features, such as loading built-ins, won’t work on the browser).
JS.ORG Logo

nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/railroad-demo.html000066400000000000000000000642141376321042600245470ustar00rootroot00000000000000

Railroad diagrams

This is a demonstration of nearley-railroad, which visualizes nearley grammars as railroad diagrams. The grammar used is below. You can play with it in action over here.



main


_ AS _

P


"(" _ AS _ ")" N

E


P _ "^" _ E P

MD


MD _ "*" _ E MD _ "/" _ E E

AS


AS _ "+" _ MD AS _ "-" _ MD MD

N


float "sin" _ P "cos" _ P "tan" _ P "asin" _ P "acos" _ P "atan" _ P "pi" "e" "sqrt" _ P "ln" _ P

float


int "." int int

int


/[0-9]/

_


/[\s]/ nearley-aa39ac4ff36054b8c6276ce0c098e13dbb4a18a7/www/railroad-demo.png000066400000000000000000000355651376321042600243760ustar00rootroot00000000000000PNG  IHDRLjWiCCPICC ProfileX Yww<:uu#QDD8[{zy ' ȔhcGG;?#5>Rl% 0b)_H bq4b +4qP{ o:H&h `(1FP#a$ (!dHm<Q4bi &$_fpr%"<kWbH3CE0K f -C OPbM/'fs3%1mLq֮{LoʹrP!XsH:BXΥz@ D5'P7Cqgl MS}'&ޙ8 yĈX6E)wqCz\þh@3s{ўnADǙS7>nIB\ow\+ %ꌞs" xx( sMsW  oʟ-R yb3h  hM7D`x1=SO鏞8s gCu8et݋nE7a-t3}loshGʟ!-0`ӨjpH1#)ª*t_7jsu8C 92D-LH(1 ah7,L@ HCT&F 6N`7yETs"hMnp<8̍ĩ`A%~%H$#7)tTCCzAZddcTdf `Lg,f8$d̴)23Y̼ٔ:6,YzYޱY%YYXX+XﰾbCQ2*ٺئqRy9X99989nrLp9%99999G8r psrpq q6~Gǜ'Os^ ,o"i.9>v>=> _._#?_ߙ@I;sFGg؄ BGn s )Yu}.F/-$vTCl^\H^y210ic c㻞a>g~^EK7'&\_Q^ze: M[5TߵX<2;>\%?^dos~s/|cq?ry-i/v9qrbUfevzz49@+*(/`{==\"#bwDyDb$02/^?NWNW_a 730㘧XXϲGqssypGdk"K\)'k /P8U[PѠ9Q+g_A~&kffVa֩6mO0 Jtrߢꣻt忓r 4!+x,d>.L8\'%2**7j{{̋xDפ);R?dNW;)$=M6q>ܚGWJ;$<ȧcL*N$,)j/~{tZLfUg9w:zK >1szZkӝwZnܸZtswm۳;v߱$t6^r7Wwޡv}ľS+f},ȅ'a֏mW_|| EۦDf^]}w[w3Y{9Z|;WoI m?NK%?߬(Ưo_ B1[؋8O# LXFk&FQrpV-6n\7y.^.)-( }EE]Ks*U?xHk@NnލMW/Tg$m5ladb%lllmun>YمqqrQgVmlGqr*H`VLjfhFXfxFDfdfTFt،v%''LIۑcgJz$UY{CY;xp~eAˡY9R(u\ɠC%ZN:X!RYesv[u ̐uk/y بtUʵئ׫櫶[o_lc)ܹ5}]j={U?HwPxy860gX1HÓQS1qglϙ^Л:jxZw`&܃9N_1,,4aF@'b>Ћ ,7Wt^U<&)&gf.l*a*$.{n!{e|I҂e|PQ 115j,vYOVWQԮ|HOUQuI.ܚZdQIRm6=?b`H22*2ț|5aengn1nY U%۶{9z܁ͩ9ܕ޵퐻ǘi/oi[jsk"{SP+A!rTЇaW ##=tWiˎ&'$q&-'OјZggt.ݚbYH=o%{kQ!a#G 9!~RHXDiR3eUg۪-缠^t1.RgDjB\/ki1xKQ֎wwuuw?tO[ߞm=lFJFR}I}}OߌjiU{ 8;27\h@BU8p(hɿ0txPw2^*&DqERCBQGPmY47A?0c,0ipO6a!p5.>5in:f:+B 5}9*7C3B|A2#2r2f4l|EUM2{-(g0"W,w?/Ԅo?W@Y`D0]HZN9tfOI8I%ۤdjdf/**(OՆjh:jIji?i=F_րhQ83?s{ SK+ku[e;e{ͪzN..niU^O,lܦK;Hn H :*J "DڮS'#+r'`g.-YYjsw?T|d "ӝetNU?λ6s4^~u͡ 'owv.]?4(8IW5J7Ef~ w%sxc@`́V0я{aL!XXpu R{mSm`f߷g'3[{G)}'=BR0v"'y' g$”T;Nd2g>qx`8߫`0~ "tҩ/ʾT,Ŝ8/[kVpio+/X[Ⱥuõt^B?yb4,I7mH3.|?/_.~WaH^rʭՑٍ Do+pVFʑX1Dţ.ޡ%сs9&sˉ ^1q|4$;)<H&nf* M(6IIr`NUU\7^ E~T!amIQ.18N-fU*(^TV^QTsRߩqA6nޱM] Fy&M[X`ff׻!Ա͙%µ]#stKV¶(Mg`fא@jOHxZxԦ|lTxubKBJE*_Za:ۮ#E{Dkit=P7 57T.\ỹrjҹzF.ֳ^qy&ՖXogn=>AA#ᅑѭc/*'&^sO;|[فwn~(s^z/_%>cA|w?v/-.d,'/Oد\]Xݳ:fVu~,-Aj DX~|UaV/V3n?L;v>͠miTXtXML:com.adobe.xmp 503 147 LʀM!0IDATx X#URS3-MQрϰ /ex9%jd`z~%JzԲr4(DA&PR/gw 35֚^fopH$j @@@@Rn] Py2[T}@L*/օm  G)p6&/eJmoz ;qYna8h:h}֡8U}Kgt* +Q>(!@; =*o3/JT׹RA{<5~]] G;KptќҹϐO_ZSIfePV\tsW̳}^ R"@36:GabhMReM[O/$E$͑ȵ01S3"4?6T#'$knA,Z'M*֨:  qZ36 ֫FjwCHv6LwJH9{3GuyLyqd_`I5J8ovZ  aT^S'O^|:/+%fv6~Zcf'ffG5g{[V$529-^h``6{(?cQ.C =K|a!6@@U O0%Bx)[5r5CCtU30Zs>=#5^iM꼪5*/e,gYtQ9R<LM83K"=v,HOX[xV\1lf`_y\-zI=dvĭ RznEԏy]&f*"  !+z@|V6_;@ *Oa $.aj׆$m3~ܥP Ӛ&ng~ 3H;MJhK,$fpAL|Ў%ɝMiB|sNyV4tyޞp5$H<|vl3 I<˫̅Wdkyl|wǤm3XqZa8iП\Ik՘&M( 4?e v̢R~Bd&EE搠8u>e\tu4\a{J# w NEaM3,1PB4#--Z'{2KO`KKE8.iE'j^rfuM/܉;MzN]箽zvu{sfm/+3eX  Zlk%餢c1m27~  `eaY*wd{Yk .@@ h~qBݵԒdؠjF! M5ohhpr0)V!"@T   qI(@@3p @%ب0 @|xZʹu*ؑC.]J*|ꩧ=N!  $_nO?|4Vjkk̙3vXMXe<#DxZA;M|;mT $0qįZ:rHlf>w`4Rݡ#;;Z38pI"P;odIYדI/.]HBS^^N57n,YB) ʷ:bG 33&k[nن+Ny۶ms%K1,Mُ5JVC%Ј0%@c:u ڿ ®fO4)%%6l؏?(U7Pyvd$:~x*̙3{v`-˃ qƉT{ w.O?T0>,, o~@$#l$VsWHAAA]]d;w,{B7Wܴ 8ٳd24vkbָ6i S oXdtT e;7T)]aKhY;v6e6TU"l#>cwyGh~[MǷ‡ֽ.X !!V'ۺ͛7۲cy'ILnfX͎צ-li4j8YqOz߫צ&[MKKթ~P1SjnzQ{WOE7bᔝn,\z K&,FǥKdE~ON*~_;'2ECI޵o5x{r]so޾ݸk%c4)rQ1xHSYܰiˆȹ ~)[;Z]Y799cam,孱 ´O)cbbH~=ѳNt7Cu +fEoxy^ +?$cZcr/R8NήNWLB/fUښw<6tgt͊ųc6yKNH^mlo4-cY|"ߠz~`RɎݳ?mlGp/bTooHR | mJZɸ™cKL(gHބy)22Zrik ֎Mi5xsiTH$5>=Ssa9NC %dd]\nCO*7472~)A/V;$$oYeL gfRS'o,ˎ&}fBh|P3g|ͷH̪wxyuIxqGu I "ݲT)"x{cիDŽ)g?%>tyS9Sy., w-\>g?eG ~с؝${K^aF>X'^ו\wzLoP~$8Sc%F,JZRM@v462T}%>{+e)$dIEW-?n$(vu|KIhGЩA&>=NY14&l/;ʗC4k/Kɜ;E X^Sw:[ [d?G['4۝L>qN{ԼQYP8u/1~8Yw9•iM)8aʞp~h@QsuE 'h5]x7?ާ-7`ZDz`.D}7wgM4տS ٝKsgoc1$-0 ~7@KՇ6_j'A<;;wUFBC:HGxaXjU^XS `NdN.䚪vfvnerŢ?~ +Ĵn9#c88NX쉐ƍ(/|E5޺GK {cW{/~!䟵I-T+d4!t^Sޱ\@XA%a+%uSOcR>g%-e5G.;ç3<<`=nWsя6 Μ)* ׳Hc:A6i:qշӏ\ER'V.]ua ߫v,@<>!\\7P%$t/%ޙE0 GcfǎeW 3 5l_qZA1eGfA,e58 # Χl0 X홥}SnIV 45&"xq PbKHwg7_fDžіw"xd]%un^$O>?yiֲW_VA=";5P{8R5TOYvsYXvk>Wq>5*y_DdIe/dr zEK!x*rg2*PZ%yz𙃖Iʪc=F\az}nHlLLϮk5֎g3$22R7fŊW\ ׏tav eZ|B|g-ܒq>5fҹM/t'g' =:_s۷eWZU|*/311J\_4X4ELq_ϼGnAqϩe)wwIrHkάt f 2ik=ٕiA7j glfMO ےmxa1D,A:0c;wejTJ=|%F? kΏ>u?[GdƚCEJkOߠglrhn#Cy3kSƍ)C$w&#`ߑmwX{M7$CmˋnPsސktm5ڴm~L8÷}lWy։ڑl7]ICV]e{sh*okCGd$!`pةH1sȟhO:iR&b&c sJ|>C|ڥt[21CKvJpwxnU`9ۻii@cRla-KaIL|Rp>36CkƦ8ydnn AfΝ;d2?K=.?vɤ5q)ojz۫+c^s5sh%5h ufo DRS`T #hRr} \֧sʷ6amCŠ˥v$hڱ>Ȫʕ+P p/y7Ŧm2+*8( ڄ}O|M*lB ~a՜=SvCgy6oTZ i2Z2l%"Ѥ& A@t=uڕ$e9n̘17o޴~FqAʋP[fl,  .Pyqj  [ A@@\j/@,#b@^-XF*o/qʋP[T2^  "W{  `e@E*/BmA@2Pyx!6T^\ڂeH6IENDB`