diff --git a/node_modules/cache-base/LICENSE b/node_modules/cache-base/LICENSE
new file mode 100644
index 0000000..943e71d
--- /dev/null
+++ b/node_modules/cache-base/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014-2017, 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.
\ No newline at end of file
diff --git a/node_modules/cache-base/README.md b/node_modules/cache-base/README.md
new file mode 100644
index 0000000..62c6ffe
--- /dev/null
+++ b/node_modules/cache-base/README.md
@@ -0,0 +1,291 @@
+# cache-base [![NPM version](https://img.shields.io/npm/v/cache-base.svg?style=flat)](https://www.npmjs.com/package/cache-base) [![NPM monthly downloads](https://img.shields.io/npm/dm/cache-base.svg?style=flat)](https://npmjs.org/package/cache-base) [![NPM total downloads](https://img.shields.io/npm/dt/cache-base.svg?style=flat)](https://npmjs.org/package/cache-base) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/cache-base.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/cache-base)
+
+> Basic object cache with `get`, `set`, `del`, and `has` methods for node.js/javascript projects.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save cache-base
+```
+
+## Usage
+
+```js
+var Cache = require('cache-base');
+
+// instantiate
+var app = new Cache();
+
+// set values
+app.set('a', 'b');
+app.set('c.d', 'e');
+
+// get values
+app.get('a');
+//=> 'b'
+app.get('c');
+//=> {d: 'e'}
+
+console.log(app.cache);
+//=> {a: 'b'}
+```
+
+**Inherit**
+
+```js
+var util = require('util');
+var Cache = require('cache-base');
+
+function MyApp() {
+  Cache.call(this);
+}
+util.inherits(MyApp, Cache);
+
+var app = new MyApp();
+app.set('a', 'b');
+app.get('a');
+//=> 'b'
+```
+
+**Namespace**
+
+Define a custom property for storing values.
+
+```js
+var Cache = require('cache-base').namespace('data');
+var app = new Cache();
+app.set('a', 'b');
+console.log(app.data);
+//=> {a: 'b'}
+```
+
+## API
+
+### [namespace](index.js#L29)
+
+Create a `Cache` constructor that when instantiated will store values on the given `prop`.
+
+**Params**
+
+* `prop` **{String}**: The property name to use for storing values.
+* `returns` **{Function}**: Returns a custom `Cache` constructor
+
+**Example**
+
+```js
+var Cache = require('cache-base').namespace('data');
+var cache = new Cache();
+
+cache.set('foo', 'bar');
+//=> {data: {foo: 'bar'}}
+```
+
+### [Cache](index.js#L43)
+
+Create a new `Cache`. Internally the `Cache` constructor is created using the `namespace` function, with `cache` defined as the storage object.
+
+**Params**
+
+* `cache` **{Object}**: Optionally pass an object to initialize with.
+
+**Example**
+
+```js
+var app = new Cache();
+```
+
+### [.set](index.js#L84)
+
+Assign `value` to `key`. Also emits `set` with the key and value.
+
+**Params**
+
+* `key` **{String}**
+* `value` **{any}**
+* `returns` **{Object}**: Returns the instance for chaining.
+
+**Events**
+
+* `emits`: `set` with `key` and `value` as arguments.
+
+**Example**
+
+```js
+app.on('set', function(key, val) {
+  // do something when `set` is emitted
+});
+
+app.set(key, value);
+
+// also takes an object or array
+app.set({name: 'Halle'});
+app.set([{foo: 'bar'}, {baz: 'quux'}]);
+console.log(app);
+//=> {name: 'Halle', foo: 'bar', baz: 'quux'}
+```
+
+### [.union](index.js#L114)
+
+Union `array` to `key`. Also emits `set` with the key and value.
+
+**Params**
+
+* `key` **{String}**
+* `value` **{any}**
+* `returns` **{Object}**: Returns the instance for chaining.
+
+**Example**
+
+```js
+app.union('a.b', ['foo']);
+app.union('a.b', ['bar']);
+console.log(app.get('a'));
+//=> {b: ['foo', 'bar']}
+```
+
+### [.get](index.js#L144)
+
+Return the value of `key`. Dot notation may be used to get [nested property values](https://github.com/jonschlinkert/get-value).
+
+**Params**
+
+* `key` **{String}**: The name of the property to get. Dot-notation may be used.
+* `returns` **{any}**: Returns the value of `key`
+
+**Events**
+
+* `emits`: `get` with `key` and `value` as arguments.
+
+**Example**
+
+```js
+app.set('a.b.c', 'd');
+app.get('a.b');
+//=> {c: 'd'}
+
+app.get(['a', 'b']);
+//=> {c: 'd'}
+```
+
+### [.has](index.js#L171)
+
+Return true if app has a stored value for `key`, false only if value is `undefined`.
+
+**Params**
+
+* `key` **{String}**
+* `returns` **{Boolean}**
+
+**Events**
+
+* `emits`: `has` with `key` and true or false as arguments.
+
+**Example**
+
+```js
+app.set('foo', 'bar');
+app.has('foo');
+//=> true
+```
+
+### [.del](index.js#L199)
+
+Delete one or more properties from the instance.
+
+**Params**
+
+* `key` **{String|Array}**: Property name or array of property names.
+* `returns` **{Object}**: Returns the instance for chaining.
+
+**Events**
+
+* `emits`: `del` with the `key` as the only argument.
+
+**Example**
+
+```js
+app.del(); // delete all
+// or
+app.del('foo');
+// or
+app.del(['foo', 'bar']);
+```
+
+### [.clear](index.js#L218)
+
+Reset the entire cache to an empty object.
+
+**Example**
+
+```js
+app.clear();
+```
+
+### [.visit](index.js#L235)
+
+Visit `method` over the properties in the given object, or map
+visit over the object-elements in an array.
+
+**Params**
+
+* `method` **{String}**: The name of the `base` method to call.
+* `val` **{Object|Array}**: The object or array to iterate over.
+* `returns` **{Object}**: Returns the instance for chaining.
+
+## About
+
+### Related projects
+
+* [base-methods](https://www.npmjs.com/package/base-methods): base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting… [more](https://github.com/jonschlinkert/base-methods) | [homepage](https://github.com/jonschlinkert/base-methods "base-methods is the foundation for creating modular, unit testable and highly pluggable node.js applications, starting with a handful of common methods, like `set`, `get`, `del` and `use`.")
+* [get-value](https://www.npmjs.com/package/get-value): Use property paths (`a.b.c`) to get a nested value from an object. | [homepage](https://github.com/jonschlinkert/get-value "Use property paths (`a.b.c`) to get a nested value from an object.")
+* [has-value](https://www.npmjs.com/package/has-value): Returns true if a value exists, false if empty. Works with deeply nested values using… [more](https://github.com/jonschlinkert/has-value) | [homepage](https://github.com/jonschlinkert/has-value "Returns true if a value exists, false if empty. Works with deeply nested values using object paths.")
+* [option-cache](https://www.npmjs.com/package/option-cache): Simple API for managing options in JavaScript applications. | [homepage](https://github.com/jonschlinkert/option-cache "Simple API for managing options in JavaScript applications.")
+* [set-value](https://www.npmjs.com/package/set-value): Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths. | [homepage](https://github.com/jonschlinkert/set-value "Create nested values and any intermediaries using dot notation (`'a.b.c'`) paths.")
+* [unset-value](https://www.npmjs.com/package/unset-value): Delete nested properties from an object using dot notation. | [homepage](https://github.com/jonschlinkert/unset-value "Delete nested properties from an object using dot notation.")
+
+### Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+### Contributors
+
+| **Commits** | **Contributor** | 
+| --- | --- |
+| 54 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Building docs
+
+_(This project's readme.md is generated by [verb](https://github.com/verbose/verb-generate-readme), please don't edit the readme directly. Any changes to the readme must be made in the [.verb.md](.verb.md) readme template.)_
+
+To generate the readme, run the following command:
+
+```sh
+$ npm install -g verbose/verb#dev verb-generate-readme && verb
+```
+
+### Running tests
+
+Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
+
+```sh
+$ npm install && npm test
+```
+
+### Author
+
+**Jon Schlinkert**
+
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2017, [Jon Schlinkert](https://github.com/jonschlinkert).
+Released under the [MIT License](LICENSE).
+
+***
+
+_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on July 22, 2017._
\ No newline at end of file
diff --git a/node_modules/cache-base/index.js b/node_modules/cache-base/index.js
new file mode 100644
index 0000000..4128024
--- /dev/null
+++ b/node_modules/cache-base/index.js
@@ -0,0 +1,261 @@
+'use strict';
+
+var isObject = require('isobject');
+var Emitter = require('component-emitter');
+var visit = require('collection-visit');
+var toPath = require('to-object-path');
+var union = require('union-value');
+var del = require('unset-value');
+var get = require('get-value');
+var has = require('has-value');
+var set = require('set-value');
+
+/**
+ * Create a `Cache` constructor that when instantiated will
+ * store values on the given `prop`.
+ *
+ * ```js
+ * var Cache = require('cache-base').namespace('data');
+ * var cache = new Cache();
+ *
+ * cache.set('foo', 'bar');
+ * //=> {data: {foo: 'bar'}}
+ * ```
+ * @param {String} `prop` The property name to use for storing values.
+ * @return {Function} Returns a custom `Cache` constructor
+ * @api public
+ */
+
+function namespace(prop) {
+
+  /**
+   * Create a new `Cache`. Internally the `Cache` constructor is created using
+   * the `namespace` function, with `cache` defined as the storage object.
+   *
+   * ```js
+   * var app = new Cache();
+   * ```
+   * @param {Object} `cache` Optionally pass an object to initialize with.
+   * @constructor
+   * @api public
+   */
+
+  function Cache(cache) {
+    if (prop) {
+      this[prop] = {};
+    }
+    if (cache) {
+      this.set(cache);
+    }
+  }
+
+  /**
+   * Inherit Emitter
+   */
+
+  Emitter(Cache.prototype);
+
+  /**
+   * Assign `value` to `key`. Also emits `set` with
+   * the key and value.
+   *
+   * ```js
+   * app.on('set', function(key, val) {
+   *   // do something when `set` is emitted
+   * });
+   *
+   * app.set(key, value);
+   *
+   * // also takes an object or array
+   * app.set({name: 'Halle'});
+   * app.set([{foo: 'bar'}, {baz: 'quux'}]);
+   * console.log(app);
+   * //=> {name: 'Halle', foo: 'bar', baz: 'quux'}
+   * ```
+   *
+   * @name .set
+   * @emits `set` with `key` and `value` as arguments.
+   * @param {String} `key`
+   * @param {any} `value`
+   * @return {Object} Returns the instance for chaining.
+   * @api public
+   */
+
+  Cache.prototype.set = function(key, val) {
+    if (Array.isArray(key) && arguments.length === 2) {
+      key = toPath(key);
+    }
+    if (isObject(key) || Array.isArray(key)) {
+      this.visit('set', key);
+    } else {
+      set(prop ? this[prop] : this, key, val);
+      this.emit('set', key, val);
+    }
+    return this;
+  };
+
+  /**
+   * Union `array` to `key`. Also emits `set` with
+   * the key and value.
+   *
+   * ```js
+   * app.union('a.b', ['foo']);
+   * app.union('a.b', ['bar']);
+   * console.log(app.get('a'));
+   * //=> {b: ['foo', 'bar']}
+   * ```
+   * @name .union
+   * @param {String} `key`
+   * @param {any} `value`
+   * @return {Object} Returns the instance for chaining.
+   * @api public
+   */
+
+  Cache.prototype.union = function(key, val) {
+    if (Array.isArray(key) && arguments.length === 2) {
+      key = toPath(key);
+    }
+    var ctx = prop ? this[prop] : this;
+    union(ctx, key, arrayify(val));
+    this.emit('union', val);
+    return this;
+  };
+
+  /**
+   * Return the value of `key`. Dot notation may be used
+   * to get [nested property values][get-value].
+   *
+   * ```js
+   * app.set('a.b.c', 'd');
+   * app.get('a.b');
+   * //=> {c: 'd'}
+   *
+   * app.get(['a', 'b']);
+   * //=> {c: 'd'}
+   * ```
+   *
+   * @name .get
+   * @emits `get` with `key` and `value` as arguments.
+   * @param {String} `key` The name of the property to get. Dot-notation may be used.
+   * @return {any} Returns the value of `key`
+   * @api public
+   */
+
+  Cache.prototype.get = function(key) {
+    key = toPath(arguments);
+
+    var ctx = prop ? this[prop] : this;
+    var val = get(ctx, key);
+
+    this.emit('get', key, val);
+    return val;
+  };
+
+  /**
+   * Return true if app has a stored value for `key`,
+   * false only if value is `undefined`.
+   *
+   * ```js
+   * app.set('foo', 'bar');
+   * app.has('foo');
+   * //=> true
+   * ```
+   *
+   * @name .has
+   * @emits `has` with `key` and true or false as arguments.
+   * @param {String} `key`
+   * @return {Boolean}
+   * @api public
+   */
+
+  Cache.prototype.has = function(key) {
+    key = toPath(arguments);
+
+    var ctx = prop ? this[prop] : this;
+    var val = get(ctx, key);
+
+    var has = typeof val !== 'undefined';
+    this.emit('has', key, has);
+    return has;
+  };
+
+  /**
+   * Delete one or more properties from the instance.
+   *
+   * ```js
+   * app.del(); // delete all
+   * // or
+   * app.del('foo');
+   * // or
+   * app.del(['foo', 'bar']);
+   * ```
+   * @name .del
+   * @emits `del` with the `key` as the only argument.
+   * @param {String|Array} `key` Property name or array of property names.
+   * @return {Object} Returns the instance for chaining.
+   * @api public
+   */
+
+  Cache.prototype.del = function(key) {
+    if (Array.isArray(key)) {
+      this.visit('del', key);
+    } else {
+      del(prop ? this[prop] : this, key);
+      this.emit('del', key);
+    }
+    return this;
+  };
+
+  /**
+   * Reset the entire cache to an empty object.
+   *
+   * ```js
+   * app.clear();
+   * ```
+   * @api public
+   */
+
+  Cache.prototype.clear = function() {
+    if (prop) {
+      this[prop] = {};
+    }
+  };
+
+  /**
+   * Visit `method` over the properties in the given object, or map
+   * visit over the object-elements in an array.
+   *
+   * @name .visit
+   * @param {String} `method` The name of the `base` method to call.
+   * @param {Object|Array} `val` The object or array to iterate over.
+   * @return {Object} Returns the instance for chaining.
+   * @api public
+   */
+
+  Cache.prototype.visit = function(method, val) {
+    visit(this, method, val);
+    return this;
+  };
+
+  return Cache;
+}
+
+/**
+ * Cast val to an array
+ */
+
+function arrayify(val) {
+  return val ? (Array.isArray(val) ? val : [val]) : [];
+}
+
+/**
+ * Expose `Cache`
+ */
+
+module.exports = namespace();
+
+/**
+ * Expose `Cache.namespace`
+ */
+
+module.exports.namespace = namespace;
diff --git a/node_modules/cache-base/package.json b/node_modules/cache-base/package.json
new file mode 100644
index 0000000..34954de
--- /dev/null
+++ b/node_modules/cache-base/package.json
@@ -0,0 +1,118 @@
+{
+  "_from": "cache-base@^1.0.1",
+  "_id": "cache-base@1.0.1",
+  "_inBundle": false,
+  "_integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+  "_location": "/cache-base",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "cache-base@^1.0.1",
+    "name": "cache-base",
+    "escapedName": "cache-base",
+    "rawSpec": "^1.0.1",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.1"
+  },
+  "_requiredBy": [
+    "/base"
+  ],
+  "_resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+  "_shasum": "0a7f46416831c8b662ee36fe4e7c59d76f666ab2",
+  "_spec": "cache-base@^1.0.1",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\base",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/cache-base/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "url": "https://github.com/wtgtybhertgeghgtwtg"
+    }
+  ],
+  "dependencies": {
+    "collection-visit": "^1.0.0",
+    "component-emitter": "^1.2.1",
+    "get-value": "^2.0.6",
+    "has-value": "^1.0.0",
+    "isobject": "^3.0.1",
+    "set-value": "^2.0.0",
+    "to-object-path": "^0.3.0",
+    "union-value": "^1.0.0",
+    "unset-value": "^1.0.0"
+  },
+  "deprecated": false,
+  "description": "Basic object cache with `get`, `set`, `del`, and `has` methods for node.js/javascript projects.",
+  "devDependencies": {
+    "gulp-format-md": "^1.0.0",
+    "mocha": "^3.4.2"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/cache-base",
+  "keywords": [
+    "base",
+    "cache",
+    "config",
+    "data",
+    "get",
+    "has",
+    "hash",
+    "hasown",
+    "object",
+    "set",
+    "store"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "cache-base",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/cache-base.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "run": true,
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "highligh": "base",
+      "list": [
+        "base-methods",
+        "get-value",
+        "has-value",
+        "option-cache",
+        "set-value",
+        "unset-value"
+      ]
+    },
+    "reflinks": [
+      "verb"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "1.0.1"
+}
