[
  {
    "path": ".gitignore",
    "content": "lib-cov\n*.seed\n*.log\n*.csv\n*.dat\n*.out\n*.pid\n*.gz\n\npids\nlogs\nresults\n\nnpm-debug.log\nnode_modules\ncoverage\n\n.DS_Store\n\nlib/\nsrc/pioneer.js\nsrc/environment.js\n"
  },
  {
    "path": ".npmignore",
    "content": "test/\n.pioneer.json\n"
  },
  {
    "path": ".travis.yml",
    "content": "language: node_js\n\nbefore_script:\n  - npm run-script build\n  - sudo apt-get install -y lcov\n\nnode_js:\n  - \"10.15\"\n\nscript:\n  - npm test\n  - npm run-script integration\n\nafter_script:\n  - npm run coverage\n"
  },
  {
    "path": "ACKNOWLEDGEMENTS.md",
    "content": "# Inspiration\n\n* Pioneer was originally inspired by [Dill](http://github.com/mojotech/dill), a Ruby\n  take on  the [PageObject](http://martinfowler.com/bliki/PageObject.html) pattern.\n  Dill  was created by [@david](http://github.com/david), with\n  contributions from  the rest of the [Mojo Tech](http://www.mojotech.com) team!\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "Contributing\n=====\n\n* How things fit together[#thepieces]\n\n* Install [nodejs](http://nodejs.org)\n\n* Building\n  * `$ npm install`.\n  * `$ npm run-script build` to build the coffee-script.\n  * `$ gulp watch` will automatically rebuild the files when source code changes\n\n* Testing\n  * `$ npm run-script integration` to run the integration test suite\n  * `$ npm test` to run the unit tests\n\n* Utility\n  * `$ npm run-script pub` to release a new version.\n  * `$ npm run-script clean` to remove the build coffee-script files.\n\n\n\n## The Pieces\n\nDevelopment on Pioneer is quite simple and only requires a few steps to get up and going (after you know how the pieces fit together).\n\n<img src=\"http://i.imgur.com/vS0Zexq.png\" width=\"424px\"/>\n\nPioneer can be quickly understood using this image as a reference.\nPioneer stresses a decoupling of testing components, to enable a developer to quickly change and iterate on their tests.\nThe highest level component is a `.feature` file. It is in this file that a developer defines (*from the users perspective*) how the webpage should work.\n\n```cucumber\nScenario: Searching for dogs\n  When I view google.com\n  And I search for \"dogs\"\n  Then I should see 100 results\n```\n\nThe feature file is read by [cucumber.js](https://github.com/cucumber/cucumber-js) and then looks for matching step definitions to perform the actual assertion and interaction with the webpage.\n\n```js\n  this.When(/^I view google.com\"$/, function() {\n    return this.driver.get(\"http://google.com\")\n  });\n```\n\nIt is from within the step definitions that widgets are created. Widgets are an abstraction layer between the raw [webElement](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html) and your `click` or interations.\nThis abstraction makes refactoring your application code and test code painless, since instead of having to redefine multiple selectors you only have to change one.\nIf you are familiar with a `backbone.view` a Widget should feel quite similar.\n\n```js\n  var MyWidget = Widget.extend({\n    root: \"div.wow\",\n    getName: function() {\n      return this.read(\".name\");\n    }\n  })\n\n  (new MyWidget()).getName().then(function(name) {\n    expect(name).to.eql(\"Sam Jones\");\n  });\n```\n"
  },
  {
    "path": "LICENSE",
    "content": "The MIT License (MIT)\n\nCopyright (c) 2013 MojoTech\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\nthe Software, and to permit persons to whom the Software is furnished to do so,\nsubject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\nCOPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\nIN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "**This project is no longer actively maintained. If you'd like to help out, get in touch!**\n\n<h1 align=\"center\">Pioneer</h1>\n\n<p align=\"center\">\n<img height=\"200px\" width=\"200px\" src=\"logo.png\"/>\n</p>\n<p align=\"center\">\n  <a title='Build Status' href=\"https://travis-ci.org/mojotech/pioneer\">\n    <img src='http://img.shields.io/travis/mojotech/pioneer.svg?style=flat-square' />\n  </a>\n  <a href='https://gitter.im/mojotech/pioneer'>\n    <img src='http://img.shields.io/badge/gitter-chat-blue.svg?style=flat-square' alt='Chat' />\n  </a>\n  <a href='https://coveralls.io/r/mojotech/pioneer'>\n    <img src='http://img.shields.io/coveralls/mojotech/pioneer.svg?style=flat-square' />\n  </a>\n</p>\n\n<h3 align=\"center\"> Integration tests made easy. </h3>\n\nPioneer provides an abstraction layer between your integration tests and your DOM markup, DRYing up your step definitions and consolidating how people interact with the DOM in tests.\n\n# Installing\n\n    npm install pioneer --save-dev\n\n# Get Started\n\n### [Read the guide](docs/getting_started.md)\n\n### [Watch the video](https://www.youtube.com/watch?v=ZRYcTzgtQRI)\n\n# Docs\n\n* [Global Variables](docs/globals.md)\n* [Widget](docs/widget.md)\n* [Widget.List](docs/list.md)\n* [Widget.Form](docs/form.md)\n* [Step Helpers](docs/step_helpers.md)\n* [Command Line Options](docs/command_line.md)\n* [Configuration File](docs/config_file.md)\n"
  },
  {
    "path": "bin/pioneer",
    "content": "#!/usr/bin/env node\n\nvar path        = require('path');\nvar fs          = require('fs');\nvar minimist    = require('minimist');\nvar lib         = path.join(path.dirname(fs.realpathSync(__filename)), path.join('../', 'lib'));\nvar Pioneer     = require(lib + path.join('/', 'pioneer'));\nvar pkg         = require('../package.json');\n\nvar checkForUpdates = process.argv.indexOf(\"--noUpdates\") === -1\n\nif (checkForUpdates) {\n  var updateNotifier = require('update-notifier');\n  var notifier = updateNotifier({pkg: pkg});\n\n  if (notifier.update) {\n      notifier.notify();\n  }\n}\n\nglobal.ARGV = Array.prototype.slice.call(process.argv);\nvar options = minimist(process.argv.slice(2));\n\nnew Pioneer(lib, options);\n"
  },
  {
    "path": "changelog.md",
    "content": "### v0.11.6 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.5...v0.11.6)\n\n* Fix release issue\n\n### v0.11.5 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.4...v0.11.5)\n\n#### Updates\n\n* Update selenium-webdriver to 2.46.1\n\n### v0.11.4 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.3...v0.11.4)\n\n#### Updates\n\n* Update selenium-webdriver to 2.45.1\n\n#### Fixes\n\n* Add shrinkwrap to lock dependencies.\n\n### v0.11.3 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.2...v0.11.3)\n\n#### Fixes\n\n* Fixed a bug where it was impossible to pass multiple feature arguments via the command line.\n\n### v0.11.2 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.1...v0.11.2)\n\n#### Updates\n\n* Users can now opt out of notifications.\n* Allow for users to override the driver build phase. This allows users to use tools like sauce labs and other hosted selenium services.\n* Minor Doc uodates\n\n### v0.11.1 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.11.1...v0.11.1)\n\n#### Updates\n\n* Update selenium-webdriver version to use the latest and greatest version.\n\n### v0.11.0 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.5...v0.11.0)\n\n#### Features\n\n* `Driver` is now exposed on the world.\n\n* `getItemClass` is now available to lookup a `itemClass` at instantiation time of a List.\n\n*  Finding by text now respects the internal global.timeout instead of failing right away.\n\n* Test runs now have a clean output options (omitting message about the configPath)\n\n* Enable the ability to toggle the visibility of the extra test run output, such as duration.\n\n#### Fixes\n\n* Update chai version to fix peer dependency issue\n* Update todo mvc test link\n* Doc consistency fixes\n\n### v0.10.5 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.4...v0.10.5)\n\n#### Fixes\n\n* Pioneer bin file is now hardened for windows environments.\n\n### v0.10.4 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.3...v0.10.4)\n\n#### Features\n\nAllow pioneer to be run with command line args alone.\n\n`pioneer features --require=steps --require=widgets` now will work.\n\n### v0.10.3 [view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.2...v0.10.3)\n\n#### Features\n\n* You are now able to mark steps as `pending` using the `this.Pending()` syntax.\n\n#### Windows Support\n\n* Pioneer, now works under windows.\n\n### v0.10.2[view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.1...v0.10.2)\n\n#### Widget.list\n\n* The list widget now has a has a `length` method to enable simple assertions about the number of child items.\n\n#### Cleanups\n\n* Fix broken links and typos across repo.\n\n### v0.10.1[view commit logs](https://github.com/mojotech/pioneer/compare/v0.10.0...v0.10.1)\n\n#### Fixes\n\n* Fix broken `findAll` list el instantiation.\n\n### v0.10.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.9.0...v0.10.0)\n\n#### Breaking Changes\n\n* `findAll` allows you to find a list of matching elements on a page. It returns a promise that resolves with a new [Widget List](docs/list.md) with the same root as the widget that invoked `findAll`. The `itemSelector` of the new `Widget.List` will be the selector argument passed.\n\n* `submitSelector` no longer takes a node input. If you would like to use a submit selector other than `[type=\"submit\"]` then you can override the `submitSelector` method\n\n#### Widget.Form\n\n* `readAll` now calls `getValue` on each field as opposed to `read`\n\n### v0.9.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.8.2...v0.9.0)\n\n#### Breaking Changes\n\n* Widget `fill` method now clears the element before sending the value\n* Pioneer no longer looks for a `.pioneer.json` file to read configuration options from. Instead it will look for a `pioneer.json` file.\n\n#### Widget\n\n###### Helpers\n\n* `hasClass` will test the existence of the provided class name on the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve with `true` or `false`.\n\n* `sendKeys` now supports hash style arguments, including an optional selector.\n\n* `clear` calls the webdriver [clear](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html) method. It takes a hash that supports an optional selector to scope the `clear` operation. If only a string is passed to clear, and not an object then it will use it as a selector for the `find` operation. It returns a promise that resolves with a widget.\n\n```js\nnew this.Widget({\n  root: “.some-div”\n}).sendKeys({\n  selector: “input”,\n  keys: [\n    \"wow\",\n    Driver.Key.SPACE,\n    \"pioneer\",\n    Driver.Key.ENTER\n  ]\n})\n```\n\n###### Static Methods\n\n* Static methods can be used for situations where you do not want to declare a new Widget to do something.\n* Static methods introduced for the following widget helpers:\n  - click\n  - fill\n  - hover\n  - doubleClick\n  - read\n  - isPresent\n  - isVisible\n  - getAttribute\n  - getValue\n  - getText\n  - getInnerHTML\n  - getOuterHTML\n  - hasClass\n  - sendKeys\n  - clear\n\n\n#### Command Line Flags\n\n* Version: `--version` or `-v` may now be passed to display the current version of Pioneer\n\n#### Driver\n\n* `driver.visit` aliased to `driver.get`\n\n#### Format\n\n* pioneer format no longer displays the filename and line number of each scenario and step. Instead it will display the feature file at the beginning of each feature\n\n### v0.8.2[view commit logs](https://github.com/mojotech/pioneer/compare/v0.8.1...v0.8.2)\n\n#### Fixes\n\n* Fix incorrect exit code on failure\n\n### v0.8.1[view commit logs](https://github.com/mojotech/pioneer/compare/v0.8.0...v0.8.1)\n\n#### Fixes\n\n* Fix bug where `isPresent` would fail when the widget was constructed via an `el` based constructor.\n\n* Fix broken multi-tag formatter.\n\n#### New\n\n* Added a global `timeout` to adjust how long a step will wait before failing.\n\n* Added a new gloabl `ARGV` to give you access to the raw `process.argv` passed into the process.\n\n### v0.8.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.7.2...v0.8.0)\n\n#### Breaking Changes\n* Removed global variables (`$`, `Driver`, ` _`,  `argv`)\n\n* `read` no longer supports multiple arguments. Changed to hash-style arguments\n* `findByText` removed. To find by text use the optional “text” key on the `find` method\n* `fill` no longer supports multiple arguments. Changed to hash-style arguments\n* `getValue` no longer supports multiple arguments. Changed to hash-style arguments\n\n* `clickAt` no longer supports multiple arguments. Changed to hash-style arguments\n* `readAt` no longer supports multiple arguments. Changed to hash-style arguments\n\n###### Widget\n\n* New shorthand declaration via `this.W` from `this.Widget`\n* Methods now support hash-style arguments for instance…..\n\n```js\nreturn new this.Widget({\n  root: “div”\n})\n.fill({\n  selector: “input”,\n  value: [“Pioneer” Driver.Key.SPACE, “is”, Driver.Key.SPACE, “awesome!”]\n});\n```\n\n#### Helpers\n\n* `addClass`, `removeClass`, `toggleClass` now accepts an optional selector to allow scoping within the widget\n* `getAttribute` - now accepts an optional selector to allow scoping within the widget\n* `isVisible` - will first check to see if an element is present and return false if it is not.\n* `hover` - the `Hover` method on a widget takes the same params as find to locate the DOM node to be hovered. It returns a promise that is resolved with the widget after the mouse has been moved over the target element. If you do not pass anything to hover it will hover over the widgets root node.\n* `doubleClick` - the `doubleClick` method on a widget takes the same params as [find](#find) to locate the DOM node to be doubleClicked. It returns a promise that is resolved with the widget after the mouse has been doubleClicked on the target element. If you do not pass anything to doubleClick it will double click the root node of the widget.\n\n#### Widget.Fields\nFields Is now removed as being a base class. Its methods have been moved within `Widget.Form`\n\n#### Widget.List\n\n*  `select` can be used to select an option from a dropdown menu. It takes a hash with an optional `<selector>` in which you can specifiy either `<text>` or `<value>` to select by. Specifiying both text and a value will result in an error. It returns a promise that will resolve with null.\n\n<needs a code example>\n```html\n<div class=\"form2\">\n  <select>\n    <option value=\"one\">Option Number 1</option>\n    <option value=\"two\">Option Number 2</option>\n    <option value=\"three\">Option Number 3</option>\n  </select>\n</div>\n```\n\n```js\nreturn new this.Widget.Form({\n  root: \"form2\"\n})\n.select({\n  selector: \"select\",\n  value: \"three\"\n})\n\n//Resulting in the selection of the option with a value of \"three\".\n```\n\n* `invoke` - arguments to pass to the invoking method can now be passed using an object\n\n\n#### Scaffolding\n\nPioneer can generate a scaffold for you to build your suite on via the newly added`--scaffold` command line flag.\n\nScaffold generates a tests/ directory, with features/, steps/ and widgets/. It creates simple.feature and simple.js files that include your first Pioneer test! It also creates a .pioneer.json file in your current working directory.\n\nThe option to generate a scaffold is also presented if Pioneer is called without specifying a feature file.\n\n#### Configuration\n\n* Pioneer no longer has a default configuration. A similar goal can be accomplished via a `.pioneer.json` within the directory that you run your tests from.\n\n### v0.7.2[view commit logs](https://github.com/mojotech/pioneer/compare/v0.7.1...v0.7.2)\n\n#### Fixes\n\n* Move bluebird dep out of dev dependencies.\n\n### v0.7.1[view commit logs](https://github.com/mojotech/pioneer/compare/v0.7.0...v0.7.1)\n\n#### Fixes\n\n* Fix issue with output formatter path lookup.\n\n### v0.7.0[view commit logs](https://github.com/mojotech/pioneer/compare/v0.6.3...v0.7.0)\n\n#### Widget\n\n##### Accessors\n\n* getValue - The `getValue` method lets you get the current value of a given input node. It returns a promise that resolves with the value of the node.\n\n* read - No longer to be used with input fields (was extracted to `getValue`)\n\n* getInnerHTML - Returns a promise that resolves with the innerHTML of the selector element.\n\n* getOuterHTML - Returns a promise that resolves with  the outerHTML of the selector element.\n\n##### Helpers\n\n* addClass\n* removeClass\n* toggleClass\n\n#### Widget.List\n\n##### Helpers\n\n* clickAt - `clickAt` is a combination of the at method that allows clicking on a certain index of list. The optional `<selector>` parameter allows for scoping within index. It returns a promise that is resolved when the index has been clicked.\n\n* readAt - `readAt` is a combination of the at method and the read method and allows for scoping within an el at the given index. The optional `<selector>` parameter allows for scoping within index. There is also an optional transformer argument that mirrors the default read implementation. Read at\nreturns a promise that resolves with the value of read\n\n* each - Returns a promise that resolves with the list items after each item in the list has been iterated over. The iterator method receives two arguments, the widget instance and the index of the item being iterated over.\n\n* invoke - Returns a promise that resolves when the specified method has been invoked on all children.\n\n#### Docs\n\n* Added missing documentation for forms and fields\n\n#### Configuration\n\nConfiguring pioneer options can now be done using a JSON file. If no configuration path is passed in using `--configPath=`, then pioneer uses the [default configuration settings](https://github.com/mojotech/pioneer/blob/master/docs/config_file.md#default-configuration).\n\nPioneer will also look for a .pioneer.json file in the directory that you invoke the command from.\n\nThe `--prevent-browser-reload` flag is no longer valid, it has been changed to `--preventReload=true`. From configuration it can be specified as { “preventReload”: true }\n\n#### Cleanup\n\n* Remove Pioneer.Iframe from core - https://github.com/mojotech/pioneer.iframe\n* Remove Pioneer.View from core - https://github.com/mojotech/pioneer.marionette\n* Integration features/steps separated out to several files\n\n#### Formatting\n\nPioneer now has its own format type that is uses by default. This formatter changed the way in which the test summary is displayed. Failing steps will now be accompanied by the feature file and line number that they correspond with.\n\n\n### v0.6.3[view commit logs](https://github.com/mojotech/pioneer/compare/v0.6.2...v0.6.3)\n\n  * Fixes\n\n    * Fix broken bin path\n\n### v0.6.2[view commit logs](https://github.com/mojotech/dill.js/compare/v0.6.1...v0.6.2)\n\n  * Features\n    * Add proxy `getInnerHTML` on the widget class.\n    * Add proxy `getOuterHTML` on the widget class.\n\n  * Fixes\n      * Fix broken `at` selector for lists.\n\n\n### v0.6.1[view commit logs](https://github.com/mojotech/dill.js/compare/v0.6.0...v0.6.1)\n\n  * Fixes\n      * fix xpath `findByText` relative selector bug.\n\n### v0.6.0[view commit logs](https://github.com/mojotech/dill.js/compare/v0.5.0...v0.6.0)\n\n  * Features\n    * Forms now default to `form` for their root selector.\n    * `getText` is now available on Widgets.\n    * `sendKeys` is now available on Widgets.\n    * The `fill` method now takes one or two arguments. When only passed a single argument will default to filling the widgets root node with the passed argument.\n\n  * Refactors\n    * Invoke cucumber programatically vs via an exec.\n    * General Doc improvements\n\n### v0.5.0[view commit logs](https://github.com/mojotech/dill.js/compare/v0.4.1...v0.5.0)\n\n  * Features\n    * `isVisible` is now available on a widget.\n    * `findByText` is now available on a widget to enable you to lookup children of a widget based on arbitrary text content.\n    * `getAttribute` is now available on a widget, for reading a single attribute of a node.\n    * `findWhere` is now available on a `Dill.List` widget for finding a single `webElement` based on a filter method.\n    * `Iframe` Widget was added for interacting with iframes and switching focus in and out of them.\n    * You can now disable the reloading of the browser instance between tests via the `--prevent-browser-reload` CLI flag.\n    * Error stacktraces are now limited to 5 lines.\n    * A `freeze` utility method and step definition were added for aiding debugging. The freeze method prevents the steps from continuing until the user presses a key in the terminal.\n\n  * Fixes\n    * Widget.list children lookup no longer uses the broken `nth` child based selector.\n\n### v0.4.1[view commit logs](https://github.com/mojotech/dill.js/compare/v0.4.0...v0.4.1)\n\n  * Features\n    * `isPresent` takes an optional CSS selector to further scope the lookup.\n    * `Read` takes an additional transformer method to mutate the read result.\n\n  * Selenium WebDriver\n    * Bump version to fix two bugs introduced in ChromeDriver\n      * FIXED: 7300: Connect to ChromeDriver using the loopback address since\n      * FIXED: 7465: Fixed `net.getLoopbackAddress` on Windows\n\n### v0.4.0 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.3.0...v0.4.0)\n\n  * Widget\n    * Add `getHtml` method.\n    * Add a `find` based constructor to widgets that return a promise and resolves as a new widget with a pre found `webElement` instance under the `el` property. Thus preventing you from having to do a `find` to interact with the widgets DOM.\n\n  * Widget.List\n    * Add `map` method to list to interact with each item.\n    * Add `filter` method to reduce items by a filter method.\n    * Add `at` method to get an item at a given index.\n\n  * Widget.View\n    * Add a new widget type that integrates in with `Marionette` Views.\n\n  * Tests\n    * Add integration test coverage for dill.js.\n\n  * General\n    * Split widget files into seperate files.\n\n### v0.3.0 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.2.0...v0.3.0)\n\n* Fixes\n  * Remove the automatic inclusion of the features directory. This was forcing projects to always have a feature directory relative to where the tests were run from.\n\n### v0.2.0 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.1.1...v0.2.0)\n\n* Fixes\n  * Extend syntax now correctly sets instance properties. This is a breaking change if you were unknowingly depending on the broken functionality.\n\n* Features\n  * Tests now display total runtime after running.\n\n### v0.1.1 [view commit logs](https://github.com/mojotech/dill.js/compare/v0.1.0...v0.1.1)\n\n* Features\n  * You can now specify which driver dill.js uses when running tests via the --driver command line flag.\n"
  },
  {
    "path": "coverage.sh",
    "content": "#!/bin/bash\n./mergelcov.sh ./coverage | ./node_modules/.bin/coveralls\n"
  },
  {
    "path": "docs/command_line.md",
    "content": "Command Line Options\n====================\n\n## Table of Contents\n* [Driver Configuration](#driver-configuration)\n* [Error Formatting](#error-formatting)\n* [Tags](#tags)\n* [Prevent Browser Reload](#prevent-browser-reload)\n* [CoffeeScript Step Scaffold](#coffeescript-step-scaffold)\n* [Configuration File Path](#configuration-file-path)\n* [Scaffold Creation](#scaffold-creation)\n* [Version](#version)\n\n## Driver Configuration\nYou can customize which driver your tests use via the `--driver` command line flag. The default driver is chrome.\nFor example:\n* --driver=phantomjs\n* --driver=firefox\n\n## Error Formatting\nYou can customize the format in which your errors are formatted via the `--error_formatter` command line flag. The default format is five lines of the stack trace with a blue first line. To customize the formatter see below\n\nmy_formatter.js should export a method like the following\n\n```js\nmodule.exports = function(err) {\n  console.log(\"my custom error formatter\", err.stack);\n}\n```\n\n## Tags\nTo only run selected features include `--tags=@myTag` and insert @myTag directly before the intended feature(s).\n\n## Prevent Browser Reload\nTo speed up testing, an optional `--preventReload` flag can be passed to prevent the web driver from restarting after each feature:\n  ```bash\n  ./node_modules/.bin/pioneer --preventReload=true\n  ```\n\n## CoffeeScript Step Scaffold\nTo have cucumber generate the step scaffold automatically in CoffeeScript, use the optional `--coffee` line flag.\n```bash\n./node_modules/.bin/pioneer --coffee\n```\n\n## Configuration File Path\nPioneer configuration options can be declared in the form of a JSON file. To declare the path to this file use the optional `--configPath=` flag. Addtional information on the format of this file can be found [here](config_file.md)\n```bash\n./node_modules/.bin/pioneer --configPath=myConfig.json\n```\n\n## Scaffold Creation\nPioneer can generate a scaffold for your first tests automatically using the optional `--scaffold` command line flag. This generates a tests/ directory, with features/, steps/ and widgets/. It creates simple.feature and simple.js files that include your first Pioneer test! It also creates a `pioneer.json` file in your current working directory. This config file automatically includes the created feature files, and the following information:\n```json\n{\n  \"feature\": \"tests/features\",\n  \"require\": [\n    \"tests/steps\",\n    \"tests/widgets\"\n  ],\n  \"format\": \"pioneerformat.js\",\n  \"driver\": \"chrome\",\n  \"error_formatter\": \"errorformat.js\",\n  \"preventReload\": false,\n  \"coffee\": false\n}\n```\n\n## Verbosity\nYou can show some extra information about the test run by setting the `--verbose` flag. This can be used to override the value in the config file. You will need to use `--verbose=false` to turn off verbosity that has been set in the config file.\n\n## Version\n\nYou can display the current version of Pioneer that you are using by passing the optional `--version` or `-v` command line flag.\n"
  },
  {
    "path": "docs/config_file.md",
    "content": "Configuration File\n==================\n\n## Table of Contents\n* [Default Configuration](#default-configuration)\n* [Driver Configuration](#driver-configuration)\n* [Error Formatting](#error-formatting)\n* [Tags](#tags)\n* [Prevent Browser Reload](#prevent-browser-reload)\n* [CoffeeScript Step Scaffold](#coffeescript-step-scaffold)\n* [Update Notifications](#update-notifications)\n\n## Default Configuration\nIf no configuration path is passed in using [--configPath=](command_line.md#configuration-file-path), then pioneer will check to see if the file `pioneer.json` exists in the current working directory.\n\n## Driver Configuration\n\n```json\n{\n  \"driver\": \"firefox\"\n}\n```\n\nhttp://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_Capabilities.html\n\n## Error Formatting\n\n```json\n{\n  \"error_formatter\": \"myDirectory/my_error_formatter.js\"\n}\n```\n\n## Tags\nTo specify multiple tags, use an array.\n\n```json\n{\n  \"tags\": \"@myTag\"\n}\n```\n```json\n{\n  \"tags\": [\"@myTag\", \"@thatTag\", \"@goodTag\"]\n}\n```\n\n## Prevent Browser Reload\n\nIf `preventReload` is not declared, then it will default to false.\n\n```json\n{\n  \"preventReload\": true\n}\n```\n\n## CoffeeScript Step Scaffold\n\nIf `coffee` is not declared, then it will default to false.\n\n```json\n{\n  \"coffee\": true\n}\n```\n\n## Verbosity\n\nIf `verbose` is set to true, it will show some extra information about the test run. If it is not declared, then it will default to false.\n\nNote: this value can be overridden by the `--verbose` flag on the command line.\n\n## Update Notifications\n\nBy default Pioneer will check to see if there are updates available. If they are, it will print a message to stdout. To disable this behavior you can pass the `--noUpdates` option when invoking the Pioneer binary.\n"
  },
  {
    "path": "docs/form.md",
    "content": "Widget.Form\n=================\n\n## Table of contents\n  * [Api](#api)\n    * [submitSelector](#submitselector)\n    * [submitForm](#submitform)\n    * [submitWith](#submitwith)\n    * [select](#select)\n    * [fillAll](#fillall)\n    * [readAll](#readall)\n\n## submitSelector\n\n`submitSelector` finds and returns an element of type `submit`. It can be overridden to find select another element for the target of [submitForm](#submitform)\n\n```js\nvar F = this.Widget.Form.extend({\n  root: \"#my-form\",\n  submitSelector: function(){\n    return this.find(\"button.mySubmit\")\n  }\n})\n```\n\n## submitForm\n\n`submitForm` will find the submit selector and then call [click](widget.md#click)\n\n## submitWith\n\n`submitWith` will call [fillAll](#fillall) on each of keys value pairs passed into method, and then call the `click` method on the return of the `submitSelector` method.\n\n```js\nvar F = this.Widget.Form.extend({\n  root: \"#waiver\",\n})\n\nvar waiver = new F;\nwaiver.submitWith({name: \"Joe Doe\", address: \"55 Main St\", reason: \"N/A\"});\n```\n\n## select\n\n`function select({text: <text>, value: <value>})`\n\n`select` takes a hash in which you can specifiy either `<text>` or `<value>` to select by. Specifiying both text and a value will result in an error. Alternately, you can also just pass a single string value and it will be the same as passing in the `<text>` hash option.  `select` returns a promise that will resolve with null.\n\n```html\n<div class=\"form2\">\n  <select>\n    <option value=\"one\">Option Number 1</option>\n    <option value=\"two\">Option Number 2</option>\n    <option value=\"three\">Option Number 3</option>\n  </select>\n</div>\n```\n```js\nreturn new this.Widget.Form({\n  root: \"form2\"\n})\n.select({\n  selector: \"select\",\n  value: \"three\"\n})\n//Resulting in the selection of the option with a value of \"three\".\n\n// Two-forms of selecting by text\nreturn new this.Widget.Form({\n  root: \"form2\"\n})\n.select(\"Option Number 3\")\n// The above is the shortform of the following\nreturn new this.Widget.Form({\n  root: \"form2\"\n})\n.select({text: \"Option Number 3\"})\n\n```\n\n## fillAll\n\n`fillAll` will call the [fill](widget.md#fill) method on each of the the keys value pairs passed into the method.\n\n```js\nWidget.find({\n  root: 'form'\n}).then(function(widget) {\n  widget.fillAll({\n    field1: \"myEmail@example.com\"\n  })\n});\n```\n\n## readAll\n\n`readAll` will map all fields and then [getValue](widget.md#getvalue) its value. It returns an object with each field name as a key and the value of that field.\n\n```html\n<form>\nField 1: <input type=\"text\" name=\"field1\" value=\"firstValue\"><br>\nField 2: <input type=\"text\" name=\"field2\" value=\"secondValue\"><br>\nField 3: <input type=\"text\" name=\"field3\" value=\"thirdValue\"><br>\n</form>\n```\n```js\nWidget.find({\n  root: 'form'\n}).then(function(widget) {\n  widget.readAll()\n})\n// Result: {field1: \"firstValue\", field2: \"secondValue\", field3: \"thirdValue\"}\n```\n"
  },
  {
    "path": "docs/getting_started.md",
    "content": "# Getting Started\n\n- Require Pioneer as a dependency (and install)\n\n```bash\n$ npm install pioneer --save\n```\n\n- Setup your testing directory\n\n```bash\n$ ./node_modules/.bin/pioneer --scaffold\n```\n\n- Run your first Pioneer test!\n\n```bash\n$ ./node_modules/.bin/pioneer\n```\n\n- Expanding on your tests\n\n\n  Now that you've run your first test, you are ready to add another one.\n  To add another feature to your test, add the following to the end of the `test/features/simple.feature`\n\n```gherkin\nScenario: Completing a Todo\n  When I enter \"Learn Pioneer\"\n  And complete the first todo\n  Then I should see that the first todo is completed\n```\n\n  This will create another test that enters a new todo, clicks complete and then tests to ensure that the first todo is completed.\n\n  If you ran\n\n```bash\n$ ./node_modules/.bin/pioneer\n```\n\n  right now, you would notice that you did not define step definitions for the second and third step of the \"Completing a Todo\" scenario.\n\n  Pioneer will catch these undefined steps, and automatically generate a suggestion for that step.\n\n  In this case, pioneer would generate something that looks like this:\n\n  You can implement step definitions for undefined steps with these snippets:\n\n```js\nthis.When(/^complete the first todo$/, function() {\n  // express the regexp above with the code you wish you had\n});\n\nthis.Then(/^I should see that the first todo is completed$/, function() {\n  // express the regexp above with the code you wish you had\n});\n```\n\n  Instead of adding that suggestion, you should append `tests/steps/simple.js` with the following\n\n```js\nthis.When(/^complete the first todo$/, function(){\n  return new this.Widget.List({\n    root: \"#todo-list\"\n  })\n  .clickAt({\n    index: 0,\n    selector: \"input\"\n  })\n});\n\nthis.Then(/^I should see that the first todo is completed$/, function() {\n  return new this.Widget.List({\n    root: \"#todo-list\"\n  })\n  .at(0).then(function(el){\n    return el.hasClass(\"completed\").should.eventually.be.true;\n  });\n});\n```\n\n  To explain what these steps are doing:\n   - First we create a new widget around the element `#todo-list` and click on the input in the first `<li>`. This is how one completes a todo.\n   - To ensure that the todo was completed, we then check the class on the first `<li>` element of `#todo-list` to make sure that the class \"completed\" was added.\n\n- Making your tests more efficient\n\n\n  And there you have it, you wrote your first test using Pioneer! Easy right? But believe it or not, creating your step definitions is even easier if you take advantage of abstracting your own custom Widgets.\n\n  Now create the file `tests/widgets/my_widget.js` and append the following:\n\n```js\nmodule.exports = function(){\n  this.Widgets = this.Widgets || {};\n\n  this.Widgets.TodoList = this.Widget.List.extend({\n    root: \"#todo-list\",\n\n    complete: function (index) {\n      return this.clickAt({\n        selector: \"input\",\n        index: index\n      })\n    },\n\n\n    isCompleted: function(index) {\n      return this.at(index).then(function(el){\n        return el.hasClass(\"completed\");\n      });\n    }\n  })\n}\n```\n\n  You have now extracted the complicated logic of checking list items out into a seperate file which can easily be reused. Now your step definitions can look list this\n\n```js\nthis.When(/^complete the first todo$/, function(){\n  return new this.Widgets.TodoList().complete(0)\n});\n\nthis.Then(/^I should see that the first todo is completed$/, function() {\n  return new this.Widgets.TodoList()\n  .isCompleted(0).should.eventually.eql(true)\n});\n```\n"
  },
  {
    "path": "docs/globals.md",
    "content": "Globals\n=======\n\n## Table of Contents\n* [ARGV](#argv)\n* [timeout](#timeout)\n* [Configuring the Driver](#driver-configuration)\n\n## ARGV\n\n`global.ARGV` is available for those wanting to be able to provide custom command line arguments. `ARGV` contains all command line arguments.\n\n## timeout\n\n`global.timeout` is available for those wanting to adjust the amount of time the driver waits to ensure an element.\n\n\n## Driver Configuration\n\nIf you would like to customize how your selenium driver is built, Pioneer provides a userful method `ConfigureDriver` that you can override to have full control.\n\n```js\nmodule.exports = function() {\n  this.ConfigureDriver = function(SeleniumDriver, argv) {\n    return new SeleniumDriver.Builder().withCapabilities(SeleniumDriver.Capabilities['chrome']()).build()\n  }\n}\n```\n\nThis method can be useful for setting up things like sauce labs. For a detailed walk through on setting up selenium for sauce labs refer to this [article](http://samsaccone.com/posts/testing-with-travis-and-sauce-labs.html).\n"
  },
  {
    "path": "docs/list.md",
    "content": "Widget.List\n===========\n\n`Widget.List` is a utility to make operating on a collection of similar items intuitive. `Widget.List` allows you to specify collection specific methods, as well as the base `Widget` class to use for each `Widget` in the list.\n\nTake for instance the following markup:\n\n```html\n<ul>\n  <li> one </li>\n  <li> sunny </li>\n  <li> day </li>\n</ul>\n```\n\nThis list of words can abstracted and interacted with via a `List` with ease. Here is a simple example of asserting the length of the list.\n\n```js\n  ListItems = Widget.List.extend({\n    root: \"ul\",\n    itemSelector: \"li\"\n  })\n\n  list = new ListItems;\n\n  list.items().should.eventually.have.length(3);\n```\n\n## Table of contents\n  * [Api](#api)\n    * [itemSelector](#itemselector)\n    * [itemClass](#itemclass)\n    * [getItemClass](#getItemClass)\n    * [items](#items)\n    * [length](#length)\n    * [filter](#filter)\n    * [map](#map)\n    * [each](#each)\n    * [invoke](#invoke)\n    * [at](#at)\n    * [clickAt](#clickat)\n    * [readAt](#readat)\n\n# API\n\n## itemSelector\n\nThe `CSS` selector that is used when finding a single `Widget` contained within the list. It defaults to `li` but can be overridden to any valid `CSS` selector.\n\n## itemClass\n\nThe `Widget` to be instantiated and used when interacting with each item in the list. `itemClass` defaults to a generic `World.Widget` class.\n\n## getItemClass\n\nThe value returned by this method is the ItemClass that will be instantiated and used when interacting with each item in the list. This method gives you the ability to return a Customized ItemClass for each el. By default `itemClass` is returned.\n\n```js\nvar MyListWidget = Widget.List.extend({\n  getItemClass: function () {\n    return this.Driver.promise.fulfilled(this.itemClass);\n  }\n});\n```\n\n## items\n\n`function items()...`\n\nReturns a `Promise` that resolves to a list of `Widgets` present in the `DOM` at call time.\n\n## length\n\n`function length()...`\n\nReturns a `Promise` that resolves to the length of the list.\n\n```js\nnew ListItems().length().should.eventually.eql(5)\n```\n\n## filter\n\n`function filter(<predicateMethod>(itemInstance))...`\n\nReturns a `Promise` that resolves to a reduced list of `items` according to the filter method.\n\nThe `predicateMethod` can either return a flat value or a `Promise` that resolves to a truthy or falsy value.\n\nHere is an example of filtering the list of items down to those ending in \"y\".\n\n```js\nnew ListItems().filter(function(item) {\n  return item.find().then(function(elm) {\n    return elm.getText().then(function(text) {\n      return text.match(/y$/)\n    });\n  }\n  })\n});\n```\n\n## map\n\n```js\nfunction map(function iterator(widgetInstance, index) {\n  //...\n})\n```\n\nReturns a `Promise` that resolves to a list of items transformed according to the iterator method.\n\nThe `iterator` can return a flat value or a `Promise`.\n\nHere is an example of mapping a list of items down to their text content.\n\n```js\nnew ListItems().map(function(item, index) {\n  // First we must find the `item`\n  // and then call `getText` on the raw\n  // `webElement` to get their contents.\n  return item.find()\n  .then(function(elm) {\n    return elm.getText();\n  })\n})\n.then(function(text) {\n  return text.should.eql([\"one\", \"sunny\", \"day\"]);\n})\n```\n\n## each\n\n```js\nfunction each(function iterator(widgetInstance, index) {\n//...\n}\n```\n\nReturns a promise that resolves with the list items after each item in the list has been iterated over. The iterator method receives two arguments, the widget instance and the index of the item being iterated over.\n\n```js\nnew ListItems().each(function(item, index) {\n  return item.click('.close');\n});\n```\n\n## invoke\n\n`function invoke({method: (methodName or method), arguments:<[arguments]>})...`\n\nReturns a promise that resolves when the specified method has been invoked on all children.\nIf you only pass a string (or method) to `invoke`, and not an object, then it will use the string (or method) as the method to apply on each child.\n\n```js\nnew ListItems().invoke('click').then(function() {\n//....\n});\n```\n\n```js\nnew ListItems().invoke(this.Widget.prototype.click).then(function() {\n//....\n});\n```\n\n```js\nnew ListItems().invoke({\n  method: \"click\",\n  arguments: [{\n    selector: \"p\"\n  }]\n}).then(function(){\n  //...\n})\n```\n\n## at\n\n`function at(0-based-index)...`\n\nReturns a promise that resolves with a child `Widget` instance at a given index.\n\n```js\nnew ListItems().at(2).then(function(item) {});\n```\n\n## findWhere\n\n`function findWhere(<predicateMethod>(itemInstance))...`\n\nReturns a `Promise` that resolves to a raw `WebElement` which represents the first element in the collection's items array which passes the filter method.\n\nThe `predicateMethod` can either return a flat value or a `Promise` that resolves to a truthy or falsy value.\n\nHere is an example of finding the first item in a list of items that ends in \"y\".\n\n```js\nnew ListItems().findWhere(function(item) {\n  return item.find().then(function(elm) {\n    return elm.getText().then(function(text) {\n      return text.match(/y$/);\n    });\n  })\n});\n```\n## clickAt\n\n`function clickAt({index: index, selector:<selector>})`\n\n`clickAt` is a combination of the [at](#at) method and the [click](widget.md#click) method that allows clicking on a certain index of list.\n`clickAt` takes a hash, with an optional `<selector>` parameter which allows for scoping within index. If only a number is passed and not an options hash it will default to using that as the at index lookup\nIt returns a promise that is resolved when the child at the index has been clicked.\n\n```html\n<ul>\n<li>zero</li>\n<li>one</li>\n<li>two</li>\n<li>three</li>\n</ul>\n```\n```js\nnew this.Widget.List()\n.clickAt(3)         //results in <li>three</li> being clicked\n```\n\n## readAt\n\n`function readAt({index: index, selector: <selector>, transformer: <transformer>)`\n\n`readAt` is a combination of the [at](#at) method and the [read](widget.md#read) method and allows for scoping within an el at the given index. The optional `<selector>` parameter allows for scoping within index. There is also an optional transformer argument that mirrors the default [read transformer](widget.md#read) implementation. Read at returns a promise that resolves with the value of read.\nIf only a number is passed and not an options hash it will default to using that as the at index lookup\n\n\n```js\nnew this.Widget.List().readAt(1, 'p', function(val){\n  return $.trim(val);\n})\n```\n"
  },
  {
    "path": "docs/step_helpers.md",
    "content": "Step Helpers\n===========\n\n## Table of contents\n* [Freeze](#freeze)\n* [Pending](#pending)\n\n###Freeze\n\nCauses process to wait for any key press from the user before proceeding. `@Freeze()` returns a promise that is resolved once the user presses a key.\n\nCan be used from within a step definition with\n```coffeescript\n@Freeze().then -> ..........\n```\nOr it can be used via a feature file with\n```gherkin\nWhen I Freeze\n```\n\n###Pending\n\nAllows you to mark a step as `pending` and not currently implemented. Simply call `@Pending()` from within a step.\n\n```js\nthis.When(/^I execute a pending step$/, function() {\n  this.Pending();\n});\n```"
  },
  {
    "path": "docs/widget.md",
    "content": "Widget\n===========\n\n`Widget` is the base class upon which your custom widgets should extend from. The `Widget` class provides you with several helpful utility methods that interact with your DOM in an asynchronous promised based manner.\n\nA simple example of an extension would look like this.\n\n```js\nMarketFilters = Widget.extend({\n  root: '.market-place-filters',\n  setSearchText: function(val) {\n    return this.fill(\".market-text-search\", val);\n  }\n});\n```\n\nAll `Widgets` extend from seleniums [WebElement](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html)\n\n## Table of contents\n\n* [Api](#api)\n  * [Constructing](#constructing)\n    * [Finding](#finding)\n    * [Extending](#extending)\n    * [Overriding](#overriding)\n    * [Shorthand](#shorthand)\n  * [Root](#root)\n  * [Static Methods](#static-methods)\n    * [click](#static-click)\n    * [fill](#static-fill)\n    * [hover](#static-hover)\n    * [doubleClick](#static-doubleclick)\n    * [read](#static-read)\n    * [isPresent](#static-ispresent)\n    * [isVisible](#static-isvisible)\n    * [getAttribute](#static-getattribute)\n    * [getValue](#static-getvalue)\n    * [getText](#static-gettext)\n    * [getInnerHTML](#static-getinnerhtml)\n    * [getOuterHTML](#static-getouterhtml)\n    * [hasClass](#static-hasclass)\n    * [sendKeys](#static-sendkeys)\n    * [clear](#clear)\n  * [Interacting with the DOM](#interacting-with-the-dom)\n    * [click](#click)\n    * [fill](#fill)\n    * [hover](#hover)\n    * [doubleClick](#doubleclick)\n    * [sendKeys](#sendkeys)\n    * [addClass](#addclass)\n    * [removeClass](#removeclass)\n    * [toggleClass](#toggleclass)\n    * [clear](#clear)\n  * [Querying the DOM](#querying-the-dom)\n    * [read](#read)\n    * [find](#find)\n    * [findAll](#findall)\n    * [isPresent](#ispresent)\n    * [isVisible](#isvisible)\n    * [getAttribute](#getattribute)\n    * [getValue](#getvalue)\n    * [getText](#gettext)\n    * [getInnerHTML](#getinnerhtml)\n    * [getOuterHTML](#getouterhtml)\n    * [hasClass](#hasclass)\n\n\n# API\n\n## Constructing\n\nThere are several ways to create a new `Widget` depending on your needs.\n\n### Finding\n\nIn most cases the find based factory is going to suit your needs.\n\n`find` returns a promise-based interface that eventually resolves to a widget with the `el` property already set to a [WebElement](http://selenium.googlecode.com/git/docs/api/javascript/class_webdriver_WebElement.html) instance. It takes a hash of attributes that will be extended onto your object.\n\n```js\nWidget.find({\n  root: \"#big-papa\"\n}).then(function(widget) {\n  // widget.el\n  // is the raw WebElement node already found\n  // for your convinence.\n});\n```\n\n### Extending\n\nExtending is simple way to create a new `Class` based on the base `Widget` class via the `.extend` syntax. Extend will override any method or value set on the base `Widget` object.\n\nUsing the extend functionality is a handy way to abstract widget configuration across multiple files and methods into reusable widgets\n\n```js\nMyWidget = Widget.extend({\n  root: \".biggie-biggie\"\n});\n\n// Creating a new instance via new\nmyWidget = new MyWidget({optional: args});\n\n// Creating a new instance via the find factory\nMyWidget.find({optional: args}).then(function(widget) {\n  myWidget = widget;\n});\n```\n\n### Overriding\n\nIn any `Widgets` contructor you can override the default attributes set on said widget.\n\nThis is a handy paradigm to embrace when you have small one-off widgets that do not need custom logic but rather just a few small helper methods and/or properties.\n\n```js\n// Creating a new instance with overrides\nmyWidget = new this.Widget({optional: args});\n\n// Creating a new instance via the find factory with overrides\nWidget.find({optional: args}).then(function(widget) {\n  myWidget = widget;\n});\n```\n\n### Shorthand\n\nA `Widget` can be expressed using the shorthand `W`\n\n```js\nmyWidget = new W({optional: args})\n```\n\n## Root\n\n`root` must be provided in your widget class definition. It scopes all of a widgets DOM lookups to this root element.\n\nThe widget's required `root` property allows you to provide a scope on the page with which you are interacting. All operations for your widget will happen within the scope of the element.\nIt is a common pattern to have multiple widgets represent different parts of the page you are testing (e.g. the login div, the nav div, the form). This allows your widgets to be very focused and succinct.\n\n```js\nvar PuppySearch = Widget.extend({\n  root: '.dog-search',\n});\n```\n\n## Static Methods\n\nStatic methods can be used for situations where you do not want to declare a new Widget to do something. Static methods ALWAYS require selectors, otherwise Pioneer won't know what you want to operate on!\n\nThese methods allow you to do simple operations with less code.\nFor example:\n\n```js\nnew this.Widget({\n  root: \"#that-button\"\n}).click()\n```\n\ncan be simplified to:\n\n```js\nthis.Widget.click({selector: \"#that-button\"})\n```\n\n### static click\n\nStatic implementation of [click](#click)\n\n### static fill\n\nStatic implementation of [fill](#fill)\n\n```js\nthis.W.fill({\n  selector: \".field1\",\n  value: [\"such good text\", Driver.Key.ENTER]\n})\n```\n\n### static hover\n\nStatic implementation of [hover](#hover)\n\n```js\nthis.W.hover({\n  selector: \"#your-target\"\n})\n```\n\n### static doubleClick\n\nStatic implementation of [doubleClick](#doubleclick)\n\n```js\nthis.W.doubleClick({\n  selector: \"#some-target\"\n})\n```\n\n### static read\n\nStatic implementation of [read](#read)\n\n```js\nthis.W.read({\n  selector: \"p.third\",\n  transformer: function(text){\n    text.toUpperCase()\n  }\n})\n```\n\n### static isPresent\n\nStatic implementation of [isPresent](#ispresent) not the element is present.\n\n```js\nthis.W.isPresent({\n  selector: \"body\"\n})\n```\n\n### static isVisible\n\nStatic implementation of [isVisible](#isvisible) not the element is visible.\n\n```js\nthis.W.isVisible({\n  selector: \".hidden\"\n})\n```\n\n### static getAttribute\n\nStatic implementation of [getAttribute](#getattribute)\n\n```js\nthis.W.getAttribute({\n  selector: \"img.thumb\",\n  attribute: \"width\"\n})\n```\n\n### static getValue\n\nStatic implementation of [getValue](#getvalue)\n\n```js\nthis.W.getValue({\n  selector: \".field2\"\n})\n```\n\n### static getText\n\nStatic implementation of [getText](#gettext)\n\n```js\nthis.W.getText({\n  selector: \"p.fifth\"\n})\n```\n\n### static getInnerHTML\n\nStatic implementation of [getInnerHTML](#getinnerhtml)\n\n```js\nthis.W.getInnerHTML({\n  selector: \".some-div\"\n})\n```\n\n### static getOuterHTML\n\nStatic implementation of [getOuterHTML](#getouterhtml)\n\n```js\nthis.W.getOuterHTML({\n  selector: \"#container\"\n})\n```\n\n### static hasClass\n\nStatic implementation of [hasClass](#hasclass)\n\n```js\nthis.W.hasClass({\n  selector: \"li.active\",\n  className: \"inactive\"\n})\n```\n\n### static sendKeys\n\nStatic implementation of [sendKeys](#sendkeys)\n\n```js\nthis.W.sendKeys({\n  selector: \".username\",\n  keys: \"pioneer_expert\"\n})\n```\n\n### static clear\n\nStatic implementation of [clear](#clear)\n\n```js\nthis.W.clear({\n  selector: \".password\"\n}).then(function(widget){\n  ...\n})\n```\n\n## Interacting with the DOM\n\n### click\n\n`function click({selector:<cssSelector>})...`\n\n`click` simulates a user clicking on the DOM selector that is passed in as a parameter to the function. It returns a promise to let you know when the click has been successful or rejected.\nIf only a string is passed, and not an object, it will parse it as a selector.\n\n```js\nvar PuppySearch = Widget.extend({\n  root: '.dog-search',\n  clickOnTheDog: function() {\n    return this.click(\".dog\");\n  }\n});\n```\n\n### fill\n\n`function fill({selector:<cssSelector>, value: valueToFillWith})...`\n\n`fill` allows you you to simulate a user filling in an input with a given value. It returns a promise to let you know when the fill has been successful or rejected.\n`fill` takes a hash of options including an optional selector, and a required value to send to the widget. If only an array is passed, it will fill the root with that array.\n\n```js\nvar name = ['Jack ', 'the ', 'Ripper', Driver.Enter]\nvar PuppyNamer = Widget.extend({\n  root: '.dog-namer',\n  nameDog: function(name) {\n    return this.fill({\n      selector: \".dog-name\",\n      value: name\n    });\n  }\n});\n```\nIf only one argument is passed it will fill the root node with the value passed.\n\n```js\nvar PuppyNamer = Widget.extend({\n  root: '.puppy-namer',\n  namePuppy: function(name) {\n    return this.fill(name);\n  }\n});\n```\n\n### hover\n\n`function hover({find options})...`\n\nthe `hover` method on a widget takes the same params as [find](#find) to locate the DOM node to be hovered. It returns a promise that is resolved with the widget after the mouse has been moved over the target element. If you do not pass anything to hover it will hover over the widgets root node.\n\n```js\nnew this.Widget({\n  root: \"h4\"\n})\n.hover().then(function(widget) {\n  //...\n})\n```\n\n### doubleclick\n\n`function doubleClick({find options})...`\n\nthe `doubleClick` method on a widget takes the same params as [find](#find) to locate the DOM node to be doubleClicked. It returns a promise that is resolved with the widget after the mouse has been doubleClicked on the target element. If you do not pass anything to doubleClick it will double click the root node of the widget.\n\n```js\nnew this.Widget({\n  root: \".double\"\n})\n.doubleClick().then(function(widget) {\n  //...\n})\n```\n\n### sendKeys\n\n`function sendKeys(<valueToSend>,...)`\n\n`sendKeys` simulates a user typing. Derived from the [Webdriver sendKey method](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/actionsequence.js.src.html). It accepts a hash with an optional selector to scope the `find` operation. It requires a `keys` value in the hash which should be an array of the keys to be sent to the element. These keys may include special keys such as Driver.Key.ENTER. A list of those special keys can be found at [Selenium WebDriver docs](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/key.js.src.html).\n\n```js\nvar Driver = require('selenium-webdriver');\n\nnew this.Widget({\n  root: \".some-div\"\n}).sendKeys({\n  selector: \"input\",\n  keys: [\n    \"wow\",\n    Driver.Key.SPACE,\n    \"pioneer\",\n    Driver.Key.ENTER\n  ]\n}).then(function(){\n  ...\n})\n```\n\n### addClass\n\n`function addClass({className: name, selector: <selector>})`\n\n`addClass` will add the provided class name to the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve when the class has been added.\n\n```js\nvar hidden = new Widget.extend({\n  root: '.showing'\n})\n.addClass('hidden')\n```\n\n### removeClass\n\n`function removeClass({className: name, selector: <selector>})`\n\n`removeClass` will remove the provided class name from the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve when the class has been removed.\n\n### toggleClass\n\n`function toggleClass({className: name, selector: <selector>})`\n\n`toggleClass` will toggle the provided class name on the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve when the class has been toggled.\n\n### clear\n\n`function clear({selector: <selector>})`\n\n`clear` will call [clear](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l1967) on the element. Takes a hash that supports an optional selector to scope the `clear` operation. If only a string is passed to clear, and not an object then it will use it as a selector for the `find` operation.\nReturns a promise that resolves with the widget once the element has been cleared.\n\n```js\nnew this.Widget({\n  root: \"#container\"\n}).clear({\n  selector: \"input\"\n}).then(function(widget){\n  ...\n});\n```\n\n## Querying the DOM\n\n## read\n\n`function read({selector: <selector>, transformer: <function>})`\n\n`read` allows you to get the text of a given DOM node. `read` takes a hash of options: `<selector>` can scope the read, and `<transformer>` performs a transformation on the value/text. If you only pass a string to the method and not an object then it will use the string as the selector scope for the read operation.\nIt returns a promise that resolves with the result of the read or rejection.\n\n```js\nvar PuppyDetails = Widget.extend({\n  root: '.puppy-details',\n  getName: function(name) {\n    return this.read(\".dog-name\");\n  }\n});\nvar HorseDetails = Widget.extend({\n  root: '.horse-details',\n  getName: function(name) {\n    return this.read({\n      selector: \".pony-name\",\n      transformer: function(text){\n        return text.toLowerCase()\n      }\n    });\n  }\n});\n```\n\n## find\n\n`function find({selector: <selector>, text: <text>})...`\n\n`find` allows you to find a (single) matching element on the page and grab the resulting DOM node. If a node is not found it will reject the returned promise value, otherwise the promise is resolved with the DOM node.\n`find` takes in an optional hash, in which a selector key can be specified, or text can be specified to find the first matching child of the widget. `find` does not function properly when both options are passed.\nIf only a string is passed to the method then it will use that string for selector for the find operation.\n\n```js\nvar PuppyDetails = Widget.extend({\n  root: '.puppy-details',\n  getInfo: function(name) {\n    return this.find(\".dog-info\");\n  }\n});\nvar ReptileDetails = Widget.extend({\n  root: '.reptile-details',\n  getInfo: function(name) {\n    return this.find({text: \"lizards\"});\n  }\n});\n```\n\n## findAll\n\n`function findAll(cssSelector)...`\n\n`findAll` allows you to find a list of matching elements on a page. It returns a promise that resolves with a new [Widget List]() with the same root as the widget that invoked `findAll`. The item selector of this new Widget List will be the cssSelector argument.\n\n\n```js\nvar PuppyDetails = Widget.extend({\n  root: '.puppy-details',\n  getInfoItems: function(name) {\n    return this.findAll(\"li.dog-info\");\n  }\n});\nPuppyDetails.getInfoItems().then(function(list){\n  list.invoke(...)\n})\n```\n\n## isPresent\n\n`function isPresent(<selector>)...`\n\n`isPresent` is a utility method to check to see if a given widgets `root` or `root` scoped selector is present on the page.\nIf the element is found then the promise is successfully resolved with true, otherwise it is resolved with false.\n\n## isVisible\n\n`function isVisible({selector: <selector>})...`\n\n`isVisible` is a utility method to check to see if a given selector is currently visible on the page.\nIf the element is visible then the promise is resolved with true, otherwise it is resolved with false.\nIf only a string is passed to the method then it will use that string as a selector.\n\n## getAttribute\n\n`function getAttribute({selector: <selector>, attribute: attributeName})...`\n\nThe `getAttribute` method allows you to search an element for a particular attribute. It takes a hash with an optional selector key. If you only pass a string to the method and not an object then it will use the string as the attribute name. It returns a promise that will resolve with the attribute value if found, otherwise it will resolve with null.\nFor further reference visit http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l1851\n\n```html\n<p><img class='nested' width='400px'>I am nested</span></p>\n```\n```js\nvar width = Widget.extend({\n  root: 'p',\n  getImgWidth: function(){\n    return this.getAttribute({selector: \".nested\", attribute:\"width\"})\n  }\n});\n```\n\n## getValue\n\n`function getValue({selector: <selector>, transformer: <transformer>})...`\n\nThe `getValue` method lets you get the current value of a given input node. It returns a promise that resolves with the value of the node.\n\nIt takes an optional hash with a scoping selector, and/or a transformer. if only a string is passed to the method and not an object, it will use the string as the selector.\n\n## getText\n\n`function getText({selector: <selector>})...`\n\nThe `getText` method allows you to retrieve the text of a given element. It returns a promise that will resolve with the text if found, otherwise it will resolve with null.\n`getText` takes an optional hash with a selector key.If only a string is passed to the method then it will use that string for selector for the find operation.\n\n## getInnerHTML\n\n`function getInnerHTML({selector: <selector>})`\n\nThe `getInnerHTML` method will retrieve the innerHTML of the selector element. It returns a promise. Proxied off of [innerHTML](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l2016).\nIf a string is passed to `getInnerHTML` it will parse it as a selector.\n\n## getOuterHTML\n\n`function getOuterHTML({selector: <selector>})`\n\nThe `getOuterHTML` method retrives the outerHTML of the selector element. It returns a promise. Proxied off of [outerHTML](http://selenium.googlecode.com/git/docs/api/javascript/source/lib/webdriver/webdriver.js.src.html#l1997).\nIf a string is passed to `getOuterHTML` it will parse it as a selector.\n\n### hasClass\n\n`function hasClass({className: name, selector: <selector>})`\n\n`hasClass` will test the existence of the provided class name on the DOM node of the Widget. It takes a hash that can contain an optional selector. If you only pass a string to the method and not an object then it will use the string as the class name. It returns a promise that will resolve with `true` or `false`.\n"
  },
  {
    "path": "gulpfile.js",
    "content": "var gulp    = require(\"gulp\"),\n    include = require('gulp-include'),\n    coffee  = require('gulp-coffee');\n\ngulp.task(\"default\", function(done) {\n    gulp.src([\n      'src/widgets/build/widgets.coffee',\n      'src/support/index.coffee'\n    ])\n    .pipe(include())\n    .pipe(coffee())\n    .pipe(gulp.dest(\"lib/support\"))\n\n    gulp.src([\n      'src/pioneer.coffee',\n      'src/environment.coffee',\n      'src/errorformat.coffee',\n      'src/custom_formatter.coffee',\n      'src/config_builder.coffee',\n      'src/scaffold_builder.coffee'\n    ], { allowEmpty: true })\n    .pipe(coffee())\n    .pipe(gulp.dest(\"lib/\"))\n\n    gulp.src([\n      'src/config.json',\n      'src/pioneerformat.js',\n      'src/pioneersummaryformat.js'\n    ], { allowEmpty: true })\n    .pipe(gulp.dest(\"lib/\"))\n\n    gulp.src([\n      'src/scaffold/simple.txt',\n      'src/scaffold/simple.js',\n      'src/scaffold/example.json'\n    ])\n    .pipe(gulp.dest(\"lib/scaffold\"))\n\n    done()\n});\n\ngulp.task(\"watch\", function() {\n  gulp.watch('src/**/*', ['default'])\n});\n"
  },
  {
    "path": "mergelcov.sh",
    "content": "#!/bin/bash\nwhile read FILENAME; do\n    LCOV_INPUT_FILES=\"$LCOV_INPUT_FILES -a \\\"$FILENAME\\\"\"\ndone < <( find $1 -name lcov.info )\n\neval lcov \"${LCOV_INPUT_FILES}\" -q\n"
  },
  {
    "path": "npm-shrinkwrap.json",
    "content": "{\n  \"name\": \"pioneer\",\n  \"version\": \"0.11.7\",\n  \"lockfileVersion\": 1,\n  \"requires\": true,\n  \"dependencies\": {\n    \"Base64\": {\n      \"version\": \"0.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/Base64/-/Base64-0.1.4.tgz\",\n      \"integrity\": \"sha1-6fbGvvVn/WNepBYqsU3TKedKpt4=\"\n    },\n    \"abbrev\": {\n      \"version\": \"1.0.9\",\n      \"resolved\": \"https://registry.npmjs.org/abbrev/-/abbrev-1.0.9.tgz\",\n      \"integrity\": \"sha1-kbR5JYinc4wl813W9jdSovh3YTU=\"\n    },\n    \"ajv\": {\n      \"version\": \"6.9.2\",\n      \"resolved\": \"https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz\",\n      \"integrity\": \"sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"fast-deep-equal\": \"^2.0.1\",\n        \"fast-json-stable-stringify\": \"^2.0.0\",\n        \"json-schema-traverse\": \"^0.4.1\",\n        \"uri-js\": \"^4.2.2\"\n      }\n    },\n    \"amdefine\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz\",\n      \"integrity\": \"sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=\"\n    },\n    \"ansi-align\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz\",\n      \"integrity\": \"sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=\",\n      \"requires\": {\n        \"string-width\": \"^2.0.0\"\n      },\n      \"dependencies\": {\n        \"ansi-regex\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz\",\n          \"integrity\": \"sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=\"\n        },\n        \"is-fullwidth-code-point\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz\",\n          \"integrity\": \"sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=\"\n        },\n        \"string-width\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz\",\n          \"integrity\": \"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==\",\n          \"requires\": {\n            \"is-fullwidth-code-point\": \"^2.0.0\",\n            \"strip-ansi\": \"^4.0.0\"\n          }\n        },\n        \"strip-ansi\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz\",\n          \"integrity\": \"sha1-qEeQIusaw2iocTibY1JixQXuNo8=\",\n          \"requires\": {\n            \"ansi-regex\": \"^3.0.0\"\n          }\n        }\n      }\n    },\n    \"ansi-colors\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz\",\n      \"integrity\": \"sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-wrap\": \"^0.1.0\"\n      }\n    },\n    \"ansi-gray\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz\",\n      \"integrity\": \"sha1-KWLPVOyXksSFEKPetSRDaGHvclE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-wrap\": \"0.1.0\"\n      }\n    },\n    \"ansi-regex\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz\",\n      \"integrity\": \"sha1-w7M6te42DYbg5ijwRorn7yfWVN8=\",\n      \"dev\": true\n    },\n    \"ansi-styles\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.1.0.tgz\",\n      \"integrity\": \"sha1-6uy/Zs1waIJ2Cy9GkVgrj1XXp94=\",\n      \"dev\": true\n    },\n    \"ansi-wrap\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz\",\n      \"integrity\": \"sha1-qCJQ3bABXponyoLoLqYDu/pF768=\",\n      \"dev\": true\n    },\n    \"anymatch\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz\",\n      \"integrity\": \"sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"micromatch\": \"^3.1.4\",\n        \"normalize-path\": \"^2.1.1\"\n      }\n    },\n    \"append-buffer\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz\",\n      \"integrity\": \"sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"buffer-equal\": \"^1.0.0\"\n      }\n    },\n    \"archy\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/archy/-/archy-1.0.0.tgz\",\n      \"integrity\": \"sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=\",\n      \"dev\": true\n    },\n    \"argparse\": {\n      \"version\": \"1.0.10\",\n      \"resolved\": \"https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz\",\n      \"integrity\": \"sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"sprintf-js\": \"~1.0.2\"\n      }\n    },\n    \"arr-diff\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz\",\n      \"integrity\": \"sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=\",\n      \"dev\": true\n    },\n    \"arr-filter\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz\",\n      \"integrity\": \"sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"make-iterator\": \"^1.0.0\"\n      }\n    },\n    \"arr-flatten\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz\",\n      \"integrity\": \"sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==\",\n      \"dev\": true\n    },\n    \"arr-map\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz\",\n      \"integrity\": \"sha1-Onc0X/wc814qkYJWAfnljy4kysQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"make-iterator\": \"^1.0.0\"\n      }\n    },\n    \"arr-union\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz\",\n      \"integrity\": \"sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=\",\n      \"dev\": true\n    },\n    \"array-differ\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz\",\n      \"integrity\": \"sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=\",\n      \"dev\": true\n    },\n    \"array-each\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz\",\n      \"integrity\": \"sha1-p5SvDAWrF1KEbudTofIRoFugxE8=\",\n      \"dev\": true\n    },\n    \"array-find-index\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz\",\n      \"integrity\": \"sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=\",\n      \"dev\": true\n    },\n    \"array-initial\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz\",\n      \"integrity\": \"sha1-L6dLJnOTccOUe9enrcc74zSz15U=\",\n      \"dev\": true,\n      \"requires\": {\n        \"array-slice\": \"^1.0.0\",\n        \"is-number\": \"^4.0.0\"\n      },\n      \"dependencies\": {\n        \"is-number\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz\",\n          \"integrity\": \"sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"array-last\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz\",\n      \"integrity\": \"sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-number\": \"^4.0.0\"\n      },\n      \"dependencies\": {\n        \"is-number\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz\",\n          \"integrity\": \"sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"array-slice\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz\",\n      \"integrity\": \"sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==\",\n      \"dev\": true\n    },\n    \"array-sort\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz\",\n      \"integrity\": \"sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"default-compare\": \"^1.0.0\",\n        \"get-value\": \"^2.0.6\",\n        \"kind-of\": \"^5.0.2\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"5.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz\",\n          \"integrity\": \"sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"array-uniq\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz\",\n      \"integrity\": \"sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=\",\n      \"dev\": true\n    },\n    \"array-unique\": {\n      \"version\": \"0.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz\",\n      \"integrity\": \"sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=\",\n      \"dev\": true\n    },\n    \"asn1\": {\n      \"version\": \"0.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz\",\n      \"integrity\": \"sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"safer-buffer\": \"~2.1.0\"\n      }\n    },\n    \"assert-plus\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz\",\n      \"integrity\": \"sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=\",\n      \"dev\": true\n    },\n    \"assign-symbols\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz\",\n      \"integrity\": \"sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=\",\n      \"dev\": true\n    },\n    \"async\": {\n      \"version\": \"1.5.2\",\n      \"resolved\": \"https://registry.npmjs.org/async/-/async-1.5.2.tgz\",\n      \"integrity\": \"sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=\",\n      \"dev\": true\n    },\n    \"async-done\": {\n      \"version\": \"1.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/async-done/-/async-done-1.3.1.tgz\",\n      \"integrity\": \"sha512-R1BaUeJ4PMoLNJuk+0tLJgjmEqVsdN118+Z8O+alhnQDQgy0kmD5Mqi0DNEmMx2LM0Ed5yekKu+ZXYvIHceicg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"end-of-stream\": \"^1.1.0\",\n        \"once\": \"^1.3.2\",\n        \"process-nextick-args\": \"^1.0.7\",\n        \"stream-exhaust\": \"^1.0.1\"\n      }\n    },\n    \"async-each\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz\",\n      \"integrity\": \"sha1-GdOGodntxufByF04iu28xW0zYC0=\",\n      \"dev\": true\n    },\n    \"async-settle\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz\",\n      \"integrity\": \"sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"async-done\": \"^1.2.2\"\n      }\n    },\n    \"asynckit\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz\",\n      \"integrity\": \"sha1-x57Zf380y48robyXkLzDZkdLS3k=\",\n      \"dev\": true\n    },\n    \"atob\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/atob/-/atob-2.1.2.tgz\",\n      \"integrity\": \"sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==\",\n      \"dev\": true\n    },\n    \"aws-sign2\": {\n      \"version\": \"0.7.0\",\n      \"resolved\": \"https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz\",\n      \"integrity\": \"sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=\",\n      \"dev\": true\n    },\n    \"aws4\": {\n      \"version\": \"1.8.0\",\n      \"resolved\": \"https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz\",\n      \"integrity\": \"sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==\",\n      \"dev\": true\n    },\n    \"bach\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/bach/-/bach-1.2.0.tgz\",\n      \"integrity\": \"sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-filter\": \"^1.1.1\",\n        \"arr-flatten\": \"^1.0.1\",\n        \"arr-map\": \"^2.0.0\",\n        \"array-each\": \"^1.0.0\",\n        \"array-initial\": \"^1.0.0\",\n        \"array-last\": \"^1.1.1\",\n        \"async-done\": \"^1.2.2\",\n        \"async-settle\": \"^1.0.0\",\n        \"now-and-later\": \"^2.0.0\"\n      }\n    },\n    \"balanced-match\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz\",\n      \"integrity\": \"sha1-ibTRmasr7kneFk6gK4nORi1xt2c=\",\n      \"dev\": true\n    },\n    \"base\": {\n      \"version\": \"0.11.2\",\n      \"resolved\": \"https://registry.npmjs.org/base/-/base-0.11.2.tgz\",\n      \"integrity\": \"sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"cache-base\": \"^1.0.1\",\n        \"class-utils\": \"^0.3.5\",\n        \"component-emitter\": \"^1.2.1\",\n        \"define-property\": \"^1.0.0\",\n        \"isobject\": \"^3.0.1\",\n        \"mixin-deep\": \"^1.2.0\",\n        \"pascalcase\": \"^0.1.1\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz\",\n          \"integrity\": \"sha1-dp66rz9KY6rTr56NMEybvnm/sOY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^1.0.0\"\n          }\n        },\n        \"is-accessor-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-data-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-descriptor\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": \"https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz\",\n          \"integrity\": \"sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-accessor-descriptor\": \"^1.0.0\",\n            \"is-data-descriptor\": \"^1.0.0\",\n            \"kind-of\": \"^6.0.2\"\n          }\n        }\n      }\n    },\n    \"base64-js\": {\n      \"version\": \"0.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/base64-js/-/base64-js-0.0.2.tgz\",\n      \"integrity\": \"sha1-Ak8Pcq+iW3X5wO5zzU9V7Bvtl4Q=\"\n    },\n    \"bcrypt-pbkdf\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz\",\n      \"integrity\": \"sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"tweetnacl\": \"^0.14.3\"\n      }\n    },\n    \"beeper\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz\",\n      \"integrity\": \"sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=\",\n      \"dev\": true\n    },\n    \"binary-extensions\": {\n      \"version\": \"1.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.0.tgz\",\n      \"integrity\": \"sha512-EgmjVLMn22z7eGGv3kcnHwSnJXmFHjISTY9E/S5lIcTD3Oxw05QTcBLNkJFzcb3cNueUdF/IN4U+d78V0zO8Hw==\",\n      \"dev\": true\n    },\n    \"bluebird\": {\n      \"version\": \"1.2.4\",\n      \"resolved\": \"https://registry.npmjs.org/bluebird/-/bluebird-1.2.4.tgz\",\n      \"integrity\": \"sha512-nI6OoUVWcq6gV6kmgdaXpOMfBJhL9iq/pns0ORINhX3f51L9P87F5uvh9luqZuswURSQaN3082OfpwSDwA1KBw==\"\n    },\n    \"bops\": {\n      \"version\": \"0.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/bops/-/bops-0.0.6.tgz\",\n      \"integrity\": \"sha1-CC0dVfoB5g29wuvC26N/ZZVUzzo=\",\n      \"requires\": {\n        \"base64-js\": \"0.0.2\",\n        \"to-utf8\": \"0.0.1\"\n      }\n    },\n    \"boxen\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz\",\n      \"integrity\": \"sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==\",\n      \"requires\": {\n        \"ansi-align\": \"^2.0.0\",\n        \"camelcase\": \"^4.0.0\",\n        \"chalk\": \"^2.0.1\",\n        \"cli-boxes\": \"^1.0.0\",\n        \"string-width\": \"^2.0.0\",\n        \"term-size\": \"^1.2.0\",\n        \"widest-line\": \"^2.0.0\"\n      },\n      \"dependencies\": {\n        \"ansi-regex\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz\",\n          \"integrity\": \"sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=\"\n        },\n        \"ansi-styles\": {\n          \"version\": \"3.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz\",\n          \"integrity\": \"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==\",\n          \"requires\": {\n            \"color-convert\": \"^1.9.0\"\n          }\n        },\n        \"camelcase\": {\n          \"version\": \"4.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz\",\n          \"integrity\": \"sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=\"\n        },\n        \"chalk\": {\n          \"version\": \"2.4.2\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz\",\n          \"integrity\": \"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==\",\n          \"requires\": {\n            \"ansi-styles\": \"^3.2.1\",\n            \"escape-string-regexp\": \"^1.0.5\",\n            \"supports-color\": \"^5.3.0\"\n          }\n        },\n        \"has-flag\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz\",\n          \"integrity\": \"sha1-tdRU3CGZriJWmfNGfloH87lVuv0=\"\n        },\n        \"is-fullwidth-code-point\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz\",\n          \"integrity\": \"sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=\"\n        },\n        \"string-width\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz\",\n          \"integrity\": \"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==\",\n          \"requires\": {\n            \"is-fullwidth-code-point\": \"^2.0.0\",\n            \"strip-ansi\": \"^4.0.0\"\n          }\n        },\n        \"strip-ansi\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz\",\n          \"integrity\": \"sha1-qEeQIusaw2iocTibY1JixQXuNo8=\",\n          \"requires\": {\n            \"ansi-regex\": \"^3.0.0\"\n          }\n        },\n        \"supports-color\": {\n          \"version\": \"5.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz\",\n          \"integrity\": \"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==\",\n          \"requires\": {\n            \"has-flag\": \"^3.0.0\"\n          }\n        }\n      }\n    },\n    \"brace-expansion\": {\n      \"version\": \"1.1.11\",\n      \"resolved\": \"https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz\",\n      \"integrity\": \"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"balanced-match\": \"^1.0.0\",\n        \"concat-map\": \"0.0.1\"\n      }\n    },\n    \"braces\": {\n      \"version\": \"2.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/braces/-/braces-2.3.2.tgz\",\n      \"integrity\": \"sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-flatten\": \"^1.1.0\",\n        \"array-unique\": \"^0.3.2\",\n        \"extend-shallow\": \"^2.0.1\",\n        \"fill-range\": \"^4.0.0\",\n        \"isobject\": \"^3.0.1\",\n        \"repeat-element\": \"^1.1.2\",\n        \"snapdragon\": \"^0.8.1\",\n        \"snapdragon-node\": \"^2.0.1\",\n        \"split-string\": \"^3.0.2\",\n        \"to-regex\": \"^3.0.1\"\n      },\n      \"dependencies\": {\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"browser-stdout\": {\n      \"version\": \"1.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz\",\n      \"integrity\": \"sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==\",\n      \"dev\": true\n    },\n    \"browserify\": {\n      \"version\": \"1.15.5\",\n      \"resolved\": \"https://registry.npmjs.org/browserify/-/browserify-1.15.5.tgz\",\n      \"integrity\": \"sha1-K3GUlsztmGoplAgCvzrj+bIprdQ=\",\n      \"requires\": {\n        \"buffer-browserify\": \"~0.0.1\",\n        \"coffee-script\": \"1.x.x\",\n        \"commondir\": \"~0.0.1\",\n        \"crypto-browserify\": \"~0\",\n        \"deputy\": \"~0.0.3\",\n        \"detective\": \"~0.2.0\",\n        \"http-browserify\": \"~0.1.1\",\n        \"nub\": \"~0.0.0\",\n        \"optimist\": \"~0.3.4\",\n        \"resolve\": \"~0.2.0\",\n        \"syntax-error\": \"~0.0.0\",\n        \"vm-browserify\": \"~0.0.0\"\n      },\n      \"dependencies\": {\n        \"coffee-script\": {\n          \"version\": \"1.12.7\",\n          \"resolved\": \"https://registry.npmjs.org/coffee-script/-/coffee-script-1.12.7.tgz\",\n          \"integrity\": \"sha512-fLeEhqwymYat/MpTPUjSKHVYYl0ec2mOyALEMLmzr5i1isuG+6jfI2j2d5oBO3VIzgUXgBVIcOT9uH1TFxBckw==\"\n        },\n        \"optimist\": {\n          \"version\": \"0.3.7\",\n          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n          \"integrity\": \"sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=\",\n          \"requires\": {\n            \"wordwrap\": \"~0.0.2\"\n          }\n        },\n        \"resolve\": {\n          \"version\": \"0.2.8\",\n          \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-0.2.8.tgz\",\n          \"integrity\": \"sha1-/bF9SrsOyvb4DWesA88pAIj2wNA=\"\n        },\n        \"wordwrap\": {\n          \"version\": \"0.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz\",\n          \"integrity\": \"sha1-o9XabNXAvAAI03I0u68b7WMFkQc=\"\n        }\n      }\n    },\n    \"buffer-browserify\": {\n      \"version\": \"0.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/buffer-browserify/-/buffer-browserify-0.0.5.tgz\",\n      \"integrity\": \"sha1-iqaGMciogpxqTufvmjrH8sMemD4=\",\n      \"requires\": {\n        \"base64-js\": \"0.0.2\"\n      }\n    },\n    \"buffer-equal\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz\",\n      \"integrity\": \"sha1-WWFrSYME1Var1GaWayLu2j7KX74=\",\n      \"dev\": true\n    },\n    \"buffer-from\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz\",\n      \"integrity\": \"sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==\",\n      \"dev\": true\n    },\n    \"cache-base\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz\",\n      \"integrity\": \"sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"collection-visit\": \"^1.0.0\",\n        \"component-emitter\": \"^1.2.1\",\n        \"get-value\": \"^2.0.6\",\n        \"has-value\": \"^1.0.0\",\n        \"isobject\": \"^3.0.1\",\n        \"set-value\": \"^2.0.0\",\n        \"to-object-path\": \"^0.3.0\",\n        \"union-value\": \"^1.0.0\",\n        \"unset-value\": \"^1.0.0\"\n      }\n    },\n    \"camelcase\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz\",\n      \"integrity\": \"sha1-MvxLn82vhF/N9+c7uXysImHwqwo=\",\n      \"dev\": true\n    },\n    \"camelcase-keys\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz\",\n      \"integrity\": \"sha1-MIvur/3ygRkFHvodkyITyRuPkuc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"camelcase\": \"^2.0.0\",\n        \"map-obj\": \"^1.0.0\"\n      },\n      \"dependencies\": {\n        \"camelcase\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz\",\n          \"integrity\": \"sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"capture-stack-trace\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz\",\n      \"integrity\": \"sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==\"\n    },\n    \"caseless\": {\n      \"version\": \"0.12.0\",\n      \"resolved\": \"https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz\",\n      \"integrity\": \"sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=\",\n      \"dev\": true\n    },\n    \"chai\": {\n      \"version\": \"1.9.2\",\n      \"resolved\": \"https://registry.npmjs.org/chai/-/chai-1.9.2.tgz\",\n      \"integrity\": \"sha512-olRoaitftnzWHFEAza6MXR4w+FfZrOVyV7r7U/Z8ObJefCgL8IuWkAuASJjSXrpP9wvgoL8+1dB9RbMLc2FkNg==\",\n      \"requires\": {\n        \"assertion-error\": \"1.0.0\",\n        \"deep-eql\": \"0.1.3\"\n      },\n      \"dependencies\": {\n        \"assertion-error\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/assertion-error/-/assertion-error-1.0.0.tgz\",\n          \"integrity\": \"sha512-g/gZV+G476cnmtYI+Ko9d5khxSoCSoom/EaNmmCfwpOvBXEJ18qwFrxfP1/CsIqk2no1sAKKwxndV0tP7ROOFQ==\"\n        },\n        \"deep-eql\": {\n          \"version\": \"0.1.3\",\n          \"resolved\": \"https://registry.npmjs.org/deep-eql/-/deep-eql-0.1.3.tgz\",\n          \"integrity\": \"sha512-6sEotTRGBFiNcqVoeHwnfopbSpi5NbH1VWJmYCVkmxMmaVTT0bUTrNaGyBwhgP4MZL012W/mkzIn3Da+iDYweg==\",\n          \"requires\": {\n            \"type-detect\": \"0.1.1\"\n          },\n          \"dependencies\": {\n            \"type-detect\": {\n              \"version\": \"0.1.1\",\n              \"resolved\": \"https://registry.npmjs.org/type-detect/-/type-detect-0.1.1.tgz\",\n              \"integrity\": \"sha512-5rqszGVwYgBoDkIm2oUtvkfZMQ0vk29iDMU0W2qCa3rG0vPDNczCMT4hV/bLBgLg8k8ri6+u3Zbt+S/14eMzlA==\"\n            }\n          }\n        }\n      }\n    },\n    \"chai-as-promised\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-4.1.0.tgz\",\n      \"integrity\": \"sha512-ZXqEeAUKpOZyWI4FQ7P9YcZ9KBgWpcd2oLNPG1XTGsUaZzMQjKetROC7+uK59clAFGUK8cZR+r2LtsLfp7zeQg==\"\n    },\n    \"chalk\": {\n      \"version\": \"0.5.1\",\n      \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz\",\n      \"integrity\": \"sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-styles\": \"^1.1.0\",\n        \"escape-string-regexp\": \"^1.0.0\",\n        \"has-ansi\": \"^0.1.0\",\n        \"strip-ansi\": \"^0.3.0\",\n        \"supports-color\": \"^0.2.0\"\n      },\n      \"dependencies\": {\n        \"ansi-regex\": {\n          \"version\": \"0.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\",\n          \"integrity\": \"sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=\",\n          \"dev\": true\n        },\n        \"strip-ansi\": {\n          \"version\": \"0.3.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz\",\n          \"integrity\": \"sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-regex\": \"^0.2.1\"\n          }\n        }\n      }\n    },\n    \"chokidar\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/chokidar/-/chokidar-2.1.2.tgz\",\n      \"integrity\": \"sha512-IwXUx0FXc5ibYmPC2XeEj5mpXoV66sR+t3jqu2NS2GYwCktt3KF1/Qqjws/NkegajBA4RbZ5+DDwlOiJsxDHEg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"anymatch\": \"^2.0.0\",\n        \"async-each\": \"^1.0.1\",\n        \"braces\": \"^2.3.2\",\n        \"fsevents\": \"^1.2.7\",\n        \"glob-parent\": \"^3.1.0\",\n        \"inherits\": \"^2.0.3\",\n        \"is-binary-path\": \"^1.0.0\",\n        \"is-glob\": \"^4.0.0\",\n        \"normalize-path\": \"^3.0.0\",\n        \"path-is-absolute\": \"^1.0.0\",\n        \"readdirp\": \"^2.2.1\",\n        \"upath\": \"^1.1.0\"\n      },\n      \"dependencies\": {\n        \"normalize-path\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz\",\n          \"integrity\": \"sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"ci-info\": {\n      \"version\": \"1.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz\",\n      \"integrity\": \"sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==\"\n    },\n    \"class-utils\": {\n      \"version\": \"0.3.6\",\n      \"resolved\": \"https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz\",\n      \"integrity\": \"sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-union\": \"^3.1.0\",\n        \"define-property\": \"^0.2.5\",\n        \"isobject\": \"^3.0.0\",\n        \"static-extend\": \"^0.1.1\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"0.2.5\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz\",\n          \"integrity\": \"sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"cli-boxes\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz\",\n      \"integrity\": \"sha1-T6kXw+WclKAEzWH47lCdplFocUM=\"\n    },\n    \"cliui\": {\n      \"version\": \"3.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz\",\n      \"integrity\": \"sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=\",\n      \"dev\": true,\n      \"requires\": {\n        \"string-width\": \"^1.0.1\",\n        \"strip-ansi\": \"^3.0.1\",\n        \"wrap-ansi\": \"^2.0.0\"\n      }\n    },\n    \"clone\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/clone/-/clone-2.1.2.tgz\",\n      \"integrity\": \"sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=\",\n      \"dev\": true\n    },\n    \"clone-buffer\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz\",\n      \"integrity\": \"sha1-4+JbIHrE5wGvch4staFnksrD3Fg=\",\n      \"dev\": true\n    },\n    \"clone-stats\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz\",\n      \"integrity\": \"sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=\",\n      \"dev\": true\n    },\n    \"cloneable-readable\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz\",\n      \"integrity\": \"sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"inherits\": \"^2.0.1\",\n        \"process-nextick-args\": \"^2.0.0\",\n        \"readable-stream\": \"^2.3.5\"\n      },\n      \"dependencies\": {\n        \"process-nextick-args\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz\",\n          \"integrity\": \"sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"code-point-at\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz\",\n      \"integrity\": \"sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=\",\n      \"dev\": true\n    },\n    \"coffeescript\": {\n      \"version\": \"1.12.7\",\n      \"resolved\": \"https://registry.npmjs.org/coffeescript/-/coffeescript-1.12.7.tgz\",\n      \"integrity\": \"sha512-pLXHFxQMPklVoEekowk8b3erNynC+DVJzChxS/LCBBgR6/8AJkHivkm//zbowcfc7BTCAjryuhx6gPqPRfsFoA==\",\n      \"dev\": true\n    },\n    \"collection-map\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz\",\n      \"integrity\": \"sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-map\": \"^2.0.2\",\n        \"for-own\": \"^1.0.0\",\n        \"make-iterator\": \"^1.0.0\"\n      }\n    },\n    \"collection-visit\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz\",\n      \"integrity\": \"sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"map-visit\": \"^1.0.0\",\n        \"object-visit\": \"^1.0.0\"\n      }\n    },\n    \"color-convert\": {\n      \"version\": \"1.9.3\",\n      \"resolved\": \"https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz\",\n      \"integrity\": \"sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==\",\n      \"requires\": {\n        \"color-name\": \"1.1.3\"\n      }\n    },\n    \"color-name\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz\",\n      \"integrity\": \"sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=\"\n    },\n    \"color-support\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz\",\n      \"integrity\": \"sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==\",\n      \"dev\": true\n    },\n    \"colors\": {\n      \"version\": \"0.6.2\",\n      \"resolved\": \"https://registry.npmjs.org/colors/-/colors-0.6.2.tgz\",\n      \"integrity\": \"sha512-OsSVtHK8Ir8r3+Fxw/b4jS1ZLPXkV6ZxDRJQzeD7qo0SqMXWrHDM71DgYzPMHY8SFJ0Ao+nNU2p1MmwdzKqPrw==\"\n    },\n    \"combined-stream\": {\n      \"version\": \"1.0.7\",\n      \"resolved\": \"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz\",\n      \"integrity\": \"sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"delayed-stream\": \"~1.0.0\"\n      }\n    },\n    \"commander\": {\n      \"version\": \"2.17.1\",\n      \"resolved\": \"https://registry.npmjs.org/commander/-/commander-2.17.1.tgz\",\n      \"integrity\": \"sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==\",\n      \"dev\": true,\n      \"optional\": true\n    },\n    \"commondir\": {\n      \"version\": \"0.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/commondir/-/commondir-0.0.2.tgz\",\n      \"integrity\": \"sha1-xJyIgMb+loRLs1Jd0ucxQFDDie4=\"\n    },\n    \"component-emitter\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz\",\n      \"integrity\": \"sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=\",\n      \"dev\": true\n    },\n    \"concat-map\": {\n      \"version\": \"0.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz\",\n      \"integrity\": \"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=\",\n      \"dev\": true\n    },\n    \"concat-stream\": {\n      \"version\": \"1.6.2\",\n      \"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz\",\n      \"integrity\": \"sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"buffer-from\": \"^1.0.0\",\n        \"inherits\": \"^2.0.3\",\n        \"readable-stream\": \"^2.2.2\",\n        \"typedarray\": \"^0.0.6\"\n      }\n    },\n    \"configstore\": {\n      \"version\": \"3.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz\",\n      \"integrity\": \"sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==\",\n      \"requires\": {\n        \"dot-prop\": \"^4.1.0\",\n        \"graceful-fs\": \"^4.1.2\",\n        \"make-dir\": \"^1.0.0\",\n        \"unique-string\": \"^1.0.0\",\n        \"write-file-atomic\": \"^2.0.0\",\n        \"xdg-basedir\": \"^3.0.0\"\n      }\n    },\n    \"convert-source-map\": {\n      \"version\": \"1.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz\",\n      \"integrity\": \"sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==\",\n      \"dev\": true,\n      \"requires\": {\n        \"safe-buffer\": \"~5.1.1\"\n      }\n    },\n    \"copy-descriptor\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz\",\n      \"integrity\": \"sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=\",\n      \"dev\": true\n    },\n    \"copy-props\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz\",\n      \"integrity\": \"sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==\",\n      \"dev\": true,\n      \"requires\": {\n        \"each-props\": \"^1.3.0\",\n        \"is-plain-object\": \"^2.0.1\"\n      }\n    },\n    \"core-util-is\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz\",\n      \"integrity\": \"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=\",\n      \"dev\": true\n    },\n    \"coveralls\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/coveralls/-/coveralls-3.0.3.tgz\",\n      \"integrity\": \"sha512-viNfeGlda2zJr8Gj1zqXpDMRjw9uM54p7wzZdvLRyOgnAfCe974Dq4veZkjJdxQXbmdppu6flEajFYseHYaUhg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"growl\": \"~> 1.10.0\",\n        \"js-yaml\": \"^3.11.0\",\n        \"lcov-parse\": \"^0.0.10\",\n        \"log-driver\": \"^1.2.7\",\n        \"minimist\": \"^1.2.0\",\n        \"request\": \"^2.86.0\"\n      },\n      \"dependencies\": {\n        \"minimist\": {\n          \"version\": \"1.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz\",\n          \"integrity\": \"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"create-error-class\": {\n      \"version\": \"3.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz\",\n      \"integrity\": \"sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=\",\n      \"requires\": {\n        \"capture-stack-trace\": \"^1.0.0\"\n      }\n    },\n    \"cross-spawn\": {\n      \"version\": \"6.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz\",\n      \"integrity\": \"sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"nice-try\": \"^1.0.4\",\n        \"path-key\": \"^2.0.1\",\n        \"semver\": \"^5.5.0\",\n        \"shebang-command\": \"^1.2.0\",\n        \"which\": \"^1.2.9\"\n      }\n    },\n    \"crypto-browserify\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-0.4.0.tgz\",\n      \"integrity\": \"sha1-JG9qM3uITJn/6L+whaGEruYMM/M=\"\n    },\n    \"crypto-random-string\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz\",\n      \"integrity\": \"sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=\"\n    },\n    \"cucumber\": {\n      \"version\": \"github:joshtombs/cucumber-js#78f79263e5855dd189e4bbe792cc6a34d7efcd19\",\n      \"from\": \"github:joshtombs/cucumber-js#0.3.3ErrorFormatting\",\n      \"requires\": {\n        \"browserify\": \"1.15.5\",\n        \"coffee-script\": \"1.6.3\",\n        \"cucumber-html\": \"0.2.3\",\n        \"gherkin\": \"2.12.2\",\n        \"nopt\": \"2.1.2\",\n        \"pogo\": \"0.5.1\",\n        \"underscore\": \"1.5.2\",\n        \"walkdir\": \"0.0.7\"\n      },\n      \"dependencies\": {\n        \"coffee-script\": {\n          \"version\": \"1.6.3\",\n          \"resolved\": \"https://registry.npmjs.org/coffee-script/-/coffee-script-1.6.3.tgz\",\n          \"integrity\": \"sha1-Y1XTLPGwTN/2tITl5xF4Ky8MOb4=\"\n        },\n        \"nopt\": {\n          \"version\": \"2.1.2\",\n          \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz\",\n          \"integrity\": \"sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=\",\n          \"requires\": {\n            \"abbrev\": \"1\"\n          }\n        }\n      }\n    },\n    \"cucumber-html\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/cucumber-html/-/cucumber-html-0.2.3.tgz\",\n      \"integrity\": \"sha1-eyqf7SFXLF0l1L1MvHU3onKxapM=\"\n    },\n    \"currently-unhandled\": {\n      \"version\": \"0.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz\",\n      \"integrity\": \"sha1-mI3zP+qxke95mmE2nddsF635V+o=\",\n      \"dev\": true,\n      \"requires\": {\n        \"array-find-index\": \"^1.0.1\"\n      }\n    },\n    \"cycle\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz\",\n      \"integrity\": \"sha1-IegLK+hYD5i0aPN5QwZisEbDStI=\"\n    },\n    \"d\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/d/-/d-1.0.0.tgz\",\n      \"integrity\": \"sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"es5-ext\": \"^0.10.9\"\n      }\n    },\n    \"dashdash\": {\n      \"version\": \"1.14.1\",\n      \"resolved\": \"https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz\",\n      \"integrity\": \"sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"assert-plus\": \"^1.0.0\"\n      }\n    },\n    \"dateformat\": {\n      \"version\": \"1.0.12\",\n      \"resolved\": \"https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz\",\n      \"integrity\": \"sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"get-stdin\": \"^4.0.1\",\n        \"meow\": \"^3.3.0\"\n      }\n    },\n    \"debug\": {\n      \"version\": \"2.6.9\",\n      \"resolved\": \"https://registry.npmjs.org/debug/-/debug-2.6.9.tgz\",\n      \"integrity\": \"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"ms\": \"2.0.0\"\n      }\n    },\n    \"decamelize\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz\",\n      \"integrity\": \"sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=\",\n      \"dev\": true\n    },\n    \"decode-uri-component\": {\n      \"version\": \"0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz\",\n      \"integrity\": \"sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=\",\n      \"dev\": true\n    },\n    \"deep-equal\": {\n      \"version\": \"0.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/deep-equal/-/deep-equal-0.2.2.tgz\",\n      \"integrity\": \"sha1-hLdFiW80xoTpjyzg5Cq69Du6AX0=\"\n    },\n    \"deep-extend\": {\n      \"version\": \"0.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz\",\n      \"integrity\": \"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==\"\n    },\n    \"deep-is\": {\n      \"version\": \"0.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz\",\n      \"integrity\": \"sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=\",\n      \"dev\": true\n    },\n    \"default-compare\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz\",\n      \"integrity\": \"sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^5.0.2\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"5.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz\",\n          \"integrity\": \"sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"default-resolution\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz\",\n      \"integrity\": \"sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=\",\n      \"dev\": true\n    },\n    \"define-properties\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz\",\n      \"integrity\": \"sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"object-keys\": \"^1.0.12\"\n      }\n    },\n    \"define-property\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz\",\n      \"integrity\": \"sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-descriptor\": \"^1.0.2\",\n        \"isobject\": \"^3.0.1\"\n      },\n      \"dependencies\": {\n        \"is-accessor-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-data-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-descriptor\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": \"https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz\",\n          \"integrity\": \"sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-accessor-descriptor\": \"^1.0.0\",\n            \"is-data-descriptor\": \"^1.0.0\",\n            \"kind-of\": \"^6.0.2\"\n          }\n        }\n      }\n    },\n    \"delayed-stream\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz\",\n      \"integrity\": \"sha1-3zrhmayt+31ECqrgsp4icrJOxhk=\",\n      \"dev\": true\n    },\n    \"deputy\": {\n      \"version\": \"0.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/deputy/-/deputy-0.0.4.tgz\",\n      \"integrity\": \"sha1-7cAKnvXFNSfEBTKFNMmXla2kHL8=\",\n      \"requires\": {\n        \"detective\": \"~0.2.0\",\n        \"mkdirp\": \"~0.3.3\"\n      },\n      \"dependencies\": {\n        \"mkdirp\": {\n          \"version\": \"0.3.5\",\n          \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz\",\n          \"integrity\": \"sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=\"\n        }\n      }\n    },\n    \"detect-file\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz\",\n      \"integrity\": \"sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=\",\n      \"dev\": true\n    },\n    \"detective\": {\n      \"version\": \"0.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/detective/-/detective-0.2.1.tgz\",\n      \"integrity\": \"sha1-nOkmAf0iOBDClDKtA0+MYti4ZU8=\",\n      \"requires\": {\n        \"esprima\": \"~0.9.9\"\n      },\n      \"dependencies\": {\n        \"esprima\": {\n          \"version\": \"0.9.9\",\n          \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-0.9.9.tgz\",\n          \"integrity\": \"sha1-G5CSXJddYy1ygpOcO7nDpCPDBJA=\"\n        }\n      }\n    },\n    \"diff\": {\n      \"version\": \"3.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/diff/-/diff-3.5.0.tgz\",\n      \"integrity\": \"sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==\",\n      \"dev\": true\n    },\n    \"dot-prop\": {\n      \"version\": \"4.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz\",\n      \"integrity\": \"sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==\",\n      \"requires\": {\n        \"is-obj\": \"^1.0.0\"\n      }\n    },\n    \"duplexer\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz\",\n      \"integrity\": \"sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=\",\n      \"dev\": true\n    },\n    \"duplexer2\": {\n      \"version\": \"0.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz\",\n      \"integrity\": \"sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=\",\n      \"dev\": true,\n      \"requires\": {\n        \"readable-stream\": \"~1.1.9\"\n      },\n      \"dependencies\": {\n        \"isarray\": {\n          \"version\": \"0.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\",\n          \"integrity\": \"sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=\",\n          \"dev\": true\n        },\n        \"readable-stream\": {\n          \"version\": \"1.1.14\",\n          \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz\",\n          \"integrity\": \"sha1-fPTFTvZI44EwhMY23SB54WbAgdk=\",\n          \"dev\": true,\n          \"requires\": {\n            \"core-util-is\": \"~1.0.0\",\n            \"inherits\": \"~2.0.1\",\n            \"isarray\": \"0.0.1\",\n            \"string_decoder\": \"~0.10.x\"\n          }\n        },\n        \"string_decoder\": {\n          \"version\": \"0.10.31\",\n          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\",\n          \"integrity\": \"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"duplexer3\": {\n      \"version\": \"0.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz\",\n      \"integrity\": \"sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=\"\n    },\n    \"duplexify\": {\n      \"version\": \"3.7.1\",\n      \"resolved\": \"https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz\",\n      \"integrity\": \"sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==\",\n      \"dev\": true,\n      \"requires\": {\n        \"end-of-stream\": \"^1.0.0\",\n        \"inherits\": \"^2.0.1\",\n        \"readable-stream\": \"^2.0.0\",\n        \"stream-shift\": \"^1.0.0\"\n      }\n    },\n    \"each-props\": {\n      \"version\": \"1.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz\",\n      \"integrity\": \"sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-plain-object\": \"^2.0.1\",\n        \"object.defaults\": \"^1.1.0\"\n      }\n    },\n    \"ecc-jsbn\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz\",\n      \"integrity\": \"sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"jsbn\": \"~0.1.0\",\n        \"safer-buffer\": \"^2.1.0\"\n      }\n    },\n    \"end-of-stream\": {\n      \"version\": \"1.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz\",\n      \"integrity\": \"sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==\",\n      \"dev\": true,\n      \"requires\": {\n        \"once\": \"^1.4.0\"\n      }\n    },\n    \"error-ex\": {\n      \"version\": \"1.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz\",\n      \"integrity\": \"sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-arrayish\": \"^0.2.1\"\n      }\n    },\n    \"es-abstract\": {\n      \"version\": \"1.13.0\",\n      \"resolved\": \"https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz\",\n      \"integrity\": \"sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"es-to-primitive\": \"^1.2.0\",\n        \"function-bind\": \"^1.1.1\",\n        \"has\": \"^1.0.3\",\n        \"is-callable\": \"^1.1.4\",\n        \"is-regex\": \"^1.0.4\",\n        \"object-keys\": \"^1.0.12\"\n      }\n    },\n    \"es-to-primitive\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz\",\n      \"integrity\": \"sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-callable\": \"^1.1.4\",\n        \"is-date-object\": \"^1.0.1\",\n        \"is-symbol\": \"^1.0.2\"\n      }\n    },\n    \"es5-ext\": {\n      \"version\": \"0.10.48\",\n      \"resolved\": \"https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.48.tgz\",\n      \"integrity\": \"sha512-CdRvPlX/24Mj5L4NVxTs4804sxiS2CjVprgCmrgoDkdmjdY4D+ySHa7K3jJf8R40dFg0tIm3z/dk326LrnuSGw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"es6-iterator\": \"~2.0.3\",\n        \"es6-symbol\": \"~3.1.1\",\n        \"next-tick\": \"1\"\n      }\n    },\n    \"es6-iterator\": {\n      \"version\": \"2.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz\",\n      \"integrity\": \"sha1-p96IkUGgWpSwhUQDstCg+/qY87c=\",\n      \"dev\": true,\n      \"requires\": {\n        \"d\": \"1\",\n        \"es5-ext\": \"^0.10.35\",\n        \"es6-symbol\": \"^3.1.1\"\n      }\n    },\n    \"es6-symbol\": {\n      \"version\": \"3.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz\",\n      \"integrity\": \"sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"d\": \"1\",\n        \"es5-ext\": \"~0.10.14\"\n      }\n    },\n    \"es6-weak-map\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz\",\n      \"integrity\": \"sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"d\": \"1\",\n        \"es5-ext\": \"^0.10.14\",\n        \"es6-iterator\": \"^2.0.1\",\n        \"es6-symbol\": \"^3.1.1\"\n      }\n    },\n    \"escape-string-regexp\": {\n      \"version\": \"1.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz\",\n      \"integrity\": \"sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=\"\n    },\n    \"escodegen\": {\n      \"version\": \"1.8.1\",\n      \"resolved\": \"https://registry.npmjs.org/escodegen/-/escodegen-1.8.1.tgz\",\n      \"integrity\": \"sha1-WltTr0aTEQvrsIZ6o0MN07cKEBg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"esprima\": \"^2.7.1\",\n        \"estraverse\": \"^1.9.1\",\n        \"esutils\": \"^2.0.2\",\n        \"optionator\": \"^0.8.1\",\n        \"source-map\": \"~0.2.0\"\n      },\n      \"dependencies\": {\n        \"esprima\": {\n          \"version\": \"2.7.3\",\n          \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz\",\n          \"integrity\": \"sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=\",\n          \"dev\": true\n        },\n        \"source-map\": {\n          \"version\": \"0.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.2.0.tgz\",\n          \"integrity\": \"sha1-2rc/vPwrqBm03gO9b26qSBZLP50=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"amdefine\": \">=0.0.4\"\n          }\n        }\n      }\n    },\n    \"esprima\": {\n      \"version\": \"4.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz\",\n      \"integrity\": \"sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==\",\n      \"dev\": true\n    },\n    \"estraverse\": {\n      \"version\": \"1.9.3\",\n      \"resolved\": \"https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz\",\n      \"integrity\": \"sha1-r2fy3JIlgkFZUJJgkaQAXSnJu0Q=\",\n      \"dev\": true\n    },\n    \"esutils\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz\",\n      \"integrity\": \"sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=\",\n      \"dev\": true\n    },\n    \"event-stream\": {\n      \"version\": \"3.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/event-stream/-/event-stream-3.1.7.tgz\",\n      \"integrity\": \"sha1-tMVAAS0P4UmEIPPYlGAI22OTw3o=\",\n      \"dev\": true,\n      \"requires\": {\n        \"duplexer\": \"~0.1.1\",\n        \"from\": \"~0\",\n        \"map-stream\": \"~0.1.0\",\n        \"pause-stream\": \"0.0.11\",\n        \"split\": \"0.2\",\n        \"stream-combiner\": \"~0.0.4\",\n        \"through\": \"~2.3.1\"\n      }\n    },\n    \"exec\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/exec/-/exec-0.1.1.tgz\",\n      \"integrity\": \"sha1-CUerDk+jLOAJx4bNZCoLFgxeLPQ=\",\n      \"dev\": true\n    },\n    \"execa\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/execa/-/execa-1.0.0.tgz\",\n      \"integrity\": \"sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"cross-spawn\": \"^6.0.0\",\n        \"get-stream\": \"^4.0.0\",\n        \"is-stream\": \"^1.1.0\",\n        \"npm-run-path\": \"^2.0.0\",\n        \"p-finally\": \"^1.0.0\",\n        \"signal-exit\": \"^3.0.0\",\n        \"strip-eof\": \"^1.0.0\"\n      }\n    },\n    \"expand-brackets\": {\n      \"version\": \"2.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz\",\n      \"integrity\": \"sha1-t3c14xXOMPa27/D4OwQVGiJEliI=\",\n      \"dev\": true,\n      \"requires\": {\n        \"debug\": \"^2.3.3\",\n        \"define-property\": \"^0.2.5\",\n        \"extend-shallow\": \"^2.0.1\",\n        \"posix-character-classes\": \"^0.1.0\",\n        \"regex-not\": \"^1.0.0\",\n        \"snapdragon\": \"^0.8.1\",\n        \"to-regex\": \"^3.0.1\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"0.2.5\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz\",\n          \"integrity\": \"sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^0.1.0\"\n          }\n        },\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"expand-tilde\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz\",\n      \"integrity\": \"sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=\",\n      \"dev\": true,\n      \"requires\": {\n        \"homedir-polyfill\": \"^1.0.1\"\n      }\n    },\n    \"extend\": {\n      \"version\": \"3.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/extend/-/extend-3.0.2.tgz\",\n      \"integrity\": \"sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==\",\n      \"dev\": true\n    },\n    \"extend-shallow\": {\n      \"version\": \"3.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz\",\n      \"integrity\": \"sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"assign-symbols\": \"^1.0.0\",\n        \"is-extendable\": \"^1.0.1\"\n      },\n      \"dependencies\": {\n        \"is-extendable\": {\n          \"version\": \"1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz\",\n          \"integrity\": \"sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-plain-object\": \"^2.0.4\"\n          }\n        }\n      }\n    },\n    \"extglob\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz\",\n      \"integrity\": \"sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"array-unique\": \"^0.3.2\",\n        \"define-property\": \"^1.0.0\",\n        \"expand-brackets\": \"^2.1.4\",\n        \"extend-shallow\": \"^2.0.1\",\n        \"fragment-cache\": \"^0.2.1\",\n        \"regex-not\": \"^1.0.0\",\n        \"snapdragon\": \"^0.8.1\",\n        \"to-regex\": \"^3.0.1\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz\",\n          \"integrity\": \"sha1-dp66rz9KY6rTr56NMEybvnm/sOY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^1.0.0\"\n          }\n        },\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        },\n        \"is-accessor-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-data-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-descriptor\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": \"https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz\",\n          \"integrity\": \"sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-accessor-descriptor\": \"^1.0.0\",\n            \"is-data-descriptor\": \"^1.0.0\",\n            \"kind-of\": \"^6.0.2\"\n          }\n        }\n      }\n    },\n    \"extsprintf\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz\",\n      \"integrity\": \"sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=\",\n      \"dev\": true\n    },\n    \"eyes\": {\n      \"version\": \"0.1.8\",\n      \"resolved\": \"https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz\",\n      \"integrity\": \"sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=\"\n    },\n    \"fancy-log\": {\n      \"version\": \"1.3.3\",\n      \"resolved\": \"https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz\",\n      \"integrity\": \"sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-gray\": \"^0.1.1\",\n        \"color-support\": \"^1.1.3\",\n        \"parse-node-version\": \"^1.0.0\",\n        \"time-stamp\": \"^1.0.0\"\n      }\n    },\n    \"fast-deep-equal\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz\",\n      \"integrity\": \"sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=\",\n      \"dev\": true\n    },\n    \"fast-json-stable-stringify\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz\",\n      \"integrity\": \"sha1-1RQsDK7msRifh9OnYREGT4bIu/I=\",\n      \"dev\": true\n    },\n    \"fast-levenshtein\": {\n      \"version\": \"2.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz\",\n      \"integrity\": \"sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=\",\n      \"dev\": true\n    },\n    \"fill-range\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz\",\n      \"integrity\": \"sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"extend-shallow\": \"^2.0.1\",\n        \"is-number\": \"^3.0.0\",\n        \"repeat-string\": \"^1.6.1\",\n        \"to-regex-range\": \"^2.1.0\"\n      },\n      \"dependencies\": {\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"find-up\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz\",\n      \"integrity\": \"sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"path-exists\": \"^2.0.0\",\n        \"pinkie-promise\": \"^2.0.0\"\n      }\n    },\n    \"findup-sync\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz\",\n      \"integrity\": \"sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=\",\n      \"dev\": true,\n      \"requires\": {\n        \"detect-file\": \"^1.0.0\",\n        \"is-glob\": \"^3.1.0\",\n        \"micromatch\": \"^3.0.4\",\n        \"resolve-dir\": \"^1.0.1\"\n      },\n      \"dependencies\": {\n        \"is-glob\": {\n          \"version\": \"3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz\",\n          \"integrity\": \"sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extglob\": \"^2.1.0\"\n          }\n        }\n      }\n    },\n    \"fined\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/fined/-/fined-1.1.1.tgz\",\n      \"integrity\": \"sha512-jQp949ZmEbiYHk3gkbdtpJ0G1+kgtLQBNdP5edFP7Fh+WAYceLQz6yO1SBj72Xkg8GVyTB3bBzAYrHJVh5Xd5g==\",\n      \"dev\": true,\n      \"requires\": {\n        \"expand-tilde\": \"^2.0.2\",\n        \"is-plain-object\": \"^2.0.3\",\n        \"object.defaults\": \"^1.1.0\",\n        \"object.pick\": \"^1.2.0\",\n        \"parse-filepath\": \"^1.0.1\"\n      }\n    },\n    \"flagged-respawn\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz\",\n      \"integrity\": \"sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==\",\n      \"dev\": true\n    },\n    \"flat\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/flat/-/flat-4.1.0.tgz\",\n      \"integrity\": \"sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-buffer\": \"~2.0.3\"\n      },\n      \"dependencies\": {\n        \"is-buffer\": {\n          \"version\": \"2.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz\",\n          \"integrity\": \"sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"flush-write-stream\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz\",\n      \"integrity\": \"sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"inherits\": \"^2.0.3\",\n        \"readable-stream\": \"^2.3.6\"\n      }\n    },\n    \"for-in\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz\",\n      \"integrity\": \"sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=\",\n      \"dev\": true\n    },\n    \"for-own\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz\",\n      \"integrity\": \"sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"for-in\": \"^1.0.1\"\n      }\n    },\n    \"forever-agent\": {\n      \"version\": \"0.6.1\",\n      \"resolved\": \"https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz\",\n      \"integrity\": \"sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=\",\n      \"dev\": true\n    },\n    \"form-data\": {\n      \"version\": \"2.3.3\",\n      \"resolved\": \"https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz\",\n      \"integrity\": \"sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"asynckit\": \"^0.4.0\",\n        \"combined-stream\": \"^1.0.6\",\n        \"mime-types\": \"^2.1.12\"\n      }\n    },\n    \"formatio\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/formatio/-/formatio-1.0.2.tgz\",\n      \"integrity\": \"sha1-55kcoUT/fYz/B7uayGqbeca6R+8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"samsam\": \"~1.1\"\n      }\n    },\n    \"fragment-cache\": {\n      \"version\": \"0.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz\",\n      \"integrity\": \"sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"map-cache\": \"^0.2.2\"\n      }\n    },\n    \"from\": {\n      \"version\": \"0.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/from/-/from-0.1.7.tgz\",\n      \"integrity\": \"sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=\",\n      \"dev\": true\n    },\n    \"fs-mkdirp-stream\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz\",\n      \"integrity\": \"sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=\",\n      \"dev\": true,\n      \"requires\": {\n        \"graceful-fs\": \"^4.1.11\",\n        \"through2\": \"^2.0.3\"\n      }\n    },\n    \"fs.realpath\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz\",\n      \"integrity\": \"sha1-FQStJSMVjKpA20onh8sBQRmU6k8=\",\n      \"dev\": true\n    },\n    \"fsevents\": {\n      \"version\": \"1.2.7\",\n      \"resolved\": \"https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz\",\n      \"integrity\": \"sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==\",\n      \"dev\": true,\n      \"optional\": true,\n      \"requires\": {\n        \"nan\": \"^2.9.2\",\n        \"node-pre-gyp\": \"^0.10.0\"\n      },\n      \"dependencies\": {\n        \"abbrev\": {\n          \"version\": \"1.1.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"ansi-regex\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-w7M6te42DYbg5ijwRorn7yfWVN8=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"aproba\": {\n          \"version\": \"1.2.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"are-we-there-yet\": {\n          \"version\": \"1.1.5\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"delegates\": \"^1.0.0\",\n            \"readable-stream\": \"^2.0.6\"\n          }\n        },\n        \"balanced-match\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-ibTRmasr7kneFk6gK4nORi1xt2c=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"brace-expansion\": {\n          \"version\": \"1.1.11\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"balanced-match\": \"^1.0.0\",\n            \"concat-map\": \"0.0.1\"\n          }\n        },\n        \"chownr\": {\n          \"version\": \"1.1.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"code-point-at\": {\n          \"version\": \"1.1.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"concat-map\": {\n          \"version\": \"0.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"console-control-strings\": {\n          \"version\": \"1.1.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"core-util-is\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"debug\": {\n          \"version\": \"2.6.9\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"ms\": \"2.0.0\"\n          }\n        },\n        \"deep-extend\": {\n          \"version\": \"0.6.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"delegates\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"detect-libc\": {\n          \"version\": \"1.0.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"fs-minipass\": {\n          \"version\": \"1.2.5\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"minipass\": \"^2.2.1\"\n          }\n        },\n        \"fs.realpath\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-FQStJSMVjKpA20onh8sBQRmU6k8=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"gauge\": {\n          \"version\": \"2.7.4\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"aproba\": \"^1.0.3\",\n            \"console-control-strings\": \"^1.0.0\",\n            \"has-unicode\": \"^2.0.0\",\n            \"object-assign\": \"^4.1.0\",\n            \"signal-exit\": \"^3.0.0\",\n            \"string-width\": \"^1.0.1\",\n            \"strip-ansi\": \"^3.0.1\",\n            \"wide-align\": \"^1.1.0\"\n          }\n        },\n        \"glob\": {\n          \"version\": \"7.1.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"fs.realpath\": \"^1.0.0\",\n            \"inflight\": \"^1.0.4\",\n            \"inherits\": \"2\",\n            \"minimatch\": \"^3.0.4\",\n            \"once\": \"^1.3.0\",\n            \"path-is-absolute\": \"^1.0.0\"\n          }\n        },\n        \"has-unicode\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"iconv-lite\": {\n          \"version\": \"0.4.24\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"safer-buffer\": \">= 2.1.2 < 3\"\n          }\n        },\n        \"ignore-walk\": {\n          \"version\": \"3.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"minimatch\": \"^3.0.4\"\n          }\n        },\n        \"inflight\": {\n          \"version\": \"1.0.6\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"once\": \"^1.3.0\",\n            \"wrappy\": \"1\"\n          }\n        },\n        \"inherits\": {\n          \"version\": \"2.0.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"ini\": {\n          \"version\": \"1.3.5\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"is-fullwidth-code-point\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-754xOG8DGn8NZDr4L95QxFfvAMs=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"number-is-nan\": \"^1.0.0\"\n          }\n        },\n        \"isarray\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"minimatch\": {\n          \"version\": \"3.0.4\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"brace-expansion\": \"^1.1.7\"\n          }\n        },\n        \"minimist\": {\n          \"version\": \"0.0.8\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"minipass\": {\n          \"version\": \"2.3.5\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"safe-buffer\": \"^5.1.2\",\n            \"yallist\": \"^3.0.0\"\n          }\n        },\n        \"minizlib\": {\n          \"version\": \"1.2.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"minipass\": \"^2.2.1\"\n          }\n        },\n        \"mkdirp\": {\n          \"version\": \"0.5.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"minimist\": \"0.0.8\"\n          }\n        },\n        \"ms\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"needle\": {\n          \"version\": \"2.2.4\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-HyoqEb4wr/rsoaIDfTH2aVL9nWtQqba2/HvMv+++m8u0dz808MaagKILxtfeSN7QU7nvbQ79zk3vYOJp9zsNEA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"debug\": \"^2.1.2\",\n            \"iconv-lite\": \"^0.4.4\",\n            \"sax\": \"^1.2.4\"\n          }\n        },\n        \"node-pre-gyp\": {\n          \"version\": \"0.10.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"detect-libc\": \"^1.0.2\",\n            \"mkdirp\": \"^0.5.1\",\n            \"needle\": \"^2.2.1\",\n            \"nopt\": \"^4.0.1\",\n            \"npm-packlist\": \"^1.1.6\",\n            \"npmlog\": \"^4.0.2\",\n            \"rc\": \"^1.2.7\",\n            \"rimraf\": \"^2.6.1\",\n            \"semver\": \"^5.3.0\",\n            \"tar\": \"^4\"\n          }\n        },\n        \"nopt\": {\n          \"version\": \"4.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"abbrev\": \"1\",\n            \"osenv\": \"^0.1.4\"\n          }\n        },\n        \"npm-bundled\": {\n          \"version\": \"1.0.5\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-m/e6jgWu8/v5niCUKQi9qQl8QdeEduFA96xHDDzFGqly0OOjI7c+60KM/2sppfnUU9JJagf+zs+yGhqSOFj71g==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"npm-packlist\": {\n          \"version\": \"1.2.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-7Mni4Z8Xkx0/oegoqlcao/JpPCPEMtUvsmB0q7mgvlMinykJLSRTYuFqoQLYgGY8biuxIeiHO+QNJKbCfljewQ==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"ignore-walk\": \"^3.0.1\",\n            \"npm-bundled\": \"^1.0.1\"\n          }\n        },\n        \"npmlog\": {\n          \"version\": \"4.1.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"are-we-there-yet\": \"~1.1.2\",\n            \"console-control-strings\": \"~1.1.0\",\n            \"gauge\": \"~2.7.3\",\n            \"set-blocking\": \"~2.0.0\"\n          }\n        },\n        \"number-is-nan\": {\n          \"version\": \"1.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"object-assign\": {\n          \"version\": \"4.1.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"once\": {\n          \"version\": \"1.4.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-WDsap3WWHUsROsF9nFC6753Xa9E=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"wrappy\": \"1\"\n          }\n        },\n        \"os-homedir\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-/7xJiDNuDoM94MFox+8VISGqf7M=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"os-tmpdir\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"osenv\": {\n          \"version\": \"0.1.5\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"os-homedir\": \"^1.0.0\",\n            \"os-tmpdir\": \"^1.0.0\"\n          }\n        },\n        \"path-is-absolute\": {\n          \"version\": \"1.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-F0uSaHNVNP+8es5r9TpanhtcX18=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"process-nextick-args\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"rc\": {\n          \"version\": \"1.2.8\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"deep-extend\": \"^0.6.0\",\n            \"ini\": \"~1.3.0\",\n            \"minimist\": \"^1.2.0\",\n            \"strip-json-comments\": \"~2.0.1\"\n          },\n          \"dependencies\": {\n            \"minimist\": {\n              \"version\": \"1.2.0\",\n              \"resolved\": false,\n              \"integrity\": \"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=\",\n              \"dev\": true,\n              \"optional\": true\n            }\n          }\n        },\n        \"readable-stream\": {\n          \"version\": \"2.3.6\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"core-util-is\": \"~1.0.0\",\n            \"inherits\": \"~2.0.3\",\n            \"isarray\": \"~1.0.0\",\n            \"process-nextick-args\": \"~2.0.0\",\n            \"safe-buffer\": \"~5.1.1\",\n            \"string_decoder\": \"~1.1.1\",\n            \"util-deprecate\": \"~1.0.1\"\n          }\n        },\n        \"rimraf\": {\n          \"version\": \"2.6.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"glob\": \"^7.1.3\"\n          }\n        },\n        \"safe-buffer\": {\n          \"version\": \"5.1.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"safer-buffer\": {\n          \"version\": \"2.1.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"sax\": {\n          \"version\": \"1.2.4\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"semver\": {\n          \"version\": \"5.6.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"set-blocking\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-BF+XgtARrppoA93TgrJDkrPYkPc=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"signal-exit\": {\n          \"version\": \"3.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"string-width\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"code-point-at\": \"^1.0.0\",\n            \"is-fullwidth-code-point\": \"^1.0.0\",\n            \"strip-ansi\": \"^3.0.0\"\n          }\n        },\n        \"string_decoder\": {\n          \"version\": \"1.1.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"safe-buffer\": \"~5.1.0\"\n          }\n        },\n        \"strip-ansi\": {\n          \"version\": \"3.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"ansi-regex\": \"^2.0.0\"\n          }\n        },\n        \"strip-json-comments\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-PFMZQukIwml8DsNEhYwobHygpgo=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"tar\": {\n          \"version\": \"4.4.8\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"chownr\": \"^1.1.1\",\n            \"fs-minipass\": \"^1.2.5\",\n            \"minipass\": \"^2.3.4\",\n            \"minizlib\": \"^1.1.1\",\n            \"mkdirp\": \"^0.5.0\",\n            \"safe-buffer\": \"^5.1.2\",\n            \"yallist\": \"^3.0.2\"\n          }\n        },\n        \"util-deprecate\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"wide-align\": {\n          \"version\": \"1.1.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==\",\n          \"dev\": true,\n          \"optional\": true,\n          \"requires\": {\n            \"string-width\": \"^1.0.2 || 2\"\n          }\n        },\n        \"wrappy\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": false,\n          \"integrity\": \"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=\",\n          \"dev\": true,\n          \"optional\": true\n        },\n        \"yallist\": {\n          \"version\": \"3.0.3\",\n          \"resolved\": false,\n          \"integrity\": \"sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==\",\n          \"dev\": true,\n          \"optional\": true\n        }\n      }\n    },\n    \"function-bind\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz\",\n      \"integrity\": \"sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==\",\n      \"dev\": true\n    },\n    \"get-caller-file\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz\",\n      \"integrity\": \"sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==\",\n      \"dev\": true\n    },\n    \"get-stdin\": {\n      \"version\": \"4.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz\",\n      \"integrity\": \"sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=\",\n      \"dev\": true\n    },\n    \"get-stream\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz\",\n      \"integrity\": \"sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"pump\": \"^3.0.0\"\n      },\n      \"dependencies\": {\n        \"pump\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/pump/-/pump-3.0.0.tgz\",\n          \"integrity\": \"sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==\",\n          \"dev\": true,\n          \"requires\": {\n            \"end-of-stream\": \"^1.1.0\",\n            \"once\": \"^1.3.1\"\n          }\n        }\n      }\n    },\n    \"get-value\": {\n      \"version\": \"2.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz\",\n      \"integrity\": \"sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=\",\n      \"dev\": true\n    },\n    \"getpass\": {\n      \"version\": \"0.1.7\",\n      \"resolved\": \"https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz\",\n      \"integrity\": \"sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=\",\n      \"dev\": true,\n      \"requires\": {\n        \"assert-plus\": \"^1.0.0\"\n      }\n    },\n    \"gherkin\": {\n      \"version\": \"2.12.2\",\n      \"resolved\": \"https://registry.npmjs.org/gherkin/-/gherkin-2.12.2.tgz\",\n      \"integrity\": \"sha1-PHRUfkZhNKDvg/YUsa38SJtw3GI=\"\n    },\n    \"glob\": {\n      \"version\": \"7.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/glob/-/glob-7.1.3.tgz\",\n      \"integrity\": \"sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"fs.realpath\": \"^1.0.0\",\n        \"inflight\": \"^1.0.4\",\n        \"inherits\": \"2\",\n        \"minimatch\": \"^3.0.4\",\n        \"once\": \"^1.3.0\",\n        \"path-is-absolute\": \"^1.0.0\"\n      }\n    },\n    \"glob-parent\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz\",\n      \"integrity\": \"sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-glob\": \"^3.1.0\",\n        \"path-dirname\": \"^1.0.0\"\n      },\n      \"dependencies\": {\n        \"is-glob\": {\n          \"version\": \"3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz\",\n          \"integrity\": \"sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extglob\": \"^2.1.0\"\n          }\n        }\n      }\n    },\n    \"glob-stream\": {\n      \"version\": \"6.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz\",\n      \"integrity\": \"sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"extend\": \"^3.0.0\",\n        \"glob\": \"^7.1.1\",\n        \"glob-parent\": \"^3.1.0\",\n        \"is-negated-glob\": \"^1.0.0\",\n        \"ordered-read-streams\": \"^1.0.0\",\n        \"pumpify\": \"^1.3.5\",\n        \"readable-stream\": \"^2.1.5\",\n        \"remove-trailing-separator\": \"^1.0.1\",\n        \"to-absolute-glob\": \"^2.0.0\",\n        \"unique-stream\": \"^2.0.2\"\n      }\n    },\n    \"glob-watcher\": {\n      \"version\": \"5.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.3.tgz\",\n      \"integrity\": \"sha512-8tWsULNEPHKQ2MR4zXuzSmqbdyV5PtwwCaWSGQ1WwHsJ07ilNeN1JB8ntxhckbnpSHaf9dXFUHzIWvm1I13dsg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"anymatch\": \"^2.0.0\",\n        \"async-done\": \"^1.2.0\",\n        \"chokidar\": \"^2.0.0\",\n        \"is-negated-glob\": \"^1.0.0\",\n        \"just-debounce\": \"^1.0.0\",\n        \"object.defaults\": \"^1.1.0\"\n      }\n    },\n    \"global-dirs\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz\",\n      \"integrity\": \"sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=\",\n      \"requires\": {\n        \"ini\": \"^1.3.4\"\n      }\n    },\n    \"global-modules\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz\",\n      \"integrity\": \"sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"global-prefix\": \"^1.0.1\",\n        \"is-windows\": \"^1.0.1\",\n        \"resolve-dir\": \"^1.0.0\"\n      }\n    },\n    \"global-prefix\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz\",\n      \"integrity\": \"sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"expand-tilde\": \"^2.0.2\",\n        \"homedir-polyfill\": \"^1.0.1\",\n        \"ini\": \"^1.3.4\",\n        \"is-windows\": \"^1.0.1\",\n        \"which\": \"^1.2.14\"\n      }\n    },\n    \"glogg\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz\",\n      \"integrity\": \"sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"sparkles\": \"^1.0.0\"\n      }\n    },\n    \"got\": {\n      \"version\": \"6.7.1\",\n      \"resolved\": \"https://registry.npmjs.org/got/-/got-6.7.1.tgz\",\n      \"integrity\": \"sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=\",\n      \"requires\": {\n        \"create-error-class\": \"^3.0.0\",\n        \"duplexer3\": \"^0.1.4\",\n        \"get-stream\": \"^3.0.0\",\n        \"is-redirect\": \"^1.0.0\",\n        \"is-retry-allowed\": \"^1.0.0\",\n        \"is-stream\": \"^1.0.0\",\n        \"lowercase-keys\": \"^1.0.0\",\n        \"safe-buffer\": \"^5.0.1\",\n        \"timed-out\": \"^4.0.0\",\n        \"unzip-response\": \"^2.0.1\",\n        \"url-parse-lax\": \"^1.0.0\"\n      },\n      \"dependencies\": {\n        \"get-stream\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz\",\n          \"integrity\": \"sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=\"\n        }\n      }\n    },\n    \"graceful-fs\": {\n      \"version\": \"4.1.15\",\n      \"resolved\": \"https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz\",\n      \"integrity\": \"sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==\"\n    },\n    \"growl\": {\n      \"version\": \"1.10.5\",\n      \"resolved\": \"https://registry.npmjs.org/growl/-/growl-1.10.5.tgz\",\n      \"integrity\": \"sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==\",\n      \"dev\": true\n    },\n    \"gulp\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/gulp/-/gulp-4.0.0.tgz\",\n      \"integrity\": \"sha1-lXZsYB2t5Kd+0+eyttwDiBtZY2Y=\",\n      \"dev\": true,\n      \"requires\": {\n        \"glob-watcher\": \"^5.0.0\",\n        \"gulp-cli\": \"^2.0.0\",\n        \"undertaker\": \"^1.0.0\",\n        \"vinyl-fs\": \"^3.0.0\"\n      },\n      \"dependencies\": {\n        \"gulp-cli\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.0.1.tgz\",\n          \"integrity\": \"sha512-RxujJJdN8/O6IW2nPugl7YazhmrIEjmiVfPKrWt68r71UCaLKS71Hp0gpKT+F6qOUFtr7KqtifDKaAJPRVvMYQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-colors\": \"^1.0.1\",\n            \"archy\": \"^1.0.0\",\n            \"array-sort\": \"^1.0.0\",\n            \"color-support\": \"^1.1.3\",\n            \"concat-stream\": \"^1.6.0\",\n            \"copy-props\": \"^2.0.1\",\n            \"fancy-log\": \"^1.3.2\",\n            \"gulplog\": \"^1.0.0\",\n            \"interpret\": \"^1.1.0\",\n            \"isobject\": \"^3.0.1\",\n            \"liftoff\": \"^2.5.0\",\n            \"matchdep\": \"^2.0.0\",\n            \"mute-stdout\": \"^1.0.0\",\n            \"pretty-hrtime\": \"^1.0.0\",\n            \"replace-homedir\": \"^1.0.0\",\n            \"semver-greatest-satisfied-range\": \"^1.1.0\",\n            \"v8flags\": \"^3.0.1\",\n            \"yargs\": \"^7.1.0\"\n          }\n        }\n      }\n    },\n    \"gulp-coffee\": {\n      \"version\": \"2.3.5\",\n      \"resolved\": \"https://registry.npmjs.org/gulp-coffee/-/gulp-coffee-2.3.5.tgz\",\n      \"integrity\": \"sha512-PbgPGZVyYFnBTYtfYkVN6jcK8Qsuh3BxycPzvu8y5lZroCw3/x1m25KeyEDX110KsVLDmJxoULjscR21VEN4wA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"coffeescript\": \"^1.10.0\",\n        \"gulp-util\": \"^3.0.2\",\n        \"merge\": \"^1.2.0\",\n        \"through2\": \"^2.0.1\",\n        \"vinyl-sourcemaps-apply\": \"^0.2.1\"\n      },\n      \"dependencies\": {\n        \"ansi-styles\": {\n          \"version\": \"2.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz\",\n          \"integrity\": \"sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=\",\n          \"dev\": true\n        },\n        \"chalk\": {\n          \"version\": \"1.1.3\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz\",\n          \"integrity\": \"sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-styles\": \"^2.2.1\",\n            \"escape-string-regexp\": \"^1.0.2\",\n            \"has-ansi\": \"^2.0.0\",\n            \"strip-ansi\": \"^3.0.0\",\n            \"supports-color\": \"^2.0.0\"\n          }\n        },\n        \"clone\": {\n          \"version\": \"1.0.4\",\n          \"resolved\": \"https://registry.npmjs.org/clone/-/clone-1.0.4.tgz\",\n          \"integrity\": \"sha1-2jCcwmPfFZlMaIypAheco8fNfH4=\",\n          \"dev\": true\n        },\n        \"clone-stats\": {\n          \"version\": \"0.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz\",\n          \"integrity\": \"sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=\",\n          \"dev\": true\n        },\n        \"dateformat\": {\n          \"version\": \"2.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz\",\n          \"integrity\": \"sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=\",\n          \"dev\": true\n        },\n        \"gulp-util\": {\n          \"version\": \"3.0.8\",\n          \"resolved\": \"https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz\",\n          \"integrity\": \"sha1-AFTh50RQLifATBh8PsxQXdVLu08=\",\n          \"dev\": true,\n          \"requires\": {\n            \"array-differ\": \"^1.0.0\",\n            \"array-uniq\": \"^1.0.2\",\n            \"beeper\": \"^1.0.0\",\n            \"chalk\": \"^1.0.0\",\n            \"dateformat\": \"^2.0.0\",\n            \"fancy-log\": \"^1.1.0\",\n            \"gulplog\": \"^1.0.0\",\n            \"has-gulplog\": \"^0.1.0\",\n            \"lodash._reescape\": \"^3.0.0\",\n            \"lodash._reevaluate\": \"^3.0.0\",\n            \"lodash._reinterpolate\": \"^3.0.0\",\n            \"lodash.template\": \"^3.0.0\",\n            \"minimist\": \"^1.1.0\",\n            \"multipipe\": \"^0.1.2\",\n            \"object-assign\": \"^3.0.0\",\n            \"replace-ext\": \"0.0.1\",\n            \"through2\": \"^2.0.0\",\n            \"vinyl\": \"^0.5.0\"\n          }\n        },\n        \"has-ansi\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz\",\n          \"integrity\": \"sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-regex\": \"^2.0.0\"\n          }\n        },\n        \"lodash._reinterpolate\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz\",\n          \"integrity\": \"sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=\",\n          \"dev\": true\n        },\n        \"lodash.escape\": {\n          \"version\": \"3.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz\",\n          \"integrity\": \"sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=\",\n          \"dev\": true,\n          \"requires\": {\n            \"lodash._root\": \"^3.0.0\"\n          }\n        },\n        \"lodash.keys\": {\n          \"version\": \"3.1.2\",\n          \"resolved\": \"https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz\",\n          \"integrity\": \"sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=\",\n          \"dev\": true,\n          \"requires\": {\n            \"lodash._getnative\": \"^3.0.0\",\n            \"lodash.isarguments\": \"^3.0.0\",\n            \"lodash.isarray\": \"^3.0.0\"\n          }\n        },\n        \"lodash.template\": {\n          \"version\": \"3.6.2\",\n          \"resolved\": \"https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz\",\n          \"integrity\": \"sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"lodash._basecopy\": \"^3.0.0\",\n            \"lodash._basetostring\": \"^3.0.0\",\n            \"lodash._basevalues\": \"^3.0.0\",\n            \"lodash._isiterateecall\": \"^3.0.0\",\n            \"lodash._reinterpolate\": \"^3.0.0\",\n            \"lodash.escape\": \"^3.0.0\",\n            \"lodash.keys\": \"^3.0.0\",\n            \"lodash.restparam\": \"^3.0.0\",\n            \"lodash.templatesettings\": \"^3.0.0\"\n          }\n        },\n        \"lodash.templatesettings\": {\n          \"version\": \"3.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz\",\n          \"integrity\": \"sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=\",\n          \"dev\": true,\n          \"requires\": {\n            \"lodash._reinterpolate\": \"^3.0.0\",\n            \"lodash.escape\": \"^3.0.0\"\n          }\n        },\n        \"minimist\": {\n          \"version\": \"1.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz\",\n          \"integrity\": \"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=\",\n          \"dev\": true\n        },\n        \"object-assign\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz\",\n          \"integrity\": \"sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=\",\n          \"dev\": true\n        },\n        \"replace-ext\": {\n          \"version\": \"0.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz\",\n          \"integrity\": \"sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=\",\n          \"dev\": true\n        },\n        \"supports-color\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz\",\n          \"integrity\": \"sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=\",\n          \"dev\": true\n        },\n        \"vinyl\": {\n          \"version\": \"0.5.3\",\n          \"resolved\": \"https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz\",\n          \"integrity\": \"sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=\",\n          \"dev\": true,\n          \"requires\": {\n            \"clone\": \"^1.0.0\",\n            \"clone-stats\": \"^0.0.1\",\n            \"replace-ext\": \"0.0.1\"\n          }\n        }\n      }\n    },\n    \"gulp-include\": {\n      \"version\": \"2.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/gulp-include/-/gulp-include-2.3.1.tgz\",\n      \"integrity\": \"sha1-8eDtPw/QdMNHx+WfnPA409vbPjA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"event-stream\": \"~3.1.0\",\n        \"glob\": \"^5.0.12\",\n        \"gulp-util\": \"~2.2.10\",\n        \"source-map\": \"^0.5.1\",\n        \"strip-bom\": \"^2.0.0\",\n        \"vinyl-sourcemaps-apply\": \"^0.2.0\"\n      },\n      \"dependencies\": {\n        \"glob\": {\n          \"version\": \"5.0.15\",\n          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-5.0.15.tgz\",\n          \"integrity\": \"sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=\",\n          \"dev\": true,\n          \"requires\": {\n            \"inflight\": \"^1.0.4\",\n            \"inherits\": \"2\",\n            \"minimatch\": \"2 || 3\",\n            \"once\": \"^1.3.0\",\n            \"path-is-absolute\": \"^1.0.0\"\n          }\n        }\n      }\n    },\n    \"gulp-util\": {\n      \"version\": \"2.2.20\",\n      \"resolved\": \"https://registry.npmjs.org/gulp-util/-/gulp-util-2.2.20.tgz\",\n      \"integrity\": \"sha1-1xRuVyiRC9jwR6awseVJvCLb1kw=\",\n      \"dev\": true,\n      \"requires\": {\n        \"chalk\": \"^0.5.0\",\n        \"dateformat\": \"^1.0.7-1.2.3\",\n        \"lodash._reinterpolate\": \"^2.4.1\",\n        \"lodash.template\": \"^2.4.1\",\n        \"minimist\": \"^0.2.0\",\n        \"multipipe\": \"^0.1.0\",\n        \"through2\": \"^0.5.0\",\n        \"vinyl\": \"^0.2.1\"\n      },\n      \"dependencies\": {\n        \"clone-stats\": {\n          \"version\": \"0.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz\",\n          \"integrity\": \"sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=\",\n          \"dev\": true\n        },\n        \"isarray\": {\n          \"version\": \"0.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz\",\n          \"integrity\": \"sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=\",\n          \"dev\": true\n        },\n        \"readable-stream\": {\n          \"version\": \"1.0.34\",\n          \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz\",\n          \"integrity\": \"sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=\",\n          \"dev\": true,\n          \"requires\": {\n            \"core-util-is\": \"~1.0.0\",\n            \"inherits\": \"~2.0.1\",\n            \"isarray\": \"0.0.1\",\n            \"string_decoder\": \"~0.10.x\"\n          }\n        },\n        \"string_decoder\": {\n          \"version\": \"0.10.31\",\n          \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz\",\n          \"integrity\": \"sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=\",\n          \"dev\": true\n        },\n        \"through2\": {\n          \"version\": \"0.5.1\",\n          \"resolved\": \"https://registry.npmjs.org/through2/-/through2-0.5.1.tgz\",\n          \"integrity\": \"sha1-390BLrnHAOIyP9M084rGIqs3Lac=\",\n          \"dev\": true,\n          \"requires\": {\n            \"readable-stream\": \"~1.0.17\",\n            \"xtend\": \"~3.0.0\"\n          }\n        },\n        \"vinyl\": {\n          \"version\": \"0.2.3\",\n          \"resolved\": \"https://registry.npmjs.org/vinyl/-/vinyl-0.2.3.tgz\",\n          \"integrity\": \"sha1-vKk4IJWC7FpJrVOKAPofEl5RMlI=\",\n          \"dev\": true,\n          \"requires\": {\n            \"clone-stats\": \"~0.0.1\"\n          }\n        },\n        \"xtend\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz\",\n          \"integrity\": \"sha1-XM50B7r2Qsunvs2laBEcST9ZZlo=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"gulplog\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz\",\n      \"integrity\": \"sha1-4oxNRdBey77YGDY86PnFkmIp/+U=\",\n      \"dev\": true,\n      \"requires\": {\n        \"glogg\": \"^1.0.0\"\n      }\n    },\n    \"handlebars\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/handlebars/-/handlebars-4.1.0.tgz\",\n      \"integrity\": \"sha512-l2jRuU1NAWK6AW5qqcTATWQJvNPEwkM7NEKSiv/gqOsoSQbVoWyqVEY5GS+XPQ88zLNmqASRpzfdm8d79hJS+w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"async\": \"^2.5.0\",\n        \"optimist\": \"^0.6.1\",\n        \"source-map\": \"^0.6.1\",\n        \"uglify-js\": \"^3.1.4\"\n      },\n      \"dependencies\": {\n        \"async\": {\n          \"version\": \"2.6.2\",\n          \"resolved\": \"https://registry.npmjs.org/async/-/async-2.6.2.tgz\",\n          \"integrity\": \"sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"lodash\": \"^4.17.11\"\n          }\n        },\n        \"lodash\": {\n          \"version\": \"4.17.11\",\n          \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz\",\n          \"integrity\": \"sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==\",\n          \"dev\": true\n        },\n        \"source-map\": {\n          \"version\": \"0.6.1\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz\",\n          \"integrity\": \"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"har-schema\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz\",\n      \"integrity\": \"sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=\",\n      \"dev\": true\n    },\n    \"har-validator\": {\n      \"version\": \"5.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz\",\n      \"integrity\": \"sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==\",\n      \"dev\": true,\n      \"requires\": {\n        \"ajv\": \"^6.5.5\",\n        \"har-schema\": \"^2.0.0\"\n      }\n    },\n    \"has\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/has/-/has-1.0.3.tgz\",\n      \"integrity\": \"sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"function-bind\": \"^1.1.1\"\n      }\n    },\n    \"has-ansi\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-ansi/-/has-ansi-0.1.0.tgz\",\n      \"integrity\": \"sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-regex\": \"^0.2.0\"\n      },\n      \"dependencies\": {\n        \"ansi-regex\": {\n          \"version\": \"0.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz\",\n          \"integrity\": \"sha1-DY6UaWej2BQ/k+JOKYUl/BsiNfk=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"has-flag\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz\",\n      \"integrity\": \"sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=\",\n      \"dev\": true\n    },\n    \"has-gulplog\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz\",\n      \"integrity\": \"sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"sparkles\": \"^1.0.0\"\n      }\n    },\n    \"has-symbols\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz\",\n      \"integrity\": \"sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=\",\n      \"dev\": true\n    },\n    \"has-value\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz\",\n      \"integrity\": \"sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"get-value\": \"^2.0.6\",\n        \"has-values\": \"^1.0.0\",\n        \"isobject\": \"^3.0.0\"\n      }\n    },\n    \"has-values\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz\",\n      \"integrity\": \"sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-number\": \"^3.0.0\",\n        \"kind-of\": \"^4.0.0\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz\",\n          \"integrity\": \"sha1-IIE989cSkosgc3hpGkUGb65y3Vc=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"he\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/he/-/he-1.2.0.tgz\",\n      \"integrity\": \"sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==\",\n      \"dev\": true\n    },\n    \"homedir-polyfill\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz\",\n      \"integrity\": \"sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"parse-passwd\": \"^1.0.0\"\n      }\n    },\n    \"hosted-git-info\": {\n      \"version\": \"2.7.1\",\n      \"resolved\": \"https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz\",\n      \"integrity\": \"sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==\",\n      \"dev\": true\n    },\n    \"http-browserify\": {\n      \"version\": \"0.1.14\",\n      \"resolved\": \"https://registry.npmjs.org/http-browserify/-/http-browserify-0.1.14.tgz\",\n      \"integrity\": \"sha1-nIs/lAAiBFR8fL5Saa/i6mL3HH8=\",\n      \"requires\": {\n        \"Base64\": \"~0.1.2\",\n        \"concat-stream\": \"~1.0.0\"\n      },\n      \"dependencies\": {\n        \"concat-stream\": {\n          \"version\": \"1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/concat-stream/-/concat-stream-1.0.1.tgz\",\n          \"integrity\": \"sha1-AYsYvBx9BzotyCqkhEI0GixN158=\",\n          \"requires\": {\n            \"bops\": \"0.0.6\"\n          }\n        }\n      }\n    },\n    \"http-signature\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz\",\n      \"integrity\": \"sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"assert-plus\": \"^1.0.0\",\n        \"jsprim\": \"^1.2.2\",\n        \"sshpk\": \"^1.7.0\"\n      }\n    },\n    \"i\": {\n      \"version\": \"0.3.6\",\n      \"resolved\": \"https://registry.npmjs.org/i/-/i-0.3.6.tgz\",\n      \"integrity\": \"sha1-2WyScyB28HJxG2sQ/X1PZa2O4j0=\"\n    },\n    \"import-lazy\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz\",\n      \"integrity\": \"sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=\"\n    },\n    \"imurmurhash\": {\n      \"version\": \"0.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz\",\n      \"integrity\": \"sha1-khi5srkoojixPcT7a21XbyMUU+o=\"\n    },\n    \"indent-string\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz\",\n      \"integrity\": \"sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"repeating\": \"^2.0.0\"\n      }\n    },\n    \"indexof\": {\n      \"version\": \"0.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz\",\n      \"integrity\": \"sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=\"\n    },\n    \"inflight\": {\n      \"version\": \"1.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz\",\n      \"integrity\": \"sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"once\": \"^1.3.0\",\n        \"wrappy\": \"1\"\n      }\n    },\n    \"inherits\": {\n      \"version\": \"2.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz\",\n      \"integrity\": \"sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=\",\n      \"dev\": true\n    },\n    \"ini\": {\n      \"version\": \"1.3.5\",\n      \"resolved\": \"https://registry.npmjs.org/ini/-/ini-1.3.5.tgz\",\n      \"integrity\": \"sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==\"\n    },\n    \"interpret\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz\",\n      \"integrity\": \"sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==\",\n      \"dev\": true\n    },\n    \"invert-kv\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz\",\n      \"integrity\": \"sha1-EEqOSqym09jNFXqO+L+rLXo//bY=\",\n      \"dev\": true\n    },\n    \"is-absolute\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz\",\n      \"integrity\": \"sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-relative\": \"^1.0.0\",\n        \"is-windows\": \"^1.0.1\"\n      }\n    },\n    \"is-accessor-descriptor\": {\n      \"version\": \"0.1.6\",\n      \"resolved\": \"https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz\",\n      \"integrity\": \"sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^3.0.2\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"3.2.2\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz\",\n          \"integrity\": \"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"is-arrayish\": {\n      \"version\": \"0.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz\",\n      \"integrity\": \"sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=\",\n      \"dev\": true\n    },\n    \"is-binary-path\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz\",\n      \"integrity\": \"sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"binary-extensions\": \"^1.0.0\"\n      }\n    },\n    \"is-buffer\": {\n      \"version\": \"1.1.6\",\n      \"resolved\": \"https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz\",\n      \"integrity\": \"sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==\",\n      \"dev\": true\n    },\n    \"is-callable\": {\n      \"version\": \"1.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz\",\n      \"integrity\": \"sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==\",\n      \"dev\": true\n    },\n    \"is-ci\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz\",\n      \"integrity\": \"sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==\",\n      \"requires\": {\n        \"ci-info\": \"^1.5.0\"\n      }\n    },\n    \"is-data-descriptor\": {\n      \"version\": \"0.1.4\",\n      \"resolved\": \"https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz\",\n      \"integrity\": \"sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^3.0.2\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"3.2.2\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz\",\n          \"integrity\": \"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"is-date-object\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz\",\n      \"integrity\": \"sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=\",\n      \"dev\": true\n    },\n    \"is-descriptor\": {\n      \"version\": \"0.1.6\",\n      \"resolved\": \"https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz\",\n      \"integrity\": \"sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-accessor-descriptor\": \"^0.1.6\",\n        \"is-data-descriptor\": \"^0.1.4\",\n        \"kind-of\": \"^5.0.0\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"5.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz\",\n          \"integrity\": \"sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"is-extendable\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz\",\n      \"integrity\": \"sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=\",\n      \"dev\": true\n    },\n    \"is-extglob\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz\",\n      \"integrity\": \"sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=\",\n      \"dev\": true\n    },\n    \"is-finite\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz\",\n      \"integrity\": \"sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=\",\n      \"dev\": true,\n      \"requires\": {\n        \"number-is-nan\": \"^1.0.0\"\n      }\n    },\n    \"is-fullwidth-code-point\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz\",\n      \"integrity\": \"sha1-754xOG8DGn8NZDr4L95QxFfvAMs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"number-is-nan\": \"^1.0.0\"\n      }\n    },\n    \"is-glob\": {\n      \"version\": \"4.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz\",\n      \"integrity\": \"sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-extglob\": \"^2.1.1\"\n      }\n    },\n    \"is-installed-globally\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz\",\n      \"integrity\": \"sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=\",\n      \"requires\": {\n        \"global-dirs\": \"^0.1.0\",\n        \"is-path-inside\": \"^1.0.0\"\n      }\n    },\n    \"is-negated-glob\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz\",\n      \"integrity\": \"sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=\",\n      \"dev\": true\n    },\n    \"is-npm\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz\",\n      \"integrity\": \"sha1-8vtjpl5JBbQGyGBydloaTceTufQ=\"\n    },\n    \"is-number\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz\",\n      \"integrity\": \"sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^3.0.2\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"3.2.2\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz\",\n          \"integrity\": \"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"is-obj\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz\",\n      \"integrity\": \"sha1-PkcprB9f3gJc19g6iW2rn09n2w8=\"\n    },\n    \"is-path-inside\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz\",\n      \"integrity\": \"sha1-jvW33lBDej/cprToZe96pVy0gDY=\",\n      \"requires\": {\n        \"path-is-inside\": \"^1.0.1\"\n      }\n    },\n    \"is-plain-object\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz\",\n      \"integrity\": \"sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==\",\n      \"dev\": true,\n      \"requires\": {\n        \"isobject\": \"^3.0.1\"\n      }\n    },\n    \"is-redirect\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz\",\n      \"integrity\": \"sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=\"\n    },\n    \"is-regex\": {\n      \"version\": \"1.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz\",\n      \"integrity\": \"sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"has\": \"^1.0.1\"\n      }\n    },\n    \"is-relative\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz\",\n      \"integrity\": \"sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-unc-path\": \"^1.0.0\"\n      }\n    },\n    \"is-retry-allowed\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz\",\n      \"integrity\": \"sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=\"\n    },\n    \"is-stream\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz\",\n      \"integrity\": \"sha1-EtSj3U5o4Lec6428hBc66A2RykQ=\"\n    },\n    \"is-symbol\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz\",\n      \"integrity\": \"sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"has-symbols\": \"^1.0.0\"\n      }\n    },\n    \"is-typedarray\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz\",\n      \"integrity\": \"sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=\",\n      \"dev\": true\n    },\n    \"is-unc-path\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz\",\n      \"integrity\": \"sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"unc-path-regex\": \"^0.1.2\"\n      }\n    },\n    \"is-utf8\": {\n      \"version\": \"0.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz\",\n      \"integrity\": \"sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=\",\n      \"dev\": true\n    },\n    \"is-valid-glob\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz\",\n      \"integrity\": \"sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=\",\n      \"dev\": true\n    },\n    \"is-windows\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz\",\n      \"integrity\": \"sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==\",\n      \"dev\": true\n    },\n    \"isarray\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz\",\n      \"integrity\": \"sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=\",\n      \"dev\": true\n    },\n    \"isexe\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz\",\n      \"integrity\": \"sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=\"\n    },\n    \"isobject\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz\",\n      \"integrity\": \"sha1-TkMekrEalzFjaqH5yNHMvP2reN8=\",\n      \"dev\": true\n    },\n    \"isstream\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz\",\n      \"integrity\": \"sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=\"\n    },\n    \"istanbul\": {\n      \"version\": \"0.4.5\",\n      \"resolved\": \"https://registry.npmjs.org/istanbul/-/istanbul-0.4.5.tgz\",\n      \"integrity\": \"sha1-ZcfXPUxNqE1POsMQuRj7C4Azczs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"abbrev\": \"1.0.x\",\n        \"async\": \"1.x\",\n        \"escodegen\": \"1.8.x\",\n        \"esprima\": \"2.7.x\",\n        \"glob\": \"^5.0.15\",\n        \"handlebars\": \"^4.0.1\",\n        \"js-yaml\": \"3.x\",\n        \"mkdirp\": \"0.5.x\",\n        \"nopt\": \"3.x\",\n        \"once\": \"1.x\",\n        \"resolve\": \"1.1.x\",\n        \"supports-color\": \"^3.1.0\",\n        \"which\": \"^1.1.1\",\n        \"wordwrap\": \"^1.0.0\"\n      },\n      \"dependencies\": {\n        \"esprima\": {\n          \"version\": \"2.7.3\",\n          \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz\",\n          \"integrity\": \"sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=\",\n          \"dev\": true\n        },\n        \"glob\": {\n          \"version\": \"5.0.15\",\n          \"resolved\": \"https://registry.npmjs.org/glob/-/glob-5.0.15.tgz\",\n          \"integrity\": \"sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=\",\n          \"dev\": true,\n          \"requires\": {\n            \"inflight\": \"^1.0.4\",\n            \"inherits\": \"2\",\n            \"minimatch\": \"2 || 3\",\n            \"once\": \"^1.3.0\",\n            \"path-is-absolute\": \"^1.0.0\"\n          }\n        },\n        \"resolve\": {\n          \"version\": \"1.1.7\",\n          \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz\",\n          \"integrity\": \"sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=\",\n          \"dev\": true\n        },\n        \"supports-color\": {\n          \"version\": \"3.2.3\",\n          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz\",\n          \"integrity\": \"sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"has-flag\": \"^1.0.0\"\n          }\n        }\n      }\n    },\n    \"js-yaml\": {\n      \"version\": \"3.12.2\",\n      \"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz\",\n      \"integrity\": \"sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==\",\n      \"dev\": true,\n      \"requires\": {\n        \"argparse\": \"^1.0.7\",\n        \"esprima\": \"^4.0.0\"\n      }\n    },\n    \"jsbn\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz\",\n      \"integrity\": \"sha1-peZUwuWi3rXyAdls77yoDA7y9RM=\",\n      \"dev\": true\n    },\n    \"json-schema\": {\n      \"version\": \"0.2.3\",\n      \"resolved\": \"https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz\",\n      \"integrity\": \"sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=\",\n      \"dev\": true\n    },\n    \"json-schema-traverse\": {\n      \"version\": \"0.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz\",\n      \"integrity\": \"sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==\",\n      \"dev\": true\n    },\n    \"json-stable-stringify-without-jsonify\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz\",\n      \"integrity\": \"sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=\",\n      \"dev\": true\n    },\n    \"json-stringify-safe\": {\n      \"version\": \"5.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz\",\n      \"integrity\": \"sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=\",\n      \"dev\": true\n    },\n    \"jsprim\": {\n      \"version\": \"1.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz\",\n      \"integrity\": \"sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=\",\n      \"dev\": true,\n      \"requires\": {\n        \"assert-plus\": \"1.0.0\",\n        \"extsprintf\": \"1.3.0\",\n        \"json-schema\": \"0.2.3\",\n        \"verror\": \"1.10.0\"\n      }\n    },\n    \"just-debounce\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz\",\n      \"integrity\": \"sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=\",\n      \"dev\": true\n    },\n    \"kind-of\": {\n      \"version\": \"6.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz\",\n      \"integrity\": \"sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==\",\n      \"dev\": true\n    },\n    \"last-run\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz\",\n      \"integrity\": \"sha1-RblpQsF7HHnHchmCWbqUO+v4yls=\",\n      \"dev\": true,\n      \"requires\": {\n        \"default-resolution\": \"^2.0.0\",\n        \"es6-weak-map\": \"^2.0.1\"\n      }\n    },\n    \"latest-version\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz\",\n      \"integrity\": \"sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=\",\n      \"requires\": {\n        \"package-json\": \"^4.0.0\"\n      }\n    },\n    \"lazystream\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz\",\n      \"integrity\": \"sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"readable-stream\": \"^2.0.5\"\n      }\n    },\n    \"lcid\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz\",\n      \"integrity\": \"sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=\",\n      \"dev\": true,\n      \"requires\": {\n        \"invert-kv\": \"^1.0.0\"\n      }\n    },\n    \"lcov-parse\": {\n      \"version\": \"0.0.10\",\n      \"resolved\": \"https://registry.npmjs.org/lcov-parse/-/lcov-parse-0.0.10.tgz\",\n      \"integrity\": \"sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM=\",\n      \"dev\": true\n    },\n    \"lead\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lead/-/lead-1.0.0.tgz\",\n      \"integrity\": \"sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=\",\n      \"dev\": true,\n      \"requires\": {\n        \"flush-write-stream\": \"^1.0.2\"\n      }\n    },\n    \"levn\": {\n      \"version\": \"0.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/levn/-/levn-0.3.0.tgz\",\n      \"integrity\": \"sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"prelude-ls\": \"~1.1.2\",\n        \"type-check\": \"~0.3.2\"\n      }\n    },\n    \"liftoff\": {\n      \"version\": \"2.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz\",\n      \"integrity\": \"sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=\",\n      \"dev\": true,\n      \"requires\": {\n        \"extend\": \"^3.0.0\",\n        \"findup-sync\": \"^2.0.0\",\n        \"fined\": \"^1.0.1\",\n        \"flagged-respawn\": \"^1.0.0\",\n        \"is-plain-object\": \"^2.0.4\",\n        \"object.map\": \"^1.0.0\",\n        \"rechoir\": \"^0.6.2\",\n        \"resolve\": \"^1.1.7\"\n      }\n    },\n    \"load-json-file\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz\",\n      \"integrity\": \"sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"graceful-fs\": \"^4.1.2\",\n        \"parse-json\": \"^2.2.0\",\n        \"pify\": \"^2.0.0\",\n        \"pinkie-promise\": \"^2.0.0\",\n        \"strip-bom\": \"^2.0.0\"\n      }\n    },\n    \"locate-path\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz\",\n      \"integrity\": \"sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==\",\n      \"dev\": true,\n      \"requires\": {\n        \"p-locate\": \"^3.0.0\",\n        \"path-exists\": \"^3.0.0\"\n      },\n      \"dependencies\": {\n        \"path-exists\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz\",\n          \"integrity\": \"sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"lodash\": {\n      \"version\": \"4.17.11\",\n      \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz\",\n      \"integrity\": \"sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==\"\n    },\n    \"lodash._basecopy\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz\",\n      \"integrity\": \"sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=\",\n      \"dev\": true\n    },\n    \"lodash._basetostring\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz\",\n      \"integrity\": \"sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=\",\n      \"dev\": true\n    },\n    \"lodash._basevalues\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz\",\n      \"integrity\": \"sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=\",\n      \"dev\": true\n    },\n    \"lodash._escapehtmlchar\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._escapehtmlchar/-/lodash._escapehtmlchar-2.4.1.tgz\",\n      \"integrity\": \"sha1-32fDu2t+jh6DGrSL+geVuSr+iZ0=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._htmlescapes\": \"~2.4.1\"\n      }\n    },\n    \"lodash._escapestringchar\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._escapestringchar/-/lodash._escapestringchar-2.4.1.tgz\",\n      \"integrity\": \"sha1-7P4iYYoq3lC/7qQ5N+Ud9m8O23I=\",\n      \"dev\": true\n    },\n    \"lodash._getnative\": {\n      \"version\": \"3.9.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz\",\n      \"integrity\": \"sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=\",\n      \"dev\": true\n    },\n    \"lodash._htmlescapes\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._htmlescapes/-/lodash._htmlescapes-2.4.1.tgz\",\n      \"integrity\": \"sha1-MtFL8IRLbeb4tioFG09nwii2JMs=\",\n      \"dev\": true\n    },\n    \"lodash._isiterateecall\": {\n      \"version\": \"3.0.9\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz\",\n      \"integrity\": \"sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=\",\n      \"dev\": true\n    },\n    \"lodash._isnative\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._isnative/-/lodash._isnative-2.4.1.tgz\",\n      \"integrity\": \"sha1-PqZAS3hKe+g2x7V1gOHN95sUgyw=\",\n      \"dev\": true\n    },\n    \"lodash._objecttypes\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._objecttypes/-/lodash._objecttypes-2.4.1.tgz\",\n      \"integrity\": \"sha1-fAt/admKH3ZSn4kLDNsbTf7BHBE=\",\n      \"dev\": true\n    },\n    \"lodash._reescape\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz\",\n      \"integrity\": \"sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=\",\n      \"dev\": true\n    },\n    \"lodash._reevaluate\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz\",\n      \"integrity\": \"sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=\",\n      \"dev\": true\n    },\n    \"lodash._reinterpolate\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-2.4.1.tgz\",\n      \"integrity\": \"sha1-TxInqlqHEfxjL1sHofRgequLMiI=\",\n      \"dev\": true\n    },\n    \"lodash._reunescapedhtml\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._reunescapedhtml/-/lodash._reunescapedhtml-2.4.1.tgz\",\n      \"integrity\": \"sha1-dHxPxAED6zu4oJduVx96JlnpO6c=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._htmlescapes\": \"~2.4.1\",\n        \"lodash.keys\": \"~2.4.1\"\n      }\n    },\n    \"lodash._root\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz\",\n      \"integrity\": \"sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=\",\n      \"dev\": true\n    },\n    \"lodash._shimkeys\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash._shimkeys/-/lodash._shimkeys-2.4.1.tgz\",\n      \"integrity\": \"sha1-bpzJZm/wgfC1psl4uD4kLmlJ0gM=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._objecttypes\": \"~2.4.1\"\n      }\n    },\n    \"lodash.defaults\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-2.4.1.tgz\",\n      \"integrity\": \"sha1-p+iIXwXmiFEUS24SqPNngCa8TFQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._objecttypes\": \"~2.4.1\",\n        \"lodash.keys\": \"~2.4.1\"\n      }\n    },\n    \"lodash.escape\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.escape/-/lodash.escape-2.4.1.tgz\",\n      \"integrity\": \"sha1-LOEsXghNsKV92l5dHu659dF1o7Q=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._escapehtmlchar\": \"~2.4.1\",\n        \"lodash._reunescapedhtml\": \"~2.4.1\",\n        \"lodash.keys\": \"~2.4.1\"\n      }\n    },\n    \"lodash.isarguments\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz\",\n      \"integrity\": \"sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=\",\n      \"dev\": true\n    },\n    \"lodash.isarray\": {\n      \"version\": \"3.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz\",\n      \"integrity\": \"sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=\",\n      \"dev\": true\n    },\n    \"lodash.isobject\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-2.4.1.tgz\",\n      \"integrity\": \"sha1-Wi5H/mmVPx7mMafrof5k0tBlWPU=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._objecttypes\": \"~2.4.1\"\n      }\n    },\n    \"lodash.keys\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.keys/-/lodash.keys-2.4.1.tgz\",\n      \"integrity\": \"sha1-SN6kbfj/djKxDXBrissmWR4rNyc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._isnative\": \"~2.4.1\",\n        \"lodash._shimkeys\": \"~2.4.1\",\n        \"lodash.isobject\": \"~2.4.1\"\n      }\n    },\n    \"lodash.restparam\": {\n      \"version\": \"3.6.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz\",\n      \"integrity\": \"sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=\",\n      \"dev\": true\n    },\n    \"lodash.template\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.template/-/lodash.template-2.4.1.tgz\",\n      \"integrity\": \"sha1-nmEQB+32KRKal0qzxIuBez4c8g0=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._escapestringchar\": \"~2.4.1\",\n        \"lodash._reinterpolate\": \"~2.4.1\",\n        \"lodash.defaults\": \"~2.4.1\",\n        \"lodash.escape\": \"~2.4.1\",\n        \"lodash.keys\": \"~2.4.1\",\n        \"lodash.templatesettings\": \"~2.4.1\",\n        \"lodash.values\": \"~2.4.1\"\n      }\n    },\n    \"lodash.templatesettings\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-2.4.1.tgz\",\n      \"integrity\": \"sha1-6nbHXRHrhtTb6JqDiTu4YZKaxpk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash._reinterpolate\": \"~2.4.1\",\n        \"lodash.escape\": \"~2.4.1\"\n      }\n    },\n    \"lodash.values\": {\n      \"version\": \"2.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/lodash.values/-/lodash.values-2.4.1.tgz\",\n      \"integrity\": \"sha1-q/UUQ2s8twUAFieXjLzzCxKA7qQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lodash.keys\": \"~2.4.1\"\n      }\n    },\n    \"log-driver\": {\n      \"version\": \"1.2.7\",\n      \"resolved\": \"https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz\",\n      \"integrity\": \"sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==\",\n      \"dev\": true\n    },\n    \"log-symbols\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz\",\n      \"integrity\": \"sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"chalk\": \"^2.0.1\"\n      },\n      \"dependencies\": {\n        \"ansi-styles\": {\n          \"version\": \"3.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz\",\n          \"integrity\": \"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==\",\n          \"dev\": true,\n          \"requires\": {\n            \"color-convert\": \"^1.9.0\"\n          }\n        },\n        \"chalk\": {\n          \"version\": \"2.4.2\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz\",\n          \"integrity\": \"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-styles\": \"^3.2.1\",\n            \"escape-string-regexp\": \"^1.0.5\",\n            \"supports-color\": \"^5.3.0\"\n          }\n        },\n        \"has-flag\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz\",\n          \"integrity\": \"sha1-tdRU3CGZriJWmfNGfloH87lVuv0=\",\n          \"dev\": true\n        },\n        \"supports-color\": {\n          \"version\": \"5.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz\",\n          \"integrity\": \"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==\",\n          \"dev\": true,\n          \"requires\": {\n            \"has-flag\": \"^3.0.0\"\n          }\n        }\n      }\n    },\n    \"loud-rejection\": {\n      \"version\": \"1.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz\",\n      \"integrity\": \"sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"currently-unhandled\": \"^0.4.1\",\n        \"signal-exit\": \"^3.0.0\"\n      }\n    },\n    \"lowercase-keys\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz\",\n      \"integrity\": \"sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==\"\n    },\n    \"lru-cache\": {\n      \"version\": \"4.1.5\",\n      \"resolved\": \"https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz\",\n      \"integrity\": \"sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==\",\n      \"requires\": {\n        \"pseudomap\": \"^1.0.2\",\n        \"yallist\": \"^2.1.2\"\n      }\n    },\n    \"make-dir\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz\",\n      \"integrity\": \"sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==\",\n      \"requires\": {\n        \"pify\": \"^3.0.0\"\n      },\n      \"dependencies\": {\n        \"pify\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/pify/-/pify-3.0.0.tgz\",\n          \"integrity\": \"sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=\"\n        }\n      }\n    },\n    \"make-iterator\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz\",\n      \"integrity\": \"sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^6.0.2\"\n      }\n    },\n    \"map-age-cleaner\": {\n      \"version\": \"0.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz\",\n      \"integrity\": \"sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"p-defer\": \"^1.0.0\"\n      }\n    },\n    \"map-cache\": {\n      \"version\": \"0.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz\",\n      \"integrity\": \"sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=\",\n      \"dev\": true\n    },\n    \"map-obj\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz\",\n      \"integrity\": \"sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=\",\n      \"dev\": true\n    },\n    \"map-stream\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz\",\n      \"integrity\": \"sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=\",\n      \"dev\": true\n    },\n    \"map-visit\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz\",\n      \"integrity\": \"sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=\",\n      \"dev\": true,\n      \"requires\": {\n        \"object-visit\": \"^1.0.0\"\n      }\n    },\n    \"matchdep\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz\",\n      \"integrity\": \"sha1-xvNINKDY28OzfCfui7yyfHd1WC4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"findup-sync\": \"^2.0.0\",\n        \"micromatch\": \"^3.0.4\",\n        \"resolve\": \"^1.4.0\",\n        \"stack-trace\": \"0.0.10\"\n      }\n    },\n    \"mem\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/mem/-/mem-4.1.0.tgz\",\n      \"integrity\": \"sha512-I5u6Q1x7wxO0kdOpYBB28xueHADYps5uty/zg936CiG8NTe5sJL8EjrCuLneuDW3PlMdZBGDIn8BirEVdovZvg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"map-age-cleaner\": \"^0.1.1\",\n        \"mimic-fn\": \"^1.0.0\",\n        \"p-is-promise\": \"^2.0.0\"\n      }\n    },\n    \"meow\": {\n      \"version\": \"3.7.0\",\n      \"resolved\": \"https://registry.npmjs.org/meow/-/meow-3.7.0.tgz\",\n      \"integrity\": \"sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"camelcase-keys\": \"^2.0.0\",\n        \"decamelize\": \"^1.1.2\",\n        \"loud-rejection\": \"^1.0.0\",\n        \"map-obj\": \"^1.0.1\",\n        \"minimist\": \"^1.1.3\",\n        \"normalize-package-data\": \"^2.3.4\",\n        \"object-assign\": \"^4.0.1\",\n        \"read-pkg-up\": \"^1.0.1\",\n        \"redent\": \"^1.0.0\",\n        \"trim-newlines\": \"^1.0.0\"\n      },\n      \"dependencies\": {\n        \"minimist\": {\n          \"version\": \"1.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz\",\n          \"integrity\": \"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"merge\": {\n      \"version\": \"1.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/merge/-/merge-1.2.1.tgz\",\n      \"integrity\": \"sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==\",\n      \"dev\": true\n    },\n    \"micromatch\": {\n      \"version\": \"3.1.10\",\n      \"resolved\": \"https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz\",\n      \"integrity\": \"sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-diff\": \"^4.0.0\",\n        \"array-unique\": \"^0.3.2\",\n        \"braces\": \"^2.3.1\",\n        \"define-property\": \"^2.0.2\",\n        \"extend-shallow\": \"^3.0.2\",\n        \"extglob\": \"^2.0.4\",\n        \"fragment-cache\": \"^0.2.1\",\n        \"kind-of\": \"^6.0.2\",\n        \"nanomatch\": \"^1.2.9\",\n        \"object.pick\": \"^1.3.0\",\n        \"regex-not\": \"^1.0.0\",\n        \"snapdragon\": \"^0.8.1\",\n        \"to-regex\": \"^3.0.2\"\n      }\n    },\n    \"mime-db\": {\n      \"version\": \"1.38.0\",\n      \"resolved\": \"https://registry.npmjs.org/mime-db/-/mime-db-1.38.0.tgz\",\n      \"integrity\": \"sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==\",\n      \"dev\": true\n    },\n    \"mime-types\": {\n      \"version\": \"2.1.22\",\n      \"resolved\": \"https://registry.npmjs.org/mime-types/-/mime-types-2.1.22.tgz\",\n      \"integrity\": \"sha512-aGl6TZGnhm/li6F7yx82bJiBZwgiEa4Hf6CNr8YO+r5UHr53tSTYZb102zyU50DOWWKeOv0uQLRL0/9EiKWCog==\",\n      \"dev\": true,\n      \"requires\": {\n        \"mime-db\": \"~1.38.0\"\n      }\n    },\n    \"mimic-fn\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz\",\n      \"integrity\": \"sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==\",\n      \"dev\": true\n    },\n    \"minimatch\": {\n      \"version\": \"3.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz\",\n      \"integrity\": \"sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"brace-expansion\": \"^1.1.7\"\n      }\n    },\n    \"minimist\": {\n      \"version\": \"0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.2.0.tgz\",\n      \"integrity\": \"sha512-BESHrmJFCIiBW/PR08JD7bdtBheVQMd9GcvLEq3ACsZU6X3IrvurZwO0xg7uy/U3nt3My6HzDjNWcT6iOygqXA==\"\n    },\n    \"mixin-deep\": {\n      \"version\": \"1.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz\",\n      \"integrity\": \"sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"for-in\": \"^1.0.2\",\n        \"is-extendable\": \"^1.0.1\"\n      },\n      \"dependencies\": {\n        \"is-extendable\": {\n          \"version\": \"1.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz\",\n          \"integrity\": \"sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-plain-object\": \"^2.0.4\"\n          }\n        }\n      }\n    },\n    \"mkdirp\": {\n      \"version\": \"0.5.1\",\n      \"resolved\": \"https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz\",\n      \"integrity\": \"sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=\",\n      \"requires\": {\n        \"minimist\": \"0.0.8\"\n      },\n      \"dependencies\": {\n        \"minimist\": {\n          \"version\": \"0.0.8\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz\",\n          \"integrity\": \"sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=\"\n        }\n      }\n    },\n    \"mocha\": {\n      \"version\": \"6.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/mocha/-/mocha-6.0.2.tgz\",\n      \"integrity\": \"sha512-RtTJsmmToGyeTznSOMoM6TPEk1A84FQaHIciKrRqARZx+B5ccJ5tXlmJzEKGBxZdqk9UjpRsesZTUkZmR5YnuQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-colors\": \"3.2.3\",\n        \"browser-stdout\": \"1.3.1\",\n        \"debug\": \"3.2.6\",\n        \"diff\": \"3.5.0\",\n        \"escape-string-regexp\": \"1.0.5\",\n        \"findup-sync\": \"2.0.0\",\n        \"glob\": \"7.1.3\",\n        \"growl\": \"1.10.5\",\n        \"he\": \"1.2.0\",\n        \"js-yaml\": \"3.12.0\",\n        \"log-symbols\": \"2.2.0\",\n        \"minimatch\": \"3.0.4\",\n        \"mkdirp\": \"0.5.1\",\n        \"ms\": \"2.1.1\",\n        \"node-environment-flags\": \"1.0.4\",\n        \"object.assign\": \"4.1.0\",\n        \"strip-json-comments\": \"2.0.1\",\n        \"supports-color\": \"6.0.0\",\n        \"which\": \"1.3.1\",\n        \"wide-align\": \"1.1.3\",\n        \"yargs\": \"12.0.5\",\n        \"yargs-parser\": \"11.1.1\",\n        \"yargs-unparser\": \"1.5.0\"\n      },\n      \"dependencies\": {\n        \"ansi-colors\": {\n          \"version\": \"3.2.3\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz\",\n          \"integrity\": \"sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==\",\n          \"dev\": true\n        },\n        \"ansi-regex\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz\",\n          \"integrity\": \"sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=\",\n          \"dev\": true\n        },\n        \"camelcase\": {\n          \"version\": \"5.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz\",\n          \"integrity\": \"sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==\",\n          \"dev\": true\n        },\n        \"cliui\": {\n          \"version\": \"4.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz\",\n          \"integrity\": \"sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"string-width\": \"^2.1.1\",\n            \"strip-ansi\": \"^4.0.0\",\n            \"wrap-ansi\": \"^2.0.0\"\n          }\n        },\n        \"debug\": {\n          \"version\": \"3.2.6\",\n          \"resolved\": \"https://registry.npmjs.org/debug/-/debug-3.2.6.tgz\",\n          \"integrity\": \"sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"ms\": \"^2.1.1\"\n          }\n        },\n        \"find-up\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz\",\n          \"integrity\": \"sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"locate-path\": \"^3.0.0\"\n          }\n        },\n        \"has-flag\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz\",\n          \"integrity\": \"sha1-tdRU3CGZriJWmfNGfloH87lVuv0=\",\n          \"dev\": true\n        },\n        \"invert-kv\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz\",\n          \"integrity\": \"sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==\",\n          \"dev\": true\n        },\n        \"is-fullwidth-code-point\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz\",\n          \"integrity\": \"sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=\",\n          \"dev\": true\n        },\n        \"js-yaml\": {\n          \"version\": \"3.12.0\",\n          \"resolved\": \"https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz\",\n          \"integrity\": \"sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==\",\n          \"dev\": true,\n          \"requires\": {\n            \"argparse\": \"^1.0.7\",\n            \"esprima\": \"^4.0.0\"\n          }\n        },\n        \"lcid\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz\",\n          \"integrity\": \"sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==\",\n          \"dev\": true,\n          \"requires\": {\n            \"invert-kv\": \"^2.0.0\"\n          }\n        },\n        \"ms\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.1.1.tgz\",\n          \"integrity\": \"sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==\",\n          \"dev\": true\n        },\n        \"os-locale\": {\n          \"version\": \"3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz\",\n          \"integrity\": \"sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==\",\n          \"dev\": true,\n          \"requires\": {\n            \"execa\": \"^1.0.0\",\n            \"lcid\": \"^2.0.0\",\n            \"mem\": \"^4.0.0\"\n          }\n        },\n        \"string-width\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz\",\n          \"integrity\": \"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-fullwidth-code-point\": \"^2.0.0\",\n            \"strip-ansi\": \"^4.0.0\"\n          }\n        },\n        \"strip-ansi\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz\",\n          \"integrity\": \"sha1-qEeQIusaw2iocTibY1JixQXuNo8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-regex\": \"^3.0.0\"\n          }\n        },\n        \"supports-color\": {\n          \"version\": \"6.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz\",\n          \"integrity\": \"sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"has-flag\": \"^3.0.0\"\n          }\n        },\n        \"which-module\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz\",\n          \"integrity\": \"sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=\",\n          \"dev\": true\n        },\n        \"yargs\": {\n          \"version\": \"12.0.5\",\n          \"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz\",\n          \"integrity\": \"sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==\",\n          \"dev\": true,\n          \"requires\": {\n            \"cliui\": \"^4.0.0\",\n            \"decamelize\": \"^1.2.0\",\n            \"find-up\": \"^3.0.0\",\n            \"get-caller-file\": \"^1.0.1\",\n            \"os-locale\": \"^3.0.0\",\n            \"require-directory\": \"^2.1.1\",\n            \"require-main-filename\": \"^1.0.1\",\n            \"set-blocking\": \"^2.0.0\",\n            \"string-width\": \"^2.0.0\",\n            \"which-module\": \"^2.0.0\",\n            \"y18n\": \"^3.2.1 || ^4.0.0\",\n            \"yargs-parser\": \"^11.1.1\"\n          }\n        },\n        \"yargs-parser\": {\n          \"version\": \"11.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz\",\n          \"integrity\": \"sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"camelcase\": \"^5.0.0\",\n            \"decamelize\": \"^1.2.0\"\n          }\n        }\n      }\n    },\n    \"moment\": {\n      \"version\": \"2.24.0\",\n      \"resolved\": \"https://registry.npmjs.org/moment/-/moment-2.24.0.tgz\",\n      \"integrity\": \"sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==\"\n    },\n    \"ms\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/ms/-/ms-2.0.0.tgz\",\n      \"integrity\": \"sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=\",\n      \"dev\": true\n    },\n    \"multipipe\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz\",\n      \"integrity\": \"sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=\",\n      \"dev\": true,\n      \"requires\": {\n        \"duplexer2\": \"0.0.2\"\n      }\n    },\n    \"mute-stdout\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz\",\n      \"integrity\": \"sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==\",\n      \"dev\": true\n    },\n    \"mute-stream\": {\n      \"version\": \"0.0.8\",\n      \"resolved\": \"https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz\",\n      \"integrity\": \"sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==\"\n    },\n    \"nan\": {\n      \"version\": \"2.12.1\",\n      \"resolved\": \"https://registry.npmjs.org/nan/-/nan-2.12.1.tgz\",\n      \"integrity\": \"sha512-JY7V6lRkStKcKTvHO5NVSQRv+RV+FIL5pvDoLiAtSL9pKlC5x9PKQcZDsq7m4FO4d57mkhC6Z+QhAh3Jdk5JFw==\",\n      \"dev\": true,\n      \"optional\": true\n    },\n    \"nanomatch\": {\n      \"version\": \"1.2.13\",\n      \"resolved\": \"https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz\",\n      \"integrity\": \"sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-diff\": \"^4.0.0\",\n        \"array-unique\": \"^0.3.2\",\n        \"define-property\": \"^2.0.2\",\n        \"extend-shallow\": \"^3.0.2\",\n        \"fragment-cache\": \"^0.2.1\",\n        \"is-windows\": \"^1.0.2\",\n        \"kind-of\": \"^6.0.2\",\n        \"object.pick\": \"^1.3.0\",\n        \"regex-not\": \"^1.0.0\",\n        \"snapdragon\": \"^0.8.1\",\n        \"to-regex\": \"^3.0.1\"\n      }\n    },\n    \"ncp\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ncp/-/ncp-1.0.1.tgz\",\n      \"integrity\": \"sha1-0VNn5cuHQyuhF9K/gP30Wuz7QkY=\"\n    },\n    \"next-tick\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz\",\n      \"integrity\": \"sha1-yobR/ogoFpsBICCOPchCS524NCw=\",\n      \"dev\": true\n    },\n    \"nice-try\": {\n      \"version\": \"1.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz\",\n      \"integrity\": \"sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==\",\n      \"dev\": true\n    },\n    \"node-environment-flags\": {\n      \"version\": \"1.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.4.tgz\",\n      \"integrity\": \"sha512-M9rwCnWVLW7PX+NUWe3ejEdiLYinRpsEre9hMkU/6NS4h+EEulYaDH1gCEZ2gyXsmw+RXYDaV2JkkTNcsPDJ0Q==\",\n      \"dev\": true,\n      \"requires\": {\n        \"object.getownpropertydescriptors\": \"^2.0.3\"\n      }\n    },\n    \"nopt\": {\n      \"version\": \"3.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz\",\n      \"integrity\": \"sha1-xkZdvwirzU2zWTF/eaxopkayj/k=\",\n      \"dev\": true,\n      \"requires\": {\n        \"abbrev\": \"1\"\n      }\n    },\n    \"normalize-package-data\": {\n      \"version\": \"2.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz\",\n      \"integrity\": \"sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"hosted-git-info\": \"^2.1.4\",\n        \"resolve\": \"^1.10.0\",\n        \"semver\": \"2 || 3 || 4 || 5\",\n        \"validate-npm-package-license\": \"^3.0.1\"\n      }\n    },\n    \"normalize-path\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz\",\n      \"integrity\": \"sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"remove-trailing-separator\": \"^1.0.1\"\n      }\n    },\n    \"now-and-later\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.0.tgz\",\n      \"integrity\": \"sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"once\": \"^1.3.2\"\n      }\n    },\n    \"npm-run-path\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz\",\n      \"integrity\": \"sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=\",\n      \"requires\": {\n        \"path-key\": \"^2.0.0\"\n      }\n    },\n    \"nub\": {\n      \"version\": \"0.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/nub/-/nub-0.0.0.tgz\",\n      \"integrity\": \"sha1-s2m9Mr3eZq9ZYFw7BSC8IZ3MwE8=\"\n    },\n    \"number-is-nan\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz\",\n      \"integrity\": \"sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=\",\n      \"dev\": true\n    },\n    \"oauth-sign\": {\n      \"version\": \"0.9.0\",\n      \"resolved\": \"https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz\",\n      \"integrity\": \"sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==\",\n      \"dev\": true\n    },\n    \"object-assign\": {\n      \"version\": \"4.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz\",\n      \"integrity\": \"sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=\",\n      \"dev\": true\n    },\n    \"object-copy\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz\",\n      \"integrity\": \"sha1-fn2Fi3gb18mRpBupde04EnVOmYw=\",\n      \"dev\": true,\n      \"requires\": {\n        \"copy-descriptor\": \"^0.1.0\",\n        \"define-property\": \"^0.2.5\",\n        \"kind-of\": \"^3.0.3\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"0.2.5\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz\",\n          \"integrity\": \"sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^0.1.0\"\n          }\n        },\n        \"kind-of\": {\n          \"version\": \"3.2.2\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz\",\n          \"integrity\": \"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"object-keys\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/object-keys/-/object-keys-1.1.0.tgz\",\n      \"integrity\": \"sha512-6OO5X1+2tYkNyNEx6TsCxEqFfRWaqx6EtMiSbGrw8Ob8v9Ne+Hl8rBAgLBZn5wjEz3s/s6U1WXFUFOcxxAwUpg==\",\n      \"dev\": true\n    },\n    \"object-visit\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz\",\n      \"integrity\": \"sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"isobject\": \"^3.0.0\"\n      }\n    },\n    \"object.assign\": {\n      \"version\": \"4.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz\",\n      \"integrity\": \"sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==\",\n      \"dev\": true,\n      \"requires\": {\n        \"define-properties\": \"^1.1.2\",\n        \"function-bind\": \"^1.1.1\",\n        \"has-symbols\": \"^1.0.0\",\n        \"object-keys\": \"^1.0.11\"\n      }\n    },\n    \"object.defaults\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz\",\n      \"integrity\": \"sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"array-each\": \"^1.0.1\",\n        \"array-slice\": \"^1.0.0\",\n        \"for-own\": \"^1.0.0\",\n        \"isobject\": \"^3.0.0\"\n      }\n    },\n    \"object.getownpropertydescriptors\": {\n      \"version\": \"2.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz\",\n      \"integrity\": \"sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=\",\n      \"dev\": true,\n      \"requires\": {\n        \"define-properties\": \"^1.1.2\",\n        \"es-abstract\": \"^1.5.1\"\n      }\n    },\n    \"object.map\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz\",\n      \"integrity\": \"sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"for-own\": \"^1.0.0\",\n        \"make-iterator\": \"^1.0.0\"\n      }\n    },\n    \"object.pick\": {\n      \"version\": \"1.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz\",\n      \"integrity\": \"sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=\",\n      \"dev\": true,\n      \"requires\": {\n        \"isobject\": \"^3.0.1\"\n      }\n    },\n    \"object.reduce\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz\",\n      \"integrity\": \"sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=\",\n      \"dev\": true,\n      \"requires\": {\n        \"for-own\": \"^1.0.0\",\n        \"make-iterator\": \"^1.0.0\"\n      }\n    },\n    \"once\": {\n      \"version\": \"1.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/once/-/once-1.4.0.tgz\",\n      \"integrity\": \"sha1-WDsap3WWHUsROsF9nFC6753Xa9E=\",\n      \"dev\": true,\n      \"requires\": {\n        \"wrappy\": \"1\"\n      }\n    },\n    \"optimist\": {\n      \"version\": \"0.6.1\",\n      \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz\",\n      \"integrity\": \"sha1-2j6nRob6IaGaERwybpDrFaAZZoY=\",\n      \"dev\": true,\n      \"requires\": {\n        \"minimist\": \"~0.0.1\",\n        \"wordwrap\": \"~0.0.2\"\n      },\n      \"dependencies\": {\n        \"minimist\": {\n          \"version\": \"0.0.10\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz\",\n          \"integrity\": \"sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=\",\n          \"dev\": true\n        },\n        \"wordwrap\": {\n          \"version\": \"0.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz\",\n          \"integrity\": \"sha1-o9XabNXAvAAI03I0u68b7WMFkQc=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"optionator\": {\n      \"version\": \"0.8.2\",\n      \"resolved\": \"https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz\",\n      \"integrity\": \"sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=\",\n      \"dev\": true,\n      \"requires\": {\n        \"deep-is\": \"~0.1.3\",\n        \"fast-levenshtein\": \"~2.0.4\",\n        \"levn\": \"~0.3.0\",\n        \"prelude-ls\": \"~1.1.2\",\n        \"type-check\": \"~0.3.2\",\n        \"wordwrap\": \"~1.0.0\"\n      }\n    },\n    \"options\": {\n      \"version\": \"0.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/options/-/options-0.0.6.tgz\",\n      \"integrity\": \"sha1-7CLTEoBrtT5zF3Pnza788cZDEo8=\"\n    },\n    \"ordered-read-streams\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz\",\n      \"integrity\": \"sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"readable-stream\": \"^2.0.1\"\n      }\n    },\n    \"os-locale\": {\n      \"version\": \"1.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz\",\n      \"integrity\": \"sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"lcid\": \"^1.0.0\"\n      }\n    },\n    \"p-defer\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz\",\n      \"integrity\": \"sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=\",\n      \"dev\": true\n    },\n    \"p-finally\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz\",\n      \"integrity\": \"sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=\"\n    },\n    \"p-is-promise\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.0.0.tgz\",\n      \"integrity\": \"sha512-pzQPhYMCAgLAKPWD2jC3Se9fEfrD9npNos0y150EeqZll7akhEgGhTW/slB6lHku8AvYGiJ+YJ5hfHKePPgFWg==\",\n      \"dev\": true\n    },\n    \"p-limit\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz\",\n      \"integrity\": \"sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==\",\n      \"dev\": true,\n      \"requires\": {\n        \"p-try\": \"^2.0.0\"\n      }\n    },\n    \"p-locate\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz\",\n      \"integrity\": \"sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"p-limit\": \"^2.0.0\"\n      }\n    },\n    \"p-try\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz\",\n      \"integrity\": \"sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==\",\n      \"dev\": true\n    },\n    \"package-json\": {\n      \"version\": \"4.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz\",\n      \"integrity\": \"sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=\",\n      \"requires\": {\n        \"got\": \"^6.7.1\",\n        \"registry-auth-token\": \"^3.0.1\",\n        \"registry-url\": \"^3.0.3\",\n        \"semver\": \"^5.1.0\"\n      }\n    },\n    \"parse-filepath\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz\",\n      \"integrity\": \"sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-absolute\": \"^1.0.0\",\n        \"map-cache\": \"^0.2.0\",\n        \"path-root\": \"^0.1.1\"\n      }\n    },\n    \"parse-json\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz\",\n      \"integrity\": \"sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=\",\n      \"dev\": true,\n      \"requires\": {\n        \"error-ex\": \"^1.2.0\"\n      }\n    },\n    \"parse-node-version\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz\",\n      \"integrity\": \"sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==\",\n      \"dev\": true\n    },\n    \"parse-passwd\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz\",\n      \"integrity\": \"sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=\",\n      \"dev\": true\n    },\n    \"pascalcase\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz\",\n      \"integrity\": \"sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=\",\n      \"dev\": true\n    },\n    \"path-dirname\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz\",\n      \"integrity\": \"sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=\",\n      \"dev\": true\n    },\n    \"path-exists\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz\",\n      \"integrity\": \"sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=\",\n      \"dev\": true,\n      \"requires\": {\n        \"pinkie-promise\": \"^2.0.0\"\n      }\n    },\n    \"path-is-absolute\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz\",\n      \"integrity\": \"sha1-F0uSaHNVNP+8es5r9TpanhtcX18=\",\n      \"dev\": true\n    },\n    \"path-is-inside\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz\",\n      \"integrity\": \"sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=\"\n    },\n    \"path-key\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz\",\n      \"integrity\": \"sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=\"\n    },\n    \"path-parse\": {\n      \"version\": \"1.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz\",\n      \"integrity\": \"sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==\",\n      \"dev\": true\n    },\n    \"path-root\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz\",\n      \"integrity\": \"sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"path-root-regex\": \"^0.1.0\"\n      }\n    },\n    \"path-root-regex\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz\",\n      \"integrity\": \"sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=\",\n      \"dev\": true\n    },\n    \"path-type\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz\",\n      \"integrity\": \"sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"graceful-fs\": \"^4.1.2\",\n        \"pify\": \"^2.0.0\",\n        \"pinkie-promise\": \"^2.0.0\"\n      }\n    },\n    \"pause-stream\": {\n      \"version\": \"0.0.11\",\n      \"resolved\": \"https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz\",\n      \"integrity\": \"sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=\",\n      \"dev\": true,\n      \"requires\": {\n        \"through\": \"~2.3\"\n      }\n    },\n    \"performance-now\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz\",\n      \"integrity\": \"sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=\",\n      \"dev\": true\n    },\n    \"pify\": {\n      \"version\": \"2.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/pify/-/pify-2.3.0.tgz\",\n      \"integrity\": \"sha1-7RQaasBDqEnqWISY59yosVMw6Qw=\",\n      \"dev\": true\n    },\n    \"pinkie\": {\n      \"version\": \"2.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz\",\n      \"integrity\": \"sha1-clVrgM+g1IqXToDnckjoDtT3+HA=\",\n      \"dev\": true\n    },\n    \"pinkie-promise\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz\",\n      \"integrity\": \"sha1-ITXW36ejWMBprJsXh3YogihFD/o=\",\n      \"dev\": true,\n      \"requires\": {\n        \"pinkie\": \"^2.0.0\"\n      }\n    },\n    \"pkginfo\": {\n      \"version\": \"0.4.1\",\n      \"resolved\": \"https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz\",\n      \"integrity\": \"sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=\"\n    },\n    \"pogo\": {\n      \"version\": \"0.5.1\",\n      \"resolved\": \"https://registry.npmjs.org/pogo/-/pogo-0.5.1.tgz\",\n      \"integrity\": \"sha1-N7ienWG2pHHTCTxmmyZTJvtp8/E=\",\n      \"requires\": {\n        \"uglify-js\": \"2.2.4\",\n        \"underscore\": \"1.4.4\"\n      },\n      \"dependencies\": {\n        \"optimist\": {\n          \"version\": \"0.3.7\",\n          \"resolved\": \"https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz\",\n          \"integrity\": \"sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=\",\n          \"requires\": {\n            \"wordwrap\": \"~0.0.2\"\n          }\n        },\n        \"source-map\": {\n          \"version\": \"0.1.43\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz\",\n          \"integrity\": \"sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=\",\n          \"requires\": {\n            \"amdefine\": \">=0.0.4\"\n          }\n        },\n        \"uglify-js\": {\n          \"version\": \"2.2.4\",\n          \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.4.tgz\",\n          \"integrity\": \"sha1-gFtA+kaLH61NqE8+BM0Momv4Cik=\",\n          \"requires\": {\n            \"optimist\": \"~0.3.5\",\n            \"source-map\": \"~0.1.7\"\n          }\n        },\n        \"underscore\": {\n          \"version\": \"1.4.4\",\n          \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.4.4.tgz\",\n          \"integrity\": \"sha1-YaajIBBiKvoHljvzJSA88SI51gQ=\"\n        },\n        \"wordwrap\": {\n          \"version\": \"0.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz\",\n          \"integrity\": \"sha1-o9XabNXAvAAI03I0u68b7WMFkQc=\"\n        }\n      }\n    },\n    \"posix-character-classes\": {\n      \"version\": \"0.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz\",\n      \"integrity\": \"sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=\",\n      \"dev\": true\n    },\n    \"prelude-ls\": {\n      \"version\": \"1.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz\",\n      \"integrity\": \"sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=\",\n      \"dev\": true\n    },\n    \"prepend-http\": {\n      \"version\": \"1.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz\",\n      \"integrity\": \"sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=\"\n    },\n    \"pretty-hrtime\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz\",\n      \"integrity\": \"sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=\",\n      \"dev\": true\n    },\n    \"process-nextick-args\": {\n      \"version\": \"1.0.7\",\n      \"resolved\": \"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz\",\n      \"integrity\": \"sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=\",\n      \"dev\": true\n    },\n    \"prompt\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/prompt/-/prompt-1.0.0.tgz\",\n      \"integrity\": \"sha1-jlcSPDlquYiJf7Mn/Trtw+c15P4=\",\n      \"requires\": {\n        \"colors\": \"^1.1.2\",\n        \"pkginfo\": \"0.x.x\",\n        \"read\": \"1.0.x\",\n        \"revalidator\": \"0.1.x\",\n        \"utile\": \"0.3.x\",\n        \"winston\": \"2.1.x\"\n      },\n      \"dependencies\": {\n        \"colors\": {\n          \"version\": \"1.3.3\",\n          \"resolved\": \"https://registry.npmjs.org/colors/-/colors-1.3.3.tgz\",\n          \"integrity\": \"sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==\"\n        }\n      }\n    },\n    \"pseudomap\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz\",\n      \"integrity\": \"sha1-8FKijacOYYkX7wqKw0wa5aaChrM=\"\n    },\n    \"psl\": {\n      \"version\": \"1.1.31\",\n      \"resolved\": \"https://registry.npmjs.org/psl/-/psl-1.1.31.tgz\",\n      \"integrity\": \"sha512-/6pt4+C+T+wZUieKR620OpzN/LlnNKuWjy1iFLQ/UG35JqHlR/89MP1d96dUfkf6Dne3TuLQzOYEYshJ+Hx8mw==\",\n      \"dev\": true\n    },\n    \"pump\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/pump/-/pump-2.0.1.tgz\",\n      \"integrity\": \"sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"end-of-stream\": \"^1.1.0\",\n        \"once\": \"^1.3.1\"\n      }\n    },\n    \"pumpify\": {\n      \"version\": \"1.5.1\",\n      \"resolved\": \"https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz\",\n      \"integrity\": \"sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"duplexify\": \"^3.6.0\",\n        \"inherits\": \"^2.0.3\",\n        \"pump\": \"^2.0.0\"\n      }\n    },\n    \"punycode\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz\",\n      \"integrity\": \"sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==\",\n      \"dev\": true\n    },\n    \"qs\": {\n      \"version\": \"6.5.2\",\n      \"resolved\": \"https://registry.npmjs.org/qs/-/qs-6.5.2.tgz\",\n      \"integrity\": \"sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==\",\n      \"dev\": true\n    },\n    \"rc\": {\n      \"version\": \"1.2.8\",\n      \"resolved\": \"https://registry.npmjs.org/rc/-/rc-1.2.8.tgz\",\n      \"integrity\": \"sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==\",\n      \"requires\": {\n        \"deep-extend\": \"^0.6.0\",\n        \"ini\": \"~1.3.0\",\n        \"minimist\": \"^1.2.0\",\n        \"strip-json-comments\": \"~2.0.1\"\n      },\n      \"dependencies\": {\n        \"minimist\": {\n          \"version\": \"1.2.0\",\n          \"resolved\": \"https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz\",\n          \"integrity\": \"sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=\"\n        }\n      }\n    },\n    \"read\": {\n      \"version\": \"1.0.7\",\n      \"resolved\": \"https://registry.npmjs.org/read/-/read-1.0.7.tgz\",\n      \"integrity\": \"sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=\",\n      \"requires\": {\n        \"mute-stream\": \"~0.0.4\"\n      }\n    },\n    \"read-pkg\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz\",\n      \"integrity\": \"sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"load-json-file\": \"^1.0.0\",\n        \"normalize-package-data\": \"^2.3.2\",\n        \"path-type\": \"^1.0.0\"\n      }\n    },\n    \"read-pkg-up\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz\",\n      \"integrity\": \"sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=\",\n      \"dev\": true,\n      \"requires\": {\n        \"find-up\": \"^1.0.0\",\n        \"read-pkg\": \"^1.0.0\"\n      }\n    },\n    \"readable-stream\": {\n      \"version\": \"2.3.6\",\n      \"resolved\": \"https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz\",\n      \"integrity\": \"sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"core-util-is\": \"~1.0.0\",\n        \"inherits\": \"~2.0.3\",\n        \"isarray\": \"~1.0.0\",\n        \"process-nextick-args\": \"~2.0.0\",\n        \"safe-buffer\": \"~5.1.1\",\n        \"string_decoder\": \"~1.1.1\",\n        \"util-deprecate\": \"~1.0.1\"\n      },\n      \"dependencies\": {\n        \"process-nextick-args\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz\",\n          \"integrity\": \"sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==\",\n          \"dev\": true\n        }\n      }\n    },\n    \"readdirp\": {\n      \"version\": \"2.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz\",\n      \"integrity\": \"sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"graceful-fs\": \"^4.1.11\",\n        \"micromatch\": \"^3.1.10\",\n        \"readable-stream\": \"^2.0.2\"\n      }\n    },\n    \"rechoir\": {\n      \"version\": \"0.6.2\",\n      \"resolved\": \"https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz\",\n      \"integrity\": \"sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=\",\n      \"dev\": true,\n      \"requires\": {\n        \"resolve\": \"^1.1.6\"\n      }\n    },\n    \"redent\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/redent/-/redent-1.0.0.tgz\",\n      \"integrity\": \"sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=\",\n      \"dev\": true,\n      \"requires\": {\n        \"indent-string\": \"^2.1.0\",\n        \"strip-indent\": \"^1.0.1\"\n      }\n    },\n    \"regex-not\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz\",\n      \"integrity\": \"sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==\",\n      \"dev\": true,\n      \"requires\": {\n        \"extend-shallow\": \"^3.0.2\",\n        \"safe-regex\": \"^1.1.0\"\n      }\n    },\n    \"registry-auth-token\": {\n      \"version\": \"3.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz\",\n      \"integrity\": \"sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==\",\n      \"requires\": {\n        \"rc\": \"^1.1.6\",\n        \"safe-buffer\": \"^5.0.1\"\n      }\n    },\n    \"registry-url\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz\",\n      \"integrity\": \"sha1-PU74cPc93h138M+aOBQyRE4XSUI=\",\n      \"requires\": {\n        \"rc\": \"^1.0.1\"\n      }\n    },\n    \"remove-bom-buffer\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz\",\n      \"integrity\": \"sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-buffer\": \"^1.1.5\",\n        \"is-utf8\": \"^0.2.1\"\n      }\n    },\n    \"remove-bom-stream\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz\",\n      \"integrity\": \"sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=\",\n      \"dev\": true,\n      \"requires\": {\n        \"remove-bom-buffer\": \"^3.0.0\",\n        \"safe-buffer\": \"^5.1.0\",\n        \"through2\": \"^2.0.3\"\n      }\n    },\n    \"remove-trailing-separator\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz\",\n      \"integrity\": \"sha1-wkvOKig62tW8P1jg1IJJuSN52O8=\",\n      \"dev\": true\n    },\n    \"repeat-element\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz\",\n      \"integrity\": \"sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==\",\n      \"dev\": true\n    },\n    \"repeat-string\": {\n      \"version\": \"1.6.1\",\n      \"resolved\": \"https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz\",\n      \"integrity\": \"sha1-jcrkcOHIirwtYA//Sndihtp15jc=\",\n      \"dev\": true\n    },\n    \"repeating\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz\",\n      \"integrity\": \"sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-finite\": \"^1.0.0\"\n      }\n    },\n    \"replace-ext\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz\",\n      \"integrity\": \"sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=\",\n      \"dev\": true\n    },\n    \"replace-homedir\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz\",\n      \"integrity\": \"sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=\",\n      \"dev\": true,\n      \"requires\": {\n        \"homedir-polyfill\": \"^1.0.1\",\n        \"is-absolute\": \"^1.0.0\",\n        \"remove-trailing-separator\": \"^1.1.0\"\n      }\n    },\n    \"request\": {\n      \"version\": \"2.88.0\",\n      \"resolved\": \"https://registry.npmjs.org/request/-/request-2.88.0.tgz\",\n      \"integrity\": \"sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"aws-sign2\": \"~0.7.0\",\n        \"aws4\": \"^1.8.0\",\n        \"caseless\": \"~0.12.0\",\n        \"combined-stream\": \"~1.0.6\",\n        \"extend\": \"~3.0.2\",\n        \"forever-agent\": \"~0.6.1\",\n        \"form-data\": \"~2.3.2\",\n        \"har-validator\": \"~5.1.0\",\n        \"http-signature\": \"~1.2.0\",\n        \"is-typedarray\": \"~1.0.0\",\n        \"isstream\": \"~0.1.2\",\n        \"json-stringify-safe\": \"~5.0.1\",\n        \"mime-types\": \"~2.1.19\",\n        \"oauth-sign\": \"~0.9.0\",\n        \"performance-now\": \"^2.1.0\",\n        \"qs\": \"~6.5.2\",\n        \"safe-buffer\": \"^5.1.2\",\n        \"tough-cookie\": \"~2.4.3\",\n        \"tunnel-agent\": \"^0.6.0\",\n        \"uuid\": \"^3.3.2\"\n      }\n    },\n    \"require-directory\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz\",\n      \"integrity\": \"sha1-jGStX9MNqxyXbiNE/+f3kqam30I=\",\n      \"dev\": true\n    },\n    \"require-main-filename\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz\",\n      \"integrity\": \"sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=\",\n      \"dev\": true\n    },\n    \"resolve\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz\",\n      \"integrity\": \"sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"path-parse\": \"^1.0.6\"\n      }\n    },\n    \"resolve-dir\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz\",\n      \"integrity\": \"sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=\",\n      \"dev\": true,\n      \"requires\": {\n        \"expand-tilde\": \"^2.0.0\",\n        \"global-modules\": \"^1.0.0\"\n      }\n    },\n    \"resolve-options\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz\",\n      \"integrity\": \"sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=\",\n      \"dev\": true,\n      \"requires\": {\n        \"value-or-function\": \"^3.0.0\"\n      }\n    },\n    \"resolve-url\": {\n      \"version\": \"0.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz\",\n      \"integrity\": \"sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=\",\n      \"dev\": true\n    },\n    \"ret\": {\n      \"version\": \"0.1.15\",\n      \"resolved\": \"https://registry.npmjs.org/ret/-/ret-0.1.15.tgz\",\n      \"integrity\": \"sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==\",\n      \"dev\": true\n    },\n    \"revalidator\": {\n      \"version\": \"0.1.8\",\n      \"resolved\": \"https://registry.npmjs.org/revalidator/-/revalidator-0.1.8.tgz\",\n      \"integrity\": \"sha1-/s5hv6DBtSoga9axgZgYS91SOjs=\"\n    },\n    \"rimraf\": {\n      \"version\": \"2.2.8\",\n      \"resolved\": \"https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz\",\n      \"integrity\": \"sha512-R5KMKHnPAQaZMqLOsyuyUmcIjSeDm+73eoqQpaXA7AZ22BL+6C+1mcUscgOsNd8WVlJuvlgAPsegcx7pjlV0Dg==\"\n    },\n    \"safe-buffer\": {\n      \"version\": \"5.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz\",\n      \"integrity\": \"sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==\"\n    },\n    \"safe-regex\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz\",\n      \"integrity\": \"sha1-QKNmnzsHfR6UPURinhV91IAjvy4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"ret\": \"~0.1.10\"\n      }\n    },\n    \"safer-buffer\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz\",\n      \"integrity\": \"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==\",\n      \"dev\": true\n    },\n    \"samsam\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/samsam/-/samsam-1.1.3.tgz\",\n      \"integrity\": \"sha1-n1CHQZtNCR8jJXHn+lLpCw9VJiE=\",\n      \"dev\": true\n    },\n    \"sax\": {\n      \"version\": \"0.6.1\",\n      \"resolved\": \"https://registry.npmjs.org/sax/-/sax-0.6.1.tgz\",\n      \"integrity\": \"sha1-VjsZx8HeiS4Jv8Ty/DDjwn8JUrk=\"\n    },\n    \"selenium-webdriver\": {\n      \"version\": \"2.53.3\",\n      \"resolved\": \"https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-2.53.3.tgz\",\n      \"integrity\": \"sha1-0p/1qVff8aG0ncRXdW5OS/vc4IU=\",\n      \"requires\": {\n        \"rimraf\": \"^2.2.8\",\n        \"tmp\": \"0.0.24\",\n        \"ws\": \"^1.0.1\",\n        \"xml2js\": \"0.4.4\"\n      },\n      \"dependencies\": {\n        \"adm-zip\": {\n          \"version\": \"0.4.13\",\n          \"resolved\": \"https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.13.tgz\",\n          \"integrity\": \"sha512-fERNJX8sOXfel6qCBCMPvZLzENBEhZTzKqg6vrOW5pvoEaQuJhRU4ndTAh6lHOxn1I6jnz2NHra56ZODM751uw==\"\n        }\n      }\n    },\n    \"semver\": {\n      \"version\": \"5.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/semver/-/semver-5.6.0.tgz\",\n      \"integrity\": \"sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==\"\n    },\n    \"semver-diff\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz\",\n      \"integrity\": \"sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=\",\n      \"requires\": {\n        \"semver\": \"^5.0.3\"\n      }\n    },\n    \"semver-greatest-satisfied-range\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz\",\n      \"integrity\": \"sha1-E+jCZYq5aRywzXEJMkAoDTb3els=\",\n      \"dev\": true,\n      \"requires\": {\n        \"sver-compat\": \"^1.5.0\"\n      }\n    },\n    \"set-blocking\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz\",\n      \"integrity\": \"sha1-BF+XgtARrppoA93TgrJDkrPYkPc=\",\n      \"dev\": true\n    },\n    \"set-value\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz\",\n      \"integrity\": \"sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"extend-shallow\": \"^2.0.1\",\n        \"is-extendable\": \"^0.1.1\",\n        \"is-plain-object\": \"^2.0.3\",\n        \"split-string\": \"^3.0.1\"\n      },\n      \"dependencies\": {\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"shebang-command\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz\",\n      \"integrity\": \"sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=\",\n      \"requires\": {\n        \"shebang-regex\": \"^1.0.0\"\n      }\n    },\n    \"shebang-regex\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz\",\n      \"integrity\": \"sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=\"\n    },\n    \"should\": {\n      \"version\": \"3.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/should/-/should-3.3.1.tgz\",\n      \"integrity\": \"sha1-KMk6UiugARRq+WB48KiL9aySlSI=\",\n      \"dev\": true\n    },\n    \"signal-exit\": {\n      \"version\": \"3.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz\",\n      \"integrity\": \"sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=\"\n    },\n    \"sinon\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/sinon/-/sinon-1.10.0.tgz\",\n      \"integrity\": \"sha1-GG9706hAYrxLH1s0xz79ShGgfxs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"formatio\": \"~1.0\",\n        \"util\": \">=0.10.3 <1\"\n      }\n    },\n    \"sinon-chai\": {\n      \"version\": \"2.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/sinon-chai/-/sinon-chai-2.5.0.tgz\",\n      \"integrity\": \"sha1-VijmhQtwPoQS6w2UpcHFvHkjYBg=\",\n      \"dev\": true\n    },\n    \"snapdragon\": {\n      \"version\": \"0.8.2\",\n      \"resolved\": \"https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz\",\n      \"integrity\": \"sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"base\": \"^0.11.1\",\n        \"debug\": \"^2.2.0\",\n        \"define-property\": \"^0.2.5\",\n        \"extend-shallow\": \"^2.0.1\",\n        \"map-cache\": \"^0.2.2\",\n        \"source-map\": \"^0.5.6\",\n        \"source-map-resolve\": \"^0.5.0\",\n        \"use\": \"^3.1.0\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"0.2.5\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz\",\n          \"integrity\": \"sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^0.1.0\"\n          }\n        },\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"snapdragon-node\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz\",\n      \"integrity\": \"sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"define-property\": \"^1.0.0\",\n        \"isobject\": \"^3.0.0\",\n        \"snapdragon-util\": \"^3.0.1\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz\",\n          \"integrity\": \"sha1-dp66rz9KY6rTr56NMEybvnm/sOY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^1.0.0\"\n          }\n        },\n        \"is-accessor-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-data-descriptor\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz\",\n          \"integrity\": \"sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"kind-of\": \"^6.0.0\"\n          }\n        },\n        \"is-descriptor\": {\n          \"version\": \"1.0.2\",\n          \"resolved\": \"https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz\",\n          \"integrity\": \"sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-accessor-descriptor\": \"^1.0.0\",\n            \"is-data-descriptor\": \"^1.0.0\",\n            \"kind-of\": \"^6.0.2\"\n          }\n        }\n      }\n    },\n    \"snapdragon-util\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz\",\n      \"integrity\": \"sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^3.2.0\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"3.2.2\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz\",\n          \"integrity\": \"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"source-map\": {\n      \"version\": \"0.5.7\",\n      \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz\",\n      \"integrity\": \"sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=\",\n      \"dev\": true\n    },\n    \"source-map-resolve\": {\n      \"version\": \"0.5.2\",\n      \"resolved\": \"https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz\",\n      \"integrity\": \"sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"atob\": \"^2.1.1\",\n        \"decode-uri-component\": \"^0.2.0\",\n        \"resolve-url\": \"^0.2.1\",\n        \"source-map-url\": \"^0.4.0\",\n        \"urix\": \"^0.1.0\"\n      }\n    },\n    \"source-map-url\": {\n      \"version\": \"0.4.0\",\n      \"resolved\": \"https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz\",\n      \"integrity\": \"sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=\",\n      \"dev\": true\n    },\n    \"sparkles\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz\",\n      \"integrity\": \"sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==\",\n      \"dev\": true\n    },\n    \"spdx-correct\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz\",\n      \"integrity\": \"sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==\",\n      \"dev\": true,\n      \"requires\": {\n        \"spdx-expression-parse\": \"^3.0.0\",\n        \"spdx-license-ids\": \"^3.0.0\"\n      }\n    },\n    \"spdx-exceptions\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz\",\n      \"integrity\": \"sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==\",\n      \"dev\": true\n    },\n    \"spdx-expression-parse\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz\",\n      \"integrity\": \"sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"spdx-exceptions\": \"^2.1.0\",\n        \"spdx-license-ids\": \"^3.0.0\"\n      }\n    },\n    \"spdx-license-ids\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz\",\n      \"integrity\": \"sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==\",\n      \"dev\": true\n    },\n    \"split\": {\n      \"version\": \"0.2.10\",\n      \"resolved\": \"https://registry.npmjs.org/split/-/split-0.2.10.tgz\",\n      \"integrity\": \"sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=\",\n      \"dev\": true,\n      \"requires\": {\n        \"through\": \"2\"\n      }\n    },\n    \"split-string\": {\n      \"version\": \"3.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz\",\n      \"integrity\": \"sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"extend-shallow\": \"^3.0.0\"\n      }\n    },\n    \"sprintf-js\": {\n      \"version\": \"1.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz\",\n      \"integrity\": \"sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=\",\n      \"dev\": true\n    },\n    \"sshpk\": {\n      \"version\": \"1.16.1\",\n      \"resolved\": \"https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz\",\n      \"integrity\": \"sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"asn1\": \"~0.2.3\",\n        \"assert-plus\": \"^1.0.0\",\n        \"bcrypt-pbkdf\": \"^1.0.0\",\n        \"dashdash\": \"^1.12.0\",\n        \"ecc-jsbn\": \"~0.1.1\",\n        \"getpass\": \"^0.1.1\",\n        \"jsbn\": \"~0.1.0\",\n        \"safer-buffer\": \"^2.0.2\",\n        \"tweetnacl\": \"~0.14.0\"\n      }\n    },\n    \"stack-trace\": {\n      \"version\": \"0.0.10\",\n      \"resolved\": \"https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz\",\n      \"integrity\": \"sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=\"\n    },\n    \"static-extend\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz\",\n      \"integrity\": \"sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=\",\n      \"dev\": true,\n      \"requires\": {\n        \"define-property\": \"^0.2.5\",\n        \"object-copy\": \"^0.1.0\"\n      },\n      \"dependencies\": {\n        \"define-property\": {\n          \"version\": \"0.2.5\",\n          \"resolved\": \"https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz\",\n          \"integrity\": \"sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-descriptor\": \"^0.1.0\"\n          }\n        }\n      }\n    },\n    \"stream-combiner\": {\n      \"version\": \"0.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz\",\n      \"integrity\": \"sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"duplexer\": \"~0.1.1\"\n      }\n    },\n    \"stream-exhaust\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz\",\n      \"integrity\": \"sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==\",\n      \"dev\": true\n    },\n    \"stream-shift\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz\",\n      \"integrity\": \"sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=\",\n      \"dev\": true\n    },\n    \"string-width\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz\",\n      \"integrity\": \"sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=\",\n      \"dev\": true,\n      \"requires\": {\n        \"code-point-at\": \"^1.0.0\",\n        \"is-fullwidth-code-point\": \"^1.0.0\",\n        \"strip-ansi\": \"^3.0.0\"\n      }\n    },\n    \"string_decoder\": {\n      \"version\": \"1.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz\",\n      \"integrity\": \"sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"safe-buffer\": \"~5.1.0\"\n      }\n    },\n    \"strip-ansi\": {\n      \"version\": \"3.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz\",\n      \"integrity\": \"sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=\",\n      \"dev\": true,\n      \"requires\": {\n        \"ansi-regex\": \"^2.0.0\"\n      }\n    },\n    \"strip-bom\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz\",\n      \"integrity\": \"sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-utf8\": \"^0.2.0\"\n      }\n    },\n    \"strip-eof\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz\",\n      \"integrity\": \"sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=\"\n    },\n    \"strip-indent\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz\",\n      \"integrity\": \"sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=\",\n      \"dev\": true,\n      \"requires\": {\n        \"get-stdin\": \"^4.0.1\"\n      }\n    },\n    \"strip-json-comments\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz\",\n      \"integrity\": \"sha1-PFMZQukIwml8DsNEhYwobHygpgo=\"\n    },\n    \"supports-color\": {\n      \"version\": \"0.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-0.2.0.tgz\",\n      \"integrity\": \"sha1-2S3iaU6z9nMjlz1649i1W0wiGQo=\",\n      \"dev\": true\n    },\n    \"sver-compat\": {\n      \"version\": \"1.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz\",\n      \"integrity\": \"sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"es6-iterator\": \"^2.0.1\",\n        \"es6-symbol\": \"^3.1.1\"\n      }\n    },\n    \"syntax-error\": {\n      \"version\": \"0.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/syntax-error/-/syntax-error-0.0.1.tgz\",\n      \"integrity\": \"sha1-AZ0HU0jNjFt58GA8c+U4kafFI10=\",\n      \"requires\": {\n        \"esprima\": \"~0.9.9\"\n      },\n      \"dependencies\": {\n        \"esprima\": {\n          \"version\": \"0.9.9\",\n          \"resolved\": \"https://registry.npmjs.org/esprima/-/esprima-0.9.9.tgz\",\n          \"integrity\": \"sha1-G5CSXJddYy1ygpOcO7nDpCPDBJA=\"\n        }\n      }\n    },\n    \"term-size\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz\",\n      \"integrity\": \"sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=\",\n      \"requires\": {\n        \"execa\": \"^0.7.0\"\n      },\n      \"dependencies\": {\n        \"cross-spawn\": {\n          \"version\": \"5.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz\",\n          \"integrity\": \"sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=\",\n          \"requires\": {\n            \"lru-cache\": \"^4.0.1\",\n            \"shebang-command\": \"^1.2.0\",\n            \"which\": \"^1.2.9\"\n          }\n        },\n        \"execa\": {\n          \"version\": \"0.7.0\",\n          \"resolved\": \"https://registry.npmjs.org/execa/-/execa-0.7.0.tgz\",\n          \"integrity\": \"sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=\",\n          \"requires\": {\n            \"cross-spawn\": \"^5.0.1\",\n            \"get-stream\": \"^3.0.0\",\n            \"is-stream\": \"^1.1.0\",\n            \"npm-run-path\": \"^2.0.0\",\n            \"p-finally\": \"^1.0.0\",\n            \"signal-exit\": \"^3.0.0\",\n            \"strip-eof\": \"^1.0.0\"\n          }\n        },\n        \"get-stream\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz\",\n          \"integrity\": \"sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=\"\n        }\n      }\n    },\n    \"through\": {\n      \"version\": \"2.3.8\",\n      \"resolved\": \"https://registry.npmjs.org/through/-/through-2.3.8.tgz\",\n      \"integrity\": \"sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=\",\n      \"dev\": true\n    },\n    \"through2\": {\n      \"version\": \"2.0.5\",\n      \"resolved\": \"https://registry.npmjs.org/through2/-/through2-2.0.5.tgz\",\n      \"integrity\": \"sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"readable-stream\": \"~2.3.6\",\n        \"xtend\": \"~4.0.1\"\n      }\n    },\n    \"through2-filter\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz\",\n      \"integrity\": \"sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"through2\": \"~2.0.0\",\n        \"xtend\": \"~4.0.0\"\n      }\n    },\n    \"time-stamp\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz\",\n      \"integrity\": \"sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=\",\n      \"dev\": true\n    },\n    \"timed-out\": {\n      \"version\": \"4.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz\",\n      \"integrity\": \"sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=\"\n    },\n    \"tmp\": {\n      \"version\": \"0.0.24\",\n      \"resolved\": \"https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz\",\n      \"integrity\": \"sha1-1qXhmNFKmDXMby18PZ4wJCjIzxI=\"\n    },\n    \"to-absolute-glob\": {\n      \"version\": \"2.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz\",\n      \"integrity\": \"sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-absolute\": \"^1.0.0\",\n        \"is-negated-glob\": \"^1.0.0\"\n      }\n    },\n    \"to-object-path\": {\n      \"version\": \"0.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz\",\n      \"integrity\": \"sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=\",\n      \"dev\": true,\n      \"requires\": {\n        \"kind-of\": \"^3.0.2\"\n      },\n      \"dependencies\": {\n        \"kind-of\": {\n          \"version\": \"3.2.2\",\n          \"resolved\": \"https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz\",\n          \"integrity\": \"sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-buffer\": \"^1.1.5\"\n          }\n        }\n      }\n    },\n    \"to-regex\": {\n      \"version\": \"3.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz\",\n      \"integrity\": \"sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"define-property\": \"^2.0.2\",\n        \"extend-shallow\": \"^3.0.2\",\n        \"regex-not\": \"^1.0.2\",\n        \"safe-regex\": \"^1.1.0\"\n      }\n    },\n    \"to-regex-range\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz\",\n      \"integrity\": \"sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"is-number\": \"^3.0.0\",\n        \"repeat-string\": \"^1.6.1\"\n      }\n    },\n    \"to-through\": {\n      \"version\": \"2.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz\",\n      \"integrity\": \"sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=\",\n      \"dev\": true,\n      \"requires\": {\n        \"through2\": \"^2.0.3\"\n      }\n    },\n    \"to-utf8\": {\n      \"version\": \"0.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/to-utf8/-/to-utf8-0.0.1.tgz\",\n      \"integrity\": \"sha1-0Xrqcv8vujm55DYBvns/9y4ImFI=\"\n    },\n    \"tough-cookie\": {\n      \"version\": \"2.4.3\",\n      \"resolved\": \"https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz\",\n      \"integrity\": \"sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"psl\": \"^1.1.24\",\n        \"punycode\": \"^1.4.1\"\n      },\n      \"dependencies\": {\n        \"punycode\": {\n          \"version\": \"1.4.1\",\n          \"resolved\": \"https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz\",\n          \"integrity\": \"sha1-wNWmOycYgArY4esPpSachN1BhF4=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"trim-newlines\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz\",\n      \"integrity\": \"sha1-WIeWa7WCpFA6QetST301ARgVphM=\",\n      \"dev\": true\n    },\n    \"tunnel-agent\": {\n      \"version\": \"0.6.0\",\n      \"resolved\": \"https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz\",\n      \"integrity\": \"sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=\",\n      \"dev\": true,\n      \"requires\": {\n        \"safe-buffer\": \"^5.0.1\"\n      }\n    },\n    \"tweetnacl\": {\n      \"version\": \"0.14.5\",\n      \"resolved\": \"https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz\",\n      \"integrity\": \"sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=\",\n      \"dev\": true\n    },\n    \"type-check\": {\n      \"version\": \"0.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz\",\n      \"integrity\": \"sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=\",\n      \"dev\": true,\n      \"requires\": {\n        \"prelude-ls\": \"~1.1.2\"\n      }\n    },\n    \"typedarray\": {\n      \"version\": \"0.0.6\",\n      \"resolved\": \"https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz\",\n      \"integrity\": \"sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=\",\n      \"dev\": true\n    },\n    \"uglify-js\": {\n      \"version\": \"3.4.9\",\n      \"resolved\": \"https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz\",\n      \"integrity\": \"sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==\",\n      \"dev\": true,\n      \"optional\": true,\n      \"requires\": {\n        \"commander\": \"~2.17.1\",\n        \"source-map\": \"~0.6.1\"\n      },\n      \"dependencies\": {\n        \"source-map\": {\n          \"version\": \"0.6.1\",\n          \"resolved\": \"https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz\",\n          \"integrity\": \"sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==\",\n          \"dev\": true,\n          \"optional\": true\n        }\n      }\n    },\n    \"ultron\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/ultron/-/ultron-1.0.2.tgz\",\n      \"integrity\": \"sha1-rOEWq1V80Zc4ak6I9GhTeMiy5Po=\"\n    },\n    \"unc-path-regex\": {\n      \"version\": \"0.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz\",\n      \"integrity\": \"sha1-5z3T17DXxe2G+6xrCufYxqadUPo=\",\n      \"dev\": true\n    },\n    \"underscore\": {\n      \"version\": \"1.5.2\",\n      \"resolved\": \"https://registry.npmjs.org/underscore/-/underscore-1.5.2.tgz\",\n      \"integrity\": \"sha1-EzXF5PXm0zu7SwBrqMhqAPVW3gg=\"\n    },\n    \"undertaker\": {\n      \"version\": \"1.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/undertaker/-/undertaker-1.2.0.tgz\",\n      \"integrity\": \"sha1-M52kZGJS0ILcN45wgGcpl1DhG0k=\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-flatten\": \"^1.0.1\",\n        \"arr-map\": \"^2.0.0\",\n        \"bach\": \"^1.0.0\",\n        \"collection-map\": \"^1.0.0\",\n        \"es6-weak-map\": \"^2.0.1\",\n        \"last-run\": \"^1.1.0\",\n        \"object.defaults\": \"^1.0.0\",\n        \"object.reduce\": \"^1.0.0\",\n        \"undertaker-registry\": \"^1.0.0\"\n      }\n    },\n    \"undertaker-registry\": {\n      \"version\": \"1.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz\",\n      \"integrity\": \"sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=\",\n      \"dev\": true\n    },\n    \"union-value\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz\",\n      \"integrity\": \"sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=\",\n      \"dev\": true,\n      \"requires\": {\n        \"arr-union\": \"^3.1.0\",\n        \"get-value\": \"^2.0.6\",\n        \"is-extendable\": \"^0.1.1\",\n        \"set-value\": \"^0.4.3\"\n      },\n      \"dependencies\": {\n        \"extend-shallow\": {\n          \"version\": \"2.0.1\",\n          \"resolved\": \"https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz\",\n          \"integrity\": \"sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-extendable\": \"^0.1.0\"\n          }\n        },\n        \"set-value\": {\n          \"version\": \"0.4.3\",\n          \"resolved\": \"https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz\",\n          \"integrity\": \"sha1-fbCPnT0i3H945Trzw79GZuzfzPE=\",\n          \"dev\": true,\n          \"requires\": {\n            \"extend-shallow\": \"^2.0.1\",\n            \"is-extendable\": \"^0.1.1\",\n            \"is-plain-object\": \"^2.0.1\",\n            \"to-object-path\": \"^0.3.0\"\n          }\n        }\n      }\n    },\n    \"unique-stream\": {\n      \"version\": \"2.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz\",\n      \"integrity\": \"sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==\",\n      \"dev\": true,\n      \"requires\": {\n        \"json-stable-stringify-without-jsonify\": \"^1.0.1\",\n        \"through2-filter\": \"^3.0.0\"\n      }\n    },\n    \"unique-string\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz\",\n      \"integrity\": \"sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=\",\n      \"requires\": {\n        \"crypto-random-string\": \"^1.0.0\"\n      }\n    },\n    \"unset-value\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz\",\n      \"integrity\": \"sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=\",\n      \"dev\": true,\n      \"requires\": {\n        \"has-value\": \"^0.3.1\",\n        \"isobject\": \"^3.0.0\"\n      },\n      \"dependencies\": {\n        \"has-value\": {\n          \"version\": \"0.3.1\",\n          \"resolved\": \"https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz\",\n          \"integrity\": \"sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"get-value\": \"^2.0.3\",\n            \"has-values\": \"^0.1.4\",\n            \"isobject\": \"^2.0.0\"\n          },\n          \"dependencies\": {\n            \"isobject\": {\n              \"version\": \"2.1.0\",\n              \"resolved\": \"https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz\",\n              \"integrity\": \"sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=\",\n              \"dev\": true,\n              \"requires\": {\n                \"isarray\": \"1.0.0\"\n              }\n            }\n          }\n        },\n        \"has-values\": {\n          \"version\": \"0.1.4\",\n          \"resolved\": \"https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz\",\n          \"integrity\": \"sha1-bWHeldkd/Km5oCCJrThL/49it3E=\",\n          \"dev\": true\n        }\n      }\n    },\n    \"unzip-response\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz\",\n      \"integrity\": \"sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=\"\n    },\n    \"upath\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/upath/-/upath-1.1.0.tgz\",\n      \"integrity\": \"sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==\",\n      \"dev\": true\n    },\n    \"update-notifier\": {\n      \"version\": \"2.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz\",\n      \"integrity\": \"sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==\",\n      \"requires\": {\n        \"boxen\": \"^1.2.1\",\n        \"chalk\": \"^2.0.1\",\n        \"configstore\": \"^3.0.0\",\n        \"import-lazy\": \"^2.1.0\",\n        \"is-ci\": \"^1.0.10\",\n        \"is-installed-globally\": \"^0.1.0\",\n        \"is-npm\": \"^1.0.0\",\n        \"latest-version\": \"^3.0.0\",\n        \"semver-diff\": \"^2.0.0\",\n        \"xdg-basedir\": \"^3.0.0\"\n      },\n      \"dependencies\": {\n        \"ansi-styles\": {\n          \"version\": \"3.2.1\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz\",\n          \"integrity\": \"sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==\",\n          \"requires\": {\n            \"color-convert\": \"^1.9.0\"\n          }\n        },\n        \"chalk\": {\n          \"version\": \"2.4.2\",\n          \"resolved\": \"https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz\",\n          \"integrity\": \"sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==\",\n          \"requires\": {\n            \"ansi-styles\": \"^3.2.1\",\n            \"escape-string-regexp\": \"^1.0.5\",\n            \"supports-color\": \"^5.3.0\"\n          }\n        },\n        \"has-flag\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz\",\n          \"integrity\": \"sha1-tdRU3CGZriJWmfNGfloH87lVuv0=\"\n        },\n        \"supports-color\": {\n          \"version\": \"5.5.0\",\n          \"resolved\": \"https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz\",\n          \"integrity\": \"sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==\",\n          \"requires\": {\n            \"has-flag\": \"^3.0.0\"\n          }\n        }\n      }\n    },\n    \"uri-js\": {\n      \"version\": \"4.2.2\",\n      \"resolved\": \"https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz\",\n      \"integrity\": \"sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"punycode\": \"^2.1.0\"\n      }\n    },\n    \"urix\": {\n      \"version\": \"0.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/urix/-/urix-0.1.0.tgz\",\n      \"integrity\": \"sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=\",\n      \"dev\": true\n    },\n    \"url-parse-lax\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz\",\n      \"integrity\": \"sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=\",\n      \"requires\": {\n        \"prepend-http\": \"^1.0.1\"\n      }\n    },\n    \"use\": {\n      \"version\": \"3.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/use/-/use-3.1.1.tgz\",\n      \"integrity\": \"sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==\",\n      \"dev\": true\n    },\n    \"util\": {\n      \"version\": \"0.11.1\",\n      \"resolved\": \"https://registry.npmjs.org/util/-/util-0.11.1.tgz\",\n      \"integrity\": \"sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==\",\n      \"dev\": true,\n      \"requires\": {\n        \"inherits\": \"2.0.3\"\n      }\n    },\n    \"util-deprecate\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz\",\n      \"integrity\": \"sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=\",\n      \"dev\": true\n    },\n    \"utile\": {\n      \"version\": \"0.3.0\",\n      \"resolved\": \"https://registry.npmjs.org/utile/-/utile-0.3.0.tgz\",\n      \"integrity\": \"sha1-E1LDQOuCDk2N26A5pPv6oy7U7zo=\",\n      \"requires\": {\n        \"async\": \"~0.9.0\",\n        \"deep-equal\": \"~0.2.1\",\n        \"i\": \"0.3.x\",\n        \"mkdirp\": \"0.x.x\",\n        \"ncp\": \"1.0.x\",\n        \"rimraf\": \"2.x.x\"\n      },\n      \"dependencies\": {\n        \"async\": {\n          \"version\": \"0.9.2\",\n          \"resolved\": \"https://registry.npmjs.org/async/-/async-0.9.2.tgz\",\n          \"integrity\": \"sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=\"\n        }\n      }\n    },\n    \"uuid\": {\n      \"version\": \"3.3.2\",\n      \"resolved\": \"https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz\",\n      \"integrity\": \"sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==\",\n      \"dev\": true\n    },\n    \"v8flags\": {\n      \"version\": \"3.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/v8flags/-/v8flags-3.1.2.tgz\",\n      \"integrity\": \"sha512-MtivA7GF24yMPte9Rp/BWGCYQNaUj86zeYxV/x2RRJMKagImbbv3u8iJC57lNhWLPcGLJmHcHmFWkNsplbbLWw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"homedir-polyfill\": \"^1.0.1\"\n      }\n    },\n    \"validate-npm-package-license\": {\n      \"version\": \"3.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz\",\n      \"integrity\": \"sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==\",\n      \"dev\": true,\n      \"requires\": {\n        \"spdx-correct\": \"^3.0.0\",\n        \"spdx-expression-parse\": \"^3.0.0\"\n      }\n    },\n    \"value-or-function\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz\",\n      \"integrity\": \"sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=\",\n      \"dev\": true\n    },\n    \"verror\": {\n      \"version\": \"1.10.0\",\n      \"resolved\": \"https://registry.npmjs.org/verror/-/verror-1.10.0.tgz\",\n      \"integrity\": \"sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=\",\n      \"dev\": true,\n      \"requires\": {\n        \"assert-plus\": \"^1.0.0\",\n        \"core-util-is\": \"1.0.2\",\n        \"extsprintf\": \"^1.2.0\"\n      }\n    },\n    \"vinyl\": {\n      \"version\": \"2.2.0\",\n      \"resolved\": \"https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz\",\n      \"integrity\": \"sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==\",\n      \"dev\": true,\n      \"requires\": {\n        \"clone\": \"^2.1.1\",\n        \"clone-buffer\": \"^1.0.0\",\n        \"clone-stats\": \"^1.0.0\",\n        \"cloneable-readable\": \"^1.0.0\",\n        \"remove-trailing-separator\": \"^1.0.1\",\n        \"replace-ext\": \"^1.0.0\"\n      }\n    },\n    \"vinyl-fs\": {\n      \"version\": \"3.0.3\",\n      \"resolved\": \"https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz\",\n      \"integrity\": \"sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==\",\n      \"dev\": true,\n      \"requires\": {\n        \"fs-mkdirp-stream\": \"^1.0.0\",\n        \"glob-stream\": \"^6.1.0\",\n        \"graceful-fs\": \"^4.0.0\",\n        \"is-valid-glob\": \"^1.0.0\",\n        \"lazystream\": \"^1.0.0\",\n        \"lead\": \"^1.0.0\",\n        \"object.assign\": \"^4.0.4\",\n        \"pumpify\": \"^1.3.5\",\n        \"readable-stream\": \"^2.3.3\",\n        \"remove-bom-buffer\": \"^3.0.0\",\n        \"remove-bom-stream\": \"^1.2.0\",\n        \"resolve-options\": \"^1.1.0\",\n        \"through2\": \"^2.0.0\",\n        \"to-through\": \"^2.0.0\",\n        \"value-or-function\": \"^3.0.0\",\n        \"vinyl\": \"^2.0.0\",\n        \"vinyl-sourcemap\": \"^1.1.0\"\n      }\n    },\n    \"vinyl-sourcemap\": {\n      \"version\": \"1.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz\",\n      \"integrity\": \"sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=\",\n      \"dev\": true,\n      \"requires\": {\n        \"append-buffer\": \"^1.0.2\",\n        \"convert-source-map\": \"^1.5.0\",\n        \"graceful-fs\": \"^4.1.6\",\n        \"normalize-path\": \"^2.1.1\",\n        \"now-and-later\": \"^2.0.0\",\n        \"remove-bom-buffer\": \"^3.0.0\",\n        \"vinyl\": \"^2.0.0\"\n      }\n    },\n    \"vinyl-sourcemaps-apply\": {\n      \"version\": \"0.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz\",\n      \"integrity\": \"sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=\",\n      \"dev\": true,\n      \"requires\": {\n        \"source-map\": \"^0.5.1\"\n      }\n    },\n    \"vm-browserify\": {\n      \"version\": \"0.0.4\",\n      \"resolved\": \"https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz\",\n      \"integrity\": \"sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=\",\n      \"requires\": {\n        \"indexof\": \"0.0.1\"\n      }\n    },\n    \"walkdir\": {\n      \"version\": \"0.0.7\",\n      \"resolved\": \"https://registry.npmjs.org/walkdir/-/walkdir-0.0.7.tgz\",\n      \"integrity\": \"sha1-BNoCcKh6d4VAFzzb8KLbSZqNnik=\"\n    },\n    \"which\": {\n      \"version\": \"1.3.1\",\n      \"resolved\": \"https://registry.npmjs.org/which/-/which-1.3.1.tgz\",\n      \"integrity\": \"sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==\",\n      \"requires\": {\n        \"isexe\": \"^2.0.0\"\n      }\n    },\n    \"which-module\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz\",\n      \"integrity\": \"sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=\",\n      \"dev\": true\n    },\n    \"wide-align\": {\n      \"version\": \"1.1.3\",\n      \"resolved\": \"https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz\",\n      \"integrity\": \"sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==\",\n      \"dev\": true,\n      \"requires\": {\n        \"string-width\": \"^1.0.2 || 2\"\n      }\n    },\n    \"widest-line\": {\n      \"version\": \"2.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz\",\n      \"integrity\": \"sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==\",\n      \"requires\": {\n        \"string-width\": \"^2.1.1\"\n      },\n      \"dependencies\": {\n        \"ansi-regex\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz\",\n          \"integrity\": \"sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=\"\n        },\n        \"is-fullwidth-code-point\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz\",\n          \"integrity\": \"sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=\"\n        },\n        \"string-width\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz\",\n          \"integrity\": \"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==\",\n          \"requires\": {\n            \"is-fullwidth-code-point\": \"^2.0.0\",\n            \"strip-ansi\": \"^4.0.0\"\n          }\n        },\n        \"strip-ansi\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz\",\n          \"integrity\": \"sha1-qEeQIusaw2iocTibY1JixQXuNo8=\",\n          \"requires\": {\n            \"ansi-regex\": \"^3.0.0\"\n          }\n        }\n      }\n    },\n    \"winston\": {\n      \"version\": \"2.1.1\",\n      \"resolved\": \"https://registry.npmjs.org/winston/-/winston-2.1.1.tgz\",\n      \"integrity\": \"sha1-PJNJ0ZYgf9G9/51LxD73JRDjoS4=\",\n      \"requires\": {\n        \"async\": \"~1.0.0\",\n        \"colors\": \"1.0.x\",\n        \"cycle\": \"1.0.x\",\n        \"eyes\": \"0.1.x\",\n        \"isstream\": \"0.1.x\",\n        \"pkginfo\": \"0.3.x\",\n        \"stack-trace\": \"0.0.x\"\n      },\n      \"dependencies\": {\n        \"async\": {\n          \"version\": \"1.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/async/-/async-1.0.0.tgz\",\n          \"integrity\": \"sha1-+PwEyjoTeErenhZBr5hXjPvWR6k=\"\n        },\n        \"colors\": {\n          \"version\": \"1.0.3\",\n          \"resolved\": \"https://registry.npmjs.org/colors/-/colors-1.0.3.tgz\",\n          \"integrity\": \"sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=\"\n        },\n        \"pkginfo\": {\n          \"version\": \"0.3.1\",\n          \"resolved\": \"https://registry.npmjs.org/pkginfo/-/pkginfo-0.3.1.tgz\",\n          \"integrity\": \"sha1-Wyn2qB9wcXFC4J52W76rl7T4HiE=\"\n        }\n      }\n    },\n    \"wordwrap\": {\n      \"version\": \"1.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz\",\n      \"integrity\": \"sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=\",\n      \"dev\": true\n    },\n    \"wrap-ansi\": {\n      \"version\": \"2.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz\",\n      \"integrity\": \"sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=\",\n      \"dev\": true,\n      \"requires\": {\n        \"string-width\": \"^1.0.1\",\n        \"strip-ansi\": \"^3.0.1\"\n      }\n    },\n    \"wrappy\": {\n      \"version\": \"1.0.2\",\n      \"resolved\": \"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz\",\n      \"integrity\": \"sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=\",\n      \"dev\": true\n    },\n    \"write-file-atomic\": {\n      \"version\": \"2.4.2\",\n      \"resolved\": \"https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.2.tgz\",\n      \"integrity\": \"sha512-s0b6vB3xIVRLWywa6X9TOMA7k9zio0TMOsl9ZnDkliA/cfJlpHXAscj0gbHVJiTdIuAYpIyqS5GW91fqm6gG5g==\",\n      \"requires\": {\n        \"graceful-fs\": \"^4.1.11\",\n        \"imurmurhash\": \"^0.1.4\",\n        \"signal-exit\": \"^3.0.2\"\n      }\n    },\n    \"ws\": {\n      \"version\": \"1.1.5\",\n      \"resolved\": \"https://registry.npmjs.org/ws/-/ws-1.1.5.tgz\",\n      \"integrity\": \"sha512-o3KqipXNUdS7wpQzBHSe180lBGO60SoK0yVo3CYJgb2MkobuWuBX6dhkYP5ORCLd55y+SaflMOV5fqAB53ux4w==\",\n      \"requires\": {\n        \"options\": \">=0.0.5\",\n        \"ultron\": \"1.0.x\"\n      }\n    },\n    \"xdg-basedir\": {\n      \"version\": \"3.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz\",\n      \"integrity\": \"sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=\"\n    },\n    \"xml2js\": {\n      \"version\": \"0.4.4\",\n      \"resolved\": \"https://registry.npmjs.org/xml2js/-/xml2js-0.4.4.tgz\",\n      \"integrity\": \"sha1-MREBAAMAiuGSQOuhdJe1fHKcVV0=\",\n      \"requires\": {\n        \"sax\": \"0.6.x\",\n        \"xmlbuilder\": \">=1.0.0\"\n      }\n    },\n    \"xmlbuilder\": {\n      \"version\": \"11.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.0.tgz\",\n      \"integrity\": \"sha512-LzeAc96zUlknAk0F+xOXC8hO1D4ISG1ivov9UBjFkPcbSk6jVGhm9J8pTQp1ksZp9YbOws8pae8tVs+hwQl12w==\"\n    },\n    \"xtend\": {\n      \"version\": \"4.0.1\",\n      \"resolved\": \"https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz\",\n      \"integrity\": \"sha1-pcbVMr5lbiPbgg77lDofBJmNY68=\",\n      \"dev\": true\n    },\n    \"y18n\": {\n      \"version\": \"3.2.1\",\n      \"resolved\": \"https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz\",\n      \"integrity\": \"sha1-bRX7qITAhnnA136I53WegR4H+kE=\",\n      \"dev\": true\n    },\n    \"yallist\": {\n      \"version\": \"2.1.2\",\n      \"resolved\": \"https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz\",\n      \"integrity\": \"sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=\"\n    },\n    \"yargs\": {\n      \"version\": \"7.1.0\",\n      \"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz\",\n      \"integrity\": \"sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=\",\n      \"dev\": true,\n      \"requires\": {\n        \"camelcase\": \"^3.0.0\",\n        \"cliui\": \"^3.2.0\",\n        \"decamelize\": \"^1.1.1\",\n        \"get-caller-file\": \"^1.0.1\",\n        \"os-locale\": \"^1.4.0\",\n        \"read-pkg-up\": \"^1.0.1\",\n        \"require-directory\": \"^2.1.1\",\n        \"require-main-filename\": \"^1.0.1\",\n        \"set-blocking\": \"^2.0.0\",\n        \"string-width\": \"^1.0.2\",\n        \"which-module\": \"^1.0.0\",\n        \"y18n\": \"^3.2.1\",\n        \"yargs-parser\": \"^5.0.0\"\n      }\n    },\n    \"yargs-parser\": {\n      \"version\": \"5.0.0\",\n      \"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz\",\n      \"integrity\": \"sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=\",\n      \"dev\": true,\n      \"requires\": {\n        \"camelcase\": \"^3.0.0\"\n      }\n    },\n    \"yargs-unparser\": {\n      \"version\": \"1.5.0\",\n      \"resolved\": \"https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.5.0.tgz\",\n      \"integrity\": \"sha512-HK25qidFTCVuj/D1VfNiEndpLIeJN78aqgR23nL3y4N0U/91cOAzqfHlF8n2BvoNDcZmJKin3ddNSvOxSr8flw==\",\n      \"dev\": true,\n      \"requires\": {\n        \"flat\": \"^4.1.0\",\n        \"lodash\": \"^4.17.11\",\n        \"yargs\": \"^12.0.5\"\n      },\n      \"dependencies\": {\n        \"ansi-regex\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz\",\n          \"integrity\": \"sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=\",\n          \"dev\": true\n        },\n        \"camelcase\": {\n          \"version\": \"5.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/camelcase/-/camelcase-5.0.0.tgz\",\n          \"integrity\": \"sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA==\",\n          \"dev\": true\n        },\n        \"cliui\": {\n          \"version\": \"4.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz\",\n          \"integrity\": \"sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"string-width\": \"^2.1.1\",\n            \"strip-ansi\": \"^4.0.0\",\n            \"wrap-ansi\": \"^2.0.0\"\n          }\n        },\n        \"find-up\": {\n          \"version\": \"3.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz\",\n          \"integrity\": \"sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==\",\n          \"dev\": true,\n          \"requires\": {\n            \"locate-path\": \"^3.0.0\"\n          }\n        },\n        \"invert-kv\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz\",\n          \"integrity\": \"sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==\",\n          \"dev\": true\n        },\n        \"is-fullwidth-code-point\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz\",\n          \"integrity\": \"sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=\",\n          \"dev\": true\n        },\n        \"lcid\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz\",\n          \"integrity\": \"sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==\",\n          \"dev\": true,\n          \"requires\": {\n            \"invert-kv\": \"^2.0.0\"\n          }\n        },\n        \"lodash\": {\n          \"version\": \"4.17.11\",\n          \"resolved\": \"https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz\",\n          \"integrity\": \"sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==\",\n          \"dev\": true\n        },\n        \"os-locale\": {\n          \"version\": \"3.1.0\",\n          \"resolved\": \"https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz\",\n          \"integrity\": \"sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==\",\n          \"dev\": true,\n          \"requires\": {\n            \"execa\": \"^1.0.0\",\n            \"lcid\": \"^2.0.0\",\n            \"mem\": \"^4.0.0\"\n          }\n        },\n        \"string-width\": {\n          \"version\": \"2.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz\",\n          \"integrity\": \"sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==\",\n          \"dev\": true,\n          \"requires\": {\n            \"is-fullwidth-code-point\": \"^2.0.0\",\n            \"strip-ansi\": \"^4.0.0\"\n          }\n        },\n        \"strip-ansi\": {\n          \"version\": \"4.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz\",\n          \"integrity\": \"sha1-qEeQIusaw2iocTibY1JixQXuNo8=\",\n          \"dev\": true,\n          \"requires\": {\n            \"ansi-regex\": \"^3.0.0\"\n          }\n        },\n        \"which-module\": {\n          \"version\": \"2.0.0\",\n          \"resolved\": \"https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz\",\n          \"integrity\": \"sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=\",\n          \"dev\": true\n        },\n        \"yargs\": {\n          \"version\": \"12.0.5\",\n          \"resolved\": \"https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz\",\n          \"integrity\": \"sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==\",\n          \"dev\": true,\n          \"requires\": {\n            \"cliui\": \"^4.0.0\",\n            \"decamelize\": \"^1.2.0\",\n            \"find-up\": \"^3.0.0\",\n            \"get-caller-file\": \"^1.0.1\",\n            \"os-locale\": \"^3.0.0\",\n            \"require-directory\": \"^2.1.1\",\n            \"require-main-filename\": \"^1.0.1\",\n            \"set-blocking\": \"^2.0.0\",\n            \"string-width\": \"^2.0.0\",\n            \"which-module\": \"^2.0.0\",\n            \"y18n\": \"^3.2.1 || ^4.0.0\",\n            \"yargs-parser\": \"^11.1.1\"\n          }\n        },\n        \"yargs-parser\": {\n          \"version\": \"11.1.1\",\n          \"resolved\": \"https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz\",\n          \"integrity\": \"sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==\",\n          \"dev\": true,\n          \"requires\": {\n            \"camelcase\": \"^5.0.0\",\n            \"decamelize\": \"^1.2.0\"\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"pioneer\",\n  \"description\": \"Delicious Cucumber tests\",\n  \"keywords\": [\n    \"cucumber\",\n    \"selenium-webdriver\",\n    \"testing\"\n  ],\n  \"author\": \"MojoTech\",\n  \"version\": \"0.11.7\",\n  \"license\": \"MIT\",\n  \"engines\": {\n    \"node\": \">=0.8.0\"\n  },\n  \"directories\": {\n    \"lib\": \"./lib\",\n    \"bin\": \"./bin\"\n  },\n  \"main\": \"./lib/pioneer\",\n  \"bin\": {\n    \"pioneer\": \"bin/pioneer\"\n  },\n  \"scripts\": {\n    \"build\": \"npm run-script clean && gulp\",\n    \"clean\": \"rm -rf lib\",\n    \"pub\": \"npm run-script build && npm publish && npm run-script clean\",\n    \"test\": \"istanbul cover --dir coverage/unit -x **/lib/**/*format.js node_modules/mocha/bin/_mocha -- test/unit/**.coffee\",\n    \"integration\": \"istanbul cover -x **/lib/**/*format.js ./bin/pioneer --dir coverage/integration\",\n    \"coverage\": \"./coverage.sh\"\n  },\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/mojotech/pioneer.git\"\n  },\n  \"devDependencies\": {\n    \"coffeescript\": \"^1.12.7\",\n    \"coveralls\": \"^3.0.3\",\n    \"exec\": \"0.1.1\",\n    \"gulp\": \"~4.0.0\",\n    \"gulp-coffee\": \"^2.3.5\",\n    \"gulp-include\": \"^2.3.1\",\n    \"istanbul\": \"^0.4.5\",\n    \"mocha\": \"^6.0.2\",\n    \"should\": \"3.3.1\",\n    \"sinon\": \"1.10.0\",\n    \"sinon-chai\": \"2.5.0\"\n  },\n  \"dependencies\": {\n    \"bluebird\": \"1.2.4\",\n    \"chai\": \"1.9.2\",\n    \"chai-as-promised\": \"4.1.0\",\n    \"colors\": \"0.6.2\",\n    \"cucumber\": \"joshtombs/cucumber-js#0.3.3ErrorFormatting\",\n    \"lodash\": \"^4.17.11\",\n    \"minimist\": \"0.2.0\",\n    \"moment\": \"2.24.0\",\n    \"prompt\": \"^1.0.0\",\n    \"rimraf\": \"2.2.8\",\n    \"selenium-webdriver\": \"^2.53.3\",\n    \"update-notifier\": \"2.5.0\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/mojotech/pioneer/issues\"\n  },\n  \"homepage\": \"https://github.com/mojotech/pioneer\"\n}\n"
  },
  {
    "path": "pioneer.json",
    "content": "{\n  \"feature\": \"test/integration/features\",\n  \"require\": [\n    \"test/integration/steps\",\n    \"test/integration/widgets\"\n  ],\n  \"format\": \"pioneerformat.js\",\n  \"driver\": \"phantomjs\",\n  \"error_formatter\": \"errorformat.js\",\n  \"preventReload\": true,\n  \"coffee\": false\n}\n"
  },
  {
    "path": "src/config_builder.coffee",
    "content": "fs           = require 'fs'\npath         = require 'path'\nscaffold     = require './scaffold_builder.js'\n_            = require 'lodash'\n\nCONFIG_NAMES = [\n  \"tags\",\n  \"feature\",\n  \"require\",\n  \"format\",\n  \"error_formatter\",\n  \"coffee\",\n  \"driver\",\n  \"preventReload\",\n  \"scaffold\"\n]\n\nCUCUMBER_FORMATTERS = [\n  \"pretty\",\n  \"progress\",\n  \"json\",\n  \"summary\"\n]\n\nmodule.exports =\n  convertToExecOptions: (objArry, libPath) ->\n    execOptions =\n      _.map objArry, (val) =>\n        k = _.keys(val)[0]\n\n        switch\n          when k is 'tags'\n            \"--#{k}=\".concat(\n              (_(Array::concat(val[k]))\n              .flatten()\n              .value())\n              .join(\", \"))\n\n          when k is 'driver'\n            process.argv.push \"--driver=#{val[k]}\"\n            \"\"\n\n          when k is 'coffee'\n            if val[k]\n              \"--#{k}\"\n            else\n              \"\"\n          when k is \"format\"\n            v = val[k]\n            if @isCucumberFormatter(v)\n              \"--format=#{v}\"\n            else if fs.existsSync(p = path.join(process.cwd(), v))\n              \"--format=#{p}\"\n            else\n              \"--format=#{path.join(libPath, v)}\"\n\n\n          when k is 'preventReload'\n            v = val[k]\n            switch\n              when typeof(v) is \"string\"\n                if(v == \"true\")\n                  process.argv.push(\"--prevent-browser-reload\")\n                \"\"\n\n              else\n                if(val[k])\n                  process.argv.push(\"--prevent-browser-reload\")\n                \"\"\n\n          when k is 'feature'\n            val[k] = Array::concat(val[k])\n\n          when k is 'require'\n            val[k].reduce((p, v) ->\n              p.concat(\"--require\", v)\n            , [])\n\n          else\n            if k?\n              \"--#{k}=#{val[k]}\"\n            else\n              \"\"\n\n    _([\"--require\", path.join(libPath, \"support\")])\n    .concat(execOptions)\n    .flatten()\n    .compact()\n    .tap( (arr) -> arr.splice(0, 0, null, null))\n    .value()\n\n  generateOptions: (minimist, config, libPath) ->\n    options =\n    _(CONFIG_NAMES)\n    .map((name) ->\n      obj = {}\n\n      if (minimist[name]?)\n        obj[name] = minimist[name]\n        if name is 'require' and config[name]?\n          obj[name] = Array::concat(obj[name]).concat(config[name])\n      else if config[name]?\n        obj[name] = config[name]\n\n      if obj[name]? then obj else null\n    )\n    .compact()\n    .value()\n\n    if(!@hasFeature(options))\n      if(fs.existsSync(path.join(process.cwd(), '/features')))\n        @convertToExecOptions(options, libPath)\n      else\n        if(!!minimist[\"_\"].length)\n          options.push({feature: minimist[\"_\"]})\n          @convertToExecOptions(options, libPath)\n        else\n          scaffold.featureNotSpecified()\n          return null\n    else\n      @convertToExecOptions(options, libPath)\n\n  hasFeature: (options) ->\n    r = false\n    _.forEach options, (opt) =>\n        k = _.keys(opt)[0]\n        if(k == 'feature')\n          r = true\n\n    r\n\n  isCucumberFormatter: (formatter) ->\n    !!(_.find(CUCUMBER_FORMATTERS, (f) -> f is formatter))\n"
  },
  {
    "path": "src/environment.coffee",
    "content": "Driver = require('selenium-webdriver')\n$      = Driver.promise\nmodule.exports = ->\n\n  # *********************************************************************************\n  # Extend Object with class helpers (used in the context of a class definition):\n  # *********************************************************************************\n  #\n  #   includes - mixin classes (extends the class itself and the prototype)\n  #\n  #     class A\n  #       @onTheClass: -> \"hello world, I'm on a class\"\n  #       onAnInstance: -> \"hello world, I'm on an instance\"\n  #\n  #     class B\n  #       @includes A\n  #\n  #     B.onTheClass()\n  #     #  => \"hello world, I'm on a class\"\n  #     (new B()).onAnInstance()\n  #     #  => \"hello world, I'm on an instance\"\n  #\n  #     Note: unlike underscore's \"extend\" or coffeescript's class extension,\n  #       include will successfully copy true getters and setters.\n  #\n  # ****************************************************************************\n  #\n  #   getter - define a getter function (evaluated whenever a property is accessed)\n  #\n  #     class A\n  #       @getter 'hello', -> 'world!'\n  #\n  #     (new A).hello # => 'world!'\n  #\n  # *********************************************************************************\n  #\n  #   setter - define a setter function (evaluated whenever a property is assigned)\n  #\n  #     class A\n  #       @getter 'hello', -> @_hello\n  #       @setter 'hello', (value) -> @_hello = 'hello'\n  #\n  #     a = new A\n  #     a.hello = 'friend!' #\n  #     a.hello             # => 'friend!'\n  #     a._hello            # => 'friend!'\n  #\n  # *********************************************************************************\n\n  # return the descriptor for an object's property, regardless of\n  # how far back in the prototype chain it was defined\n  origDescriptor = (source, prop) ->\n    return nil unless source\n    Object.getOwnPropertyDescriptor(source, prop) ||\n      origDescriptor(Object.getPrototypeOf(source), prop)\n\n  Object.defineProperties Object::,\n\n    # like _.extend but handles true getters and setters:\n    copyProperties:\n      value: (source) ->\n        for prop of source\n          Object.defineProperty @, prop, origDescriptor(source, prop)\n        @\n\n    includes:\n      value: (mixin) ->\n        @copyProperties(@, mixin)\n        @copyProperties(@::, mixin::)\n        @\n    getter:\n      value: (object, property, getter) ->\n        unless getter\n          [object, property, getter] = [@::, object, property]\n        Object.defineProperty object, property,\n          configurable: true, enumerable: true, get: getter\n    setter:\n      value: (object, property, setter) ->\n        unless setter\n          [object, property, getter] = [@::, object, property]\n        Object.defineProperty object, property,\n          configurable: true, enumerable: true, set: getter\n    accessor:\n      value: (object, property) ->\n        unless property\n          [object, property] = [@::, object]\n        Object.defineProperty object, property,\n          configurable: true,\n          enumerable: true,\n          get: ->\n            @[\"_#{property}\"]\n          set: (v) ->\n            @[\"_#{property}\"] = v\n\n  # *********************************************************************************\n  #  Load assertion library (with promise extensions)\n  # *********************************************************************************\n\n  chai = require('chai')\n\n  chai.use(require 'chai-as-promised')\n  chai.should()\n\n  # ********************************************************************************#\n  #  In a show of defensive programming boarding on xenophobic, selenium-webdriver\n  #   objects don't have Object.prototype in their prototype chain, so chai.should()\n  #   doesn't work (since it adds a getter to Object.prototype). To work around this,\n  #   we extend selenium-webdriver's Promise class's prototype directly.\n  # *********************************************************************************\n\n  Object.defineProperty(\n    $.Promise::, 'should', get: Object::__lookupGetter__('should'))\n\n  # ********************************************************************************#\n  #  Circle CI doesn't seem to like ephemeral ports, and selenium-webdriver doesn't\n  #   seem to have an easy way to modify the chromedriver port, so we monkey-patch\n  #   it here.\n  # ********************************************************************************#\n\n  if process.env.CHROMEDRIVER_PORT\n    require('../node_modules/selenium-webdriver/chrome').ServiceBuilder::port_ = process.env.CHROMEDRIVER_PORT\n"
  },
  {
    "path": "src/errorformat.coffee",
    "content": "color = require('colors')\nmodule.exports = (failure) ->\n  return format(failure)\n\nformat = (failure) ->\n  message = shorten(failure, 5)\n  colorFirstLine(message)\n\nshorten = (message, numlines) ->\n  message.split('\\n').splice(0, numlines).join('\\n')\n\ncolorFirstLine = (message) ->\n  split = message.split('\\n')\n  split[0] = split[0].red.inverse\n  split.join('\\n')\n"
  },
  {
    "path": "src/pioneer.coffee",
    "content": "moment          = require('moment')\nfs              = require('fs')\npath            = require('path')\nconfigBuilder   = require('./config_builder')\nscaffoldBuilder = require('./scaffold_builder')\ncolor           = require('colors')\ncucumber        = require('cucumber')\n\nclass Pioneer\n  constructor: (libPath, args) ->\n    if this.isVersionRequested(args)\n      console.log require('../package').version\n      return\n    if(args.configPath && fs.existsSync(args.configPath))\n      configPath = args.configPath\n    else if args.scaffold\n      scaffoldBuilder.createScaffold()\n    else\n      p = path.join(process.cwd(), '/pioneer.json')\n      if(fs.existsSync(p))\n        configPath = p\n      else\n        configPath = null\n\n    this.getSpecifications(configPath, libPath, args)\n\n  getSpecifications: (path, libPath, args) ->\n    configObject = {}\n    if(path)\n      fs.readFile(path,\n        'utf8',\n        (err, data) =>\n          throw err if(err)\n          configObject = this.parseAndValidateJSON(data, path)\n\n          if @isVerbose(args, configObject)\n            console.log ('Configuration loaded from ' + path).yellow.inverse\n\n          this.applySpecifications(configObject, libPath, args)\n      )\n    else\n      if @isVerbose(args, configObject)\n        console.log ('No configuration path specified').yellow.inverse\n\n      this.applySpecifications(configObject, libPath, args)\n\n  applySpecifications: (obj, libPath, args) ->\n    opts = configBuilder.generateOptions(args, obj, libPath)\n    this.start(opts) if opts\n\n  start: (opts) ->\n    require('./environment')()\n\n    cucumber.Cli(opts).run (success) ->\n      process.exit(if success then 0 else 1)\n\n  parseAndValidateJSON: (config, path) ->\n    try\n      JSON.parse(config)\n    catch err\n      throw new Error(path + \" does not include a valid JSON object.\\n\")\n\n  isVersionRequested: (args) ->\n    args.version || args.v\n\n  isVerbose: (args, config = {}) ->\n    if args.verbose?\n      return args.verbose and args.verbose isnt \"false\"\n    else\n      return !!config.verbose\n\nmodule.exports = Pioneer\n"
  },
  {
    "path": "src/pioneerformat.js",
    "content": "var path = require('path');\nvar moment = require('moment');\n\nmodule.exports = function(options, Cucumber) {\n  var color            = Cucumber.Util.ConsoleColor;\n  var self             = Cucumber.Listener.Formatter(options);\n  var summaryFormatter = require('./pioneersummaryformat.js')(options, Cucumber)\n  var currentMaxStepLength = 0;\n\n  var parentHear = self.hear;\n  self.hear = function hear(event, callback) {\n    summaryFormatter.hear(event, function () {\n      parentHear(event, callback);\n    });\n  };\n\n  self.handleBeforeFeaturesEvent = function (event, callback) {\n    self.timeStart = new Date().getTime();\n    callback();\n  };\n\n  self.handleBeforeFeatureEvent = function handleBeforeFeatureEvent(event, callback) {\n    var feature = event.getPayloadItem('feature');\n    var tags = feature.getTags();\n    var tagNames = [];\n    for (var idx = 0; idx < tags.length; idx++) {\n      tagNames.push(tags[idx].getName());\n    }\n    var uri = color.format('comment', \"# \" + feature.getUri().replace(process.cwd(),'').slice(1))\n    var source = color.format('tag', tagNames.join(\" \")) + \"\\n\" + feature.getKeyword() + \": \" + feature.getName() + \"   \" + uri + \"\\n\";\n    self.log(source);\n    self.logIndented(feature.getDescription() + \"\\n\\n\", 1);\n    callback();\n  };\n\n  self.handleBeforeScenarioEvent = function handleBeforeScenarioEvent(event, callback) {\n    var scenario = event.getPayloadItem('scenario');\n    var tags = scenario.getOwnTags();\n    var tagNames = [];\n    for (var idx = 0; idx < tags.length; idx++) {\n      tagNames.push(tags[idx].getName());\n    }\n    var tagSource = color.format(\"tag\", tagNames.join(\" \")) + \"\\n\" ;\n    var source = scenario.getKeyword() + \": \" + scenario.getName();\n    var lineLengths = [source.length, scenario.getMaxStepLength()];\n    if (scenario.getBackground() !== undefined) {\n      lineLengths.push(scenario.getBackground().getMaxStepLength());\n    }\n    lineLengths.sort(function(a,b) { return b-a; });\n    currentMaxStepLength = lineLengths[0];\n\n    source = tagSource + self._pad(source, currentMaxStepLength + 3);\n\n    source += \"\\n\";\n\n    self.logIndented(source, 1);\n    callback();\n  };\n\n  self.handleAfterScenarioEvent = function handleAfterScenarioEvent(event, callback) {\n    self.log(\"\\n\");\n    callback();\n  };\n\n  self.applyColor = function (stepResult, source) {\n    if (stepResult.isFailed()) source = color.format('failed', source);\n    else if (stepResult.isPending()) source = color.format('pending',source);\n    else if (stepResult.isSkipped()) source = color.format('skipped',source);\n    else if (stepResult.isSuccessful()) source = color.format('passed',source);\n    else if (stepResult.isUndefined()) source = color.format('undefined',source);\n    return source;\n  };\n\n  self.setColorFormat = function (stepResult) {\n    if (stepResult.isFailed()) color.setFormat('failed');\n    else if (stepResult.isPending()) color.setFormat('pending');\n    else if (stepResult.isSkipped()) color.setFormat('skipped');\n    else if (stepResult.isSuccessful()) color.setFormat('passed');\n    else if (stepResult.isUndefined()) color.setFormat('undefined');\n  };\n\n  self.resetColorFormat = function() {\n    color.resetFormat();\n  }\n\n  self.handleStepResultEvent = function handleStepResultEvent(event, callback) {\n    var stepResult = event.getPayloadItem('stepResult');\n    var step = stepResult.getStep();\n\n    var source = self.applyColor(stepResult, step.getKeyword() + step.getName());\n\n    source = self._pad(source, currentMaxStepLength + 10);\n\n    source += \"\\n\";\n    self.logIndented(source, 2);\n\n    if (step.hasDataTable()) {\n      var dataTable = step.getDataTable();\n      self.logDataTable(stepResult, dataTable);\n    }\n\n    if (step.hasDocString()) {\n      var docString = step.getDocString();\n      self.logDocString(stepResult, docString);\n    }\n\n    if (stepResult.isFailed()) {\n      var failure            = stepResult.getFailureException();\n      self.logIndented(require(\"./errorformat\")(failure.stack || failure) + \"\\n\", 3);\n    }\n    callback();\n  };\n\n  self.handleAfterFeaturesEvent = function handleAfterFeaturesEvent(event, callback) {\n    var summaryLogs = summaryFormatter.getLogs();\n\n    testTime = moment.duration(new Date().getTime() - self.timeStart)._data;\n    self.log(\"\\nDuration \" + \"(\" + testTime.minutes + \"m:\" + testTime.seconds + \"s:\" + testTime.milliseconds + \"ms)\\n\");\n\n    callback();\n  };\n\n  self.logDataTable = function logDataTable(stepResult, dataTable) {\n    var rows         = dataTable.raw();\n    var columnWidths = self._determineColumnWidthsFromRows(rows);\n    var rowCount     = rows.length;\n    var columnCount  = columnWidths.length;\n    for (var rowIndex = 0; rowIndex < rowCount; rowIndex++) {\n      var cells = rows[rowIndex];\n      var line = \"|\";\n      for (var columnIndex = 0; columnIndex < columnCount; columnIndex++) {\n        var cell        = cells[columnIndex];\n        var columnWidth = columnWidths[columnIndex];\n        line += \" \" + self.applyColor(stepResult, self._pad(cell, columnWidth)) + \" |\"\n      }\n      line += \"\\n\";\n      self.logIndented(line, 3);\n    }\n  };\n\n  self.logDocString = function logDocString(stepResult, docString) {\n    var contents = '\"\"\"\\n' + docString.getContents() + '\\n\"\"\"\\n';\n    contents = self.applyColor(stepResult, contents)\n    self.logIndented(contents, 3);\n  };\n\n  self.logIndented = function logIndented(text, level) {\n    var indented = self.indent(text, level);\n    self.log(indented);\n  };\n\n  self.indent = function indent(text, level) {\n    var indented;\n    text.split(\"\\n\").forEach(function(line) {\n      var prefix = new Array(level + 1).join(\"  \");\n      line = (prefix + line).replace(/\\s+$/, '');\n      indented = (typeof(indented) == 'undefined' ? line : indented + \"\\n\" + line);\n    });\n    return indented;\n  };\n\n  self._determineColumnWidthsFromRows = function _determineColumnWidthsFromRows(rows) {\n    var columnWidths = [];\n    var currentColumn;\n\n    rows.forEach(function (cells) {\n      currentColumn = 0;\n      cells.forEach(function (cell) {\n        var currentColumnWidth = columnWidths[currentColumn];\n        var currentCellWidth   = cell.length;\n        if (typeof currentColumnWidth == \"undefined\" || currentColumnWidth < currentCellWidth)\n          columnWidths[currentColumn] = currentCellWidth;\n        currentColumn += 1;\n      });\n    });\n\n    return columnWidths;\n  };\n\n  self._pad = function _pad(text, width) {\n    var padded = \"\" + text;\n    while (padded.length < width) {\n      padded += \" \";\n    }\n    return padded;\n  };\n\n  return self;\n};\n"
  },
  {
    "path": "src/pioneersummaryformat.js",
    "content": "module.exports = function (options, Cucumber) {\n  var failedScenarioLogBuffer = \"\";\n  var undefinedStepLogBuffer  = \"\";\n  var failedStepResults       = Cucumber.Type.Collection();\n  var statsJournal            = Cucumber.Listener.StatsJournal();\n  var color                   = Cucumber.Util.ConsoleColor;\n\n  var self = Cucumber.Listener.Formatter(options);\n\n  var parentHear = self.hear;\n  self.hear = function hear(event, callback) {\n    statsJournal.hear(event, function () {\n      parentHear(event, callback);\n    });\n  };\n\n  self.handleStepResultEvent = function handleStepResult(event, callback) {\n    var stepResult = event.getPayloadItem('stepResult');\n    if (stepResult.isUndefined()) {\n      self.handleUndefinedStepResult(stepResult);\n    } else if (stepResult.isFailed()) {\n      self.handleFailedStepResult(stepResult);\n    }\n    callback();\n  };\n\n  self.handleUndefinedStepResult = function handleUndefinedStepResult(stepResult) {\n    var step = stepResult.getStep();\n    self.storeUndefinedStep(step);\n  };\n\n  self.handleFailedStepResult = function handleFailedStepResult(stepResult) {\n    self.storeFailedStepResult(stepResult);\n  };\n\n  self.handleAfterScenarioEvent = function handleAfterScenarioEvent(event, callback) {\n    if (statsJournal.isCurrentScenarioFailing()) {\n      var scenario = event.getPayloadItem('scenario');\n      self.storeFailedScenario(scenario);\n    }\n    callback();\n  };\n\n  self.handleAfterFeaturesEvent = function handleAfterFeaturesEvent(event, callback) {\n    self.logSummary();\n    callback();\n  };\n\n  self.storeFailedStepResult = function storeFailedStepResult(failedStepResult) {\n    failedStepResults.add(failedStepResult);\n  };\n\n  self.storeFailedScenario = function storeFailedScenario(failedScenario) {\n    var name = failedScenario.getName();\n    var uri  = failedScenario.getUri();\n    var line = failedScenario.getLine();\n    self.appendStringToFailedScenarioLogBuffer(uri + \":\" + line + \" # Scenario: \" + name);\n  };\n\n  self.storeUndefinedStep = function storeUndefinedStep(step) {\n    var snippetBuilder = Cucumber.SupportCode.StepDefinitionSnippetBuilder(step, self.getStepDefinitionSyntax());\n    var snippet        = snippetBuilder.buildSnippet();\n    self.appendStringToUndefinedStepLogBuffer(snippet);\n  };\n\n  self.getStepDefinitionSyntax = function getStepDefinitionSyntax() {\n    var syntax = options.coffeeScriptSnippets ? 'CoffeeScript' : 'JavaScript';\n    return new Cucumber.SupportCode.StepDefinitionSnippetBuilderSyntax[syntax]();\n  };\n\n  self.appendStringToFailedScenarioLogBuffer = function appendStringToFailedScenarioLogBuffer(string) {\n    failedScenarioLogBuffer += string + \"\\n\";\n  };\n\n  self.appendStringToUndefinedStepLogBuffer = function appendStringToUndefinedStepLogBuffer(string) {\n    if (undefinedStepLogBuffer.indexOf(string) == -1)\n      undefinedStepLogBuffer += string + \"\\n\";\n  };\n\n  self.getFailedScenarioLogBuffer = function getFailedScenarioLogBuffer() {\n    return failedScenarioLogBuffer;\n  };\n\n  self.getUndefinedStepLogBuffer = function getUndefinedStepLogBuffer() {\n    return undefinedStepLogBuffer;\n  };\n\n  self.logSummary = function logSummary() {\n    if (statsJournal.witnessedAnyFailedStep())\n      self.logFailedStepResults();\n    self.logScenariosSummary();\n    self.logStepsSummary();\n    if (statsJournal.witnessedAnyUndefinedStep())\n      self.logUndefinedStepSnippets();\n  };\n\n  self.logFailedStepResults = function logFailedStepResults() {\n    self.log(\"Failing Scenarios: \\n\")\n    failedStepResults.syncForEach(function(stepResult) {\n      self.log(stepResult.getStep().getUri() + ':' + stepResult.getStep().getLine() + '\\n');\n      self.logFailedStepResult(stepResult)\n    })\n  };\n\n  self.logFailedStepResult = function logFailedStepResult(stepResult) {\n    var failureMessage = stepResult.getFailureException();\n    self.log(require(\"./errorformat\")(failureMessage.stack || failureMessage));\n    self.log(\"\\n\\n\");\n  };\n\n  self.logScenariosSummary = function logScenariosSummary() {\n    var scenarioCount          = statsJournal.getScenarioCount();\n    var passedScenarioCount    = statsJournal.getPassedScenarioCount();\n    var undefinedScenarioCount = statsJournal.getUndefinedScenarioCount();\n    var pendingScenarioCount   = statsJournal.getPendingScenarioCount();\n    var failedScenarioCount    = statsJournal.getFailedScenarioCount();\n    var details                = [];\n\n    self.log(scenarioCount + \" scenario\" + (scenarioCount != 1 ? \"s\" : \"\"));\n    if (scenarioCount > 0 ) {\n      if (failedScenarioCount > 0)\n        details.push(color.format('failed', failedScenarioCount + \" failed\"));\n      if (undefinedScenarioCount > 0)\n        details.push(color.format('undefined', undefinedScenarioCount + \" undefined\"));\n      if (pendingScenarioCount > 0)\n        details.push(color.format('pending', pendingScenarioCount + \" pending\"));\n      if (passedScenarioCount > 0)\n        details.push(color.format('passed', passedScenarioCount + \" passed\"));\n      self.log(\" (\" + details.join(', ') + \")\");\n    }\n    self.log(\"\\n\");\n  };\n\n  self.logStepsSummary = function logStepsSummary() {\n    var stepCount          = statsJournal.getStepCount();\n    var passedStepCount    = statsJournal.getPassedStepCount();\n    var undefinedStepCount = statsJournal.getUndefinedStepCount();\n    var skippedStepCount   = statsJournal.getSkippedStepCount();\n    var pendingStepCount   = statsJournal.getPendingStepCount();\n    var failedStepCount    = statsJournal.getFailedStepCount();\n    var details            = [];\n\n    self.log(stepCount + \" step\" + (stepCount != 1 ? \"s\" : \"\"));\n    if (stepCount > 0) {\n      if (failedStepCount > 0)\n        details.push(color.format('failed', failedStepCount    + \" failed\"));\n      if (undefinedStepCount > 0)\n        details.push(color.format('undefined', undefinedStepCount + \" undefined\"));\n      if (pendingStepCount > 0)\n        details.push(color.format('pending', pendingStepCount   + \" pending\"));\n      if (skippedStepCount > 0)\n        details.push(color.format('skipped', skippedStepCount   + \" skipped\"));\n      if (passedStepCount > 0)\n        details.push(color.format('passed', passedStepCount    + \" passed\"));\n      self.log(\" (\" + details.join(', ') + \")\");\n    }\n    self.log(\"\\n\");\n  };\n\n  self.logUndefinedStepSnippets = function logUndefinedStepSnippets() {\n    var undefinedStepLogBuffer = self.getUndefinedStepLogBuffer();\n    self.log(color.format('pending', \"\\nYou can implement step definitions for undefined steps with these snippets:\\n\\n\"));\n    self.log(color.format('pending', undefinedStepLogBuffer));\n  };\n\n  return self;\n};\n"
  },
  {
    "path": "src/scaffold/example.json",
    "content": "{\n  \"feature\": \"tests/features\",\n  \"require\": [\n    \"tests/steps\",\n    \"tests/widgets\"\n  ],\n  \"format\": \"pioneerformat.js\",\n  \"driver\": \"chrome\",\n  \"error_formatter\": \"errorformat.js\",\n  \"preventReload\": false,\n  \"coffee\": false,\n  \"verbose\": true\n}\n"
  },
  {
    "path": "src/scaffold/simple.js",
    "content": "module.exports = function(){\n  this.Given(/^I visit TODOMVC$/,function(){\n    this.driver.get('http://todomvc.com/examples/backbone/')\n  });\n\n  this.When(/^I enter \\\"([^\\\"]*)\\\"$/, function(value){\n    new this.Widget({\n      root: \".new-todo\"\n    }).sendKeys(value,'\\uE007');\n  });\n\n  this.Then(/^I should see \\\"([^\\\"]*)\\\"$/, function(expected){\n    var List = this.Widget.List.extend({\n      root: \".todo-list\",\n      childSelector: \"li\"\n    })\n\n    return new List().readAt(0).should.eventually.eql(expected);\n  })\n}\n"
  },
  {
    "path": "src/scaffold/simple.txt",
    "content": "Feature: Simple Feature\n\n  Background:\n    Given I visit TODOMVC\n\n  Scenario: Entering Information\n    When I enter \"dogecoins\"\n    Then I should see \"dogecoins\"\n"
  },
  {
    "path": "src/scaffold_builder.coffee",
    "content": "fs           = require 'fs'\npath         = require 'path'\nprompt       = require 'prompt'\ncolor        = require 'colors'\n_            = require 'lodash'\n\nmodule.exports =\n  featureNotSpecified: ->\n    prompt.start()\n\n    prompt.get({\n      message: \"You did not specify a feature path. Would you like Pioneer to generate one for you? y/n\"\n      required: true\n    }, (err, r) =>\n      if(['y', 'yes'].indexOf(r.question.toLowerCase()) > -1)\n        @createScaffold()\n      else\n        console.log('Looks like you have no feature files or have not passed the path to them. http://www.github.com/mojotech/pioneer/docs')\n        process.exit()\n    )\n\n  createScaffold: (options) ->\n    p = path.join(process.cwd(), '/tests')\n    if(!fs.existsSync(p))\n      fs.mkdirSync(p)\n    features = path.join(p, '/features')\n    if(!fs.existsSync(features))\n      fs.mkdirSync(features)\n    fixtures = path.join(p, '/fixtures')\n    if(!fs.existsSync(fixtures))\n      fs.mkdirSync(fixtures)\n    widgets = path.join(p, '/widgets')\n    if(!fs.existsSync(widgets))\n      fs.mkdirSync(widgets)\n    steps = path.join(p, '/steps')\n    if(!fs.existsSync(steps))\n      fs.mkdirSync(steps)\n    fs.writeFileSync(path.join(features, 'simple.feature'), fs.readFileSync(path.join(__dirname, \"scaffold/simple.txt\"), 'utf8'))\n    fs.writeFileSync(path.join(steps, 'simple.js'), fs.readFileSync(path.join(__dirname, \"scaffold/simple.js\"), 'utf8'))\n    hiddenPioneer = path.join(process.cwd(), '/pioneer.json')\n    if(!fs.existsSync(hiddenPioneer))\n      fs.writeFileSync(hiddenPioneer, fs.readFileSync(path.join(__dirname, \"scaffold/example.json\"), 'utf8'))\n    else\n      @askToOverWrite(hiddenPioneer, fs.readFileSync(path.join(__dirname, \"scaffold/example.json\"), 'utf8'))\n    @_logCompleted()\n\n    process.exit()\n\n  askToOverWrite: (file, data) ->\n    prompt.start()\n\n    prompt.get({\n      message: \"It looks like you already have a #{file} , are you sure that you would like to overwrite this? y/n\"\n      required: true\n    }, (err, r) =>\n      if(['y', 'yes'].indexOf(r.question.toLowerCase()) > -1)\n        fs.writeFileSync(file, data)\n      else\n        console.log(\"You chose not to overwrite #{file} to run the scaffold files include tests/features in the feature option of your config files.\")\n    )\n  _logCompleted: ->\n    console.log('Scaffold created. You may now run your first test'.inverse.green)\n"
  },
  {
    "path": "src/support/index.coffee",
    "content": "Driver          = require('selenium-webdriver')\n$               = Driver.promise\nargv            = require('minimist')(process.argv)\n_               = require('lodash')\ncolor           = require('colors')\nglobal.timeout  = 5000\n\nmodule.exports = ->\n  @Driver = Driver\n\n  _Before = @Before\n  _After  = @After\n\n  @_inFlow = (code, callback) ->\n    $.createFlow (flow) =>\n      flow.execute => code.call(@)\n    .then _.partial(callback, null),\n      (err) -> throw err\n\n  @Before = (code) ->\n    _Before (callback) =>\n      @_inFlow code, callback\n\n  @After = (code) ->\n    _After (callback) =>\n      @_inFlow code, callback\n\n  @BeforeAll = (code) ->\n    unless @_ranBeforeAll\n      @_ranBeforeAll = true\n      @Before code\n\n  @AfterAll = (code) ->\n    unless @_ranAfterAll\n      @_ranAfterAll = true\n      @After code\n\n  flowStep = (code, args, pending, successCallback, errCallback) =>\n    @Pending = (reason) -> successCallback = _.partial pending, reason\n\n    $\n    .createFlow (flow) =>\n      flow.execute =>\n        code.apply(@, args)\n    .then (result) ->\n      successCallback null, result\n    , errCallback\n\n  @Given = @When = (pattern, code) =>\n    @defineStep pattern, (args..., callback) =>\n      @lastStepType = 'Given'\n      flowStep code, args, callback.pending, callback, callback\n\n  @Then = (pattern, code) =>\n    @defineStep pattern, (args..., callback) =>\n      @lastStepType = 'Then'\n      start = new Date\n\n      callforth = =>\n        flowStep code, args, callback.pending, callback, (error) =>\n          if new Date - start > timeout\n            callback(error)\n          else\n            $.delayed(1000).then -> callforth()\n\n      callforth()\n\n  @And = (pattern, code) =>\n    @[@lastStepType](pattern, code)\n\n  @SetDriver = ->\n    @driver = @ConfigureDriver?(Driver, argv) || new Driver.Builder().withCapabilities(Driver.Capabilities[argv.driver || 'chrome']()).build()\n\n  @Freeze = ->\n    keyPress = false\n    stdin = process.stdin\n    stdin.setRawMode(true)\n    stdin.resume()\n    stdin.setEncoding('utf8')\n    console.log('Press any key to continue...'.yellow.inverse)\n    process.stdin.on('data', ((key) ->\n      keyPress = true\n    ))\n    @driver.wait(\n      (()->\n        return keyPress\n    ), Infinity).then -> process.stdin.pause()\n\n  @Before ->\n    @lastStepType = 'Given'\n    if !@driver || !shouldPreventBrowserReload()\n      @SetDriver()\n      @driver.visit = @driver.get\n\n  @After ->\n    terminateDriver() unless shouldPreventBrowserReload()\n\n  @registerHandler \"AfterFeatures\", (event, callback) =>\n    if shouldPreventBrowserReload()\n      terminateDriver().then -> callback()\n    else\n      callback()\n\n  shouldPreventBrowserReload = ->\n    argv['prevent-browser-reload']?\n\n  terminateDriver = =>\n    @driver.close()\n    @driver.quit()\n\n  @When /^I Freeze$/, @Freeze\n"
  },
  {
    "path": "src/widgets/Widget.Form.coffee",
    "content": "Promise = require('bluebird')\n_       = require('lodash')\n\nclass @Widget.Form extends @Widget\n  root: 'form'\n\n  submitSelector: ->\n    @find('[type=\"submit\"]')\n\n  submitForm: =>\n    @submitSelector().then (el) -> el.click()\n\n  submitWith: (values) =>\n    @fillAll(values)\n    .then(@submitForm)\n\n  select: (opts) ->\n    if !(_.isObject(opts)) and !opts\n      throw new Error('You must provide something to select by.')\n\n    opts = if _.isObject(opts) then opts else {text: opts}\n\n    if (opts.text? and opts.value?)\n      throw new Error('You may only have one select by attribute.')\n    else if opts.text?\n      @_selectByText(opts.text)\n    else if opts.value?\n      @_selectByValue(opts.value)\n\n  _selectByText: (text) ->\n    @find({text: text}).then (el) ->\n      el.click()\n\n  _selectByValue: (value) ->\n    @find(\"option[value=\\\"#{value}\\\"]\").then (el) ->\n      el.click()\n\n  fillAll: (values) ->\n    @_map Object.keys(values), (f) => @fill({\n      selector: @_name(f)\n      value: values[f]\n    })\n\n  readAll: ->\n    _readAll = (f) =>\n      @getValue(@_name(f)).then (v) -> [f, v]\n\n    @_map(@fields, _readAll).then (read) ->\n      _.fromPairs(read)\n\n  _name: (name) ->\n    \"[name='#{name}']\"\n"
  },
  {
    "path": "src/widgets/Widget.Iframe.coffee",
    "content": "class @Widget.Iframe extends @Widget\n  root: 'iframe'\n\n  focus: ->\n    @driver.switchTo().frame(@find()).then => this\n\n  unfocus: ->\n    @driver.switchTo().defaultContent().then => this\n"
  },
  {
    "path": "src/widgets/Widget.List.coffee",
    "content": "_ = require(\"lodash\")\nDriver  = require('selenium-webdriver')\n$       = Driver.promise\n\nclass @Widget.List extends @Widget\n  itemSelector: 'li'\n\n  itemClass: World.Widget\n\n  getItemClass: (el) ->\n    $.fulfilled(@itemClass)\n\n  at: (opts) ->\n    if _.isNumber(opts)\n      @items().then (items) ->\n        items[opts]\n    else\n      throw new Error(\"Argument must be a number. https://github.com/mojotech/pioneer/blob/master/docs/list.md#at\")\n\n  clickAt: (opts) ->\n    if _.isNumber(opts)\n      opts = {index: opts}\n    @at(opts.index).then (widget) ->\n      widget.click(opts.selector)\n\n  readAt: (opts) ->\n    if (_.isNumber(opts))\n      return @at(opts).then (widget) -> widget.read()\n    else\n      @at(opts.index).then (widget) -> widget.read(opts)\n\n  map: (iter) ->\n    @items().then (items) -> $.map(items, iter)\n\n  each: (iter) ->\n    @map.apply(this, arguments).then -> @items\n\n  length: ->\n    @items().then (items) -> items.length\n\n  invoke: (opts) ->\n    if(_.isString(opts) or _.isFunction(opts))\n      opts = {method: opts}\n    @map (item) ->\n      if _.isFunction(opts.method)\n        opts.method.apply(item, opts.arguments)\n      else\n        item[opts.method].apply(item, opts.arguments)\n\n  filter: (iter) ->\n    @items().then (items) -> $.filter(items, iter)\n\n  items: ->\n    @find().then (el) =>\n      el.findElements(Driver.By.css(@itemSelector))\n    .then (elms) =>\n      @_map elms, (el) => \n        @getItemClass(el).then (itemClass) ->\n          new itemClass({\n            el: el\n          })\n\n  findWhere: (iter) ->\n    @filter(iter).then (items) -> items[0] if items\n"
  },
  {
    "path": "src/widgets/Widget.coffee",
    "content": "_       = require('lodash')\nDriver  = require('selenium-webdriver')\n$       = Driver.promise\n\n@W = class @Widget\n  @extend: (protoProps, staticProps) ->\n    parent = @\n    if Object.hasOwnProperty(protoProps, 'constructor')\n      child = protoProps.constructor\n    else\n      child = -> parent.apply(@, arguments)\n\n    child.copyProperties @\n    child.copyProperties staticProps\n\n    Surrogate = ->\n      @constructor = child\n      return undefined\n\n    Surrogate.prototype = @::\n    child.prototype = new Surrogate()\n\n    child::.copyProperties(protoProps) if protoProps\n\n    child.__super__ = @::\n\n    child\n\n  @find = (attributes) ->\n    _this = _.extend(new this, attributes)\n\n    _this.find().then (el) ->\n      _this.el = el\n      _this\n\n  staticMethods = [\"click\", \"fill\", \"hover\", \"doubleClick\", \"read\", \"isPresent\", \"isVisible\", \"getAttribute\", \"getValue\", \"getText\", \"getInnerHTML\", \"getOuterHTML\", \"hasClass\", \"sendKeys\", \"clear\"]\n  for staticMethod in staticMethods\n    m = (args...) =>\n      @find({root: \"html\"}).then (w) ->\n        w[args[0]].apply(w, args.slice(1))\n\n    @[staticMethod] = _.partial(m, staticMethod)\n\n  constructor: (attributes = {}) ->\n    _.extend @, attributes\n\n    @initialize.apply @, arguments\n\n  # Defines a noop initialize method intended to be\n  # overridden by the user when extending a Widget base class\n  initialize: ->\n\n  world: World\n\n  # use a getter to lazily initialize driver\n  @getter 'driver', ->\n    @_driver || World.driver\n\n  click: (opts) ->\n    @find(opts).then (el) ->\n      el.click()\n\n  fill: (opts) ->\n    if !(_.isObject(opts)) and !opts\n      throw new Error(\"You must pass a value to fill with. https://github.com/mojotech/pioneer/blob/master/docs/widget.md#fill\")\n\n    opts = if _.isObject(opts) then opts else {value: opts}\n\n    @find(opts.selector).then (el) ->\n      el.clear().then ->\n        el.sendKeys.apply(el, Array::slice.call(opts.value))\n\n  read: (opts) ->\n    if _.isString(opts) or opts is undefined\n      @find(opts).then (el) -> el.getText()\n\n    else\n      _.defaults opts,\n        transformer: (value) -> value\n        selector: null\n\n      @find(opts.selector).then (el) ->\n        return el.getText().then opts.transformer\n\n  getValue: (opts={}) ->\n    if _.isString(opts)\n      opts = {selector: opts}\n\n    _.defaults opts,\n      transformer: (val) -> val\n\n    @find(opts).then (el) ->\n      el.getAttribute('value').then opts.transformer\n\n  find: (opts) ->\n    deferred = new $.Deferred\n\n    if (!opts or _.isString(opts))\n      opts = {selector: opts}\n\n    if (opts.text)\n      return @_findByText(opts)\n\n    if (@el)\n      if !opts.selector\n        deferred.fulfill(@el)\n      else\n        return @el.findElement(Driver.By.css(opts.selector))\n\n      return deferred\n\n    @_ensureElement(opts.selector).then =>\n      @driver.findElement(Driver.By.css(@_selector(opts.selector)))\n\n  getHtml: (opts) ->\n     @find(opts).then (el) -> el.getOuterHtml()\n\n  getText: (opts) ->\n    @find(opts).then (el) -> el.getText()\n\n  getAttribute: (opts) ->\n    if _.isString(opts)\n      opts = {attribute: opts}\n    @find(opts).then (el) -> el.getAttribute(opts.attribute)\n\n  getInnerHTML: (opts) ->\n    @find(opts).then (el) -> el.getInnerHtml()\n\n  getOuterHTML: (opts) ->\n    @find(opts).then (el) -> el.getOuterHtml()\n\n  isPresent: (selector) ->\n    if @_selector(selector) != \"undefined\"\n      @driver.isElementPresent(Driver.By.css(@_selector(selector)))\n    else\n      @el.isDisplayed()\n\n  isVisible: (opts={}) ->\n    if(_.isString(opts))\n      opts = {selector: opts}\n    @isPresent(opts.selector).then (present) =>\n      if(present)\n        @find(opts).then (elm) -> elm.isDisplayed()\n      else\n        false\n\n  addClass: (opts) ->\n    if _.isString(opts)\n      opts = {className: opts}\n    @find(opts.selector).then (el) =>\n      @driver.executeScript(\"arguments[0].classList.add(arguments[1])\", el, opts.className)\n\n  removeClass: (opts) ->\n    if _.isString(opts)\n      opts = {className: opts}\n    @find(opts.selector).then (el) =>\n      @driver.executeScript(\"arguments[0].classList.remove(arguments[1])\", el, opts.className)\n\n  toggleClass: (opts) ->\n    if _.isString(opts)\n      opts = {className: opts}\n    @find(opts.selector).then (el) =>\n      @driver.executeScript(\"arguments[0].classList.toggle(arguments[1])\", el, opts.className)\n\n  hasClass: (opts) ->\n    if _.isString(opts)\n      opts = {className: opts}\n    @find(opts.selector).then (el) =>\n      @driver.executeScript(\n        \"return arguments[0].classList.contains(arguments[1])\",\n        el, opts.className\n      )\n\n  findAll: (selector) ->\n    @find().then (el) =>\n      new World.Widget.List({\n        el: el\n        itemSelector: selector\n      })\n\n  _selector: (selector) ->\n    @root + (if selector then \" #{selector}\" else '')\n\n  _findByText: (opts) ->\n    # WebDriver lets you go out of the child scope\n    # if you pass an absolute xpath selector\n    # this is a bug in WebDriver and is terrible\n    # by passing a `.` this is no longer an issue.\n    _selector = Driver.By.xpath('.//*[normalize-space(text())=normalize-space(\"' + opts.text + '\")]')\n\n    @find().then (el) =>\n      @driver.wait(\n        _.bind(el.findElement, el, _selector),\n        global.timeout,\n        \"Unable to find node containing text #{opts.text}\"\n      ).then =>\n        el.findElement(_selector)\n\n  _ensureElement: (selector) ->\n    @driver.wait(\n      _.bind(@isPresent, this, selector),\n      global.timeout,\n      \"#{@_selector(selector)} not found\"\n    )\n\n  sendKeys: (opts...)->\n    if(opts.length > 1)\n      @sendKeys({keys: opts})\n    else\n      opts = opts[0]\n      if !(_.isObject(opts))\n        opts = {keys: Array::concat(opts)}\n      @find(opts.selector).then (el) -> el.sendKeys.apply(el, Array::concat(opts.keys))\n\n  hover: (opts) ->\n    @find(opts).then (el) =>\n      new Driver.ActionSequence(@driver)\n      .mouseMove(el)\n      .perform()\n      .then => this\n\n  doubleClick: (opts) ->\n    @find(opts)\n    .then (el) =>\n      new Driver.ActionSequence(@driver)\n      .doubleClick(el)\n      .perform()\n      .then => this\n\n  clear: (opts) ->\n    @find(opts)\n    .then (el) =>\n      el.clear().then => this\n\n  _map: (collection, callback) ->\n    results = []\n    _reduce = (p, f, i) ->\n      p.then ->\n        callback(f, i).then (v) -> results.push(v)\n    _.reduce(collection, _reduce, Driver.promise.fulfilled())\n      .then -> results\n"
  },
  {
    "path": "src/widgets/build/widgets.coffee",
    "content": "module.exports = ->\n  World    = @\n  @Widgets = {}\n\n  #= include ../Widget.coffee\n  #= include ../Widget.List.coffee\n  #= include ../Widget.Form.coffee\n"
  },
  {
    "path": "test/integration/features/findwidget.feature",
    "content": "Feature: Reading from the DOM\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Using the find based constructor\n    When I eager find the \"space9\" element I should see \"wormhole\"\n\n  Scenario: Getting the text of an element\n    When I retrieve text of the \"space9\" element I should get \"wormhole\"\n\n  Scenario: Getting the text of an element with a child selector\n    When I retrieve text of the \"space9\" element as a child of \"deep\" I should get \"wormhole\"\n\n  Scenario: When I search by text\n    Given I search for \"many money\" I should get \"many money\"\n\n"
  },
  {
    "path": "test/integration/features/form.feature",
    "content": "Feature: Submit With\n  Background:\n    Given I view \"form.html\"\n\n  Scenario: Clicking Submit\n    Given I click submit\n    Then I should see \"field1 is and field2 is default\"\n\n  Scenario: When I submit\n    Given I enter information and submit\n    Then I should see \"field1 is myEmail@gmail.com and field2 is default\"\n\n  Scenario: Clearing an input before filling\n    Given I fill the field with default with something else\n    Then I should only see something else\n\n  Scenario: When I fill in fields\n    Given I fill a form with:\n      | name    | value |\n      | field1  | 1     |\n      | field2  | 2     |\n\n  Scenario: When I instantiate a form widget without a root selector\n    Then the widget should use the default form selector to find the first available form element\n\n  Scenario: When I instantiate a form widget with a root selector\n    Then the widget should find the form with the supplied selector of \"#form\"\n\n  Scenario: When I search for a nested option\n    When I search for a nested option I should find it\n\n  Scenario: When I select by value\n    When I select an option by value\n\n  Scenario: When I select by text\n    When I select an option by text\n\n  Scenario: Selecting with no selector\n    When I try to select with no selector\n\n  Scenario: Selecting with both selectors\n    When I try to select with both selectors\n  Scenario: Checking a checkbox\n    When I click a checkbox\n    Then the checkbox should be selected\n\n  Scenario: Reading all fields of a form\n    When I read all fields of a form I should see the results\n"
  },
  {
    "path": "test/integration/features/list.feature",
    "content": "Feature: Manipulating Lists\n\n  Background:\n    Given I view \"list.html\"\n\n  Scenario: Getting items in a list\n    Then I should see \"6\" items in a list\n\n  Scenario: Getting itemClass dynamically\n    Then I should get the alias \"Iron Man\" for the item with a super-hero class\n\n  Scenario: Getting an item in a list\n    Then I should see \"geordi laforge\" in position \"4\" of the list\n    Then I should see html \"<li>geordi laforge</li>\" in position \"4\" of the list\n\n  Scenario: Serializing items in a list\n    Then I should see the following list:\n      | data            |\n      | 7 of nine       |\n      | deanna troi     |\n      | geordi laforge  |\n      | John Crichton   |\n      | Tony Stark      |\n\n  Scenario: Filtering items in a list\n    When I filter by \"John\" I should see \"1\" element\n\n  Scenario: Finding the first matching element in a list\n    When I find with \"a\" I should see \"<li>data</li>\"\n\n  Scenario: Calling AT with a string\n    When I call at with a string I should get an error\n\n  Scenario: Getting length of a list\n    When I call length I should receive 6\n\n  Scenario: Nested list lookup\n    When I find the \"span\" within \".nested\" I should see 3 items\n\n  Scenario: Nested list lookup with additonal child lookup\n    When I find the \"3\" child \"span\" within \".nested\" and then I read the \"p\" I should see \"protoss\"\n\n  Scenario: Reading at an index\n    When I read at the \"2\" index of ul I should see \"7 of nine\"\n\n  Scenario: Reading at an index with a transformer\n    Given I should be able to read and transform a list item at an index\n\n  Scenario: Reading at an index with a transformer and selector\n    Given I should be able to read with a subselector and transform an item at an index\n\n  Scenario: Reading at an index with selector\n    When I read at the \"2\" child \"span\" within \".nested\" inside \"p\" I should see \"human\"\n\n  Scenario: Clicking on an index\n    When I click on the \"3\" child of \"ul\" I should read \"clicked\"\n\n  Scenario: Clicking at an index\n    When I click at the \"3\" index of \"ul\" I should read \"clicked\"\n\n  Scenario: Clicking at an index with selector\n    When I click at the \"5\" index with selector \"p\" I should read \"clicked\"\n\n  Scenario: Looping over items in a list with each\n    When I click on each item in the list\n    Then I should see that each list item was clicked\n\n  Scenario: Invoking a method over the list with a string\n    Given I can invoke click on each widget in the list\n    Then I should see that each list item was clicked\n\n  Scenario: Invoking a method over the list with a method\n    Given I can invoke click on each widget in the list with a method\n    Then I should see that each list item was clicked\n\n  Scenario: Invoking a method over the list with arguments\n    Given I can invoke read on each widget in the list with a transformer and selector\n\n  Scenario: Visiblity on list items\n    Given I can check the visibility on a list's items\n"
  },
  {
    "path": "test/integration/features/pending.feature",
    "content": "Feature: Environment\n\nScenario: Check for pending method\n  When I execute a step\n  Then the step should have a pending method\n\nScenario: Pending method pauses execution\n  When I execute a step\n  And I execute a pending step\n  Then the following step should not execute\n\nScenario: Check for Driver\n  When I execute a step\n  Then the environment should expose Driver"
  },
  {
    "path": "test/integration/features/readwidget.feature",
    "content": "Feature: Reading Widgets\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Reading a flat element\n    When I read the \"h1\" I should see \"hello world\"\n\n  Scenario: Reading a flat element with a transformer\n    When I read the \"h1\" with an all caps tranformer I should see \"HELLO WORLD\"\n\n  Scenario: Reading a nested element\n    When I find the \"doge\" element within \".wow\" I should see \"many money\"\n\n  Scenario: Reading attribute of element\n    When I read the \"width\" attribute I should get \"400px\"\n\n  Scenario: Reading attribute of element with selector\n    When I read the \"height\" attribute of a nested element I should get \"100\"\n\n  Scenario: Getting inner HTML\n    When I get the innerHTML of \".wow\" I should get \"<doge>many money</doge>\"\n\n  Scenario: Getting outer HTML\n    When I get the outerHTML of \".wow doge\" I should get \"<doge>many money</doge>\"\n"
  },
  {
    "path": "test/integration/features/shorthand.feature",
    "content": "Feature: Shorthand Widget Methods\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Click\n    When I shorthand click an element\n\n  Scenario: Fill\n    When I shorthand fill an element\n    Then I shorthand getValue the element\n\n  Scenario: Hover\n    When I shorthand hover an element\n\n  Scenario: Double Click\n    When I shorthand double click an element\n\n  Scenario: isPresent\n    When I shorthand isPresent an element\n\n  Scenario: isVisible\n    When I shorthand isVisible an element\n\n  Scenario: getAttribute\n    When I shorthand getAttribute an element\n\n  Scenario: getText\n    When I shorthand getText an element\n\n  Scenario: getInnerHTML\n    When I shorthand getInnerHTML an element\n\n  Scenario: getOuterHTML\n    When I shorthand getOuterHTML an element\n\n  Scenario: hasClass\n    When I shorthand call hasClass an element\n\n  Scenario: sendKeys\n    When I shorthand call hasClass an element\n\n  Scenario: clear\n    When I shorthand call clear an element\n"
  },
  {
    "path": "test/integration/features/simple.feature",
    "content": "Feature: Reading from the DOM\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Filling an input box\n    When I fill an input with \"wow\" I should get \"wow\"\n\n  Scenario: Filling an input box with something invalid\n    When I fill an input with nothing I should get an error\n\n  Scenario: Calling Driver Visit\n    When I call driver.visit\n    Then the driver should get that URL\n"
  },
  {
    "path": "test/integration/features/widget.feature",
    "content": "Feature: Manipulating Widgets\n\n  Background:\n    When I view \"sample.html\"\n\n  Scenario: Is Present\n    When I see if \"doge\" is present within \".wow\" I should get \"true\"\n\n  Scenario: Is Not Present\n    When I see if \"dogey\" is present within \".wow\" I should get \"false\"\n\n  Scenario: Is Visible\n    When I see if \".wow\" is visible I should get \"true\"\n\n  Scenario: Is Visible with string syntax\n    When I see if an element identified by a string is visible\n\n  Scenario: Is Not Visible\n    When I see if \".hidden\" is visible I should get \"false\"\n\n  Scenario: Is Visible on a non-present element\n    When I see if \".suchwow\" is visible I should get \"false\"\n\n  Scenario: Sending Keys to element\n    When I send \"doge\" to an element I should be able to read \"doge\"\n\n  Scenario: Sending Keys with an object\n    When I send keys to an element with an object I should be able to read them\n\n  Scenario: Sending Keys with multiple arguments\n    When I send keys to an element with multiple arguments I should be able to read them\n\n  Scenario: Adding a class\n    When I add class \"foo\" to \".wow\"\n    Then \".wow\" should contain class \"foo\"\n\n  Scenario: Adding a class with selector\n    When I add class \"foo\" to \"doge\" in \".wow\"\n    Then \"doge\" should contain class \"foo\"\n\n  Scenario: Removing a class\n    When I remove class \"doge\" from \".hidden\"\n    Then \".hidden\" should not contain class \"doge\"\n\n  Scenario: Removing a class with selector\n    When I remove class \"inputbox\" from \"input\" in \"p\"\n    Then \"input\" should not contain class \".inputbox\"\n\n  Scenario: Toggling a class\n    When I toggle class \"doge\" on \".hidden\"\n    Then \".hidden\" should not contain class \"doge\"\n    When I toggle class \"doge\" on \".hidden\"\n    Then \".hidden\" should contain class \"doge\"\n\n  Scenario: Toggling a class with selector\n    When I toggle class \"such\" on \"doge\" in \".wow\"\n    Then \"doge\" should contain class \"such\"\n    When I toggle class \"such\" on \"doge\" in \".wow\"\n    Then \"doge\" should not contain class \"such\"\n\n  Scenario: Hovering over a element\n    Given I should be able to hover over an element\n\n  Scenario: Doubling clicking an element\n    Given I should be able to double click an element\n\n  Scenario: Clearing an input\n    Given I should be able to clear an input\n\n  Scenario: Finding all elements\n    When I find all div elements in the body tag then I should get a list of them\n\n  Scenario: Reading all elements\n    When I find all dd on the page i should be able to read them all\n"
  },
  {
    "path": "test/integration/fixtures/form.html",
    "content": "<html>\n  <head></head>\n  <body>\n    <form class=\"formula_1\">\n    </form>\n    <h1> Formtastic </h1>\n    <div>\n      <form id=\"form\">\n        Field1: <input id=\"field1\" type='text' name=\"field1\"><br>\n        Field2: <input id=\"field2\" type='text' name=\"field2\" value=\"default\"><br>\n        <input id=\"submit\" type='submit' name=\"submit\" onClick=\"return showText()\">\n      </form>\n      <form>\n        <select id=\"selector\" onChange=\"return clicked()\">\n          <option value=\"wow1\" class=\"clickable\">one</option>\n          <option value=\"wow2\" class=\"clickable\">two</option>\n          <option value=\"wow3\" class=\"clickable\">three</option>\n        </select>\n      </form>\n    </div>\n    <div id=\"onSubmit\"></div>\n    <div id=\"onClick\"></div>\n    <input type=\"checkbox\" class='my-checkbox'>\n    <script type=\"text/javascript\">\n      function showText(){\n        var field1 = document.getElementById(\"field1\").value\n        var field2 = document.getElementById(\"field2\").value\n        document.getElementById('onSubmit').innerHTML = \"field1 is \" + field1 +\" and \"+\"field2 is \" + field2\n        return false;\n      }\n\n      function clicked(){\n        var selector = document.getElementById(\"selector\")\n        document.querySelector('#onClick').innerHTML = selector.options[selector.selectedIndex].text;\n      }\n    </script>\n  </body>\n</html>\n"
  },
  {
    "path": "test/integration/fixtures/list.html",
    "content": "<html>\n  <head></head>\n  <body>\n    <ul>\n      <li>data</li>\n      <li>7 of nine</li>\n      <li class='clickable'>deanna troi</li>\n      <li>geordi laforge</li>\n      <li><p class='clickable'>John Crichton</p></li>\n      <li class='super-hero'>Tony Stark</li>\n    </ul>\n\n    <ul class=\"click-list\">\n      <li></li>\n      <li></li>\n      <li></li>\n    </ul>\n\n    <div class=\"nested\">\n      <h1> i am a headline </h1>\n      <div>\n        <span><p>orc</p></span>\n        <span><p>human</p></span>\n        <span><p>protoss</p></span>\n      </div>\n    </div>\n    <div id=\"onSubmit\"></div>\n    <script type=\"text/javascript\">\n\n      document.querySelector('.clickable').addEventListener('click', function(){\n        document.querySelector('#onSubmit').innerHTML = 'clicked';\n      });\n\n      document.querySelector('p.clickable').addEventListener('click', function(){\n        document.querySelector('#onSubmit').innerHTML = 'clicked';\n      });\n\n      Array.prototype.forEach.call(\n        document.querySelectorAll('.click-list li'),\n        function(v){\n          v.addEventListener('click', function(){\n            this.innerHTML = \"clicked\";\n          });\n        }\n      );\n    </script>\n  </body>\n</html>\n"
  },
  {
    "path": "test/integration/fixtures/marionette.html",
    "content": "<html>\n  <head>\n    <script type=\"text/javascript\" src=\"http://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js\"></script>\n    <script type=\"text/javascript\" src=\"http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js\"></script>\n    <script type=\"text/javascript\" src=\"http://cdnjs.cloudflare.com/ajax/libs/backbone.js/1.1.2/backbone-min.js\"></script>\n    <script type=\"text/javascript\" src=\"http://marionettejs.com/downloads/backbone.marionette.js\"></script>\n  </head>\n  <body></body>\n  <script>\n    window.MyRegion = new Backbone.Marionette.Region({el: \"body\"});\n\n    window.MyRegion.show(new (Backbone.Marionette.ItemView.extend({\n      template: _.template(\"<borg>the borg</borg><assimilate>like to eat cheerios</assimilate>\"),\n      ui: {\n        \"assimilate\": \"assimilate\",\n        \"borg\": \"borg\"\n      }\n    }))());\n  </script>\n</html>\n"
  },
  {
    "path": "test/integration/fixtures/sample.html",
    "content": "<html>\n  <head></head>\n  <style>\n  h4 span {\n    display: none;\n  }\n\n  h4:hover span {\n    display: inline;\n  }\n  </style>\n  <body>\n    <h1> hello world </h1>\n    <div class=\"wow\" width=\"400px\">\n      <doge>many money</doge>\n    </div>\n    <p><input type=\"text\" class=\"inputbox\" /></p>\n    <div class=\"hidden doge\" style=\"display:none\">\n    </div>\n    <div class=\"container\">\n      <img class=\"nested\" height=\"100px\" />\n    </div>\n    <deep>\n      <space9>wormhole</space9>\n    </deep>\n    <div class=\"double\">double me</div>\n    <h4>ok ok <span>only on hover</span><h4>\n    <dd>one</dd>\n    <dd>two</dd>\n  </body>\n\n  <script type=\"text/javascript\">\n  document.querySelector('.double').addEventListener(\"dblclick\", function() {\n    this.innerHTML = \"wow such click\";\n  }, false);\n  </script>\n</html>\n"
  },
  {
    "path": "test/integration/steps/find_steps.coffee",
    "content": "_      = require('lodash')\nexpect = require(\"chai\").expect\n\nmodule.exports = ->\n  @When /^I eager find the \"([^\"]*)\" element I should see \"([^\"]*)\"$/, (selector, content) ->\n    @Widget.find({\n      root: selector\n    }).then (widget) ->\n      widget.el.getText().should.eventually.equal(content)\n\n  @When /^I retrieve text of the \"([^\"]*)\" element I should get \"([^\"]*)\"$/, (rootSelector, expected) ->\n    new @Widget({\n      root: rootSelector\n    })\n    .getText()\n    .then (text) -> text.should.eql(expected)\n\n  @When /^I retrieve text of the \"([^\"]*)\" element as a child of \"([^\"]*)\" I should get \"([^\"]*)\"$/, (child, root, expected) ->\n    new @Widget({\n      root: root\n    })\n    .getText(child)\n    .then (text) -> text.should.eql(expected)\n\n  @Given /^I search for \"([^\"]*)\" I should get \"([^\"]*)\"$/, (search, found) ->\n    new @Widget({\n      root: \".wow\"\n    })\n    .find({text: search}).then( (el) ->\n      el.getText()\n    )\n    .should.eventually.eql(found)\n"
  },
  {
    "path": "test/integration/steps/form_steps.coffee",
    "content": "_      = require('lodash')\nexpect = require('chai').expect\n\nmodule.exports = ->\n  world = this\n\n  @Given /^I click submit$/, ->\n    new this.Widgets.SimpleForm().submitForm()\n\n  @Given /^I fill the field with default with something else$/, ->\n    new @Widget({\n      root: \"#field2\"\n    })\n    .fill({value: \"doge\"})\n\n  @Then /^I should only see something else$/, ->\n    new @Widget({\n      root: \"#field2\"\n    })\n    .getValue()\n    .should.eventually.eql(\"doge\")\n\n  @Given /^I enter information and submit$/, ->\n    form = new this.Widgets.SimpleForm()\n    form.enter()\n\n  @Then /^I should see \"([^\"]*)\"$/, (text) ->\n    div = new this.Widgets.Div()\n    div.getText().should.eventually.eql(text)\n\n  @Given /^I fill a form with:$/, (table) ->\n    F = world.Widget.Form.extend({\n     root: 'form'\n     fields: _.map(table.hashes(), \"name\")\n    })\n\n    new F().submitWith(_.fromPairs(table.raw().slice(1)))\n\n  @Then /^the widget should use the default form selector to find the first available form element$/, ->\n    new @Widget.Form().getAttribute(\"class\").should.eventually.eql(\"formula_1\")\n\n  @Then /^the widget should find the form with the supplied selector of \"([^\"]*)\"$/,  (selector) ->\n    new @Widget.Form({root: selector}).getAttribute(\"id\").should.eventually.eql(\"form\")\n\n  @When /^I search for a nested option I should find it$/, ->\n    new @Widget({\n      root: \"select\"\n    }).find(\"[value=\\\"wow3\\\"]\").then (el) ->\n      el.getText().then (val) ->\n        val.should.eql(\"three\")\n\n  @When /^I select an option by value$/, ->\n    _this = this\n    new @Widget.Form({\n      root: \"select\"\n    })\n    .select({value:\"wow2\"}).then ->\n      new _this.Widget({\n        root: '#onClick'\n      })\n      .read()\n      .should.eventually.eql('two')\n\n  @When /^I select an option by text$/, ->\n    _this = this\n    new @Widget.Form({\n      root: \"select\"\n    })\n    .select({text:\"three\"})\n    .then ->\n      new _this.Widget({\n        root: '#onClick'\n      })\n      .read()\n      .should.eventually.eql('three')\n\n\n  @When /^I try to select with no selector$/, ->\n    expect( =>\n      new @Widget.Form({\n        root: \"select\"\n      })\n      .select()\n    ).to.throw(\"You must provide something to select by.\")\n\n  @When /^I try to select with both selectors$/, ->\n    expect( =>\n      new @Widget.Form({\n        root: \"select\"\n      })\n      .select({ text: \"three\", value: \"wow3\"})\n    ).to.throw(\"You may only have one select by attribute\")\n\n  @When /^I read all fields of a form I should see the results$/, ->\n    f = new @Widgets.SimpleForm()\n    f.submitWith({\n      field1: \"wow\",\n      field2: \"such\"\n    }).then ->\n      f.readAll().should.eventually.eql({\n        field1: \"wow\",\n        field2: \"such\"\n      })\n\n  @When /^I click a checkbox$/, ->\n    @W.click('input[type=\"checkbox\"]')\n\n  @Then /^the checkbox should be selected$/, ->\n    @W.find({root: 'input[type=\"checkbox\"]'})\n    .then (widget) -> widget.el.isSelected()\n    .should.eventually.eql(true)\n"
  },
  {
    "path": "test/integration/steps/helper_steps.coffee",
    "content": "Driver = require('selenium-webdriver')\nexpect = require('chai').expect\n\nmodule.exports = ->\n  @When /^I execute a step$/, ->\n\n  @Then /^the step should have a pending method$/, ->\n    expect(@Pending).to.exist\n\n  @When /^I execute a pending step$/, -> @Pending()\n\n  @Then /^the following step should not execute$/, ->\n    throw new Error \"this step should not execute\"\n\n  @Then /^the environment should expose Driver$/, ->\n    expect(@Driver).to.equal(Driver)"
  },
  {
    "path": "test/integration/steps/list_steps.coffee",
    "content": "_      = require('lodash')\nexpect = require('chai').expect\n\nmodule.exports = ->\n  @Given /^I should see \"([^\"]*)\" items in a list$/, (count) ->\n    new @Widgets.List().items()\n    .should.eventually.have.length(count)\n\n  @Given /^I should get the identity \"([^\"]*)\" for the item with a super-hero class$/, (identity)->\n    new @Widgets.List().items().then (items)->\n      for item in items\n        item.getIdentity?()\n        .should.eventually.equal(identity)\n\n  @Given /^I should see \"([^\"]*)\" in position \"([^\"]*)\" of the list$/, (content, position) ->\n    new @Widgets.List().at(+position-1)\n    .then (item) -> item.find()\n    .then (elm) -> elm.getText()\n    .should.eventually.equal(content)\n\n  @Given /^I should see html \"([^\"]*)\" in position \"([^\"]*)\" of the list$/, (content, position) ->\n    new @Widgets.List().at(+position-1)\n    .then (item) -> item.getHtml()\n    .should.eventually.equal(content)\n\n  @When /^I filter by \"([^\"]*)\" I should see \"([^\"]*)\" element$/, (string, count) ->\n    new @Widgets.List().filterBy(string)\n    .should.eventually.have.length(count)\n\n  @Then /^I should see the following list:$/, (table) ->\n    new @Widgets.List().toArray()\n    .should.eventually.eql(_.flatten(table.raw()))\n\n  @Then /^I should see stuff$/, (table) ->\n    new @Widgets.List().toHtml()\n\n  @When /^I find with \"([^\"]*)\" I should see \"([^\"]*)\"$/, (string, content) ->\n    new @Widgets.List().findBy(string)\n    .then (item) -> item.getHtml()\n    .should.eventually.eql(content)\n\n  @When /^I call length I should receive (\\d+)$/, (expectedLength) ->\n    new @Widgets.List().length()\n    .should.eventually.eql(+expectedLength)\n\n  @When /^I call at with a string I should get an error$/, ->\n    expect( =>\n      new @Widgets.List().at(\"0\")\n    )\n    .to.throw(\"Argument must be a number. https://github.com/mojotech/pioneer/blob/master/docs/list.md#at\")\n\n  @When /^I find the \"([^\"]*)\" within \"([^\"]*)\" I should see (\\d+) items$/, (itemSelector, root, count) ->\n    new @Widgets.List({\n      root: root\n      itemSelector: itemSelector\n    }).items().should.eventually.have.length(+count)\n\n  @When /^I find the \"([^\"]*)\" child \"([^\"]*)\" within \"([^\"]*)\" and then I read the \"([^\"]*)\" I should see \"([^\"]*)\"$/, (index, itemSelector, root, childSelector, value) ->\n    new @Widgets.List({\n      root: root\n      itemSelector: itemSelector\n    })\n    .at(+index-1)\n    .then (child) ->\n      child.read(childSelector).should.eventually.eql(value)\n\n  @When /^I read at the \"([^\"]*)\" index of ul I should see \"([^\"]*)\"$/, (index, expected) ->\n    new @Widgets.List()\n    .readAt(+index-1)\n    .should.eventually.eql(expected)\n\n  @When /^I read at the \"([^\"]*)\" child \"([^\"]*)\" within \"([^\"]*)\" inside \"([^\"]*)\" I should see \"([^\"]*)\"$/, (index, itemSelector, root, childSelector, expected) ->\n    new @Widgets.List({\n      root: root\n      itemSelector: itemSelector\n    })\n    .readAt({\n      index: +index-1,\n      selector: childSelector\n    })\n    .should.eventually.eql(expected)\n\n  @When /^I click on the \"([^\"]*)\" child of \"([^\"]*)\" I should read \"([^\"]*)\"$/, (index, rootSelector, expected) ->\n    _this = this\n    new @Widgets.List({\n        root: rootSelector\n    })\n    .at(index - 1)\n    .then (item) ->\n      item.click()\n      .then ->\n        new _this.Widget({\n          root: '#onSubmit'\n        })\n        .read()\n        .should.eventually.eql(expected)\n\n  @When /^I click at the \"([^\"]*)\" index of \"([^\"]*)\" I should read \"([^\"]*)\"$/, (index, selector, expected) ->\n    _this = this\n    new @Widgets.List({\n      root: selector\n    })\n    .clickAt(index - 1)\n    .then ->\n      new _this.Widget({\n        root: '#onSubmit'\n      })\n      .read()\n      .should.eventually.eql(expected)\n\n  @When /^I click at the \"([^\"]*)\" index with selector \"([^\"]*)\" I should read \"([^\"]*)\"$/, (index, selector, expected) ->\n    _this = this\n    new @Widgets.List()\n    .clickAt({\n      index: index - 1,\n      selector: selector\n    })\n    .then ->\n      new _this.Widget({\n        root: '#onSubmit'\n      })\n      .read()\n      .should.eventually.eql(expected)\n\n  @Given /^I should be able to read and transform a list item at an index$/, ->\n    new @Widgets.List()\n    .readAt({\n      index: 4,\n      transformer: (val) -> val.toUpperCase()\n    })\n    .should.eventually.eql(\"JOHN CRICHTON\")\n\n  @Given /^I should be able to read with a subselector and transform an item at an index$/, ->\n    new @Widgets.List()\n    .readAt({\n      index: 4,\n      selector: \"p\",\n      transformer: (val) -> val.toUpperCase()\n    })\n    .should.eventually.eql(\"JOHN CRICHTON\")\n\n  @When /^I click on each item in the list$/, ->\n    new @Widgets.List({root: \"ul.click-list\"}).clickEach()\n\n  @Then /^I should see that each list item was clicked$/, ->\n    new @Widgets.List({root: \"ul.click-list\"}).map((item) ->\n      item.read()\n    ).should.eventually.eql([\"clicked\", \"clicked\", \"clicked\"])\n\n  @Given /^I can invoke click on each widget in the list$/, ->\n    new @Widgets.List({root: \"ul.click-list\"}).invoke('click')\n\n  @Given /^I can invoke click on each widget in the list with a method$/, ->\n    new @Widgets.List({root: \"ul.click-list\"}).invoke(@Widget::click)\n\n  @Given /^I can invoke read on each widget in the list with a transformer and selector$/, ->\n    new @Widgets.List({\n      root: \".nested\",\n      itemSelector: \"span\"\n    })\n    .invoke({\n      method: \"read\",\n      arguments: [{\n        transformer: (val) -> return val.toUpperCase()\n        selector: \"p\"\n      }]\n    }).should.eventually.eql([\"ORC\", \"HUMAN\", \"PROTOSS\"])\n\n  @Given /^I can check the visibility on a list's items$/, ->\n    new @Widgets.List({\n      root: \".nested\",\n      itemSelector: \"span\"\n    })\n    .map (w) ->\n      w.isVisible()\n    .should.eventually\n    .eql([true, true, true])\n"
  },
  {
    "path": "test/integration/steps/read_steps.coffee",
    "content": "_      = require('lodash')\nexpect = require(\"chai\").expect\n\nmodule.exports = ->\n  @When /^I read the \"([^\"]*)\" I should see \"([^\"]*)\"$/, (selector, content) ->\n    new @Widget({\n      root: selector\n    })\n    .read()\n    .should.eventually.eql(content)\n\n  @When /^I read the \"([^\"]*)\" with an all caps tranformer I should see \"([^\"]*)\"$/, (selector, content) ->\n    new @Widget({\n      root: selector\n    })\n    .read({\n      transformer: (str) -> str.toUpperCase()\n    })\n    .should.eventually.eql(content)\n\n  @When /^I find the \"([^\"]*)\" element within \"([^\"]*)\" I should see \"([^\"]*)\"$/, (child, parent, content) ->\n    base = new @Widget({\n      root: parent\n    })\n\n    base.read(child)\n    .should.eventually.eql(content)\n\n  @When /^I read the \"([^\"]*)\" attribute I should get \"([^\"]*)\"$/, (attribute, expected) ->\n    new @Widget({\n      root: \".wow\"\n    })\n    .getAttribute(attribute)\n    .then (attr) -> attr.should.eql(expected)\n\n  @When /^I read the \"([^\"]*)\" attribute of a nested element I should get \"([^\"]*)\"$/, (attr, expected) ->\n    new @Widget({\n      root:\".container\"\n    }).getAttribute({\n      selector: \".nested\",\n      attribute: attr\n    }).should.eventually.eql(expected)\n\n  @When /^I get the innerHTML of \"([^\"]*)\" I should get \"([^\"]*)\"$/, (rootSelector, expected) ->\n    new @Widget({\n      root: rootSelector\n    })\n    .getInnerHTML().then (html) ->\n      html.trim().should.eql(expected)\n\n  @When /^I get the outerHTML of \"([^\"]*)\" I should get \"([^\"]*)\"$/, (rootSelector, expected) ->\n    new @Widget({\n      root: rootSelector\n    })\n    .getOuterHTML().then (html) ->\n      html.split('\\n').map((string) ->\n        string.trim()\n      )\n      .join(\"\").should.eql(expected)\n"
  },
  {
    "path": "test/integration/steps/shorthand.coffee",
    "content": "_ = require('lodash')\n\nmodule.exports = ->\n\n  @When /^I shorthand double click an element$/, ->\n    @W.doubleClick({\n      selector: '.double'\n    }).then (w) -> w.read({selector: \".double\"}).should.eventually.eql(\"wow such click\")\n\n  @When /^I shorthand hover an element$/, ->\n    @W.hover({\n      selector: \"h4\"\n    }).then (w) ->\n      w.read({selector: \"h4\"}).should.eventually.eql(\"ok ok only on hover\")\n\n  @When /^I shorthand click an element$/, ->\n    @W.click({selector: 'body'})\n\n  @When /^I shorthand fill an element$/, ->\n    @W.fill({\n      selector: \".inputbox\",\n      value: \"wow\"\n    })\n\n  @When /^I shorthand isPresent an element$/, ->\n    @W.isPresent(\".wow doge\").should.eventually.eql(true)\n\n  @When /^I shorthand isVisible an element$/, ->\n    @W.isVisible({\n      selector: \".wow\"\n    }).should.eventually.eql(true)\n\n  @When /^I shorthand getAttribute an element$/, ->\n    @W.getAttribute({\n      attribute: \"width\",\n      selector: \".wow\"\n    }).should.eventually.eql(\"400px\")\n\n  @When /^I shorthand getValue the element$/, ->\n    @W.getValue({\n      selector: \".inputbox\"\n    }).should.eventually.eql(\"wow\")\n\n  @When /^I shorthand getText an element$/, ->\n    @W.getText({\n      selector: \"h1\"\n    }).should.eventually.eql(\"hello world\")\n\n  @When /^I shorthand getInnerHTML an element$/, ->\n    @W.getInnerHTML({\n      selector: \".wow\"\n    }).then (html) ->\n      html.trim()\n      .should.eql(\"<doge>many money</doge>\")\n\n  @When /^I shorthand getOuterHTML an element$/, ->\n    @W.getOuterHTML({\n      selector: \".wow doge\"\n    }).then (html) ->\n      html.split('\\n').map((string) ->\n        string.trim()\n      )\n      .join(\"\")\n      .should.eql(\"<doge>many money</doge>\")\n\n  @When /^I shorthand call hasClass an element$/, ->\n    @W.hasClass({\n      selector: \".hidden\",\n      className: \"doge\"\n    }).should.eventually.be.true\n\n  @When /^I shorthand call sendKeys an element$/, ->\n    @W.sendKeys({\n      selector: \".inputbox\",\n      keys: [\n        \"dogecoins\",\n        Driver.Key.SPACE,\n        \"are\",\n        Driver.Key.SPACE,\n        \"worth\",\n        Driver.Key.SPACE,\n        \"alot\"\n      ]\n    }).then =>\n      @getValue({\n        selector: \".inputbox\"\n      }).should.eventually.eql(\"dogecoins are worth alot\")\n\n  @When /^I shorthand call clear an element$/, ->\n    new @W({\n      root: \".inputbox\"\n    }).sendKeys(\"pioneer is awesome man...\").then =>\n      @W.clear({\n        selector: \".inputbox\"\n      }).then (widget) ->\n        widget.getValue({selector: \".inputbox\"})\n        .should.eventually.eql(\"\")\n"
  },
  {
    "path": "test/integration/steps/steps.coffee",
    "content": "_      = require('lodash')\nexpect = require(\"chai\").expect\n\nmodule.exports = ->\n  @When /^I fill an input with \"([^\"]*)\" I should get \"([^\"]*)\"$/, (write, read) ->\n    new @Widget({\n      root: '.inputbox'\n    }).fill(write)\n    .then =>\n      @W.getValue({selector: \".inputbox\"}).should.eventually.eql(read)\n\n  @When /^I fill an input with nothing I should get an error$/, ->\n    expect( =>\n      new @Widget({root: '.inputbox'})\n      .fill()\n    )\n    .to.throw(\"You must pass a value to fill with. https://github.com/mojotech/pioneer/blob/master/docs/widget.md#fill\")\n"
  },
  {
    "path": "test/integration/steps/util.coffee",
    "content": "_             = require('lodash')\nPath          = require \"path\"\nfixturesBase  = Path.resolve(__dirname, \"../\", \"fixtures\")\n\nmodule.exports = ->\n  @When /^I view \"([^\"]*)\"$/, (name) ->\n    @driver.get(\"file:///\"+ Path.join(fixturesBase, name))\n\n  @When /^I call driver.visit$/, ->\n    @driver.visit(\"http://www.google.com/\")\n\n  @Then /^the driver should get that URL$/, ->\n    @driver.getCurrentUrl()\n    .should.eventually.contain(\"www.google.com\")\n"
  },
  {
    "path": "test/integration/steps/widget_steps.coffee",
    "content": "_      = require('lodash')\nexpect = require(\"chai\").expect\nDriver = require('selenium-webdriver')\n\nmodule.exports = ->\n  @When /^I see if \"([^\"]*)\" is present within \"([^\"]*)\" I should get \"([^\"]*)\"$/, (child, root, isPresent) ->\n    @Widget.find({\n      root: root\n    }).then((widget) ->\n      widget.isPresent(child)\n    )\n    .then (present) ->\n      expect(\"\"+present).to.eql(isPresent)\n\n  @When /^I see if \"([^\"]*)\" is visible I should get \"([^\"]*)\"$/, (selector,found) ->\n    new @Widget({\n      root: selector\n    })\n    .isVisible()\n    .then (isFound) -> (isFound+\"\").should.eql(found)\n\n  @When /^I see if an element identified by a string is visible$/, ->\n    new @Widget({\n      root: \".wow\"\n    })\n    .isVisible(\"doge\")\n    .should.eventually.be.true\n\n  @When /^I send \"([^\"]*)\" to an element I should be able to read \"([^\"]*)\"$/, (sent, read) ->\n    w = new @Widget({\n      root: \".inputbox\"\n    })\n\n    w.sendKeys(sent)\n    .then =>\n      new @Widget({\n        root: \"p\"\n      })\n      .getValue(\".inputbox\").should.eventually.eql(read)\n\n  @When /^I make sure inputbox is empty$/, ->\n    new @Widget({root: \".inputbox\"}).then (w) =>\n      w.find().then (el) -> el.clear()\n\n  @Then /^I send keys to an element with an object I should be able to read them$/, ->\n    w = new @Widget({\n      root: \"p\"\n    })\n    w.sendKeys({\n      selector: \".inputbox\",\n      keys: [\n        \"wow\",\n        Driver.Key.SPACE,\n        \"such\",\n        Driver.Key.SPACE,\n        \"send\",\n        Driver.Key.SPACE,\n        \"keys\"\n      ]\n    }).then ->\n      w.getValue({selector: \".inputbox\"})\n      .should.eventually.eql(\"wow such send keys\")\n\n  @When /^I send keys to an element with multiple arguments I should be able to read them$/, ->\n    new @Widget({\n      root: \".inputbox\"\n    })\n    .sendKeys(\"some\", Driver.Key.SPACE, \"important\", Driver.Key.SPACE, \"data\")\n    .then =>\n      @W.getValue({selector: \".inputbox\"})\n      .should.eventually.eql(\"some important data\")\n\n  @When /^I add class \"([^\"]*)\" to \"([^\"]*)\"$/, (className, selector) ->\n    new @Widget({\n      root: selector\n    })\n    .addClass(className)\n\n  @When /^I remove class \"([^\"]*)\" from \"([^\"]*)\"$/, (className, selector) ->\n    new @Widget({\n      root: selector\n    })\n    .removeClass(className)\n\n  @When /^I toggle class \"([^\"]*)\" on \"([^\"]*)\"$/, (className, selector) ->\n    new @Widget({\n      root: selector\n    })\n    .toggleClass(className)\n\n  @When /^I add class \"([^\"]*)\" to \"([^\"]*)\" in \"([^\"]*)\"$/, (className, childSelector, selector) ->\n    new @Widget({\n      root: selector\n    })\n    .addClass({\n      selector: childSelector,\n      className: className\n    })\n\n  @When /^I remove class \"([^\"]*)\" from \"([^\"]*)\" in \"([^\"]*)\"$/, (className, childSelector, selector) ->\n    new @Widget({\n      root: selector\n    })\n    .removeClass({\n      className: className,\n      selector: childSelector\n    })\n\n  @When /^I toggle class \"([^\"]*)\" on \"([^\"]*)\" in \"([^\"]*)\"$/, (className, childSelector, selector) ->\n    new @Widget({\n      root: selector\n    })\n    .toggleClass({\n      className: className,\n      selector: childSelector\n    })\n\n  @Then /^\"([^\"]*)\" should contain class \"([^\"]*)\"$/, (selector, className) =>\n    widget = new @Widget({\n      root: selector\n    })\n    .hasClass(className).should.eventually.be.true\n\n  @Then /^\"([^\"]*)\" should not contain class \"([^\"]*)\"$/, (selector, className) =>\n    new @Widget({\n      root: selector\n    })\n    .hasClass(className).should.eventually.be.false\n\n  @Then /^\"([^\"]*)\" should contain class \"([^\"]*)\" in \"([^\"]*)\"$/, (childSelector, className, selector) =>\n    widget = new @Widget({\n      root: selector\n    })\n    .hasClass({\n      className: className\n      selector: childSelector\n    }).should.eventually.be.true\n\n  @Then /^\"([^\"]*)\" should not contain class \"([^\"]*)\" in \"([^\"]*)\"$/, (childSelector, className, selector) =>\n    widget = new @Widget({\n      root: selector\n    })\n    .hasClass({\n      className: className\n      selector: childSelector\n    }).should.eventually.be.false\n\n  @Given /^I should be able to hover over an element$/, ->\n    new @W({\n      root: 'h4'\n    })\n    .hover()\n    .then (w) ->\n      w.read()\n      .should.eventually\n      .eql(\"ok ok only on hover\")\n\n  @Given /^I should be able to double click an element$/, ->\n    new @W({\n      root: '.double'\n    })\n    .doubleClick()\n    .then (w) ->\n      w.read()\n      .should.eventually\n      .eql(\"wow such click\")\n\n  @Given /^I should be able to clear an input$/, ->\n    w = new @W({\n      root: \".inputbox\"\n    })\n    w.sendKeys(\"filled with this\").then =>\n      w.clear().then (widget) ->\n        widget.getValue().should.eventually.eql(\"\")\n\n  @When /^I find all div elements in the body tag then I should get a list of them$/, ->\n    new @Widget({\n      root: \"body\"\n    })\n    .findAll(\"div\")\n    .should.eventually.be.an.instanceof(@W.List)\n\n  @When /^I find all dd on the page i should be able to read them all$/, ->\n    new @Widget({\n      root: \"body\"\n    })\n    .findAll(\"dd\")\n    .then (list) ->\n      list.invoke(\"read\")\n    .should.eventually.eql([\"one\", \"two\"])\n"
  },
  {
    "path": "test/integration/widgets/div.coffee",
    "content": "module.exports = ->\n  this.Widgets = this.Widgets || {}\n\n  return this.Widgets.Div = this.Widget.extend\n    root: \"#onSubmit\"\n\n    getText: ->\n      @find().then (el) -> el.getText()\n"
  },
  {
    "path": "test/integration/widgets/form.coffee",
    "content": "module.exports = ->\n  this.Widgets = this.Widgets || {}\n\n  return this.Widgets.SimpleForm = this.Widget.Form.extend\n    root: '#form',\n    fields: [\"field1\", \"field2\"]\n\n    enter: ->\n      @submitWith({field1: \"myEmail@gmail.com\"})\n"
  },
  {
    "path": "test/integration/widgets/list.coffee",
    "content": "module.exports = ->\n  @Widgets = @Widgets || {}\n\n  @Widgets.List = @Widget.List.extend\n    root: \"ul\"\n    childSelector: \"li\"\n\n    getItemClass: (el)->\n      el.getAttribute('class').then (className) =>\n        if className is 'super-hero' then @world.Widgets.ListItem else @itemClass\n\n    clickEach: ->\n      @each (item) -> item.click()\n\n    toArray: ->\n      @map (item) ->\n        item.find().then (elm) -> elm.getText()\n\n    filterBy: (string) ->\n      @filter (item) ->\n        item\n          .find()\n          .then (elm) -> elm.getText()\n          .then (text) -> text.match(string) != null\n\n    findBy: (string) ->\n      @findWhere (item) ->\n        item\n          .find()\n          .then (elm) -> elm.getText()\n          .then (text) -> text.match(string) != null\n"
  },
  {
    "path": "test/integration/widgets/list_item.coffee",
    "content": "module.exports = ->\n  this.Widgets = this.Widgets || {}\n\n  return this.Widgets.ListItem = this.Widget.extend\n\n    getIdentity: ->\n      @getText().then (val) ->\n        'Iron Man' if val is 'Tony Stark'\n"
  },
  {
    "path": "test/mocha.opts",
    "content": "--reporter spec\n--require coffeescript/register\n"
  },
  {
    "path": "test/unit/bin.coffee",
    "content": "chai            = require('chai')\nsinon           = require(\"sinon\")\nsinonChai       = require(\"sinon-chai\")\n\nchai.should()\nchai.use(sinonChai)\n\nPioneer         = require(\"../../lib/pioneer.js\")\n\ndescribe \"Pioneer Kickoff File\", ->\n\n  describe \"isVersionRequested()\", ->\n\n    it \"should return true when --version is passed\", ->\n      Pioneer::isVersionRequested({version: true})\n      .should.be.true\n\n    it \"should return true when -v is passed\", ->\n      Pioneer::isVersionRequested({v: true})\n      .should.be.true\n\n    it \"should return null when neither -v or --version is true\", ->\n      # expect(Pioneer::isVersionRequested({}))\n      # .to.eql(undefined)\n\n  describe \"When Version is requested\", ->\n    beforeEach ->\n      @sandbox = sinon.sandbox.create()\n      @sandbox.stub(Pioneer.prototype, \"isVersionRequested\", -> true )\n      @sandbox.stub(Pioneer.prototype, \"getSpecifications\", -> true )\n      @consoleSpy = @sandbox.spy(console, 'log')\n\n    afterEach ->\n      @sandbox.restore()\n\n    it \"should log the current version\", ->\n      currentV = require('../../package').version\n      new Pioneer(\"wow\")\n      @consoleSpy.should.have.been.calledWith(currentV);\n\n  describe \"isVerbose\", ->\n\n    describe \"when only a command line value is passed\", ->\n\n      it \"should treat true and 'true' as true\", ->\n        Pioneer::isVerbose({verbose: true})\n        .should.be.true\n\n        Pioneer::isVerbose({verbose: \"true\"})\n        .should.be.true\n\n      it \"should treat missing or 'false' value as false\", ->\n        Pioneer::isVerbose({verbose: \"false\"})\n        .should.be.false\n\n        Pioneer::isVerbose({})\n        .should.be.false\n\n    describe \"when only a config value is passed\", ->\n\n      it \"should return true when passed a truthy value\", ->\n        Pioneer::isVerbose({}, {verbose: true})\n        .should.be.true\n\n      it \"should return false when passed a falsey value\", ->\n        Pioneer::isVerbose({}, {verbose: \"\"})\n        .should.be.false\n\n    describe \"when a config and command line value are passed\", ->\n\n      it \"should defer to the command line value\", ->\n        Pioneer::isVerbose({verbose: true}, {verbose: false})\n        .should.be.true\n\n        Pioneer::isVerbose({verbose: false}, {verbose: true})\n        .should.be.false\n"
  },
  {
    "path": "test/unit/config.coffee",
    "content": "chai            = require('chai')\nsinon           = require(\"sinon\")\nsinonChai       = require(\"sinon-chai\")\nassert          = require(\"assert\")\nconfigBuilder   = require('../../lib/config_builder')\nPioneer         = require('../../lib/pioneer.js')\n_               = require('lodash')\npath            = require('path')\nfs              = require('fs')\nrmdir           = require('rimraf').sync\nCONFIG_NAMES    = [\n  \"tags\",\n  \"feature\",\n  \"require\",\n  \"format\",\n  \"error_formatter\",\n  \"coffee\",\n  \"driver\",\n  \"preventReload\",\n  \"scaffold\"\n]\n\nchai.should()\nchai.use(sinonChai)\n\ndescribe \"Pioneer configuration\", ->\n  describe \"parseAndValidateJSON()\", ->\n    beforeEach ->\n      this.path = \"wow\"\n      this.invalidJSON = \"{\\\"someError\\\":\\\"JSON\\\"\"\n      this.validJSON = \"{\\\"someobject\\\":\\\"that works\\\"}\"\n\n    it \"should handle an invalid json object\", ->\n      assert.throws(( ->\n        Pioneer::parseAndValidateJSON(this.invalidJSON, this.path)),\n        Error,\n        this.path + \" does not include a valid JSON object\"\n      )\n\n    it \"should handle a valid json object\", ->\n      Pioneer::parseAndValidateJSON(this.validJSON, this.path)\n      .should.eql({\n        someobject: \"that works\"\n      })\n\n  describe \"configuration formatter\", ->\n    beforeEach ->\n      process.argv  = []\n\n      this.libPath  = \"wow\"\n      this.simpleConfig   = [\n        { feature: 'test/integration/features' },\n        { require: [ 'test/integration/steps', 'test/integration/widgets' ] },\n        { format: 'pretty' },\n        { error_formatter: 'errorformat.js' },\n        { coffee: false },\n        { driver: 'phantomjs' },\n        { 'preventReload': true }\n      ]\n\n      this.multiTagConfig = [\n        { tags: [\"@wow\", \"@doge\"]}\n      ]\n      scaffoldStub = sinon.stub(configBuilder, \"hasFeature\", -> true)\n\n    afterEach ->\n      configBuilder.hasFeature.restore()\n\n\n    it \"should convertToExecOptions\", ->\n      configBuilder.convertToExecOptions(this.simpleConfig, this.libPath)\n      .should.eql([\n        null\n        null\n        \"--require\"\n        \"wow/support\"\n        \"test/integration/features\"\n        \"--require\"\n        \"test/integration/steps\"\n        \"--require\"\n        \"test/integration/widgets\"\n        \"--format=pretty\"\n        \"--error_formatter=errorformat.js\"\n      ])\n      process.argv.should.eql([\"--driver=phantomjs\", \"--prevent-browser-reload\"])\n\n    it \"should convertToExecOptions with multiple tags\", ->\n      configBuilder.convertToExecOptions(this.multiTagConfig, this.libPath)\n      .should.eql([null, null, \"--require\", \"wow/support\", \"--tags=@wow, @doge\"])\n      process.argv.should.eql([])\n\n    it \"should push command line arguments for driver and reload\", ->\n      configBuilder.convertToExecOptions(this.simpleConfig, this.libPath)\n      process.argv.should.eql([\"--driver=phantomjs\", \"--prevent-browser-reload\"])\n\n    describe \"generating options\", ->\n      beforeEach ->\n        stub = sinon.stub(configBuilder, \"convertToExecOptions\", (objArray, libPath) ->)\n\n      afterEach ->\n        configBuilder.convertToExecOptions.restore()\n\n      it \"should generate options with just commandline options\", ->\n        configBuilder.generateOptions({\n          driver:\"pretty\",\n          require: [\"that.js\", \"this.json\", \"totally.css\"]\n          feature:\"test/integration/features\"\n        }, {}, this.libPath)\n\n        configBuilder.convertToExecOptions\n        .should.have.been\n        .calledWith([\n          {feature: 'test/integration/features'},\n          {require: [\"that.js\", \"this.json\", \"totally.css\"]},\n          {driver: \"pretty\"}\n        ])\n\n      it \"should generate options with just config file options\", ->\n        configBuilder.generateOptions({\n          },{\n            tags:[\"@wow\",\"@doge\"],\n            error_formatter: \"such.js\",\n            require: [\"that.js\", \"this.json\", \"totally.css\"]\n          }, this.libPath)\n\n        configBuilder.convertToExecOptions\n        .should.have.been\n        .calledWith([\n          {tags: ['@wow','@doge']},\n          {require: [\"that.js\", \"this.json\", \"totally.css\"]},\n          {error_formatter: \"such.js\"}\n        ])\n\n      it \"should generate options with both config and commandline options\", ->\n        configBuilder.generateOptions({\n          coffee: true,\n          driver: \"phantomjs\"\n        },{\n          tags:[\"@wow\",\"@doge\"],\n          error_formatter: \"such.js\",\n          require: [\"that.js\", \"this.json\", \"totally.css\"]\n        }, this.libPath)\n\n        configBuilder.convertToExecOptions\n        .should.have.been\n        .calledWith([\n          {tags: ['@wow','@doge']},\n          {require: [\"that.js\", \"this.json\", \"totally.css\"]},\n          {error_formatter: \"such.js\"},\n          {coffee: true},\n          {driver: \"phantomjs\"}\n        ])\n\n      it \"should allow command line arguments to override config file arguments\", ->\n        configBuilder.generateOptions({\n          coffee: true,\n          driver: \"firefox\",\n          format: \"pretty\"\n        },{\n          tags:[\"@wow\",\"@doge\"],\n          driver: \"chrome\",\n          require: [\"that.js\", \"this.json\", \"totally.css\"],\n          coffee: false,\n          format: \"json\"\n        }, this.libPath)\n\n        configBuilder.convertToExecOptions\n        .should.have.been\n        .calledWith([\n          {tags: ['@wow','@doge']},\n          {require: [\"that.js\", \"this.json\", \"totally.css\"]},\n          {format: \"pretty\"},\n          {coffee: true},\n          {driver: \"firefox\"}\n        ])\n\n      it \"should allow required files from both config file and commandline options\", ->\n        configBuilder.generateOptions({\n          require: [\"wow.doge\", \"doge.script\"]\n        },{\n          require: [\"that.js\", \"this.json\", \"totally.css\"]\n        }, this.libPath)\n\n        configBuilder.convertToExecOptions\n        .should.have.been\n        .calledWith([\n          {require: [\"wow.doge\", \"doge.script\", \"that.js\", \"this.json\", \"totally.css\"]},\n        ])\n\n  describe \"when no feature is specified\", ->\n\n    beforeEach ->\n      this.libPath = \"wow\"\n      execOptionsStub = sinon.stub(configBuilder, \"convertToExecOptions\", -> )\n      this.featureDir = path.join(process.cwd(), '/features')\n\n    afterEach ->\n      configBuilder.convertToExecOptions.restore()\n\n    it \"should not pass anything for features if the /features directory exists\", ->\n      fs.mkdirSync(this.featureDir)\n\n      configBuilder.generateOptions({}, {}, this.libPath)\n\n      configBuilder.convertToExecOptions\n      .should.have.been\n      .calledWith([])\n\n      rmdir(this.featureDir)\n\n    it \"should pass an unrecognized flag as the feature flag if theer is no /features directory\", ->\n      configBuilder.generateOptions({_:\"such.doge\"}, {}, this.libPath)\n\n      configBuilder.convertToExecOptions\n      .should.have.been\n      .calledWith([\n        {feature: \"such.doge\"}\n      ])\n\n  describe \"preventReload flag\", ->\n\n    beforeEach ->\n      this.libPath  = \"wow\"\n      process.argv = []\n      scaffoldStub = sinon.stub(configBuilder, \"hasFeature\", -> true)\n\n    afterEach ->\n      configBuilder.hasFeature.restore()\n\n    it \"should not prevent browser reload without any specifications\" , ->\n      configBuilder.generateOptions({}, {}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should not prevent browser reload when the config file specifies boolean false\" , ->\n      configBuilder.generateOptions({}, {\"preventReload\":false}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should not prevent browser reload when the config file specifies string false\" , ->\n      configBuilder.generateOptions({}, {\"preventReload\":\"false\"}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should not prevent browser reload when the config file specifies boolean true\" , ->\n      configBuilder.generateOptions({}, {\"preventReload\":true}, this.libPath)\n      process.argv.should.eql([\"--prevent-browser-reload\"])\n\n    it \"should not prevent browser reload when the config file specifies string true\" , ->\n      configBuilder.generateOptions({}, {\"preventReload\":\"true\"}, this.libPath)\n      process.argv.should.eql([\"--prevent-browser-reload\"])\n\n    it \"should prevent browser reload when specified on the commandline\" , ->\n      configBuilder.generateOptions({\"preventReload\": true}, {}, this.libPath)\n      process.argv.should.eql([\"--prevent-browser-reload\"])\n\n    it \"should prevent browser reload when specified on the commandline with string\" , ->\n      configBuilder.generateOptions({\"preventReload\": \"true\"}, {}, this.libPath)\n      process.argv.should.eql([\"--prevent-browser-reload\"])\n\n    it \"should not prevent browser reload when specified on the commandline\" , ->\n      configBuilder.generateOptions({\"preventReload\": false}, {}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should not prevent browser reload when specified on the commandline with string\" , ->\n      configBuilder.generateOptions({\"preventReload\": \"false\"}, {}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should prevent browser reload when specified on the commandline and false in config file\" , ->\n      configBuilder.generateOptions({\"preventReload\": true}, {\"preventReload\": false}, this.libPath)\n      process.argv.should.eql([\"--prevent-browser-reload\"])\n\n    it \"should not prevent browser reload when specified false on the commandline and true in config file\" , ->\n      configBuilder.generateOptions({\"preventReload\": false}, {\"preventReload\": true}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should only push the argument once when specified in both config and commandline\", ->\n      configBuilder.generateOptions({\"preventReload\": true}, {\"preventReload\": true}, this.libPath)\n      process.argv.should.eql([\"--prevent-browser-reload\"])\n\n  describe \"driver flag\", ->\n\n    beforeEach ->\n      this.libPath  = \"wow\"\n      process.argv = []\n      scaffoldStub = sinon.stub(configBuilder, \"hasFeature\", -> true)\n\n    afterEach ->\n      configBuilder.hasFeature.restore()\n\n    it \"should not be included when not specified\" , ->\n      configBuilder.generateOptions({}, {}, this.libPath)\n      process.argv.should.eql([])\n\n    it \"should be included when specifed on the commandline\" , ->\n      configBuilder.generateOptions({\"driver\":\"chrome\"}, {}, this.libPath)\n      process.argv.should.eql([\"--driver=chrome\"])\n\n    it \"should be included when specifed on the commandline\" , ->\n      configBuilder.generateOptions({}, {\"driver\":\"firefox\"}, this.libPath)\n      process.argv.should.eql([\"--driver=firefox\"])\n\n    it \"should allow commandline to take precedence over config file\", ->\n      configBuilder.generateOptions({\"driver\":\"phantomjs\"}, {\"driver\":\"firefox\"}, this.libPath)\n      process.argv.should.eql([\"--driver=phantomjs\"])\n\n  describe \"coffee flag\", ->\n\n    beforeEach ->\n      this.libPath  = \"wow\"\n      this.support  = this.libPath + \"/support\"\n\n    it \"should pass --coffee when coffee is specified as true\", ->\n      configBuilder.convertToExecOptions([{\"coffee\": true}], this.libPath)\n      .should.eql([\n        null,\n        null,\n        \"--require\",\n        this.support,\n        \"--coffee\"\n      ])\n\n    it \"should not pass --coffee when coffee is set to false in the config file\", ->\n      configBuilder.convertToExecOptions([{\"coffee\": false}], this.libPath)\n      .should.eql([\n        null,\n        null,\n        \"--require\",\n        this.support\n      ])\n\n    it \"should not pass --coffee when coffee is not specified anywhere\", ->\n      configBuilder.convertToExecOptions([{}], this.libPath)\n      .should.eql([\n        null,\n        null,\n        \"--require\",\n        this.support\n      ])\n\n  describe \"format flag\", ->\n\n    describe \"isCucumberFormatter()\", ->\n\n      it \"should recognize that pretty is a cucumber formatter\", ->\n        configBuilder.isCucumberFormatter(\"pretty\").should.eql(true)\n\n      it \"should recognize that json is a cucumber formatter\", ->\n        configBuilder.isCucumberFormatter(\"json\").should.eql(true)\n\n      it \"should recognize that progress is a cucumber formatter\", ->\n        configBuilder.isCucumberFormatter(\"progress\").should.eql(true)\n\n      it \"should recognize that summary is a cucumber formatter\", ->\n        configBuilder.isCucumberFormatter(\"summary\").should.eql(true)\n\n      it \"should recognize that pioneer is not a cucumber formatter\", ->\n        configBuilder.isCucumberFormatter(\"pioneer\").should.eql(false)\n\n  describe \"custom formatter look ups\", ->\n\n    beforeEach ->\n      this.libPath = \"wow\"\n      this.formatterPath    = path.join(process.cwd(), \"testformatter.js\")\n      this.formatterContent = \"wow such format\"\n      fs.writeFileSync(this.formatterPath, this.formatterContent)\n\n    afterEach ->\n      fs.unlinkSync(this.formatterPath)\n\n    it \"should recognize when I specify a file in my current working directory\", ->\n      configBuilder.convertToExecOptions([{ format: 'testformatter.js' }], this.libPath)\n      .should.eql([\n        null,\n        null,\n        \"--require\",\n        this.libPath + \"/support\",\n        \"--format=\" + this.formatterPath,\n      ])\n\n    it \"should look in the lib directory if it doesn't exist in the current working directory\", ->\n      configBuilder.convertToExecOptions([{ format: 'superformatter.js' }], this.libPath)\n      .should.eql([\n        null,\n        null,\n        \"--require\",\n        this.libPath + \"/support\",\n        \"--format=\" + path.join(this.libPath, 'superformatter.js'),\n      ])\n"
  },
  {
    "path": "test/unit/scaffold.coffee",
    "content": "sinon           = require(\"sinon\")\nassert          = require(\"assert\")\n_               = require('lodash')\nfs              = require('fs')\npath            = require('path')\nrmdir           = require('rimraf').sync\nconfigBuilder   = require('../../lib/config_builder')\nscaffoldBuilder = require('../../lib/scaffold_builder')\n\ndescribe \"Scaffold Builder\", ->\n  beforeEach ->\n    this.libPath = \"wow\"\n    this.sandbox = sinon.sandbox.create()\n    this.sandbox.stub(process, 'exit', ->)\n    overwrite = this.sandbox.stub(scaffoldBuilder,\n      \"askToOverWrite\",\n      (file, data) ->\n        fs.writeFileSync(file, data)\n    )\n\n  afterEach ->\n    this.sandbox.restore()\n\n  it \"should be called if no feature path is specified\", ->\n    scaffold = this.sandbox.stub(scaffoldBuilder, \"featureNotSpecified\", ->)\n    noFeature = this.sandbox.stub(configBuilder, \"hasFeature\", -> false)\n    configBuilder.generateOptions({\n      _: []\n    }, {}, this.libPath, ->)\n    scaffold.callCount.should.eql(1)\n\n  describe \"hasFeature()\", ->\n\n    it \"should return false when there is no feature file specified\", ->\n      configBuilder.hasFeature([{}]).should.eql(false)\n\n    it \"should return true with a feature file specified\", ->\n      configBuilder.hasFeature([{feature:\"myFeatureFile\"}]).should.eql(true)\n\n    it \"should return false with complicated options\", ->\n      configBuilder.hasFeature([{\n        tags: \"@suchtag\",\n        require: [\"file1\", \"file2\", \"file3\"],\n        coffe: true,\n        error_formatter: \"nice_errors.js\"\n      }]).should.eql(false)\n\n    it \"should return true with complicated options\", ->\n      configBuilder.hasFeature([{\n        feature: \"featurefile\",\n        tags: \"@suchtag\",\n        require: [\"file1\", \"file2\", \"file3\"],\n        coffee: true,\n        error_formatter: \"nice_errors.js\"\n      }]).should.eql(true)\n\n  describe \"createScaffold()\", ->\n    beforeEach ->\n      this.pioneerJSON = path.join(process.cwd(), '/pioneer.json')\n      if(fs.existsSync(this.pioneerJSON))\n        this.format = fs.readFileSync(this.pioneerJSON)\n      else\n        this.format = null\n      logs = this.sandbox.stub(scaffoldBuilder, \"_logCompleted\", -> )\n      if(fs.existsSync(this.pioneerJSON))\n        fs.unlinkSync(this.pioneerJSON)\n      scaffoldBuilder.createScaffold()\n\n    afterEach ->\n      rmdir(path.join(process.cwd(), '/tests'), (error)->)\n      scaffoldBuilder.askToOverWrite.restore()\n      if(this.format)\n        fs.writeFileSync(this.pioneerJSON, this.format)\n      else\n        fs.unlinkSync(path.join(process.cwd(), '/pioneer.json'))\n\n    it \"should create a tests/ directory\", ->\n      fs.existsSync(path.join(process.cwd(), '/tests')).should.be.true\n\n    it \"should create a features/ directory\", ->\n      fs.existsSync(path.join(process.cwd(), '/tests/features')).should.be.true\n\n    it \"should create a fixtures/ directory\", ->\n      fs.existsSync(path.join(process.cwd(), '/tests/fixtures')).should.be.true\n\n    it \"should create a steps/ directory\", ->\n      fs.existsSync(path.join(process.cwd(), '/tests/steps')).should.be.true\n\n    it \"should create a simple feature\", ->\n      fs.existsSync(path.join(process.cwd(), '/tests/features/simple.feature')).should.be.true\n\n    it \"should create simple stpes\", ->\n      fs.existsSync(path.join(process.cwd(), '/tests/steps/simple.js')).should.be.true\n\n    it \"should create a pioneer.json file if one doesn't exist\", ->\n      fs.existsSync(this.pioneerJSON).should.be.true\n"
  },
  {
    "path": "test/unit/widget.coffee",
    "content": "promise = require(\"bluebird\")\nsinon   = require(\"sinon\")\nassert  = require(\"assert\")\n\nROOT    =\n  driver:\n    wait: -> promise.resolve()\n    findElement: -> promise.resolve(\"fake element\")\n\nrequire(\"../../lib/environment\").call(ROOT)\nrequire(\"../../lib/support/widgets\").call(ROOT)\n\ndescribe \"widgets\", ->\n  describe \"root should be overideable\", ->\n    before ->\n      this.OptionWidget = new ROOT.Widget(\n        root: \"div\"\n      )\n\n      this.ExtendWidget = new (ROOT.Widget.extend({\n        root: \"wow\"\n      }))\n\n    it \"should persit when passed via the constructor\", ->\n      assert.equal(this.OptionWidget.root, \"div\")\n\n    it \"should persit when passed via an extend\", ->\n      assert.equal(this.ExtendWidget.root, \"wow\")\n\n  describe \"initialize should be overideable\", ->\n    beforeEach ->\n      this.spy = sinon.spy()\n\n    it \"should work when defined as a constructor arg\", ->\n      new ROOT.Widget\n        initialize: this.spy\n\n      assert(this.spy.called, true)\n\n    it \"should work when defined using the extend syntax\", ->\n      new (ROOT.Widget.extend\n        initialize: this.spy\n      )\n\n      assert(this.spy.called, true)\n\n  describe \"find based constructor\", ->\n\n    it \"should return a thenable interface\", ->\n      assert.notEqual(ROOT.Widget.find(root: \"body\").then, undefined)\n\n    it \"should set the el property\", ->\n      ROOT.Widget.find(root: \"body\").then (widget) ->\n        assert.notEqual(widget.el, undefined)\n\n    it \"should set attributes based on find args\", ->\n      ROOT.Widget.find(root: \"body\").then (widget) ->\n        widget.root.should.eql(\"body\")\n"
  }
]