CVE-2018-19048 (Other, published 2019-05-13T14:29Z)
Description: value: Simditor through 2.3.21 allows DOM XSS via an onload attribute within a malformed SVG element.
Severity: MEDIUM (CVSS v3 base score: 6.1)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/mycolorway/simditor
Files changed:
Gruntfile.coffee
README.md
lib/simditor.js
package-lock.json
package.json
site/assets/scripts/dompurify.js
site/assets/scripts/simditor.js
site/assets/scripts/uploader.js
site/demo.html
site/docs/doc-dev-env.md
site/docs/doc-usage.md
site/index.html
spec/index.html
src/clipboard.coffee
src/core.coffee
src/formatter.coffee
styles/simditor.css
Commit message: ADD: DOMPurify for preventing xss attacks


Vulnerable code:
{
	"directory": "vendor/bower"
}
          'default': ['$', 'SimpleModule', 'simpleHotkeys', 'simpleUploader']
          amd: ['jquery', 'simple-module', 'simple-hotkeys', 'simple-uploader']
          cjs: ['jquery', 'simple-module', 'simple-hotkeys', 'simple-uploader']
            items: ['jQuery', 'SimpleModule', 'simple.hotkeys', 'simple.uploader']
          src: 'vendor/bower/jquery/dist/jquery.min.js',
          src: 'vendor/bower/simple-module/lib/module.js',
          src: 'vendor/bower/simple-uploader/lib/uploader.js',
          src: 'vendor/bower/simple-hotkeys/lib/hotkeys.js',
          src: 'vendor/bower/jquery/dist/jquery.min.js',
          src: 'vendor/bower/simple-module/lib/module.js',
          src: 'vendor/bower/simple-uploader/lib/uploader.js',
          src: 'vendor/bower/simple-hotkeys/lib/hotkeys.js',
            'vendor/bower/jquery/dist/jquery.min.js'
            'vendor/bower/simple-module/lib/module.js'
            'vendor/bower/simple-uploader/lib/uploader.js'
            'vendor/bower/simple-hotkeys/lib/hotkeys.js'
* Install with bower: $ bower install simditor</li>
{
  "name": "simditor",
  "version": "2.3.21",
  "homepage": "http://simditor.tower.im/",
  "authors": [
    "farthinker <farthinker@gmail.com>"
  ],
  "description": "A simple online editor",
  "main": [
    "lib/simditor.js",
    "styles/simditor.css"
  ],
  "keywords": [
    "editor"
  ],
  "license": "MIT",
  "ignore": [
    "**/.*",
    "spec",
    "node_modules",
    "vendor",
    "site",
    "_config.yml",
    "Gemfile",
    "Gemfile.lock",
    "Gruntfile.coffee",
    "package.json",
    "server.js",
    "README.md",
    "umd.hbs"
  ],
  "devDependencies": {
  },
  "dependencies": {
    "jquery": "~2.1.4",
    "simple-hotkeys": "~1.0.3",
    "simple-uploader": "~2.0.7",
    "simple-module": "~2.0.6"
  }
}
dependencies:
  pre:
    - npm install -g bower
    - bower install
machine:
  ruby:
    version: 2.3.1
* 2018-10-17
    define('simditor', ["jquery","simple-module","simple-hotkeys","simple-uploader"], function ($, SimpleModule, simpleHotkeys, simpleUploader) {
      return (root['Simditor'] = factory($, SimpleModule, simpleHotkeys, simpleUploader));
    module.exports = factory(require("jquery"),require("simple-module"),require("simple-hotkeys"),require("simple-uploader"));
    root['Simditor'] = factory(jQuery,SimpleModule,simple.hotkeys,simple.uploader);
}(this, function ($, SimpleModule, simpleHotkeys, simpleUploader) {
        _this.editor.body.get(0).innerHTML = state.html;
    this.body.get(0).innerHTML = val;
  "version": "2.3.21",
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.0.7.tgz",
      "integrity": "sha1-W2A1su6dT7XPhZ8Iqb6BsghJGEM=",
      },
      "dependencies": {
        "mime-db": {
          "version": "1.19.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
          "integrity": "sha1-SWoYGYp86CRFNOJbsQK3T7Qg/VY=",
          "dev": true
        },
        "mime-types": {
          "version": "2.1.7",
          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
          "integrity": "sha1-/2A5cOPHMe9vf03zyaD0Y6E8J1U=",
          "dev": true,
          "requires": {
            "mime-db": "~1.19.0"
          }
        }
    "adm-zip": {
      "version": "0.4.4",
      "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.4.tgz",
      "integrity": "sha1-ph7VrmkFw66lizplfSUDMJEFJzY=",
      "dev": true
    },
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.3.tgz",
      "integrity": "sha1-cts5g4cu7CMTkZyUJqmTpBr+k/c=",
        "kind-of": "^2.0.0",
    "amdefine": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.0.tgz",
      "integrity": "sha1-/RdHRwDLXMnCtwnwvp0jzjwZjDM=",
      "dev": true
    },
      "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
          "resolved": "https://registry.npmjs.org/async/-/async-1.4.2.tgz",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.0.tgz",
          "integrity": "sha1-UjYVelHk8ATBd/s8Un/33Xjw74M=",
            "brace-expansion": "^1.0.0"
          "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
    "asn1": {
      "version": "0.1.11",
      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
      "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
      "version": "0.1.5",
      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
      "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
      "resolved": "https://registry.npmjs.org/async/-/async-0.1.22.tgz",
      "version": "0.5.0",
      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
      "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.2.1.tgz",
      "integrity": "sha1-e8ZYtL7WHu5CStdPdfXD4sTfPMc=",
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.3.tgz",
      "integrity": "sha1-QfVVI+WJQFA47jVnlYxipe1wVRo=",
      "version": "0.5.2",
      "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.2.tgz",
      "integrity": "sha1-VGVD2+MhGMg8fHyjOh9cXV6pY+k=",
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/bl/-/bl-1.0.0.tgz",
      "integrity": "sha1-ramoqJptesYIYvfex9sgeHPgw/U=",
        "readable-stream": "~2.0.0"
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.4.tgz",
          "integrity": "sha1-JSPvJ/+jOde6nahgPy0FmdBu29g=",
            "inherits": "~2.0.1",
            "isarray": "0.0.1",
            "process-nextick-args": "~1.0.0",
            "string_decoder": "~0.10.x",
      "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz",
          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz",
      "version": "0.4.2",
      "resolved": "https://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
      "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
        "hoek": "0.9.x"
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.1.tgz",
      "integrity": "sha1-2l+3iu9MRMnkrPUlBk+zII66sEU=",
        "balanced-match": "^0.2.0",
    "browserify-zlib": {
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.1.4.tgz",
      "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=",
      "dev": true,
      "requires": {
        "pako": "~0.2.0"
      }
    },
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.0.tgz",
      "integrity": "sha1-EFOVX9mUpXRuUl5Kxxe4HK8HSRw=",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.0.1.tgz",
      "integrity": "sha1-V1aNaHuNpWxMHRe0x0o87ibXOus=",
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.0.0.tgz",
      "integrity": "sha1-q4fnQNcqH/yxKkPMBMFLOdVJ6rk=",
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.6.0.tgz",
      "integrity": "sha1-gWfBq4OX+1u5X5bSjlqBxQ8kesQ=",
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.2.tgz",
      "integrity": "sha1-dPqFQPwZsmqubtx+AxzWmT1JW6A=",
        "align-text": "^0.1.0",
        "lazy-cache": "^0.2.4"
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
      "version": "0.0.7",
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
      "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
        "delayed-stream": "0.0.5"
      "resolved": "https://registry.npmjs.org/commander/-/commander-1.2.0.tgz",
      "version": "2.0.6",
      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.6.tgz",
      "integrity": "sha1-nkqpMh/8+cxNgZVPeq+p81dn1eo=",
        "mime-db": ">= 1.19.0 < 2"
      },
      "dependencies": {
        "mime-db": {
          "version": "1.20.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.20.0.tgz",
          "integrity": "sha1-SW+Q/QH+DgMciCPsOqlFD/2hjtg=",
          "dev": true
        }
      "version": "1.5.1",
      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.1.tgz",
      "integrity": "sha1-87gKz54fSOOHXAaItBtsMWAu6hw=",
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.4.tgz",
          "integrity": "sha1-JSPvJ/+jOde6nahgPy0FmdBu29g=",
            "isarray": "0.0.1",
            "process-nextick-args": "~1.0.0",
    "config-chain": {
      "version": "1.1.9",
      "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.9.tgz",
      "integrity": "sha1-Oax9TcqE+q2SYSTFTP8lpTqov24=",
      "dev": true,
      "requires": {
        "ini": "1",
        "proto-list": "~1.2.1"
      }
    },
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.1.tgz",
      "integrity": "sha1-oZ0iRzJ9wDgFDOYit6FU7FnF5gA=",
      "version": "0.2.2",
      "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
      "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=",
        "boom": "0.4.x"
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.0.tgz",
      "integrity": "sha1-Sk0008H4vvnZtMWWon79YNky2Do=",
        "base64-url": "1.2.1",
        "rndm": "~1.1.0",
        "scmp": "1.0.0",
        "uid-safe": "~2.0.0"
      "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.0.1.tgz",
      "integrity": "sha1-FyrUMVb3g3+F7CLp3XxGpsCT7xk=",
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
      "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
        "ms": "0.7.1"
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.1.1.tgz",
      "integrity": "sha1-iHFHmmwEh/VlPUipkvHQOBym8DE=",
      "version": "0.0.5",
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
      "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
      "resolved": "https://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.3.tgz",
      "integrity": "sha1-tDO0ck5x/YVR2YhRdIUcX8N34sk=",
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.1.0.tgz",
      "integrity": "sha1-6TUyWLqpEIll78QcsO+K3i88+wc=",
        "once": "~1.3.0"
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz",
      "integrity": "sha1-5ntD8+gsluo6WE/+4Ln8MyXYAtk=",
      "version": "1.4.2",
      "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.2.tgz",
      "integrity": "sha1-5R6/BKfmy4IgtBeA1leSXowCV6k=",
        "accepts": "~1.2.12",
        "escape-html": "1.0.2"
      "version": "4.3.1",
      "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.3.1.tgz",
      "integrity": "sha1-0AnsML8w2w0VnT9ymZEEGDiZvmw=",
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz",
      "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=",
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.3.tgz",
      "integrity": "sha1-ni2LJbwlVcMzZyN1DgPwmcJzW7U=",
      "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
      "resolved": "https://registry.npmjs.org/express/-/express-3.3.8.tgz",
      "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz",
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/figures/-/figures-1.4.0.tgz",
      "integrity": "sha1-649WOQ2+MIEESlwqnZCJB1pIQy8=",
      "dev": true
      "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz",
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.0.tgz",
      "integrity": "sha1-pjsO7EYlopAlNImKX57siq7QRuk=",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
      "version": "0.5.2",
      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
      "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.1.4.tgz",
      "integrity": "sha1-kavXiKupcCsaq/qLwBAxoqyeOxI=",
      "optional": true,
        "async": "~0.9.0",
        "combined-stream": "~0.0.4",
        "mime": "~1.2.11"
          "version": "0.9.2",
          "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
          "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=",
          "optional": true
      "version": "0.23.1",
      "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.23.1.tgz",
      "integrity": "sha1-ZhHbpq3yq43Jxp+rN83fiBgVfj0=",
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz",
          "integrity": "sha1-/iI5t1dJcuZ+QfgIgj+b+kqZHjc=",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
      "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
      "resolved": "https://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.7.0.tgz",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
          "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
          "integrity": "sha1-mQ90cUaSe1Wakyv5KVkWPWDA0OI=",
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
          "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
            "ansi-styles": "^2.1.0",
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
          "integrity": "sha1-dRC2ZVZ8qRTMtdfgcnY6yWi+NyQ=",
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
          "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
          "integrity": "sha1-mQ90cUaSe1Wakyv5KVkWPWDA0OI=",
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
          "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
            "ansi-styles": "^2.1.0",
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
          "integrity": "sha1-dRC2ZVZ8qRTMtdfgcnY6yWi+NyQ=",
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
          "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
          "integrity": "sha1-mQ90cUaSe1Wakyv5KVkWPWDA0OI=",
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
          "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
            "ansi-styles": "^2.1.0",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
          "integrity": "sha1-dRC2ZVZ8qRTMtdfgcnY6yWi+NyQ=",
          "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
      "version": "0.11.0",
      "resolved": "https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.11.0.tgz",
      "integrity": "sha1-wkc5f3OFf4DCUcbUrOSsHW6q1Sg=",
        "lodash": "^3.2.0",
        "maxmin": "^1.0.0",
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
          "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
          "integrity": "sha1-mQ90cUaSe1Wakyv5KVkWPWDA0OI=",
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
          "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
            "ansi-styles": "^2.1.0",
          "version": "3.10.1",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
          "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
          "integrity": "sha1-dRC2ZVZ8qRTMtdfgcnY6yWi+NyQ=",
          "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
      "resolved": "https://registry.npmjs.org/grunt-curl/-/grunt-curl-2.1.1.tgz",
          "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
          "version": "0.9.4",
          "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz",
          "integrity": "sha1-RwLd9y++Ds2CeHwAwROuoZNa0Oc=",
          "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
              "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz",
              "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "resolved": "https://registry.npmjs.org/request/-/request-2.51.0.tgz",
      "version": "0.4.3",
      "resolved": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.3.tgz",
      "integrity": "sha1-QUfJLGwIiSVN2INGQdR1I/1eKv4=",
        "tmp": "^0.0.28"
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.2.tgz",
      "integrity": "sha1-Fe4Dth4mLhs28Tdi2WeSPNHOUV4=",
        "grunt-legacy-log-utils": "^0.1.1",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
          "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
      "version": "0.3.1",
      "resolved": "https://registry.npmjs.org/grunt-parallel/-/grunt-parallel-0.3.1.tgz",
      "integrity": "sha1-nRGihytEp7ug7IFvAziKFfpWRmM=",
        "grunt": "~0.4.1",
      "version": "2.3.5",
      "resolved": "https://registry.npmjs.org/grunt-umd/-/grunt-umd-2.3.5.tgz",
      "integrity": "sha1-avSumLkfRytw1w/JdVMYgMvO/KU=",
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-1.0.0.tgz",
      "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=",
        "browserify-zlib": "^0.1.4",
        "concat-stream": "^1.4.1"
      "version": "4.0.5",
      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.5.tgz",
      "integrity": "sha1-ksbta7FkEQxQ1NjQ+93HCAbG+Oc=",
        "async": "^1.4.0",
        "source-map": "^0.4.4",
        "uglify-js": "^2.6"
          "version": "1.5.0",
          "resolved": "https://registry.npmjs.org/async/-/async-1.5.0.tgz",
          "integrity": "sha1-J5ZkJyNXOFlWVjP8YnRES+4vjOM=",
          "version": "0.4.4",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
          "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
            "amdefine": ">=0.0.4"
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
      "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=",
        "boom": "0.4.x",
        "cryptiles": "0.2.x",
        "hoek": "0.9.x",
        "sntp": "0.2.x"
      "version": "0.9.1",
      "resolved": "https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
      "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
      "version": "2.1.4",
      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.4.tgz",
      "integrity": "sha1-2elTsmmIvogJbEbpJklNlgTDAPg=",
      "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
      "version": "0.10.1",
      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
      "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
        "asn1": "0.1.11",
        "assert-plus": "^0.1.5",
        "ctype": "0.5.3"
      "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.4.tgz",
      "integrity": "sha1-bLtFIevVHODsCpNr/XZX736bFyo=",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz",
      "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=",
      "dev": true
    },
    "ini": {
      "version": "1.3.4",
      "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
      "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.0.tgz",
      "integrity": "sha1-NveFDA0HenGwQfNWVmQVXwcDW9A=",
      "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz",
      "integrity": "sha1-ZDhgPq6+J5OUj/SkJi7I2z1iWXs=",
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.0.tgz",
      "integrity": "sha1-uKpUElrmJr/k4765ZfFqicWKETc=",
      "version": "2.3.4",
      "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-2.3.4.tgz",
      "integrity": "sha1-rXcmYrMtFsVk7iXIY+2uHWWgOPI=",
      "version": "2.2.3",
      "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.2.3.tgz",
      "integrity": "sha1-4lK5mmr5AdPsQfMyWJyQUJp7xgU=",
      "version": "0.4.0",
      "resolved": "https://registry.npmjs.org/kew/-/kew-0.4.0.tgz",
      "integrity": "sha1-2pdITxsGUCFG88YM7AWsYBLNmT8=",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-2.0.1.tgz",
      "integrity": "sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU=",
        "is-buffer": "^1.0.2"
      "version": "0.2.4",
      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-0.2.4.tgz",
      "integrity": "sha1-A2pplTUhes2k+y4/2j/AkW+Nt4Y=",
      "version": "0.6.3",
      "resolved": "https://registry.npmjs.org/libumd/-/libumd-0.6.3.tgz",
      "integrity": "sha1-X5N4XvHK74TvQiLzI5QLAQcbQZU=",
      "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz",
          "integrity": "sha1-/iI5t1dJcuZ+QfgIgj+b+kqZHjc=",
      "resolved": "https://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.2.0.tgz",
      "integrity": "sha1-9Ph9tqvsO3/keDRTHs9qARFD5Y0=",
        "signal-exit": "^2.1.2"
      "version": "2.7.0",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.0.tgz",
      "integrity": "sha1-qqN2pM2XD5zr9ewZCVZuwDTwfuY=",
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-1.1.0.tgz",
      "integrity": "sha1-cTZehKmd2Piz99X94vANHn9zvmE=",
        "gzip-size": "^1.0.0",
        "pretty-bytes": "^1.0.0"
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
          "integrity": "sha1-xQYbbg74qBd15Q9dZhUb9r83EQc=",
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.1.0.tgz",
          "integrity": "sha1-mQ90cUaSe1Wakyv5KVkWPWDA0OI=",
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.1.tgz",
          "integrity": "sha1-UJr7ZwZudJn36zU1x3RFdyri0Bk=",
            "ansi-styles": "^2.1.0",
          "version": "1.0.4",
          "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
          "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
            "get-stdin": "^4.0.1",
            "meow": "^3.1.0"
          "version": "3.0.0",
          "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.0.tgz",
          "integrity": "sha1-dRC2ZVZ8qRTMtdfgcnY6yWi+NyQ=",
      "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
      "version": "3.6.0",
      "resolved": "https://registry.npmjs.org/meow/-/meow-3.6.0.tgz",
      "integrity": "sha1-56U1KVy4nbDgeCQo5V+oYVv54VA=",
      "version": "2.3.5",
      "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.5.tgz",
      "integrity": "sha1-LNXNv/AMNnPXrjRRGagSpdlbjI4=",
        "debug": "~2.2.0",
        "methods": "~1.1.1",
        "parseurl": "~1.3.0",
        "vary": "~1.0.1"
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.1.tgz",
          "integrity": "sha1-F+pjZgZtAMWON1uOx9/QRTyJgio=",
      "version": "1.12.0",
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz",
      "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=",
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz",
      "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=",
      "dev": true
      "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
      "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
      "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz",
      "version": "0.7.1",
      "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
      "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "version": "1.1.13",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
          "integrity": "sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4=",
      "version": "1.4.7",
      "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.7.tgz",
      "integrity": "sha1-baWhdmjEs91ZYjvaEc9/pMH2Cm8=",
      "version": "2.3.5",
      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
      "integrity": "sha1-jZJPFClg4Xd+f/4XBUNjHMfLAt8=",
    "npmconf": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/npmconf/-/npmconf-2.1.1.tgz",
      "integrity": "sha1-ombH5cVmlet/VcrzpacyjyRRDa4=",
      "dev": true,
      "requires": {
        "config-chain": "~1.1.8",
        "inherits": "~2.0.0",
        "ini": "^1.2.0",
        "mkdirp": "^0.5.0",
        "nopt": "~3.0.1",
        "once": "~1.3.0",
        "osenv": "^0.1.0",
        "semver": "2 || 3 || 4",
        "uid-number": "0.0.5"
      },
      "dependencies": {
        "minimist": {
          "version": "0.0.8",
          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
          "dev": true
        },
        "mkdirp": {
          "version": "0.5.1",
          "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
          "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
          "dev": true,
          "requires": {
            "minimist": "0.0.8"
          }
        },
        "nopt": {
          "version": "3.0.6",
          "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
          "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
          "dev": true,
          "requires": {
            "abbrev": "1"
          }
        },
        "semver": {
          "version": "4.3.6",
          "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
          "integrity": "sha1-MAvG4OhjdPe6YQaLWx7NV/xlMto=",
          "dev": true
        }
      }
    },
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz",
      "integrity": "sha1-wCD1KcUoKt/dIz2R1LGBw9aG3Es=",
      "version": "0.4.0",
      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.4.0.tgz",
      "integrity": "sha1-8ilW8x6nFRqCHl8vsywRPK2Ln2k=",
      "dev": true,
      "optional": true
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.0.1.tgz",
      "integrity": "sha1-mVBEVsNZi1ytT8WcJuipuxB/4L0=",
      "version": "1.3.3",
      "resolved": "https://registry.npmjs.org/once/-/once-1.3.3.tgz",
      "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=",
          "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
    "os-homedir": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.1.tgz",
      "integrity": "sha1-DWK99EuRb9O73PLKsZGUj7CU8Ac=",
      "dev": true
    },
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.1.tgz",
      "integrity": "sha1-6bQjoe2vR5iCVi6S7XHXdDoHG24=",
    "osenv": {
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.3.tgz",
      "integrity": "sha1-g88FxtZFj8TVrGNi6jJdkvJ1Qhc=",
      "dev": true,
      "requires": {
        "os-homedir": "^1.0.0",
        "os-tmpdir": "^1.0.0"
      }
    },
    "pako": {
      "version": "0.2.8",
      "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.8.tgz",
      "integrity": "sha1-Fa13KRU2KRPyDeSooWS0qsxhZdY=",
      "dev": true
    },
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.0.tgz",
      "integrity": "sha1-tYBG20Ij4UWvp2AJ5hush8wigbM=",
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.0.tgz",
      "integrity": "sha1-Jj2tpmqz8vsQv3+dJN2PPlcO+RI=",
          "version": "4.1.2",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.2.tgz",
          "integrity": "sha1-/iI5t1dJcuZ+QfgIgj+b+kqZHjc=",
      "version": "1.9.18",
      "resolved": "https://registry.npmjs.org/phantomjs/-/phantomjs-1.9.18.tgz",
      "integrity": "sha1-6Hb86JsUOmwBwk4DMu84IoUcrOE=",
      "dev": true,
      "requires": {
        "adm-zip": "0.4.4",
        "fs-extra": "~0.23.1",
        "kew": "0.4.0",
        "npmconf": "2.1.1",
        "progress": "1.1.8",
        "request": "2.42.0",
        "request-progress": "0.3.1",
        "which": "~1.0.5"
      "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.1.tgz",
      "integrity": "sha1-QjbIb8KfJhwgRbvoH3jLsqXoMGw=",
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.0.tgz",
      "integrity": "sha1-TINTjeH25mDCngoTRGhE96foglk=",
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.3.tgz",
      "integrity": "sha1-4nLu2CXV6fTqdNjXOx/jEcO+tjA=",
      "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
    "proto-list": {
      "version": "1.2.4",
      "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
      "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=",
      "dev": true
    },
      "version": "2.1.4",
      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.4.tgz",
      "integrity": "sha1-3MOv4uH9/GIKgSN2+OD8PS5iy1A=",
        "bytes": "2.1.0",
        "iconv-lite": "0.4.12",
          "version": "2.1.0",
          "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.1.0.tgz",
          "integrity": "sha1-rJPEEOL/ycx89LRks4KJBn9eR7Q=",
          "version": "0.4.12",
          "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.12.tgz",
          "integrity": "sha1-70uyyyj0BtPAX8if7qRQRiS1rIc=",
      "version": "1.0.33",
      "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.33.tgz",
      "integrity": "sha1-OjYN1mwbHX/UcFOJhg7aHQ9hEmw=",
      "version": "1.5.2",
      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.5.2.tgz",
      "integrity": "sha1-IQZfcHJ60FOg3V6VesngDHVg2Qo=",
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.0.tgz",
      "integrity": "sha1-/SfW0mTRj76/qlZVPde4JTWlA04=",
      "version": "2.42.0",
      "resolved": "https://registry.npmjs.org/request/-/request-2.42.0.tgz",
      "integrity": "sha1-VyvQFIk4VkBArHqxSLlkI6BjMEo=",
      "dev": true,
      "requires": {
        "aws-sign2": "~0.5.0",
        "bl": "~0.9.0",
        "caseless": "~0.6.0",
        "forever-agent": "~0.5.0",
        "form-data": "~0.1.0",
        "hawk": "1.1.1",
        "http-signature": "~0.10.0",
        "json-stringify-safe": "~5.0.0",
        "mime-types": "~1.0.1",
        "node-uuid": "~1.4.0",
        "oauth-sign": "~0.4.0",
        "qs": "~1.2.0",
        "tough-cookie": ">=0.12.0",
        "tunnel-agent": "~0.4.0"
          "version": "0.9.4",
          "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.4.tgz",
          "integrity": "sha1-RwLd9y++Ds2CeHwAwROuoZNa0Oc=",
            "readable-stream": "~1.0.26"
          "version": "1.2.2",
          "resolved": "https://registry.npmjs.org/qs/-/qs-1.2.2.tgz",
          "integrity": "sha1-GbV/8k3CqZzh+L32r82ln472H4g=",
      "version": "0.3.1",
      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-0.3.1.tgz",
      "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=",
        "throttleit": "~0.0.2"
      "version": "2.3.1",
      "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.1.tgz",
      "integrity": "sha1-K94ZGB3myBq5XjIHoo1h2WWzF5c=",
        "depd": "~1.0.1",
        "on-headers": "~1.0.0"
      "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.1.1.tgz",
      "integrity": "sha1-7870N0Ah94tj3mImtZhRICadZPE=",
    "scmp": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/scmp/-/scmp-1.0.0.tgz",
      "integrity": "sha1-oLJyw/xykvdxFWRvAGGLAmJRTgQ=",
      "version": "5.1.0",
      "resolved": "https://registry.npmjs.org/semver/-/semver-5.1.0.tgz",
      "integrity": "sha1-hfLPhVBGXE3wAM99hvawVBBqueU=",
      "version": "2.3.0",
      "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.0.tgz",
      "integrity": "sha1-rtNsxoNAaabxicxyIsahqBHcWzk=",
        "ms": "0.7.1",
        "parseurl": "~1.3.0"
      "version": "1.7.2",
      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.2.tgz",
      "integrity": "sha1-mhVdnE+dOR5GOXDntOsWx2chQcA=",
        "accepts": "~1.2.12",
        "batch": "0.5.2",
        "escape-html": "1.0.2",
        "mime-types": "~2.1.4",
        "parseurl": "~1.3.0"
        "mime-db": {
          "version": "1.19.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
          "integrity": "sha1-SWoYGYp86CRFNOJbsQK3T7Qg/VY=",
          "dev": true
        },
        "mime-types": {
          "version": "2.1.7",
          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
          "integrity": "sha1-/2A5cOPHMe9vf03zyaD0Y6E8J1U=",
            "mime-db": "~1.19.0"
      "version": "1.10.0",
      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.0.tgz",
      "integrity": "sha1-vmMvqmhYIOSkPtPfE3kTXMTzcNc=",
        "escape-html": "1.0.2",
        "parseurl": "~1.3.0",
        "send": "0.13.0"
          "version": "0.13.0",
          "resolved": "https://registry.npmjs.org/send/-/send-0.13.0.tgz",
          "integrity": "sha1-UY+SGusFYK7H3KspkLFM9vPM5d4=",
            "depd": "~1.0.1",
            "destroy": "1.0.3",
            "escape-html": "1.0.2",
            "range-parser": "~1.0.2",
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-2.1.2.tgz",
      "integrity": "sha1-N1h5sfkuvDszRIDQONxUam1VhWQ=",
      "version": "2.0.7",
      "resolved": "https://registry.npmjs.org/simple-uploader/-/simple-uploader-2.0.7.tgz",
      "integrity": "sha1-ursPXjDIY9Ok3CI1TfV1Ld/Ud9Q=",
      "version": "0.2.4",
      "resolved": "https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
      "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=",
        "hoek": "0.9.x"
      "version": "0.5.3",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.3.tgz",
      "integrity": "sha1-gmdLhacbC+dsPnQW0V6fUlLrO+A=",
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
      "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=",
        "spdx-license-ids": "^1.0.2"
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-1.0.4.tgz",
      "integrity": "sha1-IguEI5EZrpBFqJLbgag/TOFvgP0=",
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.1.tgz",
      "integrity": "sha1-u08u0A1QRzqUn3ozPYTswattSD0=",
        "spdx-exceptions": "^1.0.4",
        "spdx-license-ids": "^1.0.0"
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.1.0.tgz",
      "integrity": "sha1-KGlKzfOf4n3kUUP/+B8h9sZtRKw=",
      "version": "1.2.1",
      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
      "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=",
          "version": "1.1.13",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.13.tgz",
          "integrity": "sha1-9u73ZPUUyJ4rniMUanW6EGdW0j4=",
      "version": "0.0.5",
      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
      "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
      "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/sugar/-/sugar-1.4.1.tgz",
      "integrity": "sha1-ExDU3txpnloXMYNxhUGw14RKdZg=",
      "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.2.2.tgz",
          "version": "2.0.4",
          "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.4.tgz",
          "integrity": "sha1-JSPvJ/+jOde6nahgPy0FmdBu29g=",
            "inherits": "~2.0.1",
            "isarray": "0.0.1",
            "process-nextick-args": "~1.0.0",
            "string_decoder": "~0.10.x",
      "version": "0.0.2",
      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
      "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
          "resolved": "https://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
      "version": "0.0.28",
      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.28.tgz",
      "integrity": "sha1-Fyc1t/YU6nrzlmT6hM8N5OUV0SA=",
        "os-tmpdir": "~1.0.1"
      "version": "2.2.1",
      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.1.tgz",
      "integrity": "sha1-OwUWt5nnDoFkQ2oURuflh3/aEY4=",
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.1.tgz",
      "integrity": "sha1-u+7P9NZ5znU9uUYnYaiN/Ow8WrM=",
      "version": "1.6.9",
      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.9.tgz",
      "integrity": "sha1-h/Poi5L/WsMPvBrPmp0Ay8OLPXo=",
        "mime-types": "~2.1.7"
      },
      "dependencies": {
        "mime-db": {
          "version": "1.19.0",
          "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.19.0.tgz",
          "integrity": "sha1-SWoYGYp86CRFNOJbsQK3T7Qg/VY=",
          "dev": true
        },
        "mime-types": {
          "version": "2.1.7",
          "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.7.tgz",
          "integrity": "sha1-/2A5cOPHMe9vf03zyaD0Y6E8J1U=",
          "dev": true,
          "requires": {
            "mime-db": "~1.19.0"
          }
        }
      "version": "2.6.1",
      "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.1.tgz",
      "integrity": "sha1-7bvhiIujUl3tOnv4NrMLNAXTFhs=",
          "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz",
    "uid-number": {
      "version": "0.0.5",
      "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.5.tgz",
      "integrity": "sha1-Wj2yPvXb1VuB/ODsmirG/M3ruB4=",
      "dev": true
    },
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz",
      "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=",
        "base64-url": "1.2.1"
      "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
      "version": "3.0.1",
      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
      "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=",
        "spdx-correct": "~1.0.0",
        "spdx-expression-parse": "~1.0.0"
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.1.tgz",
      "integrity": "sha1-HmWWmWXMvC20VIxrhKbyxa7dRzk=",
      "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
  "version": "2.3.21",
    "simple-uploader": "~2.0.7",
    "simple-module": "~2.0.6"
    "grunt-contrib-sass": "0.x",
    "grunt-contrib-watch": "0.x",
    "grunt-contrib-copy": "0.x",
    "grunt-contrib-uglify": "0.x",
    "grunt-contrib-clean": "0.x",
    "grunt-jekyll": "0.x",
    "grunt-umd": "2.3.x",
    "grunt-express": "1.4.0",
    "grunt-banner": "0.3.x",
    "express": "~3.3.4"
    define('simditor', ["jquery","simple-module","simple-hotkeys","simple-uploader"], function ($, SimpleModule, simpleHotkeys, simpleUploader) {
      return (root['Simditor'] = factory($, SimpleModule, simpleHotkeys, simpleUploader));
    module.exports = factory(require("jquery"),require("simple-module"),require("simple-hotkeys"),require("simple-uploader"));
    root['Simditor'] = factory(jQuery,SimpleModule,simple.hotkeys,simple.uploader);
}(this, function ($, SimpleModule, simpleHotkeys, simpleUploader) {
        _this.editor.body.get(0).innerHTML = state.html;
    this.body.get(0).innerHTML = val;
        } else {
#Install Grunt
Install grunt:
$ npm install

#Install Bower Dependencies

Simditor uses [Bower](http://bower.io/) to manage front-end libraries:

Install bower：

```bash
npm install -g bower
```

Install bower dependencies:

```bash
bower install
```


Click [Here](https://github.com/mycolorway/simditor/releases) to download the zip file. You can also install Simditor by bower and npm :
* `$ npm install simditor`
* `$ bower install simditor`
* a button extension: [simditor-mark](https://github.com/mycolorway/simditor-mark)
  <li>Install with bower: $ bower install simditor</li>
      @editor.body.get(0).innerHTML = state.html
    
    sizeMap = [ 
    @body.get(0).innerHTML = val
        
      
* 2018-10-17

Fixed code:
          'default': ['$', 'SimpleModule', 'simpleHotkeys', 'simpleUploader', 'DOMPurify']
          amd: ['jquery', 'simple-module', 'simple-hotkeys', 'simple-uploader', 'dompurify']
          cjs: ['jquery', 'simple-module', 'simple-hotkeys', 'simple-uploader', 'dompurify']
            items: ['jQuery', 'SimpleModule', 'simple.hotkeys', 'simple.uploader', 'window.DOMPurify']
          src: 'node_modules/jquery/dist/jquery.min.js',
          src: 'node_modules/simple-module/lib/module.js',
          src: 'node_modules/simple-uploader/lib/uploader.js',
          src: 'node_modules/simple-hotkeys/lib/hotkeys.js',
        }, {
          src: 'node_modules/dompurify/dist/purify.js',
          dest: 'site/assets/scripts/dompurify.js'
          src: 'node_modules/jquery/dist/jquery.min.js',
          src: 'node_modules/simple-module/lib/module.js',
          src: 'node_modules/simple-uploader/lib/uploader.js',
          src: 'node_modules/simple-hotkeys/lib/hotkeys.js',
        }, {
          src: 'node_modules/dompurify/dist/purify.js',
          dest: 'package/scripts/dompurify.js'
            'node_modules/jquery/dist/jquery.min.js'
            'node_modules/simple-module/lib/module.js'
            'node_modules/simple-uploader/lib/uploader.js'
            'node_modules/simple-hotkeys/lib/hotkeys.js'
            'node_modules/dompurify/dist/purify.js'
* 2018-11-09
    define('simditor', ["jquery","simple-module","simple-hotkeys","simple-uploader","dompurify"], function ($, SimpleModule, simpleHotkeys, simpleUploader, DOMPurify) {
      return (root['Simditor'] = factory($, SimpleModule, simpleHotkeys, simpleUploader, DOMPurify));
    module.exports = factory(require("jquery"),require("simple-module"),require("simple-hotkeys"),require("simple-uploader"),require("dompurify"));
    root['Simditor'] = factory(jQuery,SimpleModule,simple.hotkeys,simple.uploader,window.DOMPurify);
}(this, function ($, SimpleModule, simpleHotkeys, simpleUploader, DOMPurify) {
        _this.editor.body.get(0).innerHTML = DOMPurify ? DOMPurify.sanitize(state.html) : state.html;
    this.body.get(0).innerHTML = DOMPurify ? DOMPurify.sanitize(val) : val;
  "version": "2.3.22",
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
      "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
      "version": "0.1.4",
      "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
      "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
        "kind-of": "^3.0.2",
      "resolved": "http://registry.npmjs.org/ansi-regex/-/ansi-regex-0.2.1.tgz",
          "resolved": "http://registry.npmjs.org/async/-/async-1.4.2.tgz",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
          "version": "3.0.4",
          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
            "brace-expansion": "^1.1.7"
          "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.4.0.tgz",
    "array-find-index": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
      "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
    "asn1": {
      "version": "0.2.4",
      "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
      "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
      "dev": true,
      "requires": {
        "safer-buffer": "~2.1.0"
      }
    },
      "version": "0.2.0",
      "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
      "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
      "resolved": "http://registry.npmjs.org/async/-/async-0.1.22.tgz",
      "version": "0.6.0",
      "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
      "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
      "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
      "version": "1.0.4",
      "resolved": "http://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz",
      "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=",
      "version": "0.5.3",
      "resolved": "https://registry.npmjs.org/batch/-/batch-0.5.3.tgz",
      "integrity": "sha1-PzQU84AyF0O/wQQvmoP/HVgk1GQ=",
    "bcrypt-pbkdf": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
      "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
      "dev": true,
      "requires": {
        "tweetnacl": "^0.14.3"
      }
    },
      "version": "1.2.2",
      "resolved": "http://registry.npmjs.org/bl/-/bl-1.2.2.tgz",
      "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==",
        "readable-stream": "^2.3.5",
        "safe-buffer": "^5.1.1"
        "isarray": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
          "dev": true
        },
          "version": "2.3.6",
          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "dev": true,
          "requires": {
            "safe-buffer": "~5.1.0"
          }
      "resolved": "http://registry.npmjs.org/body-parser/-/body-parser-1.13.3.tgz",
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
          "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.11.tgz",
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        },
      "version": "2.10.1",
      "resolved": "http://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
      "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
        "hoek": "2.x.x"
      "version": "1.1.11",
      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
      "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
        "balanced-match": "^1.0.0",
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
      "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
      "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
      "version": "2.1.0",
      "resolved": "http://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
      "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
      "version": "0.11.0",
      "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.11.0.tgz",
      "integrity": "sha1-cVuW6phBWTzDMGeSP17GDr2k99c=",
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
      "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
        "align-text": "^0.1.3",
        "lazy-cache": "^1.0.3"
      "resolved": "http://registry.npmjs.org/chalk/-/chalk-0.5.1.tgz",
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
      "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
        "delayed-stream": "~1.0.0"
      "resolved": "http://registry.npmjs.org/commander/-/commander-1.2.0.tgz",
      "version": "2.0.15",
      "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.15.tgz",
      "integrity": "sha512-4aE67DL33dSW9gw4CI2H/yTxqHLNcxp0yS6jB+4h+wr3e43+1z7vm0HU9qXOH8j+qjKuL8+UtkOxYQSMq60Ylw==",
        "mime-db": ">= 1.36.0 < 2"
        },
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.0.tgz",
      "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=",
        "isarray": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
          "dev": true
        },
        "process-nextick-args": {
          "version": "1.0.7",
          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
          "dev": true
        },
          "version": "2.0.6",
          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
            "isarray": "~1.0.0",
            "process-nextick-args": "~1.0.6",
      },
      "dependencies": {
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        }
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
      "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
      "version": "2.0.5",
      "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
      "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
        "boom": "2.x.x"
      "version": "3.0.6",
      "resolved": "https://registry.npmjs.org/csrf/-/csrf-3.0.6.tgz",
      "integrity": "sha1-thEg3c7q/JHnbtUxO7XAsmZ7cQo=",
        "rndm": "1.2.0",
        "tsscmp": "1.0.5",
        "uid-safe": "2.1.4"
      "resolved": "http://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz",
    "currently-unhandled": {
      "version": "0.4.1",
      "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
      "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
      "dev": true,
      "requires": {
        "array-find-index": "^1.0.1"
      }
    },
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/dargs/-/dargs-4.1.0.tgz",
      "integrity": "sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc=",
    "dashdash": {
      "version": "1.14.1",
      "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
      "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
      "dev": true,
      "requires": {
        "assert-plus": "^1.0.0"
      },
      "dependencies": {
        "assert-plus": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
          "dev": true
        }
      }
    },
      "version": "4.1.0",
      "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz",
      "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==",
        "ms": "^2.1.1"
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
      "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
      "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
      "resolved": "http://registry.npmjs.org/depd/-/depd-1.0.1.tgz",
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
      "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
      "dev": true
    },
    "dompurify": {
      "version": "1.0.8",
      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-1.0.8.tgz",
      "integrity": "sha512-vetRFbN1SXSPfP3ClIiYnxTrXquSqakBEOoB5JESn0SVcSYzpu6ougjakpKnskGctYdlNpwf+riUHSkG7d4XUw=="
    },
    "duplexer": {
      "version": "0.1.1",
      "resolved": "http://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz",
      "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=",
    "ecc-jsbn": {
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
      "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
      "dev": true,
      "requires": {
        "jsbn": "~0.1.0",
        "safer-buffer": "^2.1.0"
      }
    },
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
      "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
        "once": "^1.4.0"
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
      "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
      "version": "1.4.3",
      "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.4.3.tgz",
      "integrity": "sha1-t7cO2PNZ6duICS8tIMD4MUIK2D8=",
        "accepts": "~1.3.0",
        "escape-html": "~1.0.3"
      },
      "dependencies": {
        "accepts": {
          "version": "1.3.5",
          "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz",
          "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=",
          "dev": true,
          "requires": {
            "mime-types": "~2.1.18",
            "negotiator": "0.6.1"
          }
        },
        "negotiator": {
          "version": "0.6.1",
          "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
          "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=",
          "dev": true
        }
      "version": "4.5.12",
      "resolved": "https://registry.npmjs.org/es5-shim/-/es5-shim-4.5.12.tgz",
      "integrity": "sha512-MjoCAHE6P2Dirme70Cxd9i2Ng8rhXiaVSsxDWdSwimfLERJL/ypR2ed2rTYkeeYrMk8gq281dzKLiGcdrmc8qg==",
      "version": "1.0.3",
      "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
      "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
      "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
      "resolved": "http://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz",
      "resolved": "http://registry.npmjs.org/express/-/express-3.3.8.tgz",
      "resolved": "http://registry.npmjs.org/express-session/-/express-session-1.11.3.tgz",
        },
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        },
        "uid-safe": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.0.0.tgz",
          "integrity": "sha1-p/PGymSh9qXQTsDvPkw9U2cxcTc=",
          "dev": true,
          "requires": {
            "base64-url": "1.2.1"
          }
    "extend": {
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
      "dev": true
    },
    "extract-zip": {
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.5.0.tgz",
      "integrity": "sha1-ksz22B73Cp+kwXRxFMzvbYaIpsQ=",
      "dev": true,
      "requires": {
        "concat-stream": "1.5.0",
        "debug": "0.7.4",
        "mkdirp": "0.5.0",
        "yauzl": "2.4.1"
      },
      "dependencies": {
        "debug": {
          "version": "0.7.4",
          "resolved": "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
          "integrity": "sha1-BuHqgILCyxTjmAbiLi9vdX+Srzk=",
          "dev": true
        },
        "minimist": {
          "version": "0.0.8",
          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
          "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
          "dev": true
        },
        "mkdirp": {
          "version": "0.5.0",
          "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz",
          "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=",
          "dev": true,
          "requires": {
            "minimist": "0.0.8"
          }
        }
      }
    },
    "extsprintf": {
      "version": "1.3.0",
      "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
      "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
      "dev": true
    },
    "fd-slicer": {
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
      "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
      "dev": true,
      "requires": {
        "pend": "~1.2.0"
      }
    },
      "version": "1.7.0",
      "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
      "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
      "dev": true,
      "requires": {
        "escape-string-regexp": "^1.0.5",
        "object-assign": "^4.1.0"
      }
      "resolved": "http://registry.npmjs.org/finalhandler/-/finalhandler-0.4.0.tgz",
      },
      "dependencies": {
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "escape-html": {
          "version": "1.0.2",
          "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.2.tgz",
          "integrity": "sha1-130y+pjjjC9BroXpJ44ODmuhAiw=",
          "dev": true
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        }
      "version": "1.1.2",
      "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
      "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
      "version": "0.6.1",
      "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
      "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
      "version": "1.0.1",
      "resolved": "http://registry.npmjs.org/form-data/-/form-data-1.0.1.tgz",
      "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=",
        "async": "^2.0.1",
        "combined-stream": "^1.0.5",
        "mime-types": "^2.1.11"
          "version": "2.6.1",
          "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
          "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
          "requires": {
            "lodash": "^4.17.10"
          }
        },
        "lodash": {
          "version": "4.17.11",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
          "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
          "dev": true
      "version": "0.26.7",
      "resolved": "http://registry.npmjs.org/fs-extra/-/fs-extra-0.26.7.tgz",
      "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=",
        "klaw": "^1.0.0",
          "version": "4.1.15",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
    "generate-function": {
      "version": "2.3.1",
      "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
      "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==",
      "dev": true,
      "requires": {
        "is-property": "^1.0.2"
      }
    },
    "generate-object-property": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
      "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
      "dev": true,
      "requires": {
        "is-property": "^1.0.0"
      }
    },
    "getpass": {
      "version": "0.1.7",
      "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
      "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
      "dev": true,
      "requires": {
        "assert-plus": "^1.0.0"
      },
      "dependencies": {
        "assert-plus": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
          "dev": true
        }
      }
    },
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-1.0.2.tgz",
      "resolved": "http://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz",
      "resolved": "http://registry.npmjs.org/grunt-contrib-clean/-/grunt-contrib-clean-0.7.0.tgz",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "version": "1.1.3",
          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
            "ansi-styles": "^2.2.1",
          "version": "3.0.1",
          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "version": "1.1.3",
          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
            "ansi-styles": "^2.2.1",
          "version": "3.0.1",
          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "version": "1.1.3",
          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
            "ansi-styles": "^2.2.1",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "version": "3.0.1",
          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz",
      "version": "0.11.1",
      "resolved": "http://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.11.1.tgz",
      "integrity": "sha1-XiKi9nbNEdhx/CoPCKqbKXMEUyU=",
        "lodash": "^4.0.1",
        "maxmin": "^2.0.0",
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "version": "1.1.3",
          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
            "ansi-styles": "^2.2.1",
          "version": "4.17.11",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
          "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
          "version": "3.0.1",
          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
      "resolved": "http://registry.npmjs.org/grunt-curl/-/grunt-curl-2.1.1.tgz",
        "asn1": {
          "version": "0.1.11",
          "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz",
          "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=",
          "dev": true
        },
        "assert-plus": {
          "version": "0.1.5",
          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz",
          "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=",
          "dev": true
        },
          "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz",
        "aws-sign2": {
          "version": "0.5.0",
          "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz",
          "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=",
          "dev": true
        },
          "version": "0.9.5",
          "resolved": "http://registry.npmjs.org/bl/-/bl-0.9.5.tgz",
          "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=",
        "boom": {
          "version": "0.4.2",
          "resolved": "http://registry.npmjs.org/boom/-/boom-0.4.2.tgz",
          "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=",
          "dev": true,
          "requires": {
            "hoek": "0.9.x"
          }
        },
        "combined-stream": {
          "version": "0.0.7",
          "resolved": "http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz",
          "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=",
          "dev": true,
          "requires": {
            "delayed-stream": "0.0.5"
          }
        },
        "cryptiles": {
          "version": "0.2.2",
          "resolved": "http://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz",
          "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=",
          "dev": true,
          "requires": {
            "boom": "0.4.x"
          }
        },
        "delayed-stream": {
          "version": "0.0.5",
          "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz",
          "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=",
          "dev": true
        },
        "forever-agent": {
          "version": "0.5.2",
          "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz",
          "integrity": "sha1-bQ4JxJIflKJ/Y9O0nF/v8epMUTA=",
          "dev": true
        },
          "resolved": "http://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz",
              "resolved": "http://registry.npmjs.org/async/-/async-0.9.2.tgz",
              "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz",
        "hawk": {
          "version": "1.1.1",
          "resolved": "http://registry.npmjs.org/hawk/-/hawk-1.1.1.tgz",
          "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=",
          "dev": true,
          "requires": {
            "boom": "0.4.x",
            "cryptiles": "0.2.x",
            "hoek": "0.9.x",
            "sntp": "0.2.x"
          }
        },
        "hoek": {
          "version": "0.9.1",
          "resolved": "http://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz",
          "integrity": "sha1-PTIkYrrfB3Fup+uFuviAec3c5QU=",
          "dev": true
        },
        "http-signature": {
          "version": "0.10.1",
          "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz",
          "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=",
          "dev": true,
          "requires": {
            "asn1": "0.1.11",
            "assert-plus": "^0.1.5",
            "ctype": "0.5.3"
          }
        },
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
        "mime-db": {
          "version": "1.12.0",
          "resolved": "http://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz",
          "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=",
          "dev": true
        },
        "mime-types": {
          "version": "1.0.2",
          "resolved": "http://registry.npmjs.org/mime-types/-/mime-types-1.0.2.tgz",
          "integrity": "sha1-mVrhOSq4r/y/yyZB3QVOlDwNXc4=",
          "dev": true
        },
          "resolved": "http://registry.npmjs.org/request/-/request-2.51.0.tgz",
        },
        "sntp": {
          "version": "0.2.4",
          "resolved": "http://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz",
          "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=",
          "dev": true,
          "requires": {
            "hoek": "0.9.x"
          }
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "grunt-parallel": {
          "version": "0.3.1",
          "resolved": "https://registry.npmjs.org/grunt-parallel/-/grunt-parallel-0.3.1.tgz",
          "integrity": "sha1-nRGihytEp7ug7IFvAziKFfpWRmM=",
          "dev": true,
          "requires": {
            "grunt": "~0.4.1",
            "lpad": "~0.1.0",
            "q": "~0.8.12"
          }
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        },
      "version": "0.4.7",
      "resolved": "https://registry.npmjs.org/grunt-jekyll/-/grunt-jekyll-0.4.7.tgz",
      "integrity": "sha512-sRZUN6Nu+enDzTGPSMuo7UmzsJ4Z7b3Fkt0UYEeDHKlyn6xMnBmHNggLdhTuqpCdt7tV6JFk0ISWj0iTeBFMLA==",
        "tmp": "^0.0.33"
      "version": "0.1.3",
      "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-0.1.3.tgz",
      "integrity": "sha1-7ClCboAwIa9ZAp+H0vnNczWgVTE=",
        "grunt-legacy-log-utils": "~0.1.1",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-2.4.2.tgz",
          "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.3.3.tgz",
          "resolved": "http://registry.npmjs.org/semver/-/semver-4.3.6.tgz",
      "version": "0.5.1",
      "resolved": "https://registry.npmjs.org/grunt-parallel/-/grunt-parallel-0.5.1.tgz",
      "integrity": "sha1-X3ozdvYYVCQSjEsqLPLi0Hw39dk=",
      "version": "2.3.6",
      "resolved": "https://registry.npmjs.org/grunt-umd/-/grunt-umd-2.3.6.tgz",
      "integrity": "sha1-7FhdfOm7ADlvqNTaUiZva9Z2mnc=",
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz",
      "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=",
        "duplexer": "^0.1.1"
      "version": "4.0.12",
      "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.0.12.tgz",
      "integrity": "sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA==",
        "async": "^2.5.0",
        "source-map": "^0.6.1",
        "uglify-js": "^3.1.4"
          "version": "2.6.1",
          "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz",
          "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==",
          "dev": true,
          "requires": {
            "lodash": "^4.17.10"
          }
        },
        "commander": {
          "version": "2.17.1",
          "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
          "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
          "dev": true,
          "optional": true
        },
        "lodash": {
          "version": "4.17.11",
          "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
          "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
          "version": "0.6.1",
          "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
          "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
          "dev": true
        },
        "uglify-js": {
          "version": "3.4.9",
          "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz",
          "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==",
          "dev": true,
          "optional": true,
          "requires": {
            "commander": "~2.17.1",
            "source-map": "~0.6.1"
          }
        }
      }
    },
    "har-validator": {
      "version": "2.0.6",
      "resolved": "http://registry.npmjs.org/har-validator/-/har-validator-2.0.6.tgz",
      "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=",
      "dev": true,
      "requires": {
        "chalk": "^1.1.1",
        "commander": "^2.9.0",
        "is-my-json-valid": "^2.12.4",
        "pinkie-promise": "^2.0.0"
      },
      "dependencies": {
        "ansi-regex": {
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "dev": true
        },
        "ansi-styles": {
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "dev": true
        },
        "chalk": {
          "version": "1.1.3",
          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
          "dev": true,
          "requires": {
            "ansi-styles": "^2.2.1",
            "escape-string-regexp": "^1.0.2",
            "has-ansi": "^2.0.0",
            "strip-ansi": "^3.0.0",
            "supports-color": "^2.0.0"
          }
        },
        "commander": {
          "version": "2.19.0",
          "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
          "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
          "dev": true
        },
        "has-ansi": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
          "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
            "ansi-regex": "^2.0.0"
        },
        "strip-ansi": {
          "version": "3.0.1",
          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
          "dev": true,
          "requires": {
            "ansi-regex": "^2.0.0"
          }
        },
        "supports-color": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
          "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
          "dev": true
    "hasha": {
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/hasha/-/hasha-2.2.0.tgz",
      "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=",
      "dev": true,
      "requires": {
        "is-stream": "^1.0.1",
        "pinkie-promise": "^2.0.0"
      }
    },
      "version": "3.1.3",
      "resolved": "http://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
      "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
        "boom": "2.x.x",
        "cryptiles": "2.x.x",
        "hoek": "2.x.x",
        "sntp": "1.x.x"
      "version": "2.16.3",
      "resolved": "http://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
      "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
      "version": "2.7.1",
      "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
      "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
      "resolved": "http://registry.npmjs.org/http-errors/-/http-errors-1.3.1.tgz",
      "version": "1.1.1",
      "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
      "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
        "assert-plus": "^0.2.0",
        "jsprim": "^1.2.2",
        "sshpk": "^1.7.0"
      "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.2.11.tgz",
      "version": "1.0.6",
      "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
      "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
      "version": "2.0.3",
      "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
      "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
      "version": "1.1.6",
      "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
      "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
      "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
    "is-my-ip-valid": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
      "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
      "dev": true
    },
    "is-my-json-valid": {
      "version": "2.19.0",
      "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz",
      "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==",
      "dev": true,
      "requires": {
        "generate-function": "^2.0.0",
        "generate-object-property": "^1.1.0",
        "is-my-ip-valid": "^1.0.0",
        "jsonpointer": "^4.0.0",
        "xtend": "^4.0.0"
      }
    },
    "is-property": {
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
      "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
      "dev": true
    },
    "is-stream": {
      "version": "1.1.0",
      "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
      "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
      "dev": true
    },
    "is-typedarray": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
      "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
      "dev": true
    },
      "version": "0.2.1",
      "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
      "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
    "isexe": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
      "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
      "dev": true
    },
    "isstream": {
      "version": "0.1.2",
      "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
      "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
      "dev": true
    },
      "version": "2.99.1",
      "resolved": "http://registry.npmjs.org/jasmine-core/-/jasmine-core-2.99.1.tgz",
      "integrity": "sha1-5kAN8ea1bhMLYcS80JPap/boyhU=",
    "jsbn": {
      "version": "0.1.1",
      "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
      "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
      "dev": true
    },
    "json-schema": {
      "version": "0.2.3",
      "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
      "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
      "dev": true
    },
      "version": "2.4.0",
      "resolved": "http://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
      "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
      "dev": true,
      "requires": {
        "graceful-fs": "^4.1.6"
      },
      "dependencies": {
        "graceful-fs": {
          "version": "4.1.15",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
          "dev": true,
          "optional": true
        }
      }
    },
    "jsonpointer": {
      "version": "4.0.1",
      "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
      "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
    "jsprim": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
      "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
      "dev": true,
      "requires": {
        "assert-plus": "1.0.0",
        "extsprintf": "1.3.0",
        "json-schema": "0.2.3",
        "verror": "1.10.0"
      },
      "dependencies": {
        "assert-plus": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
          "dev": true
        }
      }
    },
      "version": "0.7.0",
      "resolved": "http://registry.npmjs.org/kew/-/kew-0.7.0.tgz",
      "integrity": "sha1-edk9LTM2PW/dKXCzNdkUGtWR15s=",
      "version": "3.2.2",
      "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
      "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
      "dev": true,
      "requires": {
        "is-buffer": "^1.1.5"
      }
    },
    "klaw": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
      "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
        "graceful-fs": "^4.1.9"
      },
      "dependencies": {
        "graceful-fs": {
          "version": "4.1.15",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
          "dev": true,
          "optional": true
        }
      "version": "1.0.4",
      "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
      "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=",
      "version": "0.6.4",
      "resolved": "https://registry.npmjs.org/libumd/-/libumd-0.6.4.tgz",
      "integrity": "sha1-dIqDwRX/K6opegeIqIKlsGTlNd0=",
      "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
          "version": "4.1.15",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
      "resolved": "http://registry.npmjs.org/lodash/-/lodash-0.9.2.tgz",
      "version": "1.6.0",
      "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
      "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
        "currently-unhandled": "^0.4.1",
        "signal-exit": "^3.0.0"
      "version": "2.7.3",
      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-2.7.3.tgz",
      "integrity": "sha1-bUUk6LlV+V1PW1iFHOId1y+06VI=",
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz",
      "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=",
        "gzip-size": "^3.0.0",
        "pretty-bytes": "^3.0.0"
          "version": "2.1.1",
          "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
          "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
          "version": "2.2.1",
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
          "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
          "version": "1.1.3",
          "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
          "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
            "ansi-styles": "^2.2.1",
          "version": "3.0.1",
          "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz",
          "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=",
            "number-is-nan": "^1.0.0"
          "version": "3.0.1",
          "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
          "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
      "resolved": "http://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
      "version": "3.7.0",
      "resolved": "http://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
      "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
        "decamelize": "^1.1.2",
        "map-obj": "^1.0.1",
      "version": "2.3.10",
      "resolved": "https://registry.npmjs.org/method-override/-/method-override-2.3.10.tgz",
      "integrity": "sha1-49r41d7hDdLc59SuiNYrvud0drQ=",
        "debug": "2.6.9",
        "methods": "~1.1.2",
        "parseurl": "~1.3.2",
        "vary": "~1.1.2"
        "debug": {
          "version": "2.6.9",
          "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
          "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
          "dev": true,
          "requires": {
            "ms": "2.0.0"
          }
        },
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
          "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
          "dev": true
        },
        "ms": {
          "version": "2.0.0",
          "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
          "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
          "dev": true
        },
        "vary": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
          "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
      "version": "1.37.0",
      "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
      "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==",
      "version": "2.1.21",
      "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
      "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
      "dev": true,
      "requires": {
        "mime-db": "~1.37.0"
      }
      "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
      "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz",
      "resolved": "http://registry.npmjs.org/morgan/-/morgan-1.6.1.tgz",
      },
      "dependencies": {
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        }
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
      "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
          "version": "1.1.14",
          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
      "version": "1.4.8",
      "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz",
      "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=",
      "version": "2.4.0",
      "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
      "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
      "version": "1.0.1",
      "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
      "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
      "version": "0.8.2",
      "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
      "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
      "dev": true
      "version": "4.1.1",
      "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
      "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
      "version": "1.4.0",
      "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
      "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
          "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",
      "version": "1.0.2",
      "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
      "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
      "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=",
      "version": "1.0.1",
      "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
      "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
          "version": "4.1.15",
          "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz",
          "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==",
    "pend": {
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
      "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
      "dev": true
    },
      "version": "1.9.20",
      "resolved": "http://registry.npmjs.org/phantomjs/-/phantomjs-1.9.20.tgz",
      "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=",
      "dev": true,
      "requires": {
        "extract-zip": "~1.5.0",
        "fs-extra": "~0.26.4",
        "hasha": "^2.2.0",
        "kew": "~0.7.0",
        "progress": "~1.1.8",
        "request": "~2.67.0",
        "request-progress": "~2.0.1",
        "which": "~1.2.2"
      },
      "dependencies": {
        "which": {
          "version": "1.2.14",
          "resolved": "https://registry.npmjs.org/which/-/which-1.2.14.tgz",
          "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=",
          "dev": true,
          "requires": {
            "isexe": "^2.0.0"
          }
        }
      "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
      "version": "2.0.4",
      "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
      "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
      "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
      "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
      "resolved": "http://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
    "random-bytes": {
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
      "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=",
      "dev": true
    },
      "version": "2.1.7",
      "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.1.7.tgz",
      "integrity": "sha1-rf6s4uT7MJgFgBTQjActzFl1h3Q=",
        "bytes": "2.4.0",
        "iconv-lite": "0.4.13",
          "version": "2.4.0",
          "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz",
          "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=",
          "version": "0.4.13",
          "resolved": "http://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.13.tgz",
          "integrity": "sha1-H4irpKsLFQjoMSrMOTRfNumS4vI=",
      "version": "1.0.34",
      "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
      "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",
      "version": "1.6.1",
      "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
      "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
      "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
      "version": "2.67.0",
      "resolved": "http://registry.npmjs.org/request/-/request-2.67.0.tgz",
      "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=",
      "dev": true,
      "requires": {
        "aws-sign2": "~0.6.0",
        "bl": "~1.0.0",
        "caseless": "~0.11.0",
        "combined-stream": "~1.0.5",
        "extend": "~3.0.0",
        "forever-agent": "~0.6.1",
        "form-data": "~1.0.0-rc3",
        "har-validator": "~2.0.2",
        "hawk": "~3.1.0",
        "http-signature": "~1.1.0",
        "is-typedarray": "~1.0.0",
        "isstream": "~0.1.2",
        "json-stringify-safe": "~5.0.1",
        "mime-types": "~2.1.7",
        "node-uuid": "~1.4.7",
        "oauth-sign": "~0.8.0",
        "qs": "~5.2.0",
        "tough-cookie": "~2.2.0",
        "tunnel-agent": "~0.4.1"
          "version": "1.0.3",
          "resolved": "http://registry.npmjs.org/bl/-/bl-1.0.3.tgz",
          "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=",
            "readable-stream": "~2.0.5"
        "isarray": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
          "dev": true
        },
        "process-nextick-args": {
          "version": "1.0.7",
          "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
          "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=",
          "dev": true
        },
          "version": "5.2.1",
          "resolved": "https://registry.npmjs.org/qs/-/qs-5.2.1.tgz",
          "integrity": "sha1-gB/uAw4LlFDWOFrcSKTMVbRK7fw=",
        },
        "readable-stream": {
          "version": "2.0.6",
          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
          "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=",
          "dev": true,
          "requires": {
            "core-util-is": "~1.0.0",
            "inherits": "~2.0.1",
            "isarray": "~1.0.0",
            "process-nextick-args": "~1.0.6",
            "string_decoder": "~0.10.x",
            "util-deprecate": "~1.0.1"
          }
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-2.0.1.tgz",
      "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=",
        "throttleit": "^1.0.0"
      "version": "2.3.2",
      "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz",
      "integrity": "sha1-/6cbq5UtYvfB1Jt0NDVfvGjf/Fo=",
        "depd": "~1.1.0",
        "on-headers": "~1.0.1"
      },
      "dependencies": {
        "depd": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
          "dev": true
        }
      "resolved": "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz",
      "version": "1.2.0",
      "resolved": "https://registry.npmjs.org/rndm/-/rndm-1.2.0.tgz",
      "integrity": "sha1-8z/pz7Urv9UgqhgyO8ZdsRCht2w=",
    "safe-buffer": {
      "version": "5.1.2",
      "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
      "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
      "dev": true
    },
    "safer-buffer": {
      "version": "2.1.2",
      "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
      "version": "5.6.0",
      "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
      "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
      "version": "2.3.2",
      "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz",
      "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=",
        "ms": "0.7.2",
        "parseurl": "~1.3.1"
        },
        "ms": {
          "version": "0.7.2",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.2.tgz",
          "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=",
          "dev": true
      "version": "1.7.3",
      "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.7.3.tgz",
      "integrity": "sha1-egV/xu4o3GP2RWbl+lexEahq7NI=",
        "accepts": "~1.2.13",
        "batch": "0.5.3",
        "escape-html": "~1.0.3",
        "mime-types": "~2.1.9",
        "parseurl": "~1.3.1"
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
            "ms": "0.7.1"
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
      "version": "1.10.3",
      "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.10.3.tgz",
      "integrity": "sha1-zlpuzTEB/tXsCYJ9rCKpwpv7BTU=",
        "escape-html": "~1.0.3",
        "parseurl": "~1.3.1",
        "send": "0.13.2"
        "debug": {
          "version": "2.2.0",
          "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz",
          "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=",
          "dev": true,
          "requires": {
            "ms": "0.7.1"
          }
        },
        "depd": {
          "version": "1.1.2",
          "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
          "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
          "dev": true
        },
        "ms": {
          "version": "0.7.1",
          "resolved": "http://registry.npmjs.org/ms/-/ms-0.7.1.tgz",
          "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=",
          "dev": true
        },
          "version": "0.13.2",
          "resolved": "https://registry.npmjs.org/send/-/send-0.13.2.tgz",
          "integrity": "sha1-dl52B8gFVFK7pvCwUllTUJhgNt4=",
            "depd": "~1.1.0",
            "destroy": "~1.0.4",
            "escape-html": "~1.0.3",
            "range-parser": "~1.0.3",
        },
        "statuses": {
          "version": "1.2.1",
          "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.2.1.tgz",
          "integrity": "sha1-3e1FzBglbVHtQK7BQkidXGECbSg=",
          "dev": true
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
      "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
      "version": "2.0.8",
      "resolved": "https://registry.npmjs.org/simple-uploader/-/simple-uploader-2.0.8.tgz",
      "integrity": "sha1-X8QQbG2Wiws1MpPjsWCUqv3pV7o=",
      "version": "1.0.9",
      "resolved": "http://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
      "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
        "hoek": "2.x.x"
      "version": "0.5.7",
      "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
      "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz",
      "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==",
        "spdx-expression-parse": "^3.0.0",
        "spdx-license-ids": "^3.0.0"
      "version": "2.2.0",
      "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
      "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
      "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
        "spdx-exceptions": "^2.1.0",
        "spdx-license-ids": "^3.0.0"
      "version": "3.0.2",
      "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz",
      "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==",
    "sshpk": {
      "version": "1.15.2",
      "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
      "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
      "dev": true,
      "requires": {
        "asn1": "~0.2.3",
        "assert-plus": "^1.0.0",
        "bcrypt-pbkdf": "^1.0.0",
        "dashdash": "^1.12.0",
        "ecc-jsbn": "~0.1.1",
        "getpass": "^0.1.1",
        "jsbn": "~0.1.0",
        "safer-buffer": "^2.0.2",
        "tweetnacl": "~0.14.0"
      },
      "dependencies": {
        "assert-plus": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
          "dev": true
        }
      }
    },
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
      "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
          "version": "1.1.14",
          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
          "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
      "version": "0.0.6",
      "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
      "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
      "resolved": "http://registry.npmjs.org/strip-ansi/-/strip-ansi-0.3.0.tgz",
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/sugar/-/sugar-1.5.0.tgz",
      "integrity": "sha1-2dP7oQ96iH4G5q37B4onrLH8BVY=",
      "resolved": "http://registry.npmjs.org/tar-stream/-/tar-stream-1.2.2.tgz",
        "isarray": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
          "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
          "dev": true
        },
          "version": "2.3.6",
          "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
          "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
            "inherits": "~2.0.3",
            "isarray": "~1.0.0",
            "process-nextick-args": "~2.0.0",
            "safe-buffer": "~5.1.1",
            "string_decoder": "~1.1.1",
        },
        "string_decoder": {
          "version": "1.1.1",
          "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
          "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
          "dev": true,
          "requires": {
            "safe-buffer": "~5.1.0"
          }
      "version": "1.0.0",
      "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz",
      "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=",
          "resolved": "http://registry.npmjs.org/debug/-/debug-0.7.4.tgz",
      "version": "0.0.33",
      "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
      "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
        "os-tmpdir": "~1.0.2"
      "version": "2.2.2",
      "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.2.2.tgz",
      "integrity": "sha1-yDoYMPTl7wuT7yo0iOck+N4Basc=",
    "tsscmp": {
      "version": "1.0.5",
      "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.5.tgz",
      "integrity": "sha1-fcSjOvcVgatDN9qR2FylQn69mpc=",
      "dev": true
    },
      "version": "0.4.3",
      "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz",
      "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=",
      "dev": true
    },
    "tweetnacl": {
      "version": "0.14.5",
      "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
      "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
      "version": "1.6.16",
      "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz",
      "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==",
        "mime-types": "~2.1.18"
      "version": "2.6.4",
      "resolved": "http://registry.npmjs.org/uglify-js/-/uglify-js-2.6.4.tgz",
      "integrity": "sha1-ZeovswWck5RpLxX+2HwrNsFrmt8=",
          "resolved": "http://registry.npmjs.org/async/-/async-0.2.10.tgz",
      "version": "2.1.4",
      "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.4.tgz",
      "integrity": "sha1-Otbzg2jG1MjHXsF2I/t5qh0HHYE=",
        "random-bytes": "~1.0.0"
      "resolved": "http://registry.npmjs.org/underscore.string/-/underscore.string-2.2.1.tgz",
      "version": "3.0.4",
      "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
      "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
        "spdx-correct": "^3.0.0",
        "spdx-expression-parse": "^3.0.0"
    "verror": {
      "version": "1.10.0",
      "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
      "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
      "dev": true,
      "requires": {
        "assert-plus": "^1.0.0",
        "core-util-is": "1.0.2",
        "extsprintf": "^1.2.0"
      },
      "dependencies": {
        "assert-plus": {
          "version": "1.0.0",
          "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
          "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
          "dev": true
        }
      }
    },
      "version": "1.0.2",
      "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
      "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
      "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
    "yauzl": {
      "version": "2.4.1",
      "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
      "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
      "dev": true,
      "requires": {
        "fd-slicer": "~1.0.1"
      }
    },
          "resolved": "http://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
  "version": "2.3.22",
    "dompurify": "^1.0.8",
    "simple-module": "~2.0.6",
    "simple-uploader": "~2.0.7"
    "express": "~3.3.4",
    "grunt-banner": "0.3.x",
    "grunt-contrib-clean": "0.x",
    "grunt-contrib-copy": "0.x",
    "grunt-contrib-sass": "0.x",
    "grunt-contrib-uglify": "0.x",
    "grunt-contrib-watch": "0.x",
    "grunt-express": "1.4.0",
    "grunt-jekyll": "0.x",
    "grunt-parallel": "^0.5.1",
    "grunt-umd": "2.3.x"
(function (global, factory) {
	typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
	typeof define === 'function' && define.amd ? define(factory) :
	(global.DOMPurify = factory());
}(this, (function () { 'use strict';

var html = ['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'];

// SVG
var svg = ['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'audio', 'canvas', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'video', 'view', 'vkern'];

var svgFilters = ['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence'];

var mathMl = ['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmuliscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mpspace', 'msqrt', 'mystyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover'];

var text = ['#text'];

var html$1 = ['accept', 'action', 'align', 'alt', 'autocomplete', 'background', 'bgcolor', 'border', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'coords', 'crossorigin', 'datetime', 'default', 'dir', 'disabled', 'download', 'enctype', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'integrity', 'ismap', 'label', 'lang', 'list', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'multiple', 'name', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns'];

var svg$1 = ['accent-height', 'accumulate', 'additivive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'tabindex', 'targetx', 'targety', 'transform', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan'];

var mathMl$1 = ['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns'];

var xml = ['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink'];

/* Add properties to a lookup table */
function addToSet(set, array) {
  var l = array.length;
  while (l--) {
    if (typeof array[l] === 'string') {
      array[l] = array[l].toLowerCase();
    }
    set[array[l]] = true;
  }
  return set;
}

/* Shallow clone an object */
function clone(object) {
  var newObject = {};
  var property = void 0;
  for (property in object) {
    if (Object.prototype.hasOwnProperty.call(object, property)) {
      newObject[property] = object[property];
    }
  }
  return newObject;
}

var MUSTACHE_EXPR = /\{\{[\s\S]*|[\s\S]*\}\}/gm; // Specify template detection regex for SAFE_FOR_TEMPLATES mode
var ERB_EXPR = /<%[\s\S]*|[\s\S]*%>/gm;
var DATA_ATTR = /^data-[\-\w.\u00B7-\uFFFF]/; // eslint-disable-line no-useless-escape
var ARIA_ATTR = /^aria-[\-\w]+$/; // eslint-disable-line no-useless-escape
var IS_ALLOWED_URI = /^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i; // eslint-disable-line no-useless-escape
var IS_SCRIPT_OR_DATA = /^(?:\w+script|data):/i;
var ATTR_WHITESPACE = /[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205f\u3000]/g; // eslint-disable-line no-control-regex

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }

var getGlobal = function getGlobal() {
  return typeof window === 'undefined' ? null : window;
};

function createDOMPurify() {
  var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();

  var DOMPurify = function DOMPurify(root) {
    return createDOMPurify(root);
  };

  /**
   * Version label, exposed for easier checks
   * if DOMPurify is up to date or not
   */
  DOMPurify.version = '1.0.8';

  /**
   * Array of elements that DOMPurify removed during sanitation.
   * Empty if nothing was removed.
   */
  DOMPurify.removed = [];

  if (!window || !window.document || window.document.nodeType !== 9) {
    // Not running in a browser, provide a factory function
    // so that you can pass your own Window
    DOMPurify.isSupported = false;

    return DOMPurify;
  }

  var originalDocument = window.document;
  var useDOMParser = false; // See comment below
  var removeTitle = false; // See comment below

  var document = window.document;
  var DocumentFragment = window.DocumentFragment,
      HTMLTemplateElement = window.HTMLTemplateElement,
      Node = window.Node,
      NodeFilter = window.NodeFilter,
      _window$NamedNodeMap = window.NamedNodeMap,
      NamedNodeMap = _window$NamedNodeMap === undefined ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,
      Text = window.Text,
      Comment = window.Comment,
      DOMParser = window.DOMParser;

  // As per issue #47, the web-components registry is inherited by a
  // new document created via createHTMLDocument. As per the spec
  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
  // a new empty registry is used when creating a template contents owner
  // document, so we use that as our parent document to ensure nothing
  // is inherited.

  if (typeof HTMLTemplateElement === 'function') {
    var template = document.createElement('template');
    if (template.content && template.content.ownerDocument) {
      document = template.content.ownerDocument;
    }
  }

  var _document = document,
      implementation = _document.implementation,
      createNodeIterator = _document.createNodeIterator,
      getElementsByTagName = _document.getElementsByTagName,
      createDocumentFragment = _document.createDocumentFragment;
  var importNode = originalDocument.importNode;


  var hooks = {};

  /**
   * Expose whether this browser supports running the full DOMPurify.
   */
  DOMPurify.isSupported = implementation && typeof implementation.createHTMLDocument !== 'undefined' && document.documentMode !== 9;

  var MUSTACHE_EXPR$$1 = MUSTACHE_EXPR,
      ERB_EXPR$$1 = ERB_EXPR,
      DATA_ATTR$$1 = DATA_ATTR,
      ARIA_ATTR$$1 = ARIA_ATTR,
      IS_SCRIPT_OR_DATA$$1 = IS_SCRIPT_OR_DATA,
      ATTR_WHITESPACE$$1 = ATTR_WHITESPACE;
  var IS_ALLOWED_URI$$1 = IS_ALLOWED_URI;
  /**
   * We consider the elements and attributes below to be safe. Ideally
   * don't add any new ones but feel free to remove unwanted ones.
   */

  /* allowed element names */

  var ALLOWED_TAGS = null;
  var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(svgFilters), _toConsumableArray(mathMl), _toConsumableArray(text)));

  /* Allowed attribute names */
  var ALLOWED_ATTR = null;
  var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(mathMl$1), _toConsumableArray(xml)));

  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
  var FORBID_TAGS = null;

  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
  var FORBID_ATTR = null;

  /* Decide if ARIA attributes are okay */
  var ALLOW_ARIA_ATTR = true;

  /* Decide if custom data attributes are okay */
  var ALLOW_DATA_ATTR = true;

  /* Decide if unknown protocols are okay */
  var ALLOW_UNKNOWN_PROTOCOLS = false;

  /* Output should be safe for jQuery's $() factory? */
  var SAFE_FOR_JQUERY = false;

  /* Output should be safe for common template engines.
   * This means, DOMPurify removes data attributes, mustaches and ERB
   */
  var SAFE_FOR_TEMPLATES = false;

  /* Decide if document with <html>... should be returned */
  var WHOLE_DOCUMENT = false;

  /* Track whether config is already set on this instance of DOMPurify. */
  var SET_CONFIG = false;

  /* Decide if all elements (e.g. style, script) must be children of
   * document.body. By default, browsers might move them to document.head */
  var FORCE_BODY = false;

  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html string.
   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
   */
  var RETURN_DOM = false;

  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html string */
  var RETURN_DOM_FRAGMENT = false;

  /* If `RETURN_DOM` or `RETURN_DOM_FRAGMENT` is enabled, decide if the returned DOM
   * `Node` is imported into the current `Document`. If this flag is not enabled the
   * `Node` will belong (its ownerDocument) to a fresh `HTMLDocument`, created by
   * DOMPurify. */
  var RETURN_DOM_IMPORT = false;

  /* Output should be free from DOM clobbering attacks? */
  var SANITIZE_DOM = true;

  /* Keep element content when removing element? */
  var KEEP_CONTENT = true;

  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead
   * of importing it into a new Document and returning a sanitized copy */
  var IN_PLACE = false;

  /* Allow usage of profiles like html, svg and mathMl */
  var USE_PROFILES = {};

  /* Tags to ignore content of when KEEP_CONTENT is true */
  var FORBID_CONTENTS = addToSet({}, ['audio', 'head', 'math', 'script', 'style', 'template', 'svg', 'video']);

  /* Tags that are safe for data: URIs */
  var DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image']);

  /* Attributes safe for values like "javascript:" */
  var URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'summary', 'title', 'value', 'style', 'xmlns']);

  /* Keep a reference to config to pass to hooks */
  var CONFIG = null;

  /* Ideally, do not touch anything below this line */
  /* ______________________________________________ */

  var formElement = document.createElement('form');

  /**
   * _parseConfig
   *
   * @param  {Object} cfg optional config literal
   */
  // eslint-disable-next-line complexity
  var _parseConfig = function _parseConfig(cfg) {
    /* Shield configuration object from tampering */
    if ((typeof cfg === 'undefined' ? 'undefined' : _typeof(cfg)) !== 'object') {
      cfg = {};
    }
    /* Set configuration parameters */
    ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS) : DEFAULT_ALLOWED_TAGS;
    ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR) : DEFAULT_ALLOWED_ATTR;
    FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS) : {};
    FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR) : {};
    USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;
    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true
    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
    SAFE_FOR_JQUERY = cfg.SAFE_FOR_JQUERY || false; // Default false
    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
    RETURN_DOM = cfg.RETURN_DOM || false; // Default false
    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
    RETURN_DOM_IMPORT = cfg.RETURN_DOM_IMPORT || false; // Default false
    FORCE_BODY = cfg.FORCE_BODY || false; // Default false
    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
    IN_PLACE = cfg.IN_PLACE || false; // Default false

    IS_ALLOWED_URI$$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$$1;

    if (SAFE_FOR_TEMPLATES) {
      ALLOW_DATA_ATTR = false;
    }

    if (RETURN_DOM_FRAGMENT) {
      RETURN_DOM = true;
    }

    /* Parse profile info */
    if (USE_PROFILES) {
      ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(text)));
      ALLOWED_ATTR = [];
      if (USE_PROFILES.html === true) {
        addToSet(ALLOWED_TAGS, html);
        addToSet(ALLOWED_ATTR, html$1);
      }
      if (USE_PROFILES.svg === true) {
        addToSet(ALLOWED_TAGS, svg);
        addToSet(ALLOWED_ATTR, svg$1);
        addToSet(ALLOWED_ATTR, xml);
      }
      if (USE_PROFILES.svgFilters === true) {
        addToSet(ALLOWED_TAGS, svgFilters);
        addToSet(ALLOWED_ATTR, svg$1);
        addToSet(ALLOWED_ATTR, xml);
      }
      if (USE_PROFILES.mathMl === true) {
        addToSet(ALLOWED_TAGS, mathMl);
        addToSet(ALLOWED_ATTR, mathMl$1);
        addToSet(ALLOWED_ATTR, xml);
      }
    }

    /* Merge configuration parameters */
    if (cfg.ADD_TAGS) {
      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
        ALLOWED_TAGS = clone(ALLOWED_TAGS);
      }
      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS);
    }
    if (cfg.ADD_ATTR) {
      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
        ALLOWED_ATTR = clone(ALLOWED_ATTR);
      }
      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR);
    }
    if (cfg.ADD_URI_SAFE_ATTR) {
      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR);
    }

    /* Add #text in case KEEP_CONTENT is set to true */
    if (KEEP_CONTENT) {
      ALLOWED_TAGS['#text'] = true;
    }

    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */
    if (WHOLE_DOCUMENT) {
      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);
    }

    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286 */
    if (ALLOWED_TAGS.table) {
      addToSet(ALLOWED_TAGS, ['tbody']);
    }

    // Prevent further manipulation of configuration.
    // Not available in IE8, Safari 5, etc.
    if (Object && 'freeze' in Object) {
      Object.freeze(cfg);
    }

    CONFIG = cfg;
  };

  /**
   * _forceRemove
   *
   * @param  {Node} node a DOM node
   */
  var _forceRemove = function _forceRemove(node) {
    DOMPurify.removed.push({ element: node });
    try {
      node.parentNode.removeChild(node);
    } catch (err) {
      node.outerHTML = '';
    }
  };

  /**
   * _removeAttribute
   *
   * @param  {String} name an Attribute name
   * @param  {Node} node a DOM node
   */
  var _removeAttribute = function _removeAttribute(name, node) {
    try {
      DOMPurify.removed.push({
        attribute: node.getAttributeNode(name),
        from: node
      });
    } catch (err) {
      DOMPurify.removed.push({
        attribute: null,
        from: node
      });
    }
    node.removeAttribute(name);
  };

  /**
   * _initDocument
   *
   * @param  {String} dirty a string of dirty markup
   * @return {Document} a DOM, filled with the dirty markup
   */
  var _initDocument = function _initDocument(dirty) {
    /* Create a HTML document */
    var doc = void 0;

    if (FORCE_BODY) {
      dirty = '<remove></remove>' + dirty;
    }

    /* Use DOMParser to workaround Firefox bug (see comment below) */
    if (useDOMParser) {
      try {
        doc = new DOMParser().parseFromString(dirty, 'text/html');
      } catch (err) {}
    }

    /* Remove title to fix an mXSS bug in older MS Edge */
    if (removeTitle) {
      addToSet(FORBID_TAGS, ['title']);
    }

    /* Otherwise use createHTMLDocument, because DOMParser is unsafe in
    Safari (see comment below) */
    if (!doc || !doc.documentElement) {
      doc = implementation.createHTMLDocument('');
      var _doc = doc,
          body = _doc.body;

      body.parentNode.removeChild(body.parentNode.firstElementChild);
      body.outerHTML = dirty;
    }

    /* Work on whole document or just its body */
    return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];
  };

  // Firefox uses a different parser for innerHTML rather than
  // DOMParser (see https://bugzilla.mozilla.org/show_bug.cgi?id=1205631)
  // which means that you *must* use DOMParser, otherwise the output may
  // not be safe if used in a document.write context later.
  //
  // So we feature detect the Firefox bug and use the DOMParser if necessary.
  //
  // MS Edge, in older versions, is affected by an mXSS behavior. The second
  // check tests for the behavior and fixes it if necessary.
  if (DOMPurify.isSupported) {
    (function () {
      try {
        var doc = _initDocument('<svg><p><style><img src="</style><img src=x onerror=alert(1)//">');
        if (doc.querySelector('svg img')) {
          useDOMParser = true;
        }
      } catch (err) {}
    })();
    (function () {
      try {
        var doc = _initDocument('<x/><title>&lt;/title&gt;&lt;img&gt;');
        if (doc.querySelector('title').textContent.match(/<\/title/)) {
          removeTitle = true;
        }
      } catch (err) {}
    })();
  }

  /**
   * _createIterator
   *
   * @param  {Document} root document/fragment to create iterator for
   * @return {Iterator} iterator instance
   */
  var _createIterator = function _createIterator(root) {
    return createNodeIterator.call(root.ownerDocument || root, root, NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, function () {
      return NodeFilter.FILTER_ACCEPT;
    }, false);
  };

  /**
   * _isClobbered
   *
   * @param  {Node} elm element to check for clobbering attacks
   * @return {Boolean} true if clobbered, false if safe
   */
  var _isClobbered = function _isClobbered(elm) {
    if (elm instanceof Text || elm instanceof Comment) {
      return false;
    }
    if (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function') {
      return true;
    }
    return false;
  };

  /**
   * _isNode
   *
   * @param  {Node} obj object to check whether it's a DOM node
   * @return {Boolean} true is object is a DOM node
   */
  var _isNode = function _isNode(obj) {
    return (typeof Node === 'undefined' ? 'undefined' : _typeof(Node)) === 'object' ? obj instanceof Node : obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.nodeType === 'number' && typeof obj.nodeName === 'string';
  };

  /**
   * _executeHook
   * Execute user configurable hooks
   *
   * @param  {String} entryPoint  Name of the hook's entry point
   * @param  {Node} currentNode node to work on with the hook
   * @param  {Object} data additional hook parameters
   */
  var _executeHook = function _executeHook(entryPoint, currentNode, data) {
    if (!hooks[entryPoint]) {
      return;
    }

    hooks[entryPoint].forEach(function (hook) {
      hook.call(DOMPurify, currentNode, data, CONFIG);
    });
  };

  /**
   * _sanitizeElements
   *
   * @protect nodeName
   * @protect textContent
   * @protect removeChild
   *
   * @param   {Node} currentNode to check for permission to exist
   * @return  {Boolean} true if node was killed, false if left alive
   */
  var _sanitizeElements = function _sanitizeElements(currentNode) {
    var content = void 0;

    /* Execute a hook if present */
    _executeHook('beforeSanitizeElements', currentNode, null);

    /* Check if element is clobbered or can clobber */
    if (_isClobbered(currentNode)) {
      _forceRemove(currentNode);
      return true;
    }

    /* Now let's check the element's type and name */
    var tagName = currentNode.nodeName.toLowerCase();

    /* Execute a hook if present */
    _executeHook('uponSanitizeElement', currentNode, {
      tagName: tagName,
      allowedTags: ALLOWED_TAGS
    });

    /* Remove element if anything forbids its presence */
    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
      /* Keep content except for black-listed elements */
      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName] && typeof currentNode.insertAdjacentHTML === 'function') {
        try {
          currentNode.insertAdjacentHTML('AfterEnd', currentNode.innerHTML);
        } catch (err) {}
      }
      _forceRemove(currentNode);
      return true;
    }

    /* Convert markup to cover jQuery behavior */
    if (SAFE_FOR_JQUERY && !currentNode.firstElementChild && (!currentNode.content || !currentNode.content.firstElementChild) && /</g.test(currentNode.textContent)) {
      DOMPurify.removed.push({ element: currentNode.cloneNode() });
      if (currentNode.innerHTML) {
        currentNode.innerHTML = currentNode.innerHTML.replace(/</g, '&lt;');
      } else {
        currentNode.innerHTML = currentNode.textContent.replace(/</g, '&lt;');
      }
    }

    /* Sanitize element content to be template-safe */
    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
      /* Get the element's text content */
      content = currentNode.textContent;
      content = content.replace(MUSTACHE_EXPR$$1, ' ');
      content = content.replace(ERB_EXPR$$1, ' ');
      if (currentNode.textContent !== content) {
        DOMPurify.removed.push({ element: currentNode.cloneNode() });
        currentNode.textContent = content;
      }
    }

    /* Execute a hook if present */
    _executeHook('afterSanitizeElements', currentNode, null);

    return false;
  };

  /**
   * _isValidAttribute
   *
   * @param  {string} lcTag Lowercase tag name of containing element.
   * @param  {string} lcName Lowercase attribute name.
   * @param  {string} value Attribute value.
   * @return {Boolean} Returns true if `value` is valid, otherwise false.
   */
  var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
    /* Make sure attribute cannot clobber */
    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
      return false;
    }

    /* Sanitize attribute content to be template-safe */
    if (SAFE_FOR_TEMPLATES) {
      value = value.replace(MUSTACHE_EXPR$$1, ' ');
      value = value.replace(ERB_EXPR$$1, ' ');
    }

    /* Allow valid data-* attributes: At least one character after "-"
        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
        We don't need to check the value; it's always URI safe. */
    if (ALLOW_DATA_ATTR && DATA_ATTR$$1.test(lcName)) {
      // This attribute is safe
    } else if (ALLOW_ARIA_ATTR && ARIA_ATTR$$1.test(lcName)) {
      // This attribute is safe
      /* Otherwise, check the name is permitted */
    } else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
      return false;

      /* Check value is safe. First, is attr inert? If so, is safe */
    } else if (URI_SAFE_ATTRIBUTES[lcName]) {
      // This attribute is safe
      /* Check no script, data or unknown possibly unsafe URI
        unless we know URI values are safe for that attribute */
    } else if (IS_ALLOWED_URI$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {
      // This attribute is safe
      /* Keep image data URIs alive if src/xlink:href is allowed */
      /* Further prevent gadget XSS for dynamically built script tags */
    } else if ((lcName === 'src' || lcName === 'xlink:href') && lcTag !== 'script' && value.indexOf('data:') === 0 && DATA_URI_TAGS[lcTag]) {
      // This attribute is safe
      /* Allow unknown protocols: This provides support for links that
        are handled by protocol handlers which may be unknown ahead of
        time, e.g. fb:, spotify: */
    } else if (ALLOW_UNKNOWN_PROTOCOLS && !IS_SCRIPT_OR_DATA$$1.test(value.replace(ATTR_WHITESPACE$$1, ''))) {
      // This attribute is safe
      /* Check for binary attributes */
      // eslint-disable-next-line no-negated-condition
    } else if (!value) {
      // Binary attributes are safe at this point
      /* Anything else, presume unsafe, do not add it back */
    } else {
      return false;
    }
    return true;
  };

  /**
   * _sanitizeAttributes
   *
   * @protect attributes
   * @protect nodeName
   * @protect removeAttribute
   * @protect setAttribute
   *
   * @param  {Node} node to sanitize
   */
  // eslint-disable-next-line complexity
  var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
    var attr = void 0;
    var value = void 0;
    var lcName = void 0;
    var idAttr = void 0;
    var l = void 0;
    /* Execute a hook if present */
    _executeHook('beforeSanitizeAttributes', currentNode, null);

    var attributes = currentNode.attributes;

    /* Check if we have attributes; if not we might have a text node */

    if (!attributes) {
      return;
    }

    var hookEvent = {
      attrName: '',
      attrValue: '',
      keepAttr: true,
      allowedAttributes: ALLOWED_ATTR
    };
    l = attributes.length;

    /* Go backwards over all attributes; safely remove bad ones */
    while (l--) {
      attr = attributes[l];
      var _attr = attr,
          name = _attr.name,
          namespaceURI = _attr.namespaceURI;

      value = attr.value.trim();
      lcName = name.toLowerCase();

      /* Execute a hook if present */
      hookEvent.attrName = lcName;
      hookEvent.attrValue = value;
      hookEvent.keepAttr = true;
      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);
      value = hookEvent.attrValue;

      /* Remove attribute */
      // Safari (iOS + Mac), last tested v8.0.5, crashes if you try to
      // remove a "name" attribute from an <img> tag that has an "id"
      // attribute at the time.
      if (lcName === 'name' && currentNode.nodeName === 'IMG' && attributes.id) {
        idAttr = attributes.id;
        attributes = Array.prototype.slice.apply(attributes);
        _removeAttribute('id', currentNode);
        _removeAttribute(name, currentNode);
        if (attributes.indexOf(idAttr) > l) {
          currentNode.setAttribute('id', idAttr.value);
        }
      } else if (
      // This works around a bug in Safari, where input[type=file]
      // cannot be dynamically set after type has been removed
      currentNode.nodeName === 'INPUT' && lcName === 'type' && value === 'file' && (ALLOWED_ATTR[lcName] || !FORBID_ATTR[lcName])) {
        continue;
      } else {
        // This avoids a crash in Safari v9.0 with double-ids.
        // The trick is to first set the id to be empty and then to
        // remove the attribute
        if (name === 'id') {
          currentNode.setAttribute(name, '');
        }
        _removeAttribute(name, currentNode);
      }

      /* Did the hooks approve of the attribute? */
      if (!hookEvent.keepAttr) {
        continue;
      }

      /* Is `value` valid for this attribute? */
      var lcTag = currentNode.nodeName.toLowerCase();
      if (!_isValidAttribute(lcTag, lcName, value)) {
        continue;
      }

      /* Handle invalid data-* attribute set by try-catching it */
      try {
        if (namespaceURI) {
          currentNode.setAttributeNS(namespaceURI, name, value);
        } else {
          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */
          currentNode.setAttribute(name, value);
        }
        DOMPurify.removed.pop();
      } catch (err) {}
    }

    /* Execute a hook if present */
    _executeHook('afterSanitizeAttributes', currentNode, null);
  };

  /**
   * _sanitizeShadowDOM
   *
   * @param  {DocumentFragment} fragment to iterate over recursively
   */
  var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
    var shadowNode = void 0;
    var shadowIterator = _createIterator(fragment);

    /* Execute a hook if present */
    _executeHook('beforeSanitizeShadowDOM', fragment, null);

    while (shadowNode = shadowIterator.nextNode()) {
      /* Execute a hook if present */
      _executeHook('uponSanitizeShadowNode', shadowNode, null);

      /* Sanitize tags and elements */
      if (_sanitizeElements(shadowNode)) {
        continue;
      }

      /* Deep shadow DOM detected */
      if (shadowNode.content instanceof DocumentFragment) {
        _sanitizeShadowDOM(shadowNode.content);
      }

      /* Check attributes, sanitize if necessary */
      _sanitizeAttributes(shadowNode);
    }

    /* Execute a hook if present */
    _executeHook('afterSanitizeShadowDOM', fragment, null);
  };

  /**
   * Sanitize
   * Public method providing core sanitation functionality
   *
   * @param {String|Node} dirty string or DOM node
   * @param {Object} configuration object
   */
  // eslint-disable-next-line complexity
  DOMPurify.sanitize = function (dirty, cfg) {
    var body = void 0;
    var importedNode = void 0;
    var currentNode = void 0;
    var oldNode = void 0;
    var returnNode = void 0;
    /* Make sure we have a string to sanitize.
      DO NOT return early, as this will return the wrong type if
      the user has requested a DOM object rather than a string */
    if (!dirty) {
      dirty = '<!-->';
    }

    /* Stringify, in case dirty is an object */
    if (typeof dirty !== 'string' && !_isNode(dirty)) {
      // eslint-disable-next-line no-negated-condition
      if (typeof dirty.toString !== 'function') {
        throw new TypeError('toString is not a function');
      } else {
        dirty = dirty.toString();
        if (typeof dirty !== 'string') {
          throw new TypeError('dirty is not a string, aborting');
        }
      }
    }

    /* Check we can run. Otherwise fall back or ignore */
    if (!DOMPurify.isSupported) {
      if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {
        if (typeof dirty === 'string') {
          return window.toStaticHTML(dirty);
        }
        if (_isNode(dirty)) {
          return window.toStaticHTML(dirty.outerHTML);
        }
      }
      return dirty;
    }

    /* Assign config vars */
    if (!SET_CONFIG) {
      _parseConfig(cfg);
    }

    /* Clean up removed elements */
    DOMPurify.removed = [];

    if (IN_PLACE) {
      /* No special handling necessary for in-place sanitization */
    } else if (dirty instanceof Node) {
      /* If dirty is a DOM element, append to an empty document to avoid
         elements being stripped by the parser */
      body = _initDocument('<!-->');
      importedNode = body.ownerDocument.importNode(dirty, true);
      if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {
        /* Node is already a body, use as is */
        body = importedNode;
      } else {
        body.appendChild(importedNode);
      }
    } else {
      /* Exit directly if we have nothing to do */
      if (!RETURN_DOM && !WHOLE_DOCUMENT && dirty.indexOf('<') === -1) {
        return dirty;
      }

      /* Initialize the document to work on */
      body = _initDocument(dirty);

      /* Check we have a DOM node from the data */
      if (!body) {
        return RETURN_DOM ? null : '';
      }
    }

    /* Remove first element node (ours) if FORCE_BODY is set */
    if (body && FORCE_BODY) {
      _forceRemove(body.firstChild);
    }

    /* Get node iterator */
    var nodeIterator = _createIterator(IN_PLACE ? dirty : body);

    /* Now start iterating over the created document */
    while (currentNode = nodeIterator.nextNode()) {
      /* Fix IE's strange behavior with manipulated textNodes #89 */
      if (currentNode.nodeType === 3 && currentNode === oldNode) {
        continue;
      }

      /* Sanitize tags and elements */
      if (_sanitizeElements(currentNode)) {
        continue;
      }

      /* Shadow DOM detected, sanitize it */
      if (currentNode.content instanceof DocumentFragment) {
        _sanitizeShadowDOM(currentNode.content);
      }

      /* Check attributes, sanitize if necessary */
      _sanitizeAttributes(currentNode);

      oldNode = currentNode;
    }

    /* If we sanitized `dirty` in-place, return it. */
    if (IN_PLACE) {
      return dirty;
    }

    /* Return sanitized string or DOM */
    if (RETURN_DOM) {
      if (RETURN_DOM_FRAGMENT) {
        returnNode = createDocumentFragment.call(body.ownerDocument);

        while (body.firstChild) {
          returnNode.appendChild(body.firstChild);
        }
      } else {
        returnNode = body;
      }

      if (RETURN_DOM_IMPORT) {
        /* AdoptNode() is not used because internal state is not reset
               (e.g. the past names map of a HTMLFormElement), this is safe
               in theory but we would rather not risk another attack vector.
               The state that is cloned by importNode() is explicitly defined
               by the specs. */
        returnNode = importNode.call(originalDocument, returnNode, true);
      }

      return returnNode;
    }

    return WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
  };

  /**
   * Public method to set the configuration once
   * setConfig
   *
   * @param {Object} cfg configuration object
   */
  DOMPurify.setConfig = function (cfg) {
    _parseConfig(cfg);
    SET_CONFIG = true;
  };

  /**
   * Public method to remove the configuration
   * clearConfig
   *
   */
  DOMPurify.clearConfig = function () {
    CONFIG = null;
    SET_CONFIG = false;
  };

  /**
   * Public method to check if an attribute value is valid.
   * Uses last set config, if any. Otherwise, uses config defaults.
   * isValidAttribute
   *
   * @param  {string} tag Tag name of containing element.
   * @param  {string} attr Attribute name.
   * @param  {string} value Attribute value.
   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.
   */
  DOMPurify.isValidAttribute = function (tag, attr, value) {
    /* Initialize shared config vars if necessary. */
    if (!CONFIG) {
      _parseConfig({});
    }
    var lcTag = tag.toLowerCase();
    var lcName = attr.toLowerCase();
    return _isValidAttribute(lcTag, lcName, value);
  };

  /**
   * AddHook
   * Public method to add DOMPurify hooks
   *
   * @param {String} entryPoint entry point for the hook to add
   * @param {Function} hookFunction function to execute
   */
  DOMPurify.addHook = function (entryPoint, hookFunction) {
    if (typeof hookFunction !== 'function') {
      return;
    }
    hooks[entryPoint] = hooks[entryPoint] || [];
    hooks[entryPoint].push(hookFunction);
  };

  /**
   * RemoveHook
   * Public method to remove a DOMPurify hook at a given entryPoint
   * (pops it from the stack of hooks if more are present)
   *
   * @param {String} entryPoint entry point for the hook to remove
   */
  DOMPurify.removeHook = function (entryPoint) {
    if (hooks[entryPoint]) {
      hooks[entryPoint].pop();
    }
  };

  /**
   * RemoveHooks
   * Public method to remove all DOMPurify hooks at a given entryPoint
   *
   * @param  {String} entryPoint entry point for the hooks to remove
   */
  DOMPurify.removeHooks = function (entryPoint) {
    if (hooks[entryPoint]) {
      hooks[entryPoint] = [];
    }
  };

  /**
   * RemoveAllHooks
   * Public method to remove all DOMPurify hooks
   *
   */
  DOMPurify.removeAllHooks = function () {
    hooks = {};
  };

  return DOMPurify;
}

var purify = createDOMPurify();

return purify;

})));
//# sourceMappingURL=purify.js.map
    define('simditor', ["jquery","simple-module","simple-hotkeys","simple-uploader","dompurify"], function ($, SimpleModule, simpleHotkeys, simpleUploader, DOMPurify) {
      return (root['Simditor'] = factory($, SimpleModule, simpleHotkeys, simpleUploader, DOMPurify));
    module.exports = factory(require("jquery"),require("simple-module"),require("simple-hotkeys"),require("simple-uploader"),require("dompurify"));
    root['Simditor'] = factory(jQuery,SimpleModule,simple.hotkeys,simple.uploader,window.DOMPurify);
}(this, function ($, SimpleModule, simpleHotkeys, simpleUploader, DOMPurify) {
        _this.editor.body.get(0).innerHTML = DOMPurify ? DOMPurify.sanitize(state.html) : state.html;
    this.body.get(0).innerHTML = DOMPurify ? DOMPurify.sanitize(val) : val;
        } else if (_this.files.length === 0) {
<script type="text/javascript" src="assets/scripts/dompurify.js"></script>
#Install Dependencies
Install grunt and other dependencies:
$ npm i
Click [Here](https://github.com/mycolorway/simditor/releases) to download the zip file. You can also install Simditor npm:
`$ npm install simditor`
<script type="text/javascript" src="[script path]/dompurify.js"></script>
* [dompurify.js](https://github.com/cure53/DOMPurify) is used to purify html tags for preventing xss attacks.
* a button extension: [simditor-mark](https://github.com/mycolorway/simditor-mark)
<script type="text/javascript" src="assets/scripts/dompurify.js"></script>
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Jasmine Spec Runner</title>
  <link rel="shortcut icon" type="image/png" href=".grunt/grunt-contrib-jasmine/jasmine_favicon.png">

  <link rel="stylesheet" type="text/css" href="../.grunt/grunt-contrib-jasmine/jasmine.css">

  <link rel="stylesheet" type="text/css" href="../styles/simditor.css">


</head>
<body>

  
  <script src="../.grunt/grunt-contrib-jasmine/es5-shim.js"></script>
  
  <script src="../.grunt/grunt-contrib-jasmine/jasmine.js"></script>
  
  <script src="../.grunt/grunt-contrib-jasmine/jasmine-html.js"></script>
  
  <script src="../.grunt/grunt-contrib-jasmine/json2.js"></script>
  
  <script src="../.grunt/grunt-contrib-jasmine/boot.js"></script>
  
  <script src="../node_modules/jquery/dist/jquery.min.js"></script>
  
  <script src="../node_modules/simple-module/lib/module.js"></script>
  
  <script src="../node_modules/simple-uploader/lib/uploader.js"></script>
  
  <script src="../node_modules/simple-hotkeys/lib/hotkeys.js"></script>
  
  <script src="../node_modules/dompurify/dist/purify.js"></script>
  
  <script src="../lib/simditor.js"></script>
  
  <script src="core-spec.js"></script>
  
  <script src="formatter-spec.js"></script>
  
  <script src="indentation-spec.js"></script>
  
  <script src="util.js"></script>
  
  <script src="buttons/alignment-spec.js"></script>
  
  <script src="buttons/bold-spec.js"></script>
  
  <script src="buttons/code-spec.js"></script>
  
  <script src="buttons/font-scale-spec.js"></script>
  
  <script src="buttons/table-spec.js"></script>
  
  <script src="buttons/title-spec.js"></script>
  
  <script src="../.grunt/grunt-contrib-jasmine/reporter.js"></script>
  

</body>
</html>
      @editor.body.get(0).innerHTML = if DOMPurify then DOMPurify.sanitize(state.html) else state.html

    sizeMap = [
    @body.get(0).innerHTML = if DOMPurify then DOMPurify.sanitize(val) else val


* 2018-11-09