diff --git a/node_modules/grunt-contrib-requirejs/CHANGELOG b/node_modules/grunt-contrib-requirejs/CHANGELOG
new file mode 100644
index 0000000..a11a2af
--- /dev/null
+++ b/node_modules/grunt-contrib-requirejs/CHANGELOG
@@ -0,0 +1,53 @@
+v1.0.0:
+  date: 2016-03-04
+  changes:
+    - Update usage example to show a working usage.
+    - Remove peerDep and point to main task.
+    - rjs-build-analysis returns an object not an array.
+    - Made clear that usage of almond is not required.
+    - added error option to handle r.js errors.
+v0.4.4:
+  date: 2014-04-25
+  changes:
+    - Reduce logging verbosity unless --verbose flag is used.
+v0.4.3:
+  date: 2014-02-26
+  changes:
+    - Remove "Gruntfile.js" as package.json main.
+v0.4.2:
+  date: 2014-02-26
+  changes:
+    - Catch exceptions in `done`.
+v0.4.1:
+  date: 2013-05-16
+  changes:
+    - Add 'done' option.
+v0.4.0:
+  date: 2013-02-15
+  changes:
+    - First official release for Grunt 0.4.0.
+v0.4.0rc7:
+  date: 2013-01-23
+  changes:
+    - Updating to work with grunt v0.4.0rc7.
+v0.4.0rc5:
+  date: 2013-01-09
+  changes:
+    - Updating to work with grunt v0.4.0rc5.
+v0.3.3:
+  date: 2012-10-12
+  changes:
+    - Rename grunt-contrib-lib dep to grunt-lib-contrib.
+v0.3.1:
+  date: 2012-10-09
+  changes:
+    - Bump to RequireJS 2.1.x.
+    - Run optimizer async.
+v0.3.0:
+  date: 2012-09-23
+  changes:
+    - Options no longer accepted from global config key.
+v0.2.0:
+  date: 2012-09-10
+  changes:
+    - Refactored from grunt-contrib into individual repo.
diff --git a/node_modules/grunt-contrib-requirejs/README.md b/node_modules/grunt-contrib-requirejs/README.md
new file mode 100644
index 0000000..7b50b7c
--- /dev/null
+++ b/node_modules/grunt-contrib-requirejs/README.md
@@ -0,0 +1,116 @@
+# grunt-contrib-requirejs v1.0.0 [![Build Status: Linux](https://travis-ci.org/gruntjs/grunt-contrib-requirejs.svg?branch=master)](https://travis-ci.org/gruntjs/grunt-contrib-requirejs)
+
+> Optimize RequireJS projects using r.js
+
+
+
+## Getting Started
+
+If you haven't used [Grunt](http://gruntjs.com/) before, be sure to check out the [Getting Started](http://gruntjs.com/getting-started) guide, as it explains how to create a [Gruntfile](http://gruntjs.com/sample-gruntfile) as well as install and use Grunt plugins. Once you're familiar with that process, you may install this plugin with this command:
+
+```shell
+npm install grunt-contrib-requirejs --save-dev
+```
+
+Once the plugin has been installed, it may be enabled inside your Gruntfile with this line of JavaScript:
+
+```js
+grunt.loadNpmTasks('grunt-contrib-requirejs');
+```
+
+*This plugin was designed to work with Grunt 0.4.x. If you're still using grunt v0.3.x it's strongly recommended that [you upgrade](http://gruntjs.com/upgrading-from-0.3-to-0.4), but in case you can't please use [v0.3.3](https://github.com/gruntjs/grunt-contrib-requirejs/tree/grunt-0.3-stable).*
+
+
+
+## Requirejs task
+_Run this task with the `grunt requirejs` command._
+
+Task targets and options may be specified according to the grunt [Configuring tasks](http://gruntjs.com/configuring-tasks) guide.
+### Options
+
+For a full list of possible options, [see the r.js example build file](https://github.com/jrburke/r.js/blob/master/build/example.build.js).
+
+#### done(done, build)
+
+The done option is an optional hook to receive the r.js build output. The first argument is the grunt async callback that you are required to call if you provide the done hook. This informs grunt that the task is complete. The second parameter is the build output from r.js.
+
+
+### Usage Examples
+
+```js
+requirejs: {
+  compile: {
+    options: {
+      baseUrl: "path/to/base",
+      mainConfigFile: "path/to/config.js",
+      name: "path/to/almond", /* assumes a production build using almond, if you don't use almond, you
+                                 need to set the "includes" or "modules" option instead of name */
+      include: [ "src/main.js" ],
+      out: "path/to/optimized.js"
+    }
+  }
+}
+```
+
+#### Done
+
+```js
+requirejs: {
+  compile: {
+    options: {
+      baseUrl: "path/to/base",
+      mainConfigFile: "path/to/config.js",
+      done: function(done, output) {
+        var duplicates = require('rjs-build-analysis').duplicates(output);
+
+        if (Object.keys(duplicates).length) {
+          grunt.log.subhead('Duplicates found in requirejs build:');
+          grunt.log.warn(duplicates);
+          return done(new Error('r.js built duplicate modules, please check the excludes option.'));
+        }
+
+        done();
+      }
+    }
+  }
+}
+```
+
+#### Error
+
+```js
+requirejs: {
+  compile: {
+    options: {
+      baseUrl: "path/to/base",
+      mainConfigFile: "path/to/config.js",
+      error: function(done, err) {
+        grunt.log.warn(err);
+        done();
+      }
+    }
+  }
+}
+```
+
+
+## Release History
+
+ * 2016-03-04   v1.0.0   Update usage example to show a working usage. Remove peerDep and point to main task. rjs-build-analysis returns an object not an array. Made clear that usage of almond is not required. added error option to handle r.js errors.
+ * 2014-04-25   v0.4.4   Reduce logging verbosity unless --verbose flag is used.
+ * 2014-02-26   v0.4.3   Remove "Gruntfile.js" as package.json main.
+ * 2014-02-26   v0.4.2   Catch exceptions in `done`.
+ * 2013-05-16   v0.4.1   Add 'done' option.
+ * 2013-02-15   v0.4.0   First official release for Grunt 0.4.0.
+ * 2013-01-23   v0.4.0rc7   Updating to work with grunt v0.4.0rc7.
+ * 2013-01-09   v0.4.0rc5   Updating to work with grunt v0.4.0rc5.
+ * 2012-10-12   v0.3.3   Rename grunt-contrib-lib dep to grunt-lib-contrib.
+ * 2012-10-09   v0.3.1   Bump to RequireJS 2.1.x. Run optimizer async.
+ * 2012-09-23   v0.3.0   Options no longer accepted from global config key.
+ * 2012-09-10   v0.2.0   Refactored from grunt-contrib into individual repo.
+
+---
+
+Task submitted by [Tyler Kellen](http://goingslowly.com/)
+
+*This file was generated on Fri Mar 04 2016 16:13:43.*
diff --git a/node_modules/grunt-contrib-requirejs/package.json b/node_modules/grunt-contrib-requirejs/package.json
new file mode 100644
index 0000000..ca03af5
--- /dev/null
+++ b/node_modules/grunt-contrib-requirejs/package.json
@@ -0,0 +1,67 @@
+{
+  "_from": "grunt-contrib-requirejs@^1.0.0",
+  "_id": "grunt-contrib-requirejs@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-7BZwyvwycTkC7lNWlFRxWy48utU=",
+  "_location": "/grunt-contrib-requirejs",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "grunt-contrib-requirejs@^1.0.0",
+    "name": "grunt-contrib-requirejs",
+    "escapedName": "grunt-contrib-requirejs",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "#DEV:/"
+  ],
+  "_resolved": "https://registry.npmjs.org/grunt-contrib-requirejs/-/grunt-contrib-requirejs-1.0.0.tgz",
+  "_shasum": "ec1670cafc32713902ee53569454715b2e3cbad5",
+  "_spec": "grunt-contrib-requirejs@^1.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar",
+  "author": {
+    "name": "Grunt Team",
+    "url": "http://gruntjs.com/"
+  },
+  "bugs": {
+    "url": "https://github.com/gruntjs/grunt-contrib-requirejs/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {
+    "requirejs": "^2.1.0"
+  },
+  "deprecated": false,
+  "description": "Optimize RequireJS projects using r.js",
+  "devDependencies": {
+    "grunt": "^0.4.5",
+    "grunt-cli": "^0.1.13",
+    "grunt-contrib-clean": "^0.6.0",
+    "grunt-contrib-internal": "^0.4.7",
+    "grunt-contrib-jshint": "^0.11.0",
+    "grunt-contrib-nodeunit": "^0.4.0"
+  },
+  "engines": {
+    "node": ">=0.10.0"
+  },
+  "files": [
+    "tasks"
+  ],
+  "homepage": "https://github.com/gruntjs/grunt-contrib-requirejs#readme",
+  "keywords": [
+    "gruntplugin"
+  ],
+  "license": "MIT",
+  "main": "tasks/requirejs.js",
+  "name": "grunt-contrib-requirejs",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/gruntjs/grunt-contrib-requirejs.git"
+  },
+  "scripts": {
+    "test": "grunt test"
+  },
+  "version": "1.0.0"
+}
diff --git a/node_modules/grunt-contrib-requirejs/tasks/requirejs.js b/node_modules/grunt-contrib-requirejs/tasks/requirejs.js
new file mode 100644
index 0000000..990df8e
--- /dev/null
+++ b/node_modules/grunt-contrib-requirejs/tasks/requirejs.js
@@ -0,0 +1,64 @@
+/*
+ * grunt-contrib-requirejs
+ * http://gruntjs.com/
+ *
+ * Copyright (c) 2016 Tyler Kellen, contributors
+ * Licensed under the MIT license.
+ */
+
+module.exports = function(grunt) {
+  'use strict';
+
+  var requirejs = require('requirejs');
+  var LOG_LEVEL_TRACE = 0, LOG_LEVEL_WARN = 2;
+
+  // TODO: extend this to send build log to grunt.log.ok / grunt.log.error
+  // by overriding the r.js logger (or submit issue to r.js to expand logging support)
+  requirejs.define('node/print', [], function() {
+    return function print(msg) {
+      if (msg.substring(0, 5) === 'Error') {
+        grunt.log.errorlns(msg);
+        grunt.fail.warn('RequireJS failed.');
+      } else {
+        grunt.log.oklns(msg);
+      }
+    };
+  });
+
+  grunt.registerMultiTask('requirejs', 'Build a RequireJS project.', function() {
+
+    var done = this.async();
+    var options = this.options({
+      logLevel: grunt.option('verbose') ? LOG_LEVEL_TRACE : LOG_LEVEL_WARN,
+      error: false,
+      done: function(done){
+        done();
+      }
+    });
+    // The following catches errors in the user-defined `done` function and outputs them.
+    var tryCatchDone = function(fn, done, output) {
+      try {
+        fn(done, output);
+      } catch(e) {
+        grunt.fail.warn('There was an error while processing your done function: "' + e + '"');
+      }
+    };
+
+    // The following catches errors in the user-defined `error` function and passes them.
+    // if the error function options is not set, this value should be undefined
+    var tryCatchError = function(fn, done, err) {
+      try {
+        fn(done, err);
+      } catch(e) {
+        grunt.fail.fatal('There was an error while processing your error function: "' + e + '"');
+      }
+    };
+
+    requirejs.optimize(
+            options,
+            tryCatchDone.bind(null, options.done, done ),
+            options.error ? tryCatchError.bind(null, options.error, done ):undefined
+    );
+
+  });
+};
