diff --git a/node_modules/meow/index.js b/node_modules/meow/index.js
new file mode 100644
index 0000000..d7ab879
--- /dev/null
+++ b/node_modules/meow/index.js
@@ -0,0 +1,82 @@
+'use strict';
+var path = require('path');
+var minimist = require('minimist');
+var objectAssign = require('object-assign');
+var camelcaseKeys = require('camelcase-keys');
+var decamelize = require('decamelize');
+var mapObj = require('map-obj');
+var trimNewlines = require('trim-newlines');
+var redent = require('redent');
+var readPkgUp = require('read-pkg-up');
+var loudRejection = require('loud-rejection');
+var normalizePackageData = require('normalize-package-data');
+
+// get the uncached parent
+delete require.cache[__filename];
+var parentDir = path.dirname(module.parent.filename);
+
+module.exports = function (opts, minimistOpts) {
+	loudRejection();
+
+	if (Array.isArray(opts) || typeof opts === 'string') {
+		opts = {help: opts};
+	}
+
+	opts = objectAssign({
+		pkg: readPkgUp.sync({
+			cwd: parentDir,
+			normalize: false
+		}).pkg,
+		argv: process.argv.slice(2)
+	}, opts);
+
+	minimistOpts = objectAssign({}, minimistOpts);
+
+	minimistOpts.default = mapObj(minimistOpts.default || {}, function (key, value) {
+		return [decamelize(key, '-'), value];
+	});
+
+	if (Array.isArray(opts.help)) {
+		opts.help = opts.help.join('\n');
+	}
+
+	var pkg = typeof opts.pkg === 'string' ? require(path.join(parentDir, opts.pkg)) : opts.pkg;
+	var argv = minimist(opts.argv, minimistOpts);
+	var help = redent(trimNewlines(opts.help || ''), 2);
+
+	normalizePackageData(pkg);
+
+	process.title = pkg.bin ? Object.keys(pkg.bin)[0] : pkg.name;
+
+	var description = opts.description;
+	if (!description && description !== false) {
+		description = pkg.description;
+	}
+
+	help = (description ? '\n  ' + description + '\n' : '') + (help ? '\n' + help : '\n');
+
+	var showHelp = function (code) {
+		console.log(help);
+		process.exit(code || 0);
+	};
+
+	if (argv.version && opts.version !== false) {
+		console.log(typeof opts.version === 'string' ? opts.version : pkg.version);
+		process.exit();
+	}
+
+	if (argv.help && opts.help !== false) {
+		showHelp();
+	}
+
+	var _ = argv._;
+	delete argv._;
+
+	return {
+		input: _,
+		flags: camelcaseKeys(argv),
+		pkg: pkg,
+		help: help,
+		showHelp: showHelp
+	};
+};
diff --git a/node_modules/meow/license b/node_modules/meow/license
new file mode 100644
index 0000000..654d0bf
--- /dev/null
+++ b/node_modules/meow/license
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/meow/package.json b/node_modules/meow/package.json
new file mode 100644
index 0000000..a486730
--- /dev/null
+++ b/node_modules/meow/package.json
@@ -0,0 +1,90 @@
+{
+  "_from": "meow@^3.3.0",
+  "_id": "meow@3.7.0",
+  "_inBundle": false,
+  "_integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+  "_location": "/meow",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "meow@^3.3.0",
+    "name": "meow",
+    "escapedName": "meow",
+    "rawSpec": "^3.3.0",
+    "saveSpec": null,
+    "fetchSpec": "^3.3.0"
+  },
+  "_requiredBy": [
+    "/lpad-align"
+  ],
+  "_resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+  "_shasum": "72cb668b425228290abbfa856892587308a801fb",
+  "_spec": "meow@^3.3.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\lpad-align",
+  "author": {
+    "name": "Sindre Sorhus",
+    "email": "sindresorhus@gmail.com",
+    "url": "sindresorhus.com"
+  },
+  "bugs": {
+    "url": "https://github.com/sindresorhus/meow/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "camelcase-keys": "^2.0.0",
+    "decamelize": "^1.1.2",
+    "loud-rejection": "^1.0.0",
+    "map-obj": "^1.0.1",
+    "minimist": "^1.1.3",
+    "normalize-package-data": "^2.3.4",
+    "object-assign": "^4.0.1",
+    "read-pkg-up": "^1.0.1",
+    "redent": "^1.0.0",
+    "trim-newlines": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "CLI app helper",
+  "devDependencies": {
+    "ava": "*",
+    "execa": "^0.1.1",
+    "indent-string": "^2.1.0",
+    "xo": "*"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/sindresorhus/meow#readme",
+  "keywords": [
+    "cli",
+    "bin",
+    "util",
+    "utility",
+    "helper",
+    "argv",
+    "command",
+    "line",
+    "meow",
+    "cat",
+    "kitten",
+    "parser",
+    "option",
+    "flags",
+    "input",
+    "cmd",
+    "console"
+  ],
+  "license": "MIT",
+  "name": "meow",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/sindresorhus/meow.git"
+  },
+  "scripts": {
+    "test": "xo && ava"
+  },
+  "version": "3.7.0"
+}
diff --git a/node_modules/meow/readme.md b/node_modules/meow/readme.md
new file mode 100644
index 0000000..253380d
--- /dev/null
+++ b/node_modules/meow/readme.md
@@ -0,0 +1,159 @@
+# meow [![Build Status](https://travis-ci.org/sindresorhus/meow.svg?branch=master)](https://travis-ci.org/sindresorhus/meow)
+
+> CLI app helper
+
+![](meow.gif)
+
+
+## Features
+
+- Parses arguments using [minimist](https://github.com/substack/minimist)
+- Converts flags to [camelCase](https://github.com/sindresorhus/camelcase)
+- Outputs version when `--version`
+- Outputs description and supplied help text when `--help`
+- Makes unhandled rejected promises [fail loudly](https://github.com/sindresorhus/loud-rejection) instead of the default silent fail
+- Sets the process title to the binary name defined in package.json
+
+
+## Install
+
+```
+$ npm install --save meow
+```
+
+
+## Usage
+
+```
+$ ./foo-app.js unicorns --rainbow-cake
+```
+
+```js
+#!/usr/bin/env node
+'use strict';
+const meow = require('meow');
+const foo = require('./');
+
+const cli = meow(`
+	Usage
+	  $ foo <input>
+
+	Options
+	  -r, --rainbow  Include a rainbow
+
+	Examples
+	  $ foo unicorns --rainbow
+	  🌈 unicorns 🌈
+`, {
+	alias: {
+		r: 'rainbow'
+	}
+});
+/*
+{
+	input: ['unicorns'],
+	flags: {rainbow: true},
+	...
+}
+*/
+
+foo(cli.input[0], cli.flags);
+```
+
+
+## API
+
+### meow(options, [minimistOptions])
+
+Returns an object with:
+
+- `input` *(array)* - Non-flag arguments
+- `flags` *(object)* - Flags converted to camelCase
+- `pkg` *(object)* - The `package.json` object
+- `help` *(object)* - The help text used with `--help`
+- `showHelp([code=0])` *(function)* - Show the help text and exit with `code`
+
+#### options
+
+Type: `object`, `array`, `string`
+
+Can either be a string/array that is the `help` or an options object.
+
+##### description
+
+Type: `string`, `boolean`
+Default: The package.json `"description"` property
+
+A description to show above the help text.
+
+Set it to `false` to disable it altogether.
+
+##### help
+
+Type: `string`, `boolean`
+
+The help text you want shown.
+
+The input is reindented and starting/ending newlines are trimmed which means you can use a [template literal](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/template_strings) without having to care about using the correct amount of indent.
+
+<del>If it's an array each item will be a line.</del>  
+*(Still supported, but you should use a template literal instead.)*
+
+The description will be shown above your help text automatically.
+
+Set it to `false` to disable it altogether.
+
+##### version
+
+Type: `string`, `boolean`  
+Default: The package.json `"version"` property
+
+Set a custom version output.
+
+Set it to `false` to disable it altogether.
+
+##### pkg
+
+Type: `string`, `object`  
+Default: Closest package.json upwards
+
+Relative path to package.json or as an object.
+
+##### argv
+
+Type: `array`  
+Default: `process.argv.slice(2)`
+
+Custom arguments object.
+
+#### minimistOptions
+
+Type: `object`  
+Default: `{}`
+
+Minimist [options](https://github.com/substack/minimist#var-argv--parseargsargs-opts).
+
+Keys passed to the minimist `default` option are [decamelized](https://github.com/sindresorhus/decamelize), so you can for example pass in `fooBar: 'baz'` and have it be the default for the `--foo-bar` flag.
+
+
+## Promises
+
+Meow will make unhandled rejected promises [fail loudly](https://github.com/sindresorhus/loud-rejection) instead of the default silent fail. Meaning you don't have to manually `.catch()` promises used in your CLI.
+
+
+## Tips
+
+See [`chalk`](https://github.com/chalk/chalk) if you want to colorize the terminal output.
+
+See [`get-stdin`](https://github.com/sindresorhus/get-stdin) if you want to accept input from stdin.
+
+See [`update-notifier`](https://github.com/yeoman/update-notifier) if you want update notifications.
+
+See [`configstore`](https://github.com/yeoman/configstore) if you need to persist some data.
+
+[More useful CLI utilities.](https://github.com/sindresorhus/awesome-nodejs#command-line-utilities)
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
