diff --git a/node_modules/to-absolute-glob/LICENSE b/node_modules/to-absolute-glob/LICENSE
new file mode 100644
index 0000000..6525171
--- /dev/null
+++ b/node_modules/to-absolute-glob/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2016, Jon Schlinkert
+
+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/to-absolute-glob/index.js b/node_modules/to-absolute-glob/index.js
new file mode 100644
index 0000000..268fc47
--- /dev/null
+++ b/node_modules/to-absolute-glob/index.js
@@ -0,0 +1,70 @@
+'use strict';
+
+var path = require('path');
+var isNegated = require('is-negated-glob');
+var isAbsolute = require('is-absolute');
+
+module.exports = function(glob, options) {
+  // default options
+  var opts = options || {};
+
+  // ensure cwd is absolute
+  var cwd = path.resolve(opts.cwd ? opts.cwd : process.cwd());
+  cwd = unixify(cwd);
+
+  var rootDir = opts.root;
+  // if `options.root` is defined, ensure it's absolute
+  if (rootDir) {
+    rootDir = unixify(rootDir);
+    if (process.platform === 'win32' || !isAbsolute(rootDir)) {
+      rootDir = unixify(path.resolve(rootDir));
+    }
+  }
+
+  // trim starting ./ from glob patterns
+  if (glob.slice(0, 2) === './') {
+    glob = glob.slice(2);
+  }
+
+  // when the glob pattern is only a . use an empty string
+  if (glob.length === 1 && glob === '.') {
+    glob = '';
+  }
+
+  // store last character before glob is modified
+  var suffix = glob.slice(-1);
+
+  // check to see if glob is negated (and not a leading negated-extglob)
+  var ing = isNegated(glob);
+  glob = ing.pattern;
+
+  // make glob absolute
+  if (rootDir && glob.charAt(0) === '/') {
+    glob = join(rootDir, glob);
+  } else if (!isAbsolute(glob) || glob.slice(0, 1) === '\\') {
+    glob = join(cwd, glob);
+  }
+
+  // if glob had a trailing `/`, re-add it now in case it was removed
+  if (suffix === '/' && glob.slice(-1) !== '/') {
+    glob += '/';
+  }
+
+  // re-add leading `!` if it was removed
+  return ing.negated ? '!' + glob : glob;
+};
+
+function unixify(filepath) {
+  return filepath.replace(/\\/g, '/');
+}
+
+function join(dir, glob) {
+  if (dir.charAt(dir.length - 1) === '/') {
+    dir = dir.slice(0, -1);
+  }
+  if (glob.charAt(0) === '/') {
+    glob = glob.slice(1);
+  }
+  if (!glob) return dir;
+  return dir + '/' + glob;
+}
diff --git a/node_modules/to-absolute-glob/package.json b/node_modules/to-absolute-glob/package.json
new file mode 100644
index 0000000..034d9bd
--- /dev/null
+++ b/node_modules/to-absolute-glob/package.json
@@ -0,0 +1,118 @@
+{
+  "_from": "to-absolute-glob@^2.0.0",
+  "_id": "to-absolute-glob@2.0.2",
+  "_inBundle": false,
+  "_integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
+  "_location": "/to-absolute-glob",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "to-absolute-glob@^2.0.0",
+    "name": "to-absolute-glob",
+    "escapedName": "to-absolute-glob",
+    "rawSpec": "^2.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^2.0.0"
+  },
+  "_requiredBy": [
+    "/glob-stream"
+  ],
+  "_resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
+  "_shasum": "1865f43d9e74b0822db9f145b78cff7d0f7c849b",
+  "_spec": "to-absolute-glob@^2.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\glob-stream",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/to-absolute-glob/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Blaine Bublitz",
+      "email": "blaine.bublitz@gmail.com",
+      "url": "https://twitter.com/BlaineBublitz"
+    },
+    {
+      "name": "Brian Woodward",
+      "email": "brian.woodward@gmail.com",
+      "url": "https://github.com/doowb"
+    },
+    {
+      "name": "Erik Kemperman",
+      "url": "https://github.com/erikkemperman"
+    },
+    {
+      "name": "Jon Schlinkert",
+      "email": "jon.schlinkert@sellside.com",
+      "url": "http://twitter.com/jonschlinkert"
+    }
+  ],
+  "dependencies": {
+    "is-absolute": "^1.0.0",
+    "is-negated-glob": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "Make a glob pattern absolute, ensuring that negative globs and patterns with trailing slashes are correctly handled.",
+  "devDependencies": {
+    "gulp-format-md": "^0.1.11",
+    "mocha": "^3.0.2"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/to-absolute-glob",
+  "keywords": [
+    "absolute",
+    "file",
+    "filepath",
+    "glob",
+    "negate",
+    "negative",
+    "path",
+    "pattern",
+    "resolve",
+    "to"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "to-absolute-glob",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/to-absolute-glob.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "lint": {
+      "reflinks": true
+    },
+    "related": {
+      "list": [
+        "has-glob",
+        "is-glob",
+        "is-valid-glob"
+      ]
+    },
+    "reflinks": [
+      "verb",
+      "verb-generate-readme"
+    ]
+  },
+  "version": "2.0.2"
+}
diff --git a/node_modules/to-absolute-glob/readme.md b/node_modules/to-absolute-glob/readme.md
new file mode 100644
index 0000000..d93fbed
--- /dev/null
+++ b/node_modules/to-absolute-glob/readme.md
@@ -0,0 +1,155 @@
+# to-absolute-glob [![NPM version](https://img.shields.io/npm/v/to-absolute-glob.svg?style=flat)](https://www.npmjs.com/package/to-absolute-glob) [![NPM downloads](https://img.shields.io/npm/dm/to-absolute-glob.svg?style=flat)](https://npmjs.org/package/to-absolute-glob) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/to-absolute-glob.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/to-absolute-glob) [![Windows Build Status](https://img.shields.io/appveyor/ci/jonschlinkert/to-absolute-glob.svg?style=flat&label=AppVeyor)](https://ci.appveyor.com/project/jonschlinkert/to-absolute-glob)
+
+> Make a glob pattern absolute, ensuring that negative globs and patterns with trailing slashes are correctly handled.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save to-absolute-glob
+```
+
+## Usage
+
+```js
+var toAbsGlob = require('to-absolute-glob');
+toAbsGlob('a/*.js');
+//=> '/dev/foo/a/*.js'
+```
+
+## Examples
+
+Given the current project folder (cwd) is `/dev/foo/`:
+
+**makes a path absolute**
+
+```js
+toAbsGlob('a');
+//=> '/dev/foo/a'
+```
+
+**makes a glob absolute**
+
+```js
+toAbsGlob('a/*.js');
+//=> '/dev/foo/a/*.js'
+```
+
+**retains trailing slashes**
+
+```js
+toAbsGlob('a/*/');
+//=> '/dev/foo/a/*/'
+```
+
+**retains trailing slashes with cwd**
+
+```js
+toAbsGlob('./fixtures/whatsgoingon/*/', {cwd: __dirname});
+//=> '/dev/foo/'
+```
+
+**makes a negative glob absolute**
+
+```js
+toAbsGlob('!a/*.js');
+//=> '!/dev/foo/a/*.js'
+```
+
+**from a cwd**
+
+```js
+toAbsGlob('a/*.js', {cwd: 'foo'});
+//=> '/dev/foo/foo/a/*.js'
+```
+
+**makes a negative glob absolute from a cwd**
+
+```js
+toAbsGlob('!a/*.js', {cwd: 'foo'});
+//=> '!/dev/foo/foo/a/*.js'
+```
+
+**from a root path**
+
+```js
+toAbsGlob('/a/*.js', {root: 'baz'});
+//=> '/dev/foo/baz/a/*.js'
+```
+
+**from a root slash**
+
+```js
+toAbsGlob('/a/*.js', {root: '/'});
+//=> '/dev/foo/a/*.js'
+```
+
+**from a negative root path**
+
+```js
+toAbsGlob('!/a/*.js', {root: 'baz'});
+//=> '!/dev/foo/baz/a/*.js'
+```
+
+**from a negative root slash**
+
+```js
+toAbsGlob('!/a/*.js', {root: '/'});
+//=> '!/dev/foo/a/*.js'
+```
+
+## About
+
+### Related projects
+
+* [has-glob](https://www.npmjs.com/package/has-glob): Returns `true` if an array has a glob pattern. | [homepage](https://github.com/jonschlinkert/has-glob "Returns `true` if an array has a glob pattern.")
+* [is-glob](https://www.npmjs.com/package/is-glob): Returns `true` if the given string looks like a glob pattern or an extglob pattern… [more](https://github.com/jonschlinkert/is-glob) | [homepage](https://github.com/jonschlinkert/is-glob "Returns `true` if the given string looks like a glob pattern or an extglob pattern. This makes it easy to create code that only uses external modules like node-glob when necessary, resulting in much faster code execution and initialization time, and a bet")
+* [is-valid-glob](https://www.npmjs.com/package/is-valid-glob): Return true if a value is a valid glob pattern or patterns. | [homepage](https://github.com/jonschlinkert/is-valid-glob "Return true if a value is a valid glob pattern or patterns.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor**<br/> | 
+| --- | --- |
+| 16 | [doowb](https://github.com/doowb) |
+| 15 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 1 | [phated](https://github.com/phated) |
+| 1 | [erikkemperman](https://github.com/erikkemperman) |
+
+### Building docs
+
+_(This document was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme) (a [verb](https://github.com/verbose/verb) generator), please don't edit the readme directly. Any changes to the readme must be made in [.verb.md](.verb.md).)_
+
+To generate the readme and API documentation with [verb](https://github.com/verbose/verb):
+
+```sh
+$ npm install -g verb verb-generate-readme && verb
+```
+
+### Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm install -d && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT license](https://github.com/jonschlinkert/to-absolute-glob/blob/master/LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.2.0, on October 17, 2016._
\ No newline at end of file
