diff --git a/node_modules/class-utils/LICENSE b/node_modules/class-utils/LICENSE
new file mode 100644
index 0000000..27c8537
--- /dev/null
+++ b/node_modules/class-utils/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 2017-2018, 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/class-utils/README.md b/node_modules/class-utils/README.md
new file mode 100644
index 0000000..b49332e
--- /dev/null
+++ b/node_modules/class-utils/README.md
@@ -0,0 +1,300 @@
+# class-utils [![NPM version](https://img.shields.io/npm/v/class-utils.svg?style=flat)](https://www.npmjs.com/package/class-utils) [![NPM monthly downloads](https://img.shields.io/npm/dm/class-utils.svg?style=flat)](https://npmjs.org/package/class-utils) [![NPM total downloads](https://img.shields.io/npm/dt/class-utils.svg?style=flat)](https://npmjs.org/package/class-utils) [![Linux Build Status](https://img.shields.io/travis/jonschlinkert/class-utils.svg?style=flat&label=Travis)](https://travis-ci.org/jonschlinkert/class-utils)
+
+> Utils for working with JavaScript classes and prototype methods.
+
+Please consider following this project's author, [Jon Schlinkert](https://github.com/jonschlinkert), and consider starring the project to show your :heart: and support.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/):
+
+```sh
+$ npm install --save class-utils
+```
+
+## Usage
+
+```js
+var cu = require('class-utils');
+```
+
+## API
+
+### [.has](index.js#L43)
+
+Returns true if an array has any of the given elements, or an object has any of the give keys.
+
+**Params**
+
+* `obj` **{Object}**
+* `val` **{String|Array}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+cu.has(['a', 'b', 'c'], 'c');
+//=> true
+
+cu.has(['a', 'b', 'c'], ['c', 'z']);
+//=> true
+
+cu.has({a: 'b', c: 'd'}, ['c', 'z']);
+//=> true
+```
+
+### [.hasAll](index.js#L90)
+
+Returns true if an array or object has all of the given values.
+
+**Params**
+
+* `val` **{Object|Array}**
+* `values` **{String|Array}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+cu.hasAll(['a', 'b', 'c'], 'c');
+//=> true
+
+cu.hasAll(['a', 'b', 'c'], ['c', 'z']);
+//=> false
+
+cu.hasAll({a: 'b', c: 'd'}, ['c', 'z']);
+//=> false
+```
+
+### [.arrayify](index.js#L117)
+
+Cast the given value to an array.
+
+**Params**
+
+* `val` **{String|Array}**
+* `returns` **{Array}**
+
+**Example**
+
+```js
+cu.arrayify('foo');
+//=> ['foo']
+
+cu.arrayify(['foo']);
+//=> ['foo']
+```
+
+### [.hasConstructor](index.js#L152)
+
+Returns true if a value has a `contructor`
+
+**Params**
+
+* `value` **{Object}**
+* `returns` **{Boolean}**
+
+**Example**
+
+```js
+cu.hasConstructor({});
+//=> true
+
+cu.hasConstructor(Object.create(null));
+//=> false
+```
+
+### [.nativeKeys](index.js#L174)
+
+Get the native `ownPropertyNames` from the constructor of the given `object`. An empty array is returned if the object does not have a constructor.
+
+**Params**
+
+* `obj` **{Object}**: Object that has a `constructor`.
+* `returns` **{Array}**: Array of keys.
+
+**Example**
+
+```js
+cu.nativeKeys({a: 'b', b: 'c', c: 'd'})
+//=> ['a', 'b', 'c']
+
+cu.nativeKeys(function(){})
+//=> ['length', 'caller']
+```
+
+### [.getDescriptor](index.js#L208)
+
+Returns property descriptor `key` if it's an "own" property of the given object.
+
+**Params**
+
+* `obj` **{Object}**
+* `key` **{String}**
+* `returns` **{Object}**: Returns descriptor `key`
+
+**Example**
+
+```js
+function App() {}
+Object.defineProperty(App.prototype, 'count', {
+  get: function() {
+    return Object.keys(this).length;
+  }
+});
+cu.getDescriptor(App.prototype, 'count');
+// returns:
+// {
+//   get: [Function],
+//   set: undefined,
+//   enumerable: false,
+//   configurable: false
+// }
+```
+
+### [.copyDescriptor](index.js#L238)
+
+Copy a descriptor from one object to another.
+
+**Params**
+
+* `receiver` **{Object}**
+* `provider` **{Object}**
+* `name` **{String}**
+* `returns` **{Object}**
+
+**Example**
+
+```js
+function App() {}
+Object.defineProperty(App.prototype, 'count', {
+  get: function() {
+    return Object.keys(this).length;
+  }
+});
+var obj = {};
+cu.copyDescriptor(obj, App.prototype, 'count');
+```
+
+### [.copy](index.js#L264)
+
+Copy static properties, prototype properties, and descriptors
+from one object to another.
+
+**Params**
+
+* `receiver` **{Object}**
+* `provider` **{Object}**
+* `omit` **{String|Array}**: One or more properties to omit
+* `returns` **{Object}**
+
+### [.inherit](index.js#L299)
+
+Inherit the static properties, prototype properties, and descriptors
+from of an object.
+
+**Params**
+
+* `receiver` **{Object}**
+* `provider` **{Object}**
+* `omit` **{String|Array}**: One or more properties to omit
+* `returns` **{Object}**
+
+### [.extend](index.js#L343)
+
+Returns a function for extending the static properties, prototype properties, and descriptors from the `Parent` constructor onto `Child` constructors.
+
+**Params**
+
+* `Parent` **{Function}**: Parent ctor
+* `extend` **{Function}**: Optional extend function to handle custom extensions. Useful when updating methods that require a specific prototype.
+* `Child` **{Function}**: Child ctor
+* `proto` **{Object}**: Optionally pass additional prototype properties to inherit.
+* `returns` **{Object}**
+
+**Example**
+
+```js
+var extend = cu.extend(Parent);
+Parent.extend(Child);
+
+// optional methods
+Parent.extend(Child, {
+  foo: function() {},
+  bar: function() {}
+});
+```
+
+### [.bubble](index.js#L356)
+
+Bubble up events emitted from static methods on the Parent ctor.
+
+**Params**
+
+* `Parent` **{Object}**
+* `events` **{Array}**: Event names to bubble up
+
+## About
+
+<details>
+<summary><strong>Contributing</strong></summary>
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](../../issues/new).
+
+</details>
+
+<details>
+<summary><strong>Running Tests</strong></summary>
+
+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
+```
+
+</details>
+<details>
+<summary><strong>Building docs</strong></summary>
+
+_(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
+```
+
+</details>
+
+### Related projects
+
+You might also be interested in these projects:
+
+* [define-property](https://www.npmjs.com/package/define-property): Define a non-enumerable property on an object. Uses Reflect.defineProperty when available, otherwise Object.defineProperty. | [homepage](https://github.com/jonschlinkert/define-property "Define a non-enumerable property on an object. Uses Reflect.defineProperty when available, otherwise Object.defineProperty.")
+* [delegate-properties](https://www.npmjs.com/package/delegate-properties): Deep-clone properties from one object to another and make them non-enumerable, or make existing properties… [more](https://github.com/jonschlinkert/delegate-properties) | [homepage](https://github.com/jonschlinkert/delegate-properties "Deep-clone properties from one object to another and make them non-enumerable, or make existing properties on an object non-enumerable.")
+* [is-descriptor](https://www.npmjs.com/package/is-descriptor): Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for… [more](https://github.com/jonschlinkert/is-descriptor) | [homepage](https://github.com/jonschlinkert/is-descriptor "Returns true if a value has the characteristics of a valid JavaScript descriptor. Works for data descriptors and accessor descriptors.")
+
+### Contributors
+
+| **Commits** | **Contributor** | 
+| --- | --- |
+| 34 | [jonschlinkert](https://github.com/jonschlinkert) |
+| 8 | [doowb](https://github.com/doowb) |
+| 2 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
+
+### Author
+
+**Jon Schlinkert**
+
+* [linkedin/in/jonschlinkert](https://linkedin.com/in/jonschlinkert)
+* [github/jonschlinkert](https://github.com/jonschlinkert)
+* [twitter/jonschlinkert](https://twitter.com/jonschlinkert)
+
+### License
+
+Copyright © 2018, [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 January 11, 2018._
\ No newline at end of file
diff --git a/node_modules/class-utils/index.js b/node_modules/class-utils/index.js
new file mode 100644
index 0000000..7bec653
--- /dev/null
+++ b/node_modules/class-utils/index.js
@@ -0,0 +1,370 @@
+'use strict';
+
+var util = require('util');
+var union = require('arr-union');
+var define = require('define-property');
+var staticExtend = require('static-extend');
+var isObj = require('isobject');
+
+/**
+ * Expose class utils
+ */
+
+var cu = module.exports;
+
+/**
+ * Expose class utils: `cu`
+ */
+
+cu.isObject = function isObject(val) {
+  return isObj(val) || typeof val === 'function';
+};
+
+/**
+ * Returns true if an array has any of the given elements, or an
+ * object has any of the give keys.
+ *
+ * ```js
+ * cu.has(['a', 'b', 'c'], 'c');
+ * //=> true
+ *
+ * cu.has(['a', 'b', 'c'], ['c', 'z']);
+ * //=> true
+ *
+ * cu.has({a: 'b', c: 'd'}, ['c', 'z']);
+ * //=> true
+ * ```
+ * @param {Object} `obj`
+ * @param {String|Array} `val`
+ * @return {Boolean}
+ * @api public
+ */
+
+cu.has = function has(obj, val) {
+  val = cu.arrayify(val);
+  var len = val.length;
+
+  if (cu.isObject(obj)) {
+    for (var key in obj) {
+      if (val.indexOf(key) > -1) {
+        return true;
+      }
+    }
+
+    var keys = cu.nativeKeys(obj);
+    return cu.has(keys, val);
+  }
+
+  if (Array.isArray(obj)) {
+    var arr = obj;
+    while (len--) {
+      if (arr.indexOf(val[len]) > -1) {
+        return true;
+      }
+    }
+    return false;
+  }
+
+  throw new TypeError('expected an array or object.');
+};
+
+/**
+ * Returns true if an array or object has all of the given values.
+ *
+ * ```js
+ * cu.hasAll(['a', 'b', 'c'], 'c');
+ * //=> true
+ *
+ * cu.hasAll(['a', 'b', 'c'], ['c', 'z']);
+ * //=> false
+ *
+ * cu.hasAll({a: 'b', c: 'd'}, ['c', 'z']);
+ * //=> false
+ * ```
+ * @param {Object|Array} `val`
+ * @param {String|Array} `values`
+ * @return {Boolean}
+ * @api public
+ */
+
+cu.hasAll = function hasAll(val, values) {
+  values = cu.arrayify(values);
+  var len = values.length;
+  while (len--) {
+    if (!cu.has(val, values[len])) {
+      return false;
+    }
+  }
+  return true;
+};
+
+/**
+ * Cast the given value to an array.
+ *
+ * ```js
+ * cu.arrayify('foo');
+ * //=> ['foo']
+ *
+ * cu.arrayify(['foo']);
+ * //=> ['foo']
+ * ```
+ *
+ * @param {String|Array} `val`
+ * @return {Array}
+ * @api public
+ */
+
+cu.arrayify = function arrayify(val) {
+  return val ? (Array.isArray(val) ? val : [val]) : [];
+};
+
+/**
+ * Noop
+ */
+
+cu.noop = function noop() {
+  return;
+};
+
+/**
+ * Returns the first argument passed to the function.
+ */
+
+cu.identity = function identity(val) {
+  return val;
+};
+
+/**
+ * Returns true if a value has a `contructor`
+ *
+ * ```js
+ * cu.hasConstructor({});
+ * //=> true
+ *
+ * cu.hasConstructor(Object.create(null));
+ * //=> false
+ * ```
+ * @param  {Object} `value`
+ * @return {Boolean}
+ * @api public
+ */
+
+cu.hasConstructor = function hasConstructor(val) {
+  return cu.isObject(val) && typeof val.constructor !== 'undefined';
+};
+
+/**
+ * Get the native `ownPropertyNames` from the constructor of the
+ * given `object`. An empty array is returned if the object does
+ * not have a constructor.
+ *
+ * ```js
+ * cu.nativeKeys({a: 'b', b: 'c', c: 'd'})
+ * //=> ['a', 'b', 'c']
+ *
+ * cu.nativeKeys(function(){})
+ * //=> ['length', 'caller']
+ * ```
+ *
+ * @param  {Object} `obj` Object that has a `constructor`.
+ * @return {Array} Array of keys.
+ * @api public
+ */
+
+cu.nativeKeys = function nativeKeys(val) {
+  if (!cu.hasConstructor(val)) return [];
+  var keys = Object.getOwnPropertyNames(val);
+  if ('caller' in val) keys.push('caller');
+  return keys;
+};
+
+/**
+ * Returns property descriptor `key` if it's an "own" property
+ * of the given object.
+ *
+ * ```js
+ * function App() {}
+ * Object.defineProperty(App.prototype, 'count', {
+ *   get: function() {
+ *     return Object.keys(this).length;
+ *   }
+ * });
+ * cu.getDescriptor(App.prototype, 'count');
+ * // returns:
+ * // {
+ * //   get: [Function],
+ * //   set: undefined,
+ * //   enumerable: false,
+ * //   configurable: false
+ * // }
+ * ```
+ *
+ * @param {Object} `obj`
+ * @param {String} `key`
+ * @return {Object} Returns descriptor `key`
+ * @api public
+ */
+
+cu.getDescriptor = function getDescriptor(obj, key) {
+  if (!cu.isObject(obj)) {
+    throw new TypeError('expected an object.');
+  }
+  if (typeof key !== 'string') {
+    throw new TypeError('expected key to be a string.');
+  }
+  return Object.getOwnPropertyDescriptor(obj, key);
+};
+
+/**
+ * Copy a descriptor from one object to another.
+ *
+ * ```js
+ * function App() {}
+ * Object.defineProperty(App.prototype, 'count', {
+ *   get: function() {
+ *     return Object.keys(this).length;
+ *   }
+ * });
+ * var obj = {};
+ * cu.copyDescriptor(obj, App.prototype, 'count');
+ * ```
+ * @param {Object} `receiver`
+ * @param {Object} `provider`
+ * @param {String} `name`
+ * @return {Object}
+ * @api public
+ */
+
+cu.copyDescriptor = function copyDescriptor(receiver, provider, name) {
+  if (!cu.isObject(receiver)) {
+    throw new TypeError('expected receiving object to be an object.');
+  }
+  if (!cu.isObject(provider)) {
+    throw new TypeError('expected providing object to be an object.');
+  }
+  if (typeof name !== 'string') {
+    throw new TypeError('expected name to be a string.');
+  }
+
+  var val = cu.getDescriptor(provider, name);
+  if (val) Object.defineProperty(receiver, name, val);
+};
+
+/**
+ * Copy static properties, prototype properties, and descriptors
+ * from one object to another.
+ *
+ * @param {Object} `receiver`
+ * @param {Object} `provider`
+ * @param {String|Array} `omit` One or more properties to omit
+ * @return {Object}
+ * @api public
+ */
+
+cu.copy = function copy(receiver, provider, omit) {
+  if (!cu.isObject(receiver)) {
+    throw new TypeError('expected receiving object to be an object.');
+  }
+  if (!cu.isObject(provider)) {
+    throw new TypeError('expected providing object to be an object.');
+  }
+  var props = Object.getOwnPropertyNames(provider);
+  var keys = Object.keys(provider);
+  var len = props.length,
+    key;
+  omit = cu.arrayify(omit);
+
+  while (len--) {
+    key = props[len];
+
+    if (cu.has(keys, key)) {
+      define(receiver, key, provider[key]);
+    } else if (!(key in receiver) && !cu.has(omit, key)) {
+      cu.copyDescriptor(receiver, provider, key);
+    }
+  }
+};
+
+/**
+ * Inherit the static properties, prototype properties, and descriptors
+ * from of an object.
+ *
+ * @param {Object} `receiver`
+ * @param {Object} `provider`
+ * @param {String|Array} `omit` One or more properties to omit
+ * @return {Object}
+ * @api public
+ */
+
+cu.inherit = function inherit(receiver, provider, omit) {
+  if (!cu.isObject(receiver)) {
+    throw new TypeError('expected receiving object to be an object.');
+  }
+  if (!cu.isObject(provider)) {
+    throw new TypeError('expected providing object to be an object.');
+  }
+
+  var keys = [];
+  for (var key in provider) {
+    keys.push(key);
+    receiver[key] = provider[key];
+  }
+
+  keys = keys.concat(cu.arrayify(omit));
+
+  var a = provider.prototype || provider;
+  var b = receiver.prototype || receiver;
+  cu.copy(b, a, keys);
+};
+
+/**
+ * Returns a function for extending the static properties,
+ * prototype properties, and descriptors from the `Parent`
+ * constructor onto `Child` constructors.
+ *
+ * ```js
+ * var extend = cu.extend(Parent);
+ * Parent.extend(Child);
+ *
+ * // optional methods
+ * Parent.extend(Child, {
+ *   foo: function() {},
+ *   bar: function() {}
+ * });
+ * ```
+ * @param {Function} `Parent` Parent ctor
+ * @param {Function} `extend` Optional extend function to handle custom extensions. Useful when updating methods that require a specific prototype.
+ *   @param {Function} `Child` Child ctor
+ *   @param {Object} `proto` Optionally pass additional prototype properties to inherit.
+ *   @return {Object}
+ * @api public
+ */
+
+cu.extend = function() {
+  // keep it lazy, instead of assigning to `cu.extend`
+  return staticExtend.apply(null, arguments);
+};
+
+/**
+ * Bubble up events emitted from static methods on the Parent ctor.
+ *
+ * @param {Object} `Parent`
+ * @param {Array} `events` Event names to bubble up
+ * @api public
+ */
+
+cu.bubble = function(Parent, events) {
+  events = events || [];
+  Parent.bubble = function(Child, arr) {
+    if (Array.isArray(arr)) {
+      events = union([], events, arr);
+    }
+    var len = events.length;
+    var idx = -1;
+    while (++idx < len) {
+      var name = events[idx];
+      Parent.on(name, Child.emit.bind(Child, name));
+    }
+    cu.bubble(Child, events);
+  };
+};
diff --git a/node_modules/class-utils/node_modules/define-property/LICENSE b/node_modules/class-utils/node_modules/define-property/LICENSE
new file mode 100644
index 0000000..65f90ac
--- /dev/null
+++ b/node_modules/class-utils/node_modules/define-property/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, 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/class-utils/node_modules/define-property/README.md b/node_modules/class-utils/node_modules/define-property/README.md
new file mode 100644
index 0000000..8cac698
--- /dev/null
+++ b/node_modules/class-utils/node_modules/define-property/README.md
@@ -0,0 +1,77 @@
+# define-property [![NPM version](https://badge.fury.io/js/define-property.svg)](http://badge.fury.io/js/define-property)
+
+> Define a non-enumerable property on an object.
+
+## Install
+
+Install with [npm](https://www.npmjs.com/)
+
+```sh
+$ npm i define-property --save
+```
+
+## Usage
+
+**Params**
+
+* `obj`: The object on which to define the property.
+* `prop`: The name of the property to be defined or modified.
+* `descriptor`: The descriptor for the property being defined or modified.
+
+```js
+var define = require('define-property');
+var obj = {};
+define(obj, 'foo', function(val) {
+  return val.toUpperCase();
+});
+
+console.log(obj);
+//=> {}
+
+console.log(obj.foo('bar'));
+//=> 'BAR'
+```
+
+**get/set**
+
+```js
+define(obj, 'foo', {
+  get: function() {},
+  set: function() {}
+});
+```
+
+## Related projects
+
+* [delegate-object](https://www.npmjs.com/package/delegate-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/delegate-object) | [homepage](https://github.com/doowb/delegate-object)
+* [forward-object](https://www.npmjs.com/package/forward-object): Copy properties from an object to another object, where properties with function values will be… [more](https://www.npmjs.com/package/forward-object) | [homepage](https://github.com/doowb/forward-object)
+* [mixin-deep](https://www.npmjs.com/package/mixin-deep): Deeply mix the properties of objects into the first object. Like merge-deep, but doesn't clone. | [homepage](https://github.com/jonschlinkert/mixin-deep)
+* [mixin-object](https://www.npmjs.com/package/mixin-object): Mixin the own and inherited properties of other objects onto the first object. Pass an… [more](https://www.npmjs.com/package/mixin-object) | [homepage](https://github.com/jonschlinkert/mixin-object)
+
+## Running tests
+
+Install dev dependencies:
+
+```sh
+$ npm i -d && npm test
+```
+
+## Contributing
+
+Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/define-property/issues/new).
+
+## Author
+
+**Jon Schlinkert**
+
++ [github/jonschlinkert](https://github.com/jonschlinkert)
++ [twitter/jonschlinkert](http://twitter.com/jonschlinkert)
+
+## License
+
+Copyright © 2015 Jon Schlinkert
+Released under the MIT license.
+
+***
+
+_This file was generated by [verb-cli](https://github.com/assemble/verb-cli) on August 31, 2015._
diff --git a/node_modules/class-utils/node_modules/define-property/index.js b/node_modules/class-utils/node_modules/define-property/index.js
new file mode 100644
index 0000000..3e0e5e1
--- /dev/null
+++ b/node_modules/class-utils/node_modules/define-property/index.js
@@ -0,0 +1,31 @@
+/*!
+ * define-property <https://github.com/jonschlinkert/define-property>
+ *
+ * Copyright (c) 2015, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+
+'use strict';
+
+var isDescriptor = require('is-descriptor');
+
+module.exports = function defineProperty(obj, prop, val) {
+  if (typeof obj !== 'object' && typeof obj !== 'function') {
+    throw new TypeError('expected an object or function.');
+  }
+
+  if (typeof prop !== 'string') {
+    throw new TypeError('expected `prop` to be a string.');
+  }
+
+  if (isDescriptor(val) && ('set' in val || 'get' in val)) {
+    return Object.defineProperty(obj, prop, val);
+  }
+
+  return Object.defineProperty(obj, prop, {
+    configurable: true,
+    enumerable: false,
+    writable: true,
+    value: val
+  });
+};
diff --git a/node_modules/class-utils/node_modules/define-property/package.json b/node_modules/class-utils/node_modules/define-property/package.json
new file mode 100644
index 0000000..40cc388
--- /dev/null
+++ b/node_modules/class-utils/node_modules/define-property/package.json
@@ -0,0 +1,82 @@
+{
+  "_from": "define-property@^0.2.5",
+  "_id": "define-property@0.2.5",
+  "_inBundle": false,
+  "_integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+  "_location": "/class-utils/define-property",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "define-property@^0.2.5",
+    "name": "define-property",
+    "escapedName": "define-property",
+    "rawSpec": "^0.2.5",
+    "saveSpec": null,
+    "fetchSpec": "^0.2.5"
+  },
+  "_requiredBy": [
+    "/class-utils"
+  ],
+  "_resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+  "_shasum": "c35b1ef918ec3c990f9a5bc57be04aacec5c8116",
+  "_spec": "define-property@^0.2.5",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\class-utils",
+  "author": {
+    "name": "Jon Schlinkert",
+    "url": "https://github.com/jonschlinkert"
+  },
+  "bugs": {
+    "url": "https://github.com/jonschlinkert/define-property/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "is-descriptor": "^0.1.0"
+  },
+  "deprecated": false,
+  "description": "Define a non-enumerable property on an object.",
+  "devDependencies": {
+    "mocha": "*",
+    "should": "^7.0.4"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/define-property",
+  "keywords": [
+    "define",
+    "define-property",
+    "enumerable",
+    "key",
+    "non",
+    "non-enumerable",
+    "object",
+    "prop",
+    "property",
+    "value"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "define-property",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/define-property.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "related": {
+      "list": [
+        "mixin-deep",
+        "mixin-object",
+        "delegate-object",
+        "forward-object"
+      ]
+    }
+  },
+  "version": "0.2.5"
+}
diff --git a/node_modules/class-utils/package.json b/node_modules/class-utils/package.json
new file mode 100644
index 0000000..fd8bda9
--- /dev/null
+++ b/node_modules/class-utils/package.json
@@ -0,0 +1,131 @@
+{
+  "_from": "class-utils@^0.3.5",
+  "_id": "class-utils@0.3.6",
+  "_inBundle": false,
+  "_integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+  "_location": "/class-utils",
+  "_phantomChildren": {
+    "is-descriptor": "0.1.6"
+  },
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "class-utils@^0.3.5",
+    "name": "class-utils",
+    "escapedName": "class-utils",
+    "rawSpec": "^0.3.5",
+    "saveSpec": null,
+    "fetchSpec": "^0.3.5"
+  },
+  "_requiredBy": [
+    "/base"
+  ],
+  "_resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+  "_shasum": "f93369ae8b9a7ce02fd41faad0ca83033190c463",
+  "_spec": "class-utils@^0.3.5",
+  "_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/class-utils/issues"
+  },
+  "bundleDependencies": false,
+  "contributors": [
+    {
+      "name": "Brian Woodward",
+      "url": "https://twitter.com/doowb"
+    },
+    {
+      "name": "Jon Schlinkert",
+      "url": "http://twitter.com/jonschlinkert"
+    },
+    {
+      "url": "https://github.com/wtgtybhertgeghgtwtg"
+    }
+  ],
+  "dependencies": {
+    "arr-union": "^3.1.0",
+    "define-property": "^0.2.5",
+    "isobject": "^3.0.0",
+    "static-extend": "^0.1.1"
+  },
+  "deprecated": false,
+  "description": "Utils for working with JavaScript classes and prototype methods.",
+  "devDependencies": {
+    "gulp": "^3.9.1",
+    "gulp-eslint": "^2.0.0",
+    "gulp-format-md": "^0.1.7",
+    "gulp-istanbul": "^0.10.3",
+    "gulp-mocha": "^2.2.0",
+    "mocha": "^2.4.5",
+    "should": "^8.2.2",
+    "through2": "^2.0.1"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "index.js"
+  ],
+  "homepage": "https://github.com/jonschlinkert/class-utils",
+  "keywords": [
+    "array",
+    "assign",
+    "class",
+    "copy",
+    "ctor",
+    "define",
+    "delegate",
+    "descriptor",
+    "extend",
+    "extends",
+    "inherit",
+    "inheritance",
+    "merge",
+    "method",
+    "object",
+    "prop",
+    "properties",
+    "property",
+    "prototype",
+    "util",
+    "utils"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "class-utils",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/jonschlinkert/class-utils.git"
+  },
+  "scripts": {
+    "test": "mocha"
+  },
+  "verb": {
+    "run": true,
+    "toc": false,
+    "layout": "default",
+    "tasks": [
+      "readme"
+    ],
+    "plugins": [
+      "gulp-format-md"
+    ],
+    "related": {
+      "list": [
+        "define-property",
+        "delegate-properties",
+        "is-descriptor"
+      ]
+    },
+    "reflinks": [
+      "verb"
+    ],
+    "lint": {
+      "reflinks": true
+    }
+  },
+  "version": "0.3.6"
+}
