/******/ (function(modules) { // webpackBootstrap
/******/ 	// The module cache
/******/ 	var installedModules = {};

/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {

/******/ 		// Check if module is in cache
/******/ 		if(installedModules[moduleId])
/******/ 			return installedModules[moduleId].exports;

/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = installedModules[moduleId] = {
/******/ 			exports: {},
/******/ 			id: moduleId,
/******/ 			loaded: false
/******/ 		};

/******/ 		// Execute the module function
/******/ 		modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);

/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;

/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}


/******/ 	// expose the modules object (__webpack_modules__)
/******/ 	__webpack_require__.m = modules;

/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = installedModules;

/******/ 	// __webpack_public_path__
/******/ 	__webpack_require__.p = "";

/******/ 	// Load entry module and return exports
/******/ 	return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	var _react = __webpack_require__(18);

	var _react2 = _interopRequireDefault(_react);

	var _RootComponent = __webpack_require__(173);

	var _RootComponent2 = _interopRequireDefault(_RootComponent);

	var $ = _react2['default'].createElement;

	var App = function App() {
	  _classCallCheck(this, App);

	  _react2['default'].render($(_RootComponent2['default'], {}), document.body);
	};

	exports['default'] = App;

	new App();
	module.exports = exports['default'];

/***/ },
/* 1 */,
/* 2 */
/***/ function(module, exports) {

	module.exports = require('path');

/***/ },
/* 3 */,
/* 4 */,
/* 5 */,
/* 6 */,
/* 7 */,
/* 8 */
/***/ function(module, exports) {

	// Copyright Joyent, Inc. and other Node contributors.
	//
	// Permission is hereby granted, free of charge, to any person obtaining a
	// copy of this software and associated documentation files (the
	// "Software"), to deal in the Software without restriction, including
	// without limitation the rights to use, copy, modify, merge, publish,
	// distribute, sublicense, and/or sell copies of the Software, and to permit
	// persons to whom the Software is furnished to do so, subject to the
	// following conditions:
	//
	// The above copyright notice and this permission notice shall be included
	// in all copies or substantial portions of the Software.
	//
	// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
	// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
	// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
	// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
	// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
	// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
	// USE OR OTHER DEALINGS IN THE SOFTWARE.

	'use strict';

	function EventEmitter() {
	  this._events = this._events || {};
	  this._maxListeners = this._maxListeners || undefined;
	}
	module.exports = EventEmitter;

	// Backwards-compat with node 0.10.x
	EventEmitter.EventEmitter = EventEmitter;

	EventEmitter.prototype._events = undefined;
	EventEmitter.prototype._maxListeners = undefined;

	// By default EventEmitters will print a warning if more than 10 listeners are
	// added to it. This is a useful default which helps finding memory leaks.
	EventEmitter.defaultMaxListeners = 10;

	// Obviously not all Emitters should be limited to 10. This function allows
	// that to be increased. Set to zero for unlimited.
	EventEmitter.prototype.setMaxListeners = function (n) {
	  if (!isNumber(n) || n < 0 || isNaN(n)) throw TypeError('n must be a positive number');
	  this._maxListeners = n;
	  return this;
	};

	EventEmitter.prototype.emit = function (type) {
	  var er, handler, len, args, i, listeners;

	  if (!this._events) this._events = {};

	  // If there is no 'error' event listener then throw.
	  if (type === 'error') {
	    if (!this._events.error || isObject(this._events.error) && !this._events.error.length) {
	      er = arguments[1];
	      if (er instanceof Error) {
	        throw er; // Unhandled 'error' event
	      }
	      throw TypeError('Uncaught, unspecified "error" event.');
	    }
	  }

	  handler = this._events[type];

	  if (isUndefined(handler)) return false;

	  if (isFunction(handler)) {
	    switch (arguments.length) {
	      // fast cases
	      case 1:
	        handler.call(this);
	        break;
	      case 2:
	        handler.call(this, arguments[1]);
	        break;
	      case 3:
	        handler.call(this, arguments[1], arguments[2]);
	        break;
	      // slower
	      default:
	        len = arguments.length;
	        args = new Array(len - 1);
	        for (i = 1; i < len; i++) args[i - 1] = arguments[i];
	        handler.apply(this, args);
	    }
	  } else if (isObject(handler)) {
	    len = arguments.length;
	    args = new Array(len - 1);
	    for (i = 1; i < len; i++) args[i - 1] = arguments[i];

	    listeners = handler.slice();
	    len = listeners.length;
	    for (i = 0; i < len; i++) listeners[i].apply(this, args);
	  }

	  return true;
	};

	EventEmitter.prototype.addListener = function (type, listener) {
	  var m;

	  if (!isFunction(listener)) throw TypeError('listener must be a function');

	  if (!this._events) this._events = {};

	  // To avoid recursion in the case that type === "newListener"! Before
	  // adding it to the listeners, first emit "newListener".
	  if (this._events.newListener) this.emit('newListener', type, isFunction(listener.listener) ? listener.listener : listener);

	  if (!this._events[type])
	    // Optimize the case of one listener. Don't need the extra array object.
	    this._events[type] = listener;else if (isObject(this._events[type]))
	    // If we've already got an array, just append.
	    this._events[type].push(listener);else
	    // Adding the second element, need to change to array.
	    this._events[type] = [this._events[type], listener];

	  // Check for listener leak
	  if (isObject(this._events[type]) && !this._events[type].warned) {
	    var m;
	    if (!isUndefined(this._maxListeners)) {
	      m = this._maxListeners;
	    } else {
	      m = EventEmitter.defaultMaxListeners;
	    }

	    if (m && m > 0 && this._events[type].length > m) {
	      this._events[type].warned = true;
	      console.error('(node) warning: possible EventEmitter memory ' + 'leak detected. %d listeners added. ' + 'Use emitter.setMaxListeners() to increase limit.', this._events[type].length);
	      if (typeof console.trace === 'function') {
	        // not supported in IE 10
	        console.trace();
	      }
	    }
	  }

	  return this;
	};

	EventEmitter.prototype.on = EventEmitter.prototype.addListener;

	EventEmitter.prototype.once = function (type, listener) {
	  if (!isFunction(listener)) throw TypeError('listener must be a function');

	  var fired = false;

	  function g() {
	    this.removeListener(type, g);

	    if (!fired) {
	      fired = true;
	      listener.apply(this, arguments);
	    }
	  }

	  g.listener = listener;
	  this.on(type, g);

	  return this;
	};

	// emits a 'removeListener' event iff the listener was removed
	EventEmitter.prototype.removeListener = function (type, listener) {
	  var list, position, length, i;

	  if (!isFunction(listener)) throw TypeError('listener must be a function');

	  if (!this._events || !this._events[type]) return this;

	  list = this._events[type];
	  length = list.length;
	  position = -1;

	  if (list === listener || isFunction(list.listener) && list.listener === listener) {
	    delete this._events[type];
	    if (this._events.removeListener) this.emit('removeListener', type, listener);
	  } else if (isObject(list)) {
	    for (i = length; i-- > 0;) {
	      if (list[i] === listener || list[i].listener && list[i].listener === listener) {
	        position = i;
	        break;
	      }
	    }

	    if (position < 0) return this;

	    if (list.length === 1) {
	      list.length = 0;
	      delete this._events[type];
	    } else {
	      list.splice(position, 1);
	    }

	    if (this._events.removeListener) this.emit('removeListener', type, listener);
	  }

	  return this;
	};

	EventEmitter.prototype.removeAllListeners = function (type) {
	  var key, listeners;

	  if (!this._events) return this;

	  // not listening for removeListener, no need to emit
	  if (!this._events.removeListener) {
	    if (arguments.length === 0) this._events = {};else if (this._events[type]) delete this._events[type];
	    return this;
	  }

	  // emit removeListener for all listeners on all events
	  if (arguments.length === 0) {
	    for (key in this._events) {
	      if (key === 'removeListener') continue;
	      this.removeAllListeners(key);
	    }
	    this.removeAllListeners('removeListener');
	    this._events = {};
	    return this;
	  }

	  listeners = this._events[type];

	  if (isFunction(listeners)) {
	    this.removeListener(type, listeners);
	  } else {
	    // LIFO order
	    while (listeners.length) this.removeListener(type, listeners[listeners.length - 1]);
	  }
	  delete this._events[type];

	  return this;
	};

	EventEmitter.prototype.listeners = function (type) {
	  var ret;
	  if (!this._events || !this._events[type]) ret = [];else if (isFunction(this._events[type])) ret = [this._events[type]];else ret = this._events[type].slice();
	  return ret;
	};

	EventEmitter.listenerCount = function (emitter, type) {
	  var ret;
	  if (!emitter._events || !emitter._events[type]) ret = 0;else if (isFunction(emitter._events[type])) ret = 1;else ret = emitter._events[type].length;
	  return ret;
	};

	function isFunction(arg) {
	  return typeof arg === 'function';
	}

	function isNumber(arg) {
	  return typeof arg === 'number';
	}

	function isObject(arg) {
	  return typeof arg === 'object' && arg !== null;
	}

	function isUndefined(arg) {
	  return arg === void 0;
	}

/***/ },
/* 9 */,
/* 10 */,
/* 11 */,
/* 12 */,
/* 13 */,
/* 14 */,
/* 15 */,
/* 16 */,
/* 17 */,
/* 18 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	module.exports = __webpack_require__(19);

/***/ },
/* 19 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule React
	 */

	/* globals __REACT_DEVTOOLS_GLOBAL_HOOK__*/

	'use strict';

	var EventPluginUtils = __webpack_require__(20);
	var ReactChildren = __webpack_require__(24);
	var ReactComponent = __webpack_require__(38);
	var ReactClass = __webpack_require__(53);
	var ReactContext = __webpack_require__(28);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactElement = __webpack_require__(27);
	var ReactElementValidator = __webpack_require__(48);
	var ReactDOM = __webpack_require__(56);
	var ReactDOMTextComponent = __webpack_require__(58);
	var ReactDefaultInjection = __webpack_require__(107);
	var ReactInstanceHandles = __webpack_require__(35);
	var ReactMount = __webpack_require__(83);
	var ReactPerf = __webpack_require__(44);
	var ReactPropTypes = __webpack_require__(138);
	var ReactReconciler = __webpack_require__(45);
	var ReactServerRendering = __webpack_require__(170);

	var assign = __webpack_require__(29);
	var findDOMNode = __webpack_require__(127);
	var onlyChild = __webpack_require__(172);

	ReactDefaultInjection.inject();

	var createElement = ReactElement.createElement;
	var createFactory = ReactElement.createFactory;
	var cloneElement = ReactElement.cloneElement;

	if ("production" !== process.env.NODE_ENV) {
	  createElement = ReactElementValidator.createElement;
	  createFactory = ReactElementValidator.createFactory;
	  cloneElement = ReactElementValidator.cloneElement;
	}

	var render = ReactPerf.measure('React', 'render', ReactMount.render);

	var React = {
	  Children: {
	    map: ReactChildren.map,
	    forEach: ReactChildren.forEach,
	    count: ReactChildren.count,
	    only: onlyChild
	  },
	  Component: ReactComponent,
	  DOM: ReactDOM,
	  PropTypes: ReactPropTypes,
	  initializeTouchEvents: function initializeTouchEvents(shouldUseTouch) {
	    EventPluginUtils.useTouchEvents = shouldUseTouch;
	  },
	  createClass: ReactClass.createClass,
	  createElement: createElement,
	  cloneElement: cloneElement,
	  createFactory: createFactory,
	  createMixin: function createMixin(mixin) {
	    // Currently a noop. Will be used to validate and trace mixins.
	    return mixin;
	  },
	  constructAndRenderComponent: ReactMount.constructAndRenderComponent,
	  constructAndRenderComponentByID: ReactMount.constructAndRenderComponentByID,
	  findDOMNode: findDOMNode,
	  render: render,
	  renderToString: ReactServerRendering.renderToString,
	  renderToStaticMarkup: ReactServerRendering.renderToStaticMarkup,
	  unmountComponentAtNode: ReactMount.unmountComponentAtNode,
	  isValidElement: ReactElement.isValidElement,
	  withContext: ReactContext.withContext,

	  // Hook for JSX spread, don't use this for anything else.
	  __spread: assign
	};

	// Inject the runtime into a devtools global hook regardless of browser.
	// Allows for debugging when the hook is injected on the page.
	if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.inject === 'function') {
	  __REACT_DEVTOOLS_GLOBAL_HOOK__.inject({
	    CurrentOwner: ReactCurrentOwner,
	    InstanceHandles: ReactInstanceHandles,
	    Mount: ReactMount,
	    Reconciler: ReactReconciler,
	    TextComponent: ReactDOMTextComponent
	  });
	}

	if ("production" !== process.env.NODE_ENV) {
	  var ExecutionEnvironment = __webpack_require__(67);
	  if (ExecutionEnvironment.canUseDOM && window.top === window.self) {

	    // If we're in Chrome, look for the devtools marker and provide a download
	    // link if not installed.
	    if (navigator.userAgent.indexOf('Chrome') > -1) {
	      if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined') {
	        console.debug('Download the React DevTools for a better development experience: ' + 'https://fb.me/react-devtools');
	      }
	    }

	    var expectedFeatures = [
	    // shims
	    Array.isArray, Array.prototype.every, Array.prototype.forEach, Array.prototype.indexOf, Array.prototype.map, Date.now, Function.prototype.bind, Object.keys, String.prototype.split, String.prototype.trim,

	    // shams
	    Object.create, Object.freeze];

	    for (var i = 0; i < expectedFeatures.length; i++) {
	      if (!expectedFeatures[i]) {
	        console.error('One or more ES5 shim/shams expected by React are not available: ' + 'https://fb.me/react-warning-polyfills');
	        break;
	      }
	    }
	  }
	}

	React.version = '0.13.3';

	module.exports = React;

/***/ },
/* 20 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule EventPluginUtils
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);

	var invariant = __webpack_require__(23);

	/**
	 * Injected dependencies:
	 */

	/**
	 * - `Mount`: [required] Module that can convert between React dom IDs and
	 *   actual node references.
	 */
	var injection = {
	  Mount: null,
	  injectMount: function injectMount(InjectedMount) {
	    injection.Mount = InjectedMount;
	    if ("production" !== process.env.NODE_ENV) {
	      "production" !== process.env.NODE_ENV ? invariant(InjectedMount && InjectedMount.getNode, 'EventPluginUtils.injection.injectMount(...): Injected Mount module ' + 'is missing getNode.') : invariant(InjectedMount && InjectedMount.getNode);
	    }
	  }
	};

	var topLevelTypes = EventConstants.topLevelTypes;

	function isEndish(topLevelType) {
	  return topLevelType === topLevelTypes.topMouseUp || topLevelType === topLevelTypes.topTouchEnd || topLevelType === topLevelTypes.topTouchCancel;
	}

	function isMoveish(topLevelType) {
	  return topLevelType === topLevelTypes.topMouseMove || topLevelType === topLevelTypes.topTouchMove;
	}
	function isStartish(topLevelType) {
	  return topLevelType === topLevelTypes.topMouseDown || topLevelType === topLevelTypes.topTouchStart;
	}

	var validateEventDispatches;
	if ("production" !== process.env.NODE_ENV) {
	  validateEventDispatches = function (event) {
	    var dispatchListeners = event._dispatchListeners;
	    var dispatchIDs = event._dispatchIDs;

	    var listenersIsArr = Array.isArray(dispatchListeners);
	    var idsIsArr = Array.isArray(dispatchIDs);
	    var IDsLen = idsIsArr ? dispatchIDs.length : dispatchIDs ? 1 : 0;
	    var listenersLen = listenersIsArr ? dispatchListeners.length : dispatchListeners ? 1 : 0;

	    "production" !== process.env.NODE_ENV ? invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen, 'EventPluginUtils: Invalid `event`.') : invariant(idsIsArr === listenersIsArr && IDsLen === listenersLen);
	  };
	}

	/**
	 * Invokes `cb(event, listener, id)`. Avoids using call if no scope is
	 * provided. The `(listener,id)` pair effectively forms the "dispatch" but are
	 * kept separate to conserve memory.
	 */
	function forEachEventDispatch(event, cb) {
	  var dispatchListeners = event._dispatchListeners;
	  var dispatchIDs = event._dispatchIDs;
	  if ("production" !== process.env.NODE_ENV) {
	    validateEventDispatches(event);
	  }
	  if (Array.isArray(dispatchListeners)) {
	    for (var i = 0; i < dispatchListeners.length; i++) {
	      if (event.isPropagationStopped()) {
	        break;
	      }
	      // Listeners and IDs are two parallel arrays that are always in sync.
	      cb(event, dispatchListeners[i], dispatchIDs[i]);
	    }
	  } else if (dispatchListeners) {
	    cb(event, dispatchListeners, dispatchIDs);
	  }
	}

	/**
	 * Default implementation of PluginModule.executeDispatch().
	 * @param {SyntheticEvent} SyntheticEvent to handle
	 * @param {function} Application-level callback
	 * @param {string} domID DOM id to pass to the callback.
	 */
	function executeDispatch(event, listener, domID) {
	  event.currentTarget = injection.Mount.getNode(domID);
	  var returnValue = listener(event, domID);
	  event.currentTarget = null;
	  return returnValue;
	}

	/**
	 * Standard/simple iteration through an event's collected dispatches.
	 */
	function executeDispatchesInOrder(event, cb) {
	  forEachEventDispatch(event, cb);
	  event._dispatchListeners = null;
	  event._dispatchIDs = null;
	}

	/**
	 * Standard/simple iteration through an event's collected dispatches, but stops
	 * at the first dispatch execution returning true, and returns that id.
	 *
	 * @return id of the first dispatch execution who's listener returns true, or
	 * null if no listener returned true.
	 */
	function executeDispatchesInOrderStopAtTrueImpl(event) {
	  var dispatchListeners = event._dispatchListeners;
	  var dispatchIDs = event._dispatchIDs;
	  if ("production" !== process.env.NODE_ENV) {
	    validateEventDispatches(event);
	  }
	  if (Array.isArray(dispatchListeners)) {
	    for (var i = 0; i < dispatchListeners.length; i++) {
	      if (event.isPropagationStopped()) {
	        break;
	      }
	      // Listeners and IDs are two parallel arrays that are always in sync.
	      if (dispatchListeners[i](event, dispatchIDs[i])) {
	        return dispatchIDs[i];
	      }
	    }
	  } else if (dispatchListeners) {
	    if (dispatchListeners(event, dispatchIDs)) {
	      return dispatchIDs;
	    }
	  }
	  return null;
	}

	/**
	 * @see executeDispatchesInOrderStopAtTrueImpl
	 */
	function executeDispatchesInOrderStopAtTrue(event) {
	  var ret = executeDispatchesInOrderStopAtTrueImpl(event);
	  event._dispatchIDs = null;
	  event._dispatchListeners = null;
	  return ret;
	}

	/**
	 * Execution of a "direct" dispatch - there must be at most one dispatch
	 * accumulated on the event or it is considered an error. It doesn't really make
	 * sense for an event with multiple dispatches (bubbled) to keep track of the
	 * return values at each dispatch execution, but it does tend to make sense when
	 * dealing with "direct" dispatches.
	 *
	 * @return The return value of executing the single dispatch.
	 */
	function executeDirectDispatch(event) {
	  if ("production" !== process.env.NODE_ENV) {
	    validateEventDispatches(event);
	  }
	  var dispatchListener = event._dispatchListeners;
	  var dispatchID = event._dispatchIDs;
	  "production" !== process.env.NODE_ENV ? invariant(!Array.isArray(dispatchListener), 'executeDirectDispatch(...): Invalid `event`.') : invariant(!Array.isArray(dispatchListener));
	  var res = dispatchListener ? dispatchListener(event, dispatchID) : null;
	  event._dispatchListeners = null;
	  event._dispatchIDs = null;
	  return res;
	}

	/**
	 * @param {SyntheticEvent} event
	 * @return {bool} True iff number of dispatches accumulated is greater than 0.
	 */
	function hasDispatches(event) {
	  return !!event._dispatchListeners;
	}

	/**
	 * General utilities that are useful in creating custom Event Plugins.
	 */
	var EventPluginUtils = {
	  isEndish: isEndish,
	  isMoveish: isMoveish,
	  isStartish: isStartish,

	  executeDirectDispatch: executeDirectDispatch,
	  executeDispatch: executeDispatch,
	  executeDispatchesInOrder: executeDispatchesInOrder,
	  executeDispatchesInOrderStopAtTrue: executeDispatchesInOrderStopAtTrue,
	  hasDispatches: hasDispatches,
	  injection: injection,
	  useTouchEvents: false
	};

	module.exports = EventPluginUtils;

/***/ },
/* 21 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule EventConstants
	 */

	'use strict';

	var keyMirror = __webpack_require__(22);

	var PropagationPhases = keyMirror({ bubbled: null, captured: null });

	/**
	 * Types of raw signals from the browser caught at the top level.
	 */
	var topLevelTypes = keyMirror({
	  topBlur: null,
	  topChange: null,
	  topClick: null,
	  topCompositionEnd: null,
	  topCompositionStart: null,
	  topCompositionUpdate: null,
	  topContextMenu: null,
	  topCopy: null,
	  topCut: null,
	  topDoubleClick: null,
	  topDrag: null,
	  topDragEnd: null,
	  topDragEnter: null,
	  topDragExit: null,
	  topDragLeave: null,
	  topDragOver: null,
	  topDragStart: null,
	  topDrop: null,
	  topError: null,
	  topFocus: null,
	  topInput: null,
	  topKeyDown: null,
	  topKeyPress: null,
	  topKeyUp: null,
	  topLoad: null,
	  topMouseDown: null,
	  topMouseMove: null,
	  topMouseOut: null,
	  topMouseOver: null,
	  topMouseUp: null,
	  topPaste: null,
	  topReset: null,
	  topScroll: null,
	  topSelectionChange: null,
	  topSubmit: null,
	  topTextInput: null,
	  topTouchCancel: null,
	  topTouchEnd: null,
	  topTouchMove: null,
	  topTouchStart: null,
	  topWheel: null
	});

	var EventConstants = {
	  topLevelTypes: topLevelTypes,
	  PropagationPhases: PropagationPhases
	};

	module.exports = EventConstants;

/***/ },
/* 22 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule keyMirror
	 * @typechecks static-only
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	/**
	 * Constructs an enumeration with keys equal to their value.
	 *
	 * For example:
	 *
	 *   var COLORS = keyMirror({blue: null, red: null});
	 *   var myColor = COLORS.blue;
	 *   var isColorValid = !!COLORS[myColor];
	 *
	 * The last line could not be performed if the values of the generated enum were
	 * not equal to their keys.
	 *
	 *   Input:  {key1: val1, key2: val2}
	 *   Output: {key1: key1, key2: key2}
	 *
	 * @param {object} obj
	 * @return {object}
	 */
	var keyMirror = function keyMirror(obj) {
	  var ret = {};
	  var key;
	  "production" !== process.env.NODE_ENV ? invariant(obj instanceof Object && !Array.isArray(obj), 'keyMirror(...): Argument must be an object.') : invariant(obj instanceof Object && !Array.isArray(obj));
	  for (key in obj) {
	    if (!obj.hasOwnProperty(key)) {
	      continue;
	    }
	    ret[key] = key;
	  }
	  return ret;
	};

	module.exports = keyMirror;

/***/ },
/* 23 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule invariant
	 */

	"use strict";

	/**
	 * Use invariant() to assert state which your program assumes to be true.
	 *
	 * Provide sprintf-style format (only %s is supported) and arguments
	 * to provide information about what broke and what you were
	 * expecting.
	 *
	 * The invariant message will be stripped in production, but the invariant
	 * will remain to ensure logic does not differ in production.
	 */

	var invariant = function invariant(condition, format, a, b, c, d, e, f) {
	  if ("production" !== process.env.NODE_ENV) {
	    if (format === undefined) {
	      throw new Error('invariant requires an error message argument');
	    }
	  }

	  if (!condition) {
	    var error;
	    if (format === undefined) {
	      error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
	    } else {
	      var args = [a, b, c, d, e, f];
	      var argIndex = 0;
	      error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () {
	        return args[argIndex++];
	      }));
	    }

	    error.framesToPop = 1; // we don't care about invariant's own frame
	    throw error;
	  }
	};

	module.exports = invariant;

/***/ },
/* 24 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactChildren
	 */

	'use strict';

	var PooledClass = __webpack_require__(25);
	var ReactFragment = __webpack_require__(26);

	var traverseAllChildren = __webpack_require__(34);
	var warning = __webpack_require__(31);

	var twoArgumentPooler = PooledClass.twoArgumentPooler;
	var threeArgumentPooler = PooledClass.threeArgumentPooler;

	/**
	 * PooledClass representing the bookkeeping associated with performing a child
	 * traversal. Allows avoiding binding callbacks.
	 *
	 * @constructor ForEachBookKeeping
	 * @param {!function} forEachFunction Function to perform traversal with.
	 * @param {?*} forEachContext Context to perform context with.
	 */
	function ForEachBookKeeping(forEachFunction, forEachContext) {
	  this.forEachFunction = forEachFunction;
	  this.forEachContext = forEachContext;
	}
	PooledClass.addPoolingTo(ForEachBookKeeping, twoArgumentPooler);

	function forEachSingleChild(traverseContext, child, name, i) {
	  var forEachBookKeeping = traverseContext;
	  forEachBookKeeping.forEachFunction.call(forEachBookKeeping.forEachContext, child, i);
	}

	/**
	 * Iterates through children that are typically specified as `props.children`.
	 *
	 * The provided forEachFunc(child, index) will be called for each
	 * leaf child.
	 *
	 * @param {?*} children Children tree container.
	 * @param {function(*, int)} forEachFunc.
	 * @param {*} forEachContext Context for forEachContext.
	 */
	function forEachChildren(children, forEachFunc, forEachContext) {
	  if (children == null) {
	    return children;
	  }

	  var traverseContext = ForEachBookKeeping.getPooled(forEachFunc, forEachContext);
	  traverseAllChildren(children, forEachSingleChild, traverseContext);
	  ForEachBookKeeping.release(traverseContext);
	}

	/**
	 * PooledClass representing the bookkeeping associated with performing a child
	 * mapping. Allows avoiding binding callbacks.
	 *
	 * @constructor MapBookKeeping
	 * @param {!*} mapResult Object containing the ordered map of results.
	 * @param {!function} mapFunction Function to perform mapping with.
	 * @param {?*} mapContext Context to perform mapping with.
	 */
	function MapBookKeeping(mapResult, mapFunction, mapContext) {
	  this.mapResult = mapResult;
	  this.mapFunction = mapFunction;
	  this.mapContext = mapContext;
	}
	PooledClass.addPoolingTo(MapBookKeeping, threeArgumentPooler);

	function mapSingleChildIntoContext(traverseContext, child, name, i) {
	  var mapBookKeeping = traverseContext;
	  var mapResult = mapBookKeeping.mapResult;

	  var keyUnique = !mapResult.hasOwnProperty(name);
	  if ("production" !== process.env.NODE_ENV) {
	    "production" !== process.env.NODE_ENV ? warning(keyUnique, 'ReactChildren.map(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : null;
	  }

	  if (keyUnique) {
	    var mappedChild = mapBookKeeping.mapFunction.call(mapBookKeeping.mapContext, child, i);
	    mapResult[name] = mappedChild;
	  }
	}

	/**
	 * Maps children that are typically specified as `props.children`.
	 *
	 * The provided mapFunction(child, key, index) will be called for each
	 * leaf child.
	 *
	 * TODO: This may likely break any calls to `ReactChildren.map` that were
	 * previously relying on the fact that we guarded against null children.
	 *
	 * @param {?*} children Children tree container.
	 * @param {function(*, int)} mapFunction.
	 * @param {*} mapContext Context for mapFunction.
	 * @return {object} Object containing the ordered map of results.
	 */
	function mapChildren(children, func, context) {
	  if (children == null) {
	    return children;
	  }

	  var mapResult = {};
	  var traverseContext = MapBookKeeping.getPooled(mapResult, func, context);
	  traverseAllChildren(children, mapSingleChildIntoContext, traverseContext);
	  MapBookKeeping.release(traverseContext);
	  return ReactFragment.create(mapResult);
	}

	function forEachSingleChildDummy(traverseContext, child, name, i) {
	  return null;
	}

	/**
	 * Count the number of children that are typically specified as
	 * `props.children`.
	 *
	 * @param {?*} children Children tree container.
	 * @return {number} The number of children.
	 */
	function countChildren(children, context) {
	  return traverseAllChildren(children, forEachSingleChildDummy, null);
	}

	var ReactChildren = {
	  forEach: forEachChildren,
	  map: mapChildren,
	  count: countChildren
	};

	module.exports = ReactChildren;

/***/ },
/* 25 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule PooledClass
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	/**
	 * Static poolers. Several custom versions for each potential number of
	 * arguments. A completely generic pooler is easy to implement, but would
	 * require accessing the `arguments` object. In each of these, `this` refers to
	 * the Class itself, not an instance. If any others are needed, simply add them
	 * here, or in their own files.
	 */
	var oneArgumentPooler = function oneArgumentPooler(copyFieldsFrom) {
	  var Klass = this;
	  if (Klass.instancePool.length) {
	    var instance = Klass.instancePool.pop();
	    Klass.call(instance, copyFieldsFrom);
	    return instance;
	  } else {
	    return new Klass(copyFieldsFrom);
	  }
	};

	var twoArgumentPooler = function twoArgumentPooler(a1, a2) {
	  var Klass = this;
	  if (Klass.instancePool.length) {
	    var instance = Klass.instancePool.pop();
	    Klass.call(instance, a1, a2);
	    return instance;
	  } else {
	    return new Klass(a1, a2);
	  }
	};

	var threeArgumentPooler = function threeArgumentPooler(a1, a2, a3) {
	  var Klass = this;
	  if (Klass.instancePool.length) {
	    var instance = Klass.instancePool.pop();
	    Klass.call(instance, a1, a2, a3);
	    return instance;
	  } else {
	    return new Klass(a1, a2, a3);
	  }
	};

	var fiveArgumentPooler = function fiveArgumentPooler(a1, a2, a3, a4, a5) {
	  var Klass = this;
	  if (Klass.instancePool.length) {
	    var instance = Klass.instancePool.pop();
	    Klass.call(instance, a1, a2, a3, a4, a5);
	    return instance;
	  } else {
	    return new Klass(a1, a2, a3, a4, a5);
	  }
	};

	var standardReleaser = function standardReleaser(instance) {
	  var Klass = this;
	  "production" !== process.env.NODE_ENV ? invariant(instance instanceof Klass, 'Trying to release an instance into a pool of a different type.') : invariant(instance instanceof Klass);
	  if (instance.destructor) {
	    instance.destructor();
	  }
	  if (Klass.instancePool.length < Klass.poolSize) {
	    Klass.instancePool.push(instance);
	  }
	};

	var DEFAULT_POOL_SIZE = 10;
	var DEFAULT_POOLER = oneArgumentPooler;

	/**
	 * Augments `CopyConstructor` to be a poolable class, augmenting only the class
	 * itself (statically) not adding any prototypical fields. Any CopyConstructor
	 * you give this may have a `poolSize` property, and will look for a
	 * prototypical `destructor` on instances (optional).
	 *
	 * @param {Function} CopyConstructor Constructor that can be used to reset.
	 * @param {Function} pooler Customizable pooler.
	 */
	var addPoolingTo = function addPoolingTo(CopyConstructor, pooler) {
	  var NewKlass = CopyConstructor;
	  NewKlass.instancePool = [];
	  NewKlass.getPooled = pooler || DEFAULT_POOLER;
	  if (!NewKlass.poolSize) {
	    NewKlass.poolSize = DEFAULT_POOL_SIZE;
	  }
	  NewKlass.release = standardReleaser;
	  return NewKlass;
	};

	var PooledClass = {
	  addPoolingTo: addPoolingTo,
	  oneArgumentPooler: oneArgumentPooler,
	  twoArgumentPooler: twoArgumentPooler,
	  threeArgumentPooler: threeArgumentPooler,
	  fiveArgumentPooler: fiveArgumentPooler
	};

	module.exports = PooledClass;

/***/ },
/* 26 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	* @providesModule ReactFragment
	*/

	'use strict';

	var ReactElement = __webpack_require__(27);

	var warning = __webpack_require__(31);

	/**
	 * We used to allow keyed objects to serve as a collection of ReactElements,
	 * or nested sets. This allowed us a way to explicitly key a set a fragment of
	 * components. This is now being replaced with an opaque data structure.
	 * The upgrade path is to call React.addons.createFragment({ key: value }) to
	 * create a keyed fragment. The resulting data structure is opaque, for now.
	 */

	if ("production" !== process.env.NODE_ENV) {
	  var fragmentKey = '_reactFragment';
	  var didWarnKey = '_reactDidWarn';
	  var canWarnForReactFragment = false;

	  try {
	    // Feature test. Don't even try to issue this warning if we can't use
	    // enumerable: false.

	    var dummy = function dummy() {
	      return 1;
	    };

	    Object.defineProperty({}, fragmentKey, { enumerable: false, value: true });

	    Object.defineProperty({}, 'key', { enumerable: true, get: dummy });

	    canWarnForReactFragment = true;
	  } catch (x) {}

	  var proxyPropertyAccessWithWarning = function proxyPropertyAccessWithWarning(obj, key) {
	    Object.defineProperty(obj, key, {
	      enumerable: true,
	      get: function get() {
	        "production" !== process.env.NODE_ENV ? warning(this[didWarnKey], 'A ReactFragment is an opaque type. Accessing any of its ' + 'properties is deprecated. Pass it to one of the React.Children ' + 'helpers.') : null;
	        this[didWarnKey] = true;
	        return this[fragmentKey][key];
	      },
	      set: function set(value) {
	        "production" !== process.env.NODE_ENV ? warning(this[didWarnKey], 'A ReactFragment is an immutable opaque type. Mutating its ' + 'properties is deprecated.') : null;
	        this[didWarnKey] = true;
	        this[fragmentKey][key] = value;
	      }
	    });
	  };

	  var issuedWarnings = {};

	  var didWarnForFragment = function didWarnForFragment(fragment) {
	    // We use the keys and the type of the value as a heuristic to dedupe the
	    // warning to avoid spamming too much.
	    var fragmentCacheKey = '';
	    for (var key in fragment) {
	      fragmentCacheKey += key + ':' + typeof fragment[key] + ',';
	    }
	    var alreadyWarnedOnce = !!issuedWarnings[fragmentCacheKey];
	    issuedWarnings[fragmentCacheKey] = true;
	    return alreadyWarnedOnce;
	  };
	}

	var ReactFragment = {
	  // Wrap a keyed object in an opaque proxy that warns you if you access any
	  // of its properties.
	  create: function create(object) {
	    if ("production" !== process.env.NODE_ENV) {
	      if (typeof object !== 'object' || !object || Array.isArray(object)) {
	        "production" !== process.env.NODE_ENV ? warning(false, 'React.addons.createFragment only accepts a single object.', object) : null;
	        return object;
	      }
	      if (ReactElement.isValidElement(object)) {
	        "production" !== process.env.NODE_ENV ? warning(false, 'React.addons.createFragment does not accept a ReactElement ' + 'without a wrapper object.') : null;
	        return object;
	      }
	      if (canWarnForReactFragment) {
	        var proxy = {};
	        Object.defineProperty(proxy, fragmentKey, {
	          enumerable: false,
	          value: object
	        });
	        Object.defineProperty(proxy, didWarnKey, {
	          writable: true,
	          enumerable: false,
	          value: false
	        });
	        for (var key in object) {
	          proxyPropertyAccessWithWarning(proxy, key);
	        }
	        Object.preventExtensions(proxy);
	        return proxy;
	      }
	    }
	    return object;
	  },
	  // Extract the original keyed object from the fragment opaque type. Warn if
	  // a plain object is passed here.
	  extract: function extract(fragment) {
	    if ("production" !== process.env.NODE_ENV) {
	      if (canWarnForReactFragment) {
	        if (!fragment[fragmentKey]) {
	          "production" !== process.env.NODE_ENV ? warning(didWarnForFragment(fragment), 'Any use of a keyed object should be wrapped in ' + 'React.addons.createFragment(object) before being passed as a ' + 'child.') : null;
	          return fragment;
	        }
	        return fragment[fragmentKey];
	      }
	    }
	    return fragment;
	  },
	  // Check if this is a fragment and if so, extract the keyed object. If it
	  // is a fragment-like object, warn that it should be wrapped. Ignore if we
	  // can't determine what kind of object this is.
	  extractIfFragment: function extractIfFragment(fragment) {
	    if ("production" !== process.env.NODE_ENV) {
	      if (canWarnForReactFragment) {
	        // If it is the opaque type, return the keyed object.
	        if (fragment[fragmentKey]) {
	          return fragment[fragmentKey];
	        }
	        // Otherwise, check each property if it has an element, if it does
	        // it is probably meant as a fragment, so we can warn early. Defer,
	        // the warning to extract.
	        for (var key in fragment) {
	          if (fragment.hasOwnProperty(key) && ReactElement.isValidElement(fragment[key])) {
	            // This looks like a fragment object, we should provide an
	            // early warning.
	            return ReactFragment.extract(fragment);
	          }
	        }
	      }
	    }
	    return fragment;
	  }
	};

	module.exports = ReactFragment;

/***/ },
/* 27 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactElement
	 */

	'use strict';

	var ReactContext = __webpack_require__(28);
	var ReactCurrentOwner = __webpack_require__(33);

	var assign = __webpack_require__(29);
	var warning = __webpack_require__(31);

	var RESERVED_PROPS = {
	  key: true,
	  ref: true
	};

	/**
	 * Warn for mutations.
	 *
	 * @internal
	 * @param {object} object
	 * @param {string} key
	 */
	function defineWarningProperty(object, key) {
	  Object.defineProperty(object, key, {

	    configurable: false,
	    enumerable: true,

	    get: function get() {
	      if (!this._store) {
	        return null;
	      }
	      return this._store[key];
	    },

	    set: function set(value) {
	      "production" !== process.env.NODE_ENV ? warning(false, 'Don\'t set the %s property of the React element. Instead, ' + 'specify the correct value when initially creating the element.', key) : null;
	      this._store[key] = value;
	    }

	  });
	}

	/**
	 * This is updated to true if the membrane is successfully created.
	 */
	var useMutationMembrane = false;

	/**
	 * Warn for mutations.
	 *
	 * @internal
	 * @param {object} element
	 */
	function defineMutationMembrane(prototype) {
	  try {
	    var pseudoFrozenProperties = {
	      props: true
	    };
	    for (var key in pseudoFrozenProperties) {
	      defineWarningProperty(prototype, key);
	    }
	    useMutationMembrane = true;
	  } catch (x) {
	    // IE will fail on defineProperty
	  }
	}

	/**
	 * Base constructor for all React elements. This is only used to make this
	 * work with a dynamic instanceof check. Nothing should live on this prototype.
	 *
	 * @param {*} type
	 * @param {string|object} ref
	 * @param {*} key
	 * @param {*} props
	 * @internal
	 */
	var ReactElement = function ReactElement(type, key, ref, owner, context, props) {
	  // Built-in properties that belong on the element
	  this.type = type;
	  this.key = key;
	  this.ref = ref;

	  // Record the component responsible for creating this element.
	  this._owner = owner;

	  // TODO: Deprecate withContext, and then the context becomes accessible
	  // through the owner.
	  this._context = context;

	  if ("production" !== process.env.NODE_ENV) {
	    // The validation flag and props are currently mutative. We put them on
	    // an external backing store so that we can freeze the whole object.
	    // This can be replaced with a WeakMap once they are implemented in
	    // commonly used development environments.
	    this._store = { props: props, originalProps: assign({}, props) };

	    // To make comparing ReactElements easier for testing purposes, we make
	    // the validation flag non-enumerable (where possible, which should
	    // include every environment we run tests in), so the test framework
	    // ignores it.
	    try {
	      Object.defineProperty(this._store, 'validated', {
	        configurable: false,
	        enumerable: false,
	        writable: true
	      });
	    } catch (x) {}
	    this._store.validated = false;

	    // We're not allowed to set props directly on the object so we early
	    // return and rely on the prototype membrane to forward to the backing
	    // store.
	    if (useMutationMembrane) {
	      Object.freeze(this);
	      return;
	    }
	  }

	  this.props = props;
	};

	// We intentionally don't expose the function on the constructor property.
	// ReactElement should be indistinguishable from a plain object.
	ReactElement.prototype = {
	  _isReactElement: true
	};

	if ("production" !== process.env.NODE_ENV) {
	  defineMutationMembrane(ReactElement.prototype);
	}

	ReactElement.createElement = function (type, config, children) {
	  var propName;

	  // Reserved names are extracted
	  var props = {};

	  var key = null;
	  var ref = null;

	  if (config != null) {
	    ref = config.ref === undefined ? null : config.ref;
	    key = config.key === undefined ? null : '' + config.key;
	    // Remaining properties are added to a new props object
	    for (propName in config) {
	      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
	        props[propName] = config[propName];
	      }
	    }
	  }

	  // Children can be more than one argument, and those are transferred onto
	  // the newly allocated props object.
	  var childrenLength = arguments.length - 2;
	  if (childrenLength === 1) {
	    props.children = children;
	  } else if (childrenLength > 1) {
	    var childArray = Array(childrenLength);
	    for (var i = 0; i < childrenLength; i++) {
	      childArray[i] = arguments[i + 2];
	    }
	    props.children = childArray;
	  }

	  // Resolve default props
	  if (type && type.defaultProps) {
	    var defaultProps = type.defaultProps;
	    for (propName in defaultProps) {
	      if (typeof props[propName] === 'undefined') {
	        props[propName] = defaultProps[propName];
	      }
	    }
	  }

	  return new ReactElement(type, key, ref, ReactCurrentOwner.current, ReactContext.current, props);
	};

	ReactElement.createFactory = function (type) {
	  var factory = ReactElement.createElement.bind(null, type);
	  // Expose the type on the factory and the prototype so that it can be
	  // easily accessed on elements. E.g. <Foo />.type === Foo.type.
	  // This should not be named `constructor` since this may not be the function
	  // that created the element, and it may not even be a constructor.
	  // Legacy hook TODO: Warn if this is accessed
	  factory.type = type;
	  return factory;
	};

	ReactElement.cloneAndReplaceProps = function (oldElement, newProps) {
	  var newElement = new ReactElement(oldElement.type, oldElement.key, oldElement.ref, oldElement._owner, oldElement._context, newProps);

	  if ("production" !== process.env.NODE_ENV) {
	    // If the key on the original is valid, then the clone is valid
	    newElement._store.validated = oldElement._store.validated;
	  }
	  return newElement;
	};

	ReactElement.cloneElement = function (element, config, children) {
	  var propName;

	  // Original props are copied
	  var props = assign({}, element.props);

	  // Reserved names are extracted
	  var key = element.key;
	  var ref = element.ref;

	  // Owner will be preserved, unless ref is overridden
	  var owner = element._owner;

	  if (config != null) {
	    if (config.ref !== undefined) {
	      // Silently steal the ref from the parent.
	      ref = config.ref;
	      owner = ReactCurrentOwner.current;
	    }
	    if (config.key !== undefined) {
	      key = '' + config.key;
	    }
	    // Remaining properties override existing props
	    for (propName in config) {
	      if (config.hasOwnProperty(propName) && !RESERVED_PROPS.hasOwnProperty(propName)) {
	        props[propName] = config[propName];
	      }
	    }
	  }

	  // Children can be more than one argument, and those are transferred onto
	  // the newly allocated props object.
	  var childrenLength = arguments.length - 2;
	  if (childrenLength === 1) {
	    props.children = children;
	  } else if (childrenLength > 1) {
	    var childArray = Array(childrenLength);
	    for (var i = 0; i < childrenLength; i++) {
	      childArray[i] = arguments[i + 2];
	    }
	    props.children = childArray;
	  }

	  return new ReactElement(element.type, key, ref, owner, element._context, props);
	};

	/**
	 * @param {?object} object
	 * @return {boolean} True if `object` is a valid component.
	 * @final
	 */
	ReactElement.isValidElement = function (object) {
	  // ReactTestUtils is often used outside of beforeEach where as React is
	  // within it. This leads to two different instances of React on the same
	  // page. To identify a element from a different React instance we use
	  // a flag instead of an instanceof check.
	  var isElement = !!(object && object._isReactElement);
	  // if (isElement && !(object instanceof ReactElement)) {
	  // This is an indicator that you're using multiple versions of React at the
	  // same time. This will screw with ownership and stuff. Fix it, please.
	  // TODO: We could possibly warn here.
	  // }
	  return isElement;
	};

	module.exports = ReactElement;

/***/ },
/* 28 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactContext
	 */

	'use strict';

	var assign = __webpack_require__(29);
	var emptyObject = __webpack_require__(30);
	var warning = __webpack_require__(31);

	var didWarn = false;

	/**
	 * Keeps track of the current context.
	 *
	 * The context is automatically passed down the component ownership hierarchy
	 * and is accessible via `this.context` on ReactCompositeComponents.
	 */
	var ReactContext = {

	  /**
	   * @internal
	   * @type {object}
	   */
	  current: emptyObject,

	  /**
	   * Temporarily extends the current context while executing scopedCallback.
	   *
	   * A typical use case might look like
	   *
	   *  render: function() {
	   *    var children = ReactContext.withContext({foo: 'foo'}, () => (
	   *
	   *    ));
	   *    return <div>{children}</div>;
	   *  }
	   *
	   * @param {object} newContext New context to merge into the existing context
	   * @param {function} scopedCallback Callback to run with the new context
	   * @return {ReactComponent|array<ReactComponent>}
	   */
	  withContext: function withContext(newContext, scopedCallback) {
	    if ("production" !== process.env.NODE_ENV) {
	      "production" !== process.env.NODE_ENV ? warning(didWarn, 'withContext is deprecated and will be removed in a future version. ' + 'Use a wrapper component with getChildContext instead.') : null;

	      didWarn = true;
	    }

	    var result;
	    var previousContext = ReactContext.current;
	    ReactContext.current = assign({}, previousContext, newContext);
	    try {
	      result = scopedCallback();
	    } finally {
	      ReactContext.current = previousContext;
	    }
	    return result;
	  }

	};

	module.exports = ReactContext;

/***/ },
/* 29 */
/***/ function(module, exports) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule Object.assign
	 */

	// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign

	'use strict';

	function assign(target, sources) {
	  if (target == null) {
	    throw new TypeError('Object.assign target cannot be null or undefined');
	  }

	  var to = Object(target);
	  var hasOwnProperty = Object.prototype.hasOwnProperty;

	  for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) {
	    var nextSource = arguments[nextIndex];
	    if (nextSource == null) {
	      continue;
	    }

	    var from = Object(nextSource);

	    // We don't currently support accessors nor proxies. Therefore this
	    // copy cannot throw. If we ever supported this then we must handle
	    // exceptions and side-effects. We don't support symbols so they won't
	    // be transferred.

	    for (var key in from) {
	      if (hasOwnProperty.call(from, key)) {
	        to[key] = from[key];
	      }
	    }
	  }

	  return to;
	}

	module.exports = assign;

/***/ },
/* 30 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule emptyObject
	 */

	"use strict";

	var emptyObject = {};

	if ("production" !== process.env.NODE_ENV) {
	  Object.freeze(emptyObject);
	}

	module.exports = emptyObject;

/***/ },
/* 31 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule warning
	 */

	"use strict";

	var emptyFunction = __webpack_require__(32);

	/**
	 * Similar to invariant but only logs a warning if the condition is not met.
	 * This can be used to log issues in development environments in critical
	 * paths. Removing the logging code for production environments will keep the
	 * same logic and follow the same code paths.
	 */

	var warning = emptyFunction;

	if ("production" !== process.env.NODE_ENV) {
	  warning = function (condition, format) {
	    for (var args = [], $__0 = 2, $__1 = arguments.length; $__0 < $__1; $__0++) args.push(arguments[$__0]);
	    if (format === undefined) {
	      throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument');
	    }

	    if (format.length < 10 || /^[s\W]*$/.test(format)) {
	      throw new Error('The warning format should be able to uniquely identify this ' + 'warning. Please, use a more descriptive format than: ' + format);
	    }

	    if (format.indexOf('Failed Composite propType: ') === 0) {
	      return; // Ignore CompositeComponent proptype check.
	    }

	    if (!condition) {
	      var argIndex = 0;
	      var message = 'Warning: ' + format.replace(/%s/g, function () {
	        return args[argIndex++];
	      });
	      console.warn(message);
	      try {
	        // --- Welcome to debugging React ---
	        // This error was thrown as a convenience so that you can use this stack
	        // to find the callsite that caused this warning to fire.
	        throw new Error(message);
	      } catch (x) {}
	    }
	  };
	}

	module.exports = warning;

/***/ },
/* 32 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule emptyFunction
	 */

	"use strict";

	function makeEmptyFunction(arg) {
	  return function () {
	    return arg;
	  };
	}

	/**
	 * This function accepts and discards inputs; it has no side effects. This is
	 * primarily useful idiomatically for overridable function endpoints which
	 * always need to be callable, since JS lacks a null-call idiom ala Cocoa.
	 */
	function emptyFunction() {}

	emptyFunction.thatReturns = makeEmptyFunction;
	emptyFunction.thatReturnsFalse = makeEmptyFunction(false);
	emptyFunction.thatReturnsTrue = makeEmptyFunction(true);
	emptyFunction.thatReturnsNull = makeEmptyFunction(null);
	emptyFunction.thatReturnsThis = function () {
	  return this;
	};
	emptyFunction.thatReturnsArgument = function (arg) {
	  return arg;
	};

	module.exports = emptyFunction;

/***/ },
/* 33 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactCurrentOwner
	 */

	'use strict';

	/**
	 * Keeps track of the current owner.
	 *
	 * The current owner is the component who should own any components that are
	 * currently being constructed.
	 *
	 * The depth indicate how many composite components are above this render level.
	 */
	var ReactCurrentOwner = {

	  /**
	   * @internal
	   * @type {ReactComponent}
	   */
	  current: null

	};

	module.exports = ReactCurrentOwner;

/***/ },
/* 34 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule traverseAllChildren
	 */

	'use strict';

	var ReactElement = __webpack_require__(27);
	var ReactFragment = __webpack_require__(26);
	var ReactInstanceHandles = __webpack_require__(35);

	var getIteratorFn = __webpack_require__(37);
	var invariant = __webpack_require__(23);
	var warning = __webpack_require__(31);

	var SEPARATOR = ReactInstanceHandles.SEPARATOR;
	var SUBSEPARATOR = ':';

	/**
	 * TODO: Test that a single child and an array with one item have the same key
	 * pattern.
	 */

	var userProvidedKeyEscaperLookup = {
	  '=': '=0',
	  '.': '=1',
	  ':': '=2'
	};

	var userProvidedKeyEscapeRegex = /[=.:]/g;

	var didWarnAboutMaps = false;

	function userProvidedKeyEscaper(match) {
	  return userProvidedKeyEscaperLookup[match];
	}

	/**
	 * Generate a key string that identifies a component within a set.
	 *
	 * @param {*} component A component that could contain a manual key.
	 * @param {number} index Index that is used if a manual key is not provided.
	 * @return {string}
	 */
	function getComponentKey(component, index) {
	  if (component && component.key != null) {
	    // Explicit key
	    return wrapUserProvidedKey(component.key);
	  }
	  // Implicit key determined by the index in the set
	  return index.toString(36);
	}

	/**
	 * Escape a component key so that it is safe to use in a reactid.
	 *
	 * @param {*} key Component key to be escaped.
	 * @return {string} An escaped string.
	 */
	function escapeUserProvidedKey(text) {
	  return ('' + text).replace(userProvidedKeyEscapeRegex, userProvidedKeyEscaper);
	}

	/**
	 * Wrap a `key` value explicitly provided by the user to distinguish it from
	 * implicitly-generated keys generated by a component's index in its parent.
	 *
	 * @param {string} key Value of a user-provided `key` attribute
	 * @return {string}
	 */
	function wrapUserProvidedKey(key) {
	  return '$' + escapeUserProvidedKey(key);
	}

	/**
	 * @param {?*} children Children tree container.
	 * @param {!string} nameSoFar Name of the key path so far.
	 * @param {!number} indexSoFar Number of children encountered until this point.
	 * @param {!function} callback Callback to invoke with each child found.
	 * @param {?*} traverseContext Used to pass information throughout the traversal
	 * process.
	 * @return {!number} The number of children in this subtree.
	 */
	function traverseAllChildrenImpl(children, nameSoFar, indexSoFar, callback, traverseContext) {
	  var type = typeof children;

	  if (type === 'undefined' || type === 'boolean') {
	    // All of the above are perceived as null.
	    children = null;
	  }

	  if (children === null || type === 'string' || type === 'number' || ReactElement.isValidElement(children)) {
	    callback(traverseContext, children,
	    // If it's the only child, treat the name as if it was wrapped in an array
	    // so that it's consistent if the number of children grows.
	    nameSoFar === '' ? SEPARATOR + getComponentKey(children, 0) : nameSoFar, indexSoFar);
	    return 1;
	  }

	  var child, nextName, nextIndex;
	  var subtreeCount = 0; // Count of children found in the current subtree.

	  if (Array.isArray(children)) {
	    for (var i = 0; i < children.length; i++) {
	      child = children[i];
	      nextName = (nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) + getComponentKey(child, i);
	      nextIndex = indexSoFar + subtreeCount;
	      subtreeCount += traverseAllChildrenImpl(child, nextName, nextIndex, callback, traverseContext);
	    }
	  } else {
	    var iteratorFn = getIteratorFn(children);
	    if (iteratorFn) {
	      var iterator = iteratorFn.call(children);
	      var step;
	      if (iteratorFn !== children.entries) {
	        var ii = 0;
	        while (!(step = iterator.next()).done) {
	          child = step.value;
	          nextName = (nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) + getComponentKey(child, ii++);
	          nextIndex = indexSoFar + subtreeCount;
	          subtreeCount += traverseAllChildrenImpl(child, nextName, nextIndex, callback, traverseContext);
	        }
	      } else {
	        if ("production" !== process.env.NODE_ENV) {
	          "production" !== process.env.NODE_ENV ? warning(didWarnAboutMaps, 'Using Maps as children is not yet fully supported. It is an ' + 'experimental feature that might be removed. Convert it to a ' + 'sequence / iterable of keyed ReactElements instead.') : null;
	          didWarnAboutMaps = true;
	        }
	        // Iterator will provide entry [k,v] tuples rather than values.
	        while (!(step = iterator.next()).done) {
	          var entry = step.value;
	          if (entry) {
	            child = entry[1];
	            nextName = (nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) + wrapUserProvidedKey(entry[0]) + SUBSEPARATOR + getComponentKey(child, 0);
	            nextIndex = indexSoFar + subtreeCount;
	            subtreeCount += traverseAllChildrenImpl(child, nextName, nextIndex, callback, traverseContext);
	          }
	        }
	      }
	    } else if (type === 'object') {
	      "production" !== process.env.NODE_ENV ? invariant(children.nodeType !== 1, 'traverseAllChildren(...): Encountered an invalid child; DOM ' + 'elements are not valid children of React components.') : invariant(children.nodeType !== 1);
	      var fragment = ReactFragment.extract(children);
	      for (var key in fragment) {
	        if (fragment.hasOwnProperty(key)) {
	          child = fragment[key];
	          nextName = (nameSoFar !== '' ? nameSoFar + SUBSEPARATOR : SEPARATOR) + wrapUserProvidedKey(key) + SUBSEPARATOR + getComponentKey(child, 0);
	          nextIndex = indexSoFar + subtreeCount;
	          subtreeCount += traverseAllChildrenImpl(child, nextName, nextIndex, callback, traverseContext);
	        }
	      }
	    }
	  }

	  return subtreeCount;
	}

	/**
	 * Traverses children that are typically specified as `props.children`, but
	 * might also be specified through attributes:
	 *
	 * - `traverseAllChildren(this.props.children, ...)`
	 * - `traverseAllChildren(this.props.leftPanelChildren, ...)`
	 *
	 * The `traverseContext` is an optional argument that is passed through the
	 * entire traversal. It can be used to store accumulations or anything else that
	 * the callback might find relevant.
	 *
	 * @param {?*} children Children tree object.
	 * @param {!function} callback To invoke upon traversing each child.
	 * @param {?*} traverseContext Context for traversal.
	 * @return {!number} The number of children in this subtree.
	 */
	function traverseAllChildren(children, callback, traverseContext) {
	  if (children == null) {
	    return 0;
	  }

	  return traverseAllChildrenImpl(children, '', 0, callback, traverseContext);
	}

	module.exports = traverseAllChildren;

/***/ },
/* 35 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactInstanceHandles
	 * @typechecks static-only
	 */

	'use strict';

	var ReactRootIndex = __webpack_require__(36);

	var invariant = __webpack_require__(23);

	var SEPARATOR = '.';
	var SEPARATOR_LENGTH = SEPARATOR.length;

	/**
	 * Maximum depth of traversals before we consider the possibility of a bad ID.
	 */
	var MAX_TREE_DEPTH = 100;

	/**
	 * Creates a DOM ID prefix to use when mounting React components.
	 *
	 * @param {number} index A unique integer
	 * @return {string} React root ID.
	 * @internal
	 */
	function getReactRootIDString(index) {
	  return SEPARATOR + index.toString(36);
	}

	/**
	 * Checks if a character in the supplied ID is a separator or the end.
	 *
	 * @param {string} id A React DOM ID.
	 * @param {number} index Index of the character to check.
	 * @return {boolean} True if the character is a separator or end of the ID.
	 * @private
	 */
	function isBoundary(id, index) {
	  return id.charAt(index) === SEPARATOR || index === id.length;
	}

	/**
	 * Checks if the supplied string is a valid React DOM ID.
	 *
	 * @param {string} id A React DOM ID, maybe.
	 * @return {boolean} True if the string is a valid React DOM ID.
	 * @private
	 */
	function isValidID(id) {
	  return id === '' || id.charAt(0) === SEPARATOR && id.charAt(id.length - 1) !== SEPARATOR;
	}

	/**
	 * Checks if the first ID is an ancestor of or equal to the second ID.
	 *
	 * @param {string} ancestorID
	 * @param {string} descendantID
	 * @return {boolean} True if `ancestorID` is an ancestor of `descendantID`.
	 * @internal
	 */
	function isAncestorIDOf(ancestorID, descendantID) {
	  return descendantID.indexOf(ancestorID) === 0 && isBoundary(descendantID, ancestorID.length);
	}

	/**
	 * Gets the parent ID of the supplied React DOM ID, `id`.
	 *
	 * @param {string} id ID of a component.
	 * @return {string} ID of the parent, or an empty string.
	 * @private
	 */
	function getParentID(id) {
	  return id ? id.substr(0, id.lastIndexOf(SEPARATOR)) : '';
	}

	/**
	 * Gets the next DOM ID on the tree path from the supplied `ancestorID` to the
	 * supplied `destinationID`. If they are equal, the ID is returned.
	 *
	 * @param {string} ancestorID ID of an ancestor node of `destinationID`.
	 * @param {string} destinationID ID of the destination node.
	 * @return {string} Next ID on the path from `ancestorID` to `destinationID`.
	 * @private
	 */
	function getNextDescendantID(ancestorID, destinationID) {
	  "production" !== process.env.NODE_ENV ? invariant(isValidID(ancestorID) && isValidID(destinationID), 'getNextDescendantID(%s, %s): Received an invalid React DOM ID.', ancestorID, destinationID) : invariant(isValidID(ancestorID) && isValidID(destinationID));
	  "production" !== process.env.NODE_ENV ? invariant(isAncestorIDOf(ancestorID, destinationID), 'getNextDescendantID(...): React has made an invalid assumption about ' + 'the DOM hierarchy. Expected `%s` to be an ancestor of `%s`.', ancestorID, destinationID) : invariant(isAncestorIDOf(ancestorID, destinationID));
	  if (ancestorID === destinationID) {
	    return ancestorID;
	  }
	  // Skip over the ancestor and the immediate separator. Traverse until we hit
	  // another separator or we reach the end of `destinationID`.
	  var start = ancestorID.length + SEPARATOR_LENGTH;
	  var i;
	  for (i = start; i < destinationID.length; i++) {
	    if (isBoundary(destinationID, i)) {
	      break;
	    }
	  }
	  return destinationID.substr(0, i);
	}

	/**
	 * Gets the nearest common ancestor ID of two IDs.
	 *
	 * Using this ID scheme, the nearest common ancestor ID is the longest common
	 * prefix of the two IDs that immediately preceded a "marker" in both strings.
	 *
	 * @param {string} oneID
	 * @param {string} twoID
	 * @return {string} Nearest common ancestor ID, or the empty string if none.
	 * @private
	 */
	function getFirstCommonAncestorID(oneID, twoID) {
	  var minLength = Math.min(oneID.length, twoID.length);
	  if (minLength === 0) {
	    return '';
	  }
	  var lastCommonMarkerIndex = 0;
	  // Use `<=` to traverse until the "EOL" of the shorter string.
	  for (var i = 0; i <= minLength; i++) {
	    if (isBoundary(oneID, i) && isBoundary(twoID, i)) {
	      lastCommonMarkerIndex = i;
	    } else if (oneID.charAt(i) !== twoID.charAt(i)) {
	      break;
	    }
	  }
	  var longestCommonID = oneID.substr(0, lastCommonMarkerIndex);
	  "production" !== process.env.NODE_ENV ? invariant(isValidID(longestCommonID), 'getFirstCommonAncestorID(%s, %s): Expected a valid React DOM ID: %s', oneID, twoID, longestCommonID) : invariant(isValidID(longestCommonID));
	  return longestCommonID;
	}

	/**
	 * Traverses the parent path between two IDs (either up or down). The IDs must
	 * not be the same, and there must exist a parent path between them. If the
	 * callback returns `false`, traversal is stopped.
	 *
	 * @param {?string} start ID at which to start traversal.
	 * @param {?string} stop ID at which to end traversal.
	 * @param {function} cb Callback to invoke each ID with.
	 * @param {?boolean} skipFirst Whether or not to skip the first node.
	 * @param {?boolean} skipLast Whether or not to skip the last node.
	 * @private
	 */
	function traverseParentPath(start, stop, cb, arg, skipFirst, skipLast) {
	  start = start || '';
	  stop = stop || '';
	  "production" !== process.env.NODE_ENV ? invariant(start !== stop, 'traverseParentPath(...): Cannot traverse from and to the same ID, `%s`.', start) : invariant(start !== stop);
	  var traverseUp = isAncestorIDOf(stop, start);
	  "production" !== process.env.NODE_ENV ? invariant(traverseUp || isAncestorIDOf(start, stop), 'traverseParentPath(%s, %s, ...): Cannot traverse from two IDs that do ' + 'not have a parent path.', start, stop) : invariant(traverseUp || isAncestorIDOf(start, stop));
	  // Traverse from `start` to `stop` one depth at a time.
	  var depth = 0;
	  var traverse = traverseUp ? getParentID : getNextDescendantID;
	  for (var id = start;; /* until break */id = traverse(id, stop)) {
	    var ret;
	    if ((!skipFirst || id !== start) && (!skipLast || id !== stop)) {
	      ret = cb(id, traverseUp, arg);
	    }
	    if (ret === false || id === stop) {
	      // Only break //after// visiting `stop`.
	      break;
	    }
	    "production" !== process.env.NODE_ENV ? invariant(depth++ < MAX_TREE_DEPTH, 'traverseParentPath(%s, %s, ...): Detected an infinite loop while ' + 'traversing the React DOM ID tree. This may be due to malformed IDs: %s', start, stop) : invariant(depth++ < MAX_TREE_DEPTH);
	  }
	}

	/**
	 * Manages the IDs assigned to DOM representations of React components. This
	 * uses a specific scheme in order to traverse the DOM efficiently (e.g. in
	 * order to simulate events).
	 *
	 * @internal
	 */
	var ReactInstanceHandles = {

	  /**
	   * Constructs a React root ID
	   * @return {string} A React root ID.
	   */
	  createReactRootID: function createReactRootID() {
	    return getReactRootIDString(ReactRootIndex.createReactRootIndex());
	  },

	  /**
	   * Constructs a React ID by joining a root ID with a name.
	   *
	   * @param {string} rootID Root ID of a parent component.
	   * @param {string} name A component's name (as flattened children).
	   * @return {string} A React ID.
	   * @internal
	   */
	  createReactID: function createReactID(rootID, name) {
	    return rootID + name;
	  },

	  /**
	   * Gets the DOM ID of the React component that is the root of the tree that
	   * contains the React component with the supplied DOM ID.
	   *
	   * @param {string} id DOM ID of a React component.
	   * @return {?string} DOM ID of the React component that is the root.
	   * @internal
	   */
	  getReactRootIDFromNodeID: function getReactRootIDFromNodeID(id) {
	    if (id && id.charAt(0) === SEPARATOR && id.length > 1) {
	      var index = id.indexOf(SEPARATOR, 1);
	      return index > -1 ? id.substr(0, index) : id;
	    }
	    return null;
	  },

	  /**
	   * Traverses the ID hierarchy and invokes the supplied `cb` on any IDs that
	   * should would receive a `mouseEnter` or `mouseLeave` event.
	   *
	   * NOTE: Does not invoke the callback on the nearest common ancestor because
	   * nothing "entered" or "left" that element.
	   *
	   * @param {string} leaveID ID being left.
	   * @param {string} enterID ID being entered.
	   * @param {function} cb Callback to invoke on each entered/left ID.
	   * @param {*} upArg Argument to invoke the callback with on left IDs.
	   * @param {*} downArg Argument to invoke the callback with on entered IDs.
	   * @internal
	   */
	  traverseEnterLeave: function traverseEnterLeave(leaveID, enterID, cb, upArg, downArg) {
	    var ancestorID = getFirstCommonAncestorID(leaveID, enterID);
	    if (ancestorID !== leaveID) {
	      traverseParentPath(leaveID, ancestorID, cb, upArg, false, true);
	    }
	    if (ancestorID !== enterID) {
	      traverseParentPath(ancestorID, enterID, cb, downArg, true, false);
	    }
	  },

	  /**
	   * Simulates the traversal of a two-phase, capture/bubble event dispatch.
	   *
	   * NOTE: This traversal happens on IDs without touching the DOM.
	   *
	   * @param {string} targetID ID of the target node.
	   * @param {function} cb Callback to invoke.
	   * @param {*} arg Argument to invoke the callback with.
	   * @internal
	   */
	  traverseTwoPhase: function traverseTwoPhase(targetID, cb, arg) {
	    if (targetID) {
	      traverseParentPath('', targetID, cb, arg, true, false);
	      traverseParentPath(targetID, '', cb, arg, false, true);
	    }
	  },

	  /**
	   * Traverse a node ID, calling the supplied `cb` for each ancestor ID. For
	   * example, passing `.0.$row-0.1` would result in `cb` getting called
	   * with `.0`, `.0.$row-0`, and `.0.$row-0.1`.
	   *
	   * NOTE: This traversal happens on IDs without touching the DOM.
	   *
	   * @param {string} targetID ID of the target node.
	   * @param {function} cb Callback to invoke.
	   * @param {*} arg Argument to invoke the callback with.
	   * @internal
	   */
	  traverseAncestors: function traverseAncestors(targetID, cb, arg) {
	    traverseParentPath('', targetID, cb, arg, true, false);
	  },

	  /**
	   * Exposed for unit testing.
	   * @private
	   */
	  _getFirstCommonAncestorID: getFirstCommonAncestorID,

	  /**
	   * Exposed for unit testing.
	   * @private
	   */
	  _getNextDescendantID: getNextDescendantID,

	  isAncestorIDOf: isAncestorIDOf,

	  SEPARATOR: SEPARATOR

	};

	module.exports = ReactInstanceHandles;

/***/ },
/* 36 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactRootIndex
	 * @typechecks
	 */

	'use strict';

	var ReactRootIndexInjection = {
	  /**
	   * @param {function} _createReactRootIndex
	   */
	  injectCreateReactRootIndex: function injectCreateReactRootIndex(_createReactRootIndex) {
	    ReactRootIndex.createReactRootIndex = _createReactRootIndex;
	  }
	};

	var ReactRootIndex = {
	  createReactRootIndex: null,
	  injection: ReactRootIndexInjection
	};

	module.exports = ReactRootIndex;

/***/ },
/* 37 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getIteratorFn
	 * @typechecks static-only
	 */

	'use strict';

	/* global Symbol */
	var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator;
	var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec.

	/**
	 * Returns the iterator method function contained on the iterable object.
	 *
	 * Be sure to invoke the function with the iterable as context:
	 *
	 *     var iteratorFn = getIteratorFn(myIterable);
	 *     if (iteratorFn) {
	 *       var iterator = iteratorFn.call(myIterable);
	 *       ...
	 *     }
	 *
	 * @param {?object} maybeIterable
	 * @return {?function}
	 */
	function getIteratorFn(maybeIterable) {
	  var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]);
	  if (typeof iteratorFn === 'function') {
	    return iteratorFn;
	  }
	}

	module.exports = getIteratorFn;

/***/ },
/* 38 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactComponent
	 */

	'use strict';

	var ReactUpdateQueue = __webpack_require__(39);

	var invariant = __webpack_require__(23);
	var warning = __webpack_require__(31);

	/**
	 * Base class helpers for the updating state of a component.
	 */
	function ReactComponent(props, context) {
	  this.props = props;
	  this.context = context;
	}

	/**
	 * Sets a subset of the state. Always use this to mutate
	 * state. You should treat `this.state` as immutable.
	 *
	 * There is no guarantee that `this.state` will be immediately updated, so
	 * accessing `this.state` after calling this method may return the old value.
	 *
	 * There is no guarantee that calls to `setState` will run synchronously,
	 * as they may eventually be batched together.  You can provide an optional
	 * callback that will be executed when the call to setState is actually
	 * completed.
	 *
	 * When a function is provided to setState, it will be called at some point in
	 * the future (not synchronously). It will be called with the up to date
	 * component arguments (state, props, context). These values can be different
	 * from this.* because your function may be called after receiveProps but before
	 * shouldComponentUpdate, and this new state, props, and context will not yet be
	 * assigned to this.
	 *
	 * @param {object|function} partialState Next partial state or function to
	 *        produce next partial state to be merged with current state.
	 * @param {?function} callback Called after state is updated.
	 * @final
	 * @protected
	 */
	ReactComponent.prototype.setState = function (partialState, callback) {
	  "production" !== process.env.NODE_ENV ? invariant(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null, 'setState(...): takes an object of state variables to update or a ' + 'function which returns an object of state variables.') : invariant(typeof partialState === 'object' || typeof partialState === 'function' || partialState == null);
	  if ("production" !== process.env.NODE_ENV) {
	    "production" !== process.env.NODE_ENV ? warning(partialState != null, 'setState(...): You passed an undefined or null state object; ' + 'instead, use forceUpdate().') : null;
	  }
	  ReactUpdateQueue.enqueueSetState(this, partialState);
	  if (callback) {
	    ReactUpdateQueue.enqueueCallback(this, callback);
	  }
	};

	/**
	 * Forces an update. This should only be invoked when it is known with
	 * certainty that we are **not** in a DOM transaction.
	 *
	 * You may want to call this when you know that some deeper aspect of the
	 * component's state has changed but `setState` was not called.
	 *
	 * This will not invoke `shouldComponentUpdate`, but it will invoke
	 * `componentWillUpdate` and `componentDidUpdate`.
	 *
	 * @param {?function} callback Called after update is complete.
	 * @final
	 * @protected
	 */
	ReactComponent.prototype.forceUpdate = function (callback) {
	  ReactUpdateQueue.enqueueForceUpdate(this);
	  if (callback) {
	    ReactUpdateQueue.enqueueCallback(this, callback);
	  }
	};

	/**
	 * Deprecated APIs. These APIs used to exist on classic React classes but since
	 * we would like to deprecate them, we're not going to move them over to this
	 * modern base class. Instead, we define a getter that warns if it's accessed.
	 */
	if ("production" !== process.env.NODE_ENV) {
	  var deprecatedAPIs = {
	    getDOMNode: ['getDOMNode', 'Use React.findDOMNode(component) instead.'],
	    isMounted: ['isMounted', 'Instead, make sure to clean up subscriptions and pending requests in ' + 'componentWillUnmount to prevent memory leaks.'],
	    replaceProps: ['replaceProps', 'Instead, call React.render again at the top level.'],
	    replaceState: ['replaceState', 'Refactor your code to use setState instead (see ' + 'https://github.com/facebook/react/issues/3236).'],
	    setProps: ['setProps', 'Instead, call React.render again at the top level.']
	  };
	  var defineDeprecationWarning = function defineDeprecationWarning(methodName, info) {
	    try {
	      Object.defineProperty(ReactComponent.prototype, methodName, {
	        get: function get() {
	          "production" !== process.env.NODE_ENV ? warning(false, '%s(...) is deprecated in plain JavaScript React classes. %s', info[0], info[1]) : null;
	          return undefined;
	        }
	      });
	    } catch (x) {
	      // IE will fail on defineProperty (es5-shim/sham too)
	    }
	  };
	  for (var fnName in deprecatedAPIs) {
	    if (deprecatedAPIs.hasOwnProperty(fnName)) {
	      defineDeprecationWarning(fnName, deprecatedAPIs[fnName]);
	    }
	  }
	}

	module.exports = ReactComponent;

/***/ },
/* 39 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactUpdateQueue
	 */

	'use strict';

	var ReactLifeCycle = __webpack_require__(40);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactElement = __webpack_require__(27);
	var ReactInstanceMap = __webpack_require__(41);
	var ReactUpdates = __webpack_require__(42);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);
	var warning = __webpack_require__(31);

	function enqueueUpdate(internalInstance) {
	  if (internalInstance !== ReactLifeCycle.currentlyMountingInstance) {
	    // If we're in a componentWillMount handler, don't enqueue a rerender
	    // because ReactUpdates assumes we're in a browser context (which is
	    // wrong for server rendering) and we're about to do a render anyway.
	    // See bug in #1740.
	    ReactUpdates.enqueueUpdate(internalInstance);
	  }
	}

	function getInternalInstanceReadyForUpdate(publicInstance, callerName) {
	  "production" !== process.env.NODE_ENV ? invariant(ReactCurrentOwner.current == null, '%s(...): Cannot update during an existing state transition ' + '(such as within `render`). Render methods should be a pure function ' + 'of props and state.', callerName) : invariant(ReactCurrentOwner.current == null);

	  var internalInstance = ReactInstanceMap.get(publicInstance);
	  if (!internalInstance) {
	    if ("production" !== process.env.NODE_ENV) {
	      // Only warn when we have a callerName. Otherwise we should be silent.
	      // We're probably calling from enqueueCallback. We don't want to warn
	      // there because we already warned for the corresponding lifecycle method.
	      "production" !== process.env.NODE_ENV ? warning(!callerName, '%s(...): Can only update a mounted or mounting component. ' + 'This usually means you called %s() on an unmounted ' + 'component. This is a no-op.', callerName, callerName) : null;
	    }
	    return null;
	  }

	  if (internalInstance === ReactLifeCycle.currentlyUnmountingInstance) {
	    return null;
	  }

	  return internalInstance;
	}

	/**
	 * ReactUpdateQueue allows for state updates to be scheduled into a later
	 * reconciliation step.
	 */
	var ReactUpdateQueue = {

	  /**
	   * Enqueue a callback that will be executed after all the pending updates
	   * have processed.
	   *
	   * @param {ReactClass} publicInstance The instance to use as `this` context.
	   * @param {?function} callback Called after state is updated.
	   * @internal
	   */
	  enqueueCallback: function enqueueCallback(publicInstance, callback) {
	    "production" !== process.env.NODE_ENV ? invariant(typeof callback === 'function', 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(typeof callback === 'function');
	    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance);

	    // Previously we would throw an error if we didn't have an internal
	    // instance. Since we want to make it a no-op instead, we mirror the same
	    // behavior we have in other enqueue* methods.
	    // We also need to ignore callbacks in componentWillMount. See
	    // enqueueUpdates.
	    if (!internalInstance || internalInstance === ReactLifeCycle.currentlyMountingInstance) {
	      return null;
	    }

	    if (internalInstance._pendingCallbacks) {
	      internalInstance._pendingCallbacks.push(callback);
	    } else {
	      internalInstance._pendingCallbacks = [callback];
	    }
	    // TODO: The callback here is ignored when setState is called from
	    // componentWillMount. Either fix it or disallow doing so completely in
	    // favor of getInitialState. Alternatively, we can disallow
	    // componentWillMount during server-side rendering.
	    enqueueUpdate(internalInstance);
	  },

	  enqueueCallbackInternal: function enqueueCallbackInternal(internalInstance, callback) {
	    "production" !== process.env.NODE_ENV ? invariant(typeof callback === 'function', 'enqueueCallback(...): You called `setProps`, `replaceProps`, ' + '`setState`, `replaceState`, or `forceUpdate` with a callback that ' + 'isn\'t callable.') : invariant(typeof callback === 'function');
	    if (internalInstance._pendingCallbacks) {
	      internalInstance._pendingCallbacks.push(callback);
	    } else {
	      internalInstance._pendingCallbacks = [callback];
	    }
	    enqueueUpdate(internalInstance);
	  },

	  /**
	   * Forces an update. This should only be invoked when it is known with
	   * certainty that we are **not** in a DOM transaction.
	   *
	   * You may want to call this when you know that some deeper aspect of the
	   * component's state has changed but `setState` was not called.
	   *
	   * This will not invoke `shouldUpdateComponent`, but it will invoke
	   * `componentWillUpdate` and `componentDidUpdate`.
	   *
	   * @param {ReactClass} publicInstance The instance that should rerender.
	   * @internal
	   */
	  enqueueForceUpdate: function enqueueForceUpdate(publicInstance) {
	    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'forceUpdate');

	    if (!internalInstance) {
	      return;
	    }

	    internalInstance._pendingForceUpdate = true;

	    enqueueUpdate(internalInstance);
	  },

	  /**
	   * Replaces all of the state. Always use this or `setState` to mutate state.
	   * You should treat `this.state` as immutable.
	   *
	   * There is no guarantee that `this.state` will be immediately updated, so
	   * accessing `this.state` after calling this method may return the old value.
	   *
	   * @param {ReactClass} publicInstance The instance that should rerender.
	   * @param {object} completeState Next state.
	   * @internal
	   */
	  enqueueReplaceState: function enqueueReplaceState(publicInstance, completeState) {
	    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceState');

	    if (!internalInstance) {
	      return;
	    }

	    internalInstance._pendingStateQueue = [completeState];
	    internalInstance._pendingReplaceState = true;

	    enqueueUpdate(internalInstance);
	  },

	  /**
	   * Sets a subset of the state. This only exists because _pendingState is
	   * internal. This provides a merging strategy that is not available to deep
	   * properties which is confusing. TODO: Expose pendingState or don't use it
	   * during the merge.
	   *
	   * @param {ReactClass} publicInstance The instance that should rerender.
	   * @param {object} partialState Next partial state to be merged with state.
	   * @internal
	   */
	  enqueueSetState: function enqueueSetState(publicInstance, partialState) {
	    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setState');

	    if (!internalInstance) {
	      return;
	    }

	    var queue = internalInstance._pendingStateQueue || (internalInstance._pendingStateQueue = []);
	    queue.push(partialState);

	    enqueueUpdate(internalInstance);
	  },

	  /**
	   * Sets a subset of the props.
	   *
	   * @param {ReactClass} publicInstance The instance that should rerender.
	   * @param {object} partialProps Subset of the next props.
	   * @internal
	   */
	  enqueueSetProps: function enqueueSetProps(publicInstance, partialProps) {
	    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'setProps');

	    if (!internalInstance) {
	      return;
	    }

	    "production" !== process.env.NODE_ENV ? invariant(internalInstance._isTopLevel, 'setProps(...): You called `setProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(internalInstance._isTopLevel);

	    // Merge with the pending element if it exists, otherwise with existing
	    // element props.
	    var element = internalInstance._pendingElement || internalInstance._currentElement;
	    var props = assign({}, element.props, partialProps);
	    internalInstance._pendingElement = ReactElement.cloneAndReplaceProps(element, props);

	    enqueueUpdate(internalInstance);
	  },

	  /**
	   * Replaces all of the props.
	   *
	   * @param {ReactClass} publicInstance The instance that should rerender.
	   * @param {object} props New props.
	   * @internal
	   */
	  enqueueReplaceProps: function enqueueReplaceProps(publicInstance, props) {
	    var internalInstance = getInternalInstanceReadyForUpdate(publicInstance, 'replaceProps');

	    if (!internalInstance) {
	      return;
	    }

	    "production" !== process.env.NODE_ENV ? invariant(internalInstance._isTopLevel, 'replaceProps(...): You called `replaceProps` on a ' + 'component with a parent. This is an anti-pattern since props will ' + 'get reactively updated when rendered. Instead, change the owner\'s ' + '`render` method to pass the correct value as props to the component ' + 'where it is created.') : invariant(internalInstance._isTopLevel);

	    // Merge with the pending element if it exists, otherwise with existing
	    // element props.
	    var element = internalInstance._pendingElement || internalInstance._currentElement;
	    internalInstance._pendingElement = ReactElement.cloneAndReplaceProps(element, props);

	    enqueueUpdate(internalInstance);
	  },

	  enqueueElementInternal: function enqueueElementInternal(internalInstance, newElement) {
	    internalInstance._pendingElement = newElement;
	    enqueueUpdate(internalInstance);
	  }

	};

	module.exports = ReactUpdateQueue;

/***/ },
/* 40 */
/***/ function(module, exports) {

	/**
	 * Copyright 2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactLifeCycle
	 */

	'use strict';

	/**
	 * This module manages the bookkeeping when a component is in the process
	 * of being mounted or being unmounted. This is used as a way to enforce
	 * invariants (or warnings) when it is not recommended to call
	 * setState/forceUpdate.
	 *
	 * currentlyMountingInstance: During the construction phase, it is not possible
	 * to trigger an update since the instance is not fully mounted yet. However, we
	 * currently allow this as a convenience for mutating the initial state.
	 *
	 * currentlyUnmountingInstance: During the unmounting phase, the instance is
	 * still mounted and can therefore schedule an update. However, this is not
	 * recommended and probably an error since it's about to be unmounted.
	 * Therefore we still want to trigger in an error for that case.
	 */

	var ReactLifeCycle = {
	  currentlyMountingInstance: null,
	  currentlyUnmountingInstance: null
	};

	module.exports = ReactLifeCycle;

/***/ },
/* 41 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactInstanceMap
	 */

	'use strict';

	/**
	 * `ReactInstanceMap` maintains a mapping from a public facing stateful
	 * instance (key) and the internal representation (value). This allows public
	 * methods to accept the user facing instance as an argument and map them back
	 * to internal methods.
	 */

	// TODO: Replace this with ES6: var ReactInstanceMap = new Map();
	var ReactInstanceMap = {

	  /**
	   * This API should be called `delete` but we'd have to make sure to always
	   * transform these to strings for IE support. When this transform is fully
	   * supported we can rename it.
	   */
	  remove: function remove(key) {
	    key._reactInternalInstance = undefined;
	  },

	  get: function get(key) {
	    return key._reactInternalInstance;
	  },

	  has: function has(key) {
	    return key._reactInternalInstance !== undefined;
	  },

	  set: function set(key, value) {
	    key._reactInternalInstance = value;
	  }

	};

	module.exports = ReactInstanceMap;

/***/ },
/* 42 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactUpdates
	 */

	'use strict';

	var CallbackQueue = __webpack_require__(43);
	var PooledClass = __webpack_require__(25);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactPerf = __webpack_require__(44);
	var ReactReconciler = __webpack_require__(45);
	var Transaction = __webpack_require__(52);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);
	var warning = __webpack_require__(31);

	var dirtyComponents = [];
	var asapCallbackQueue = CallbackQueue.getPooled();
	var asapEnqueued = false;

	var batchingStrategy = null;

	function ensureInjected() {
	  "production" !== process.env.NODE_ENV ? invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy, 'ReactUpdates: must inject a reconcile transaction class and batching ' + 'strategy') : invariant(ReactUpdates.ReactReconcileTransaction && batchingStrategy);
	}

	var NESTED_UPDATES = {
	  initialize: function initialize() {
	    this.dirtyComponentsLength = dirtyComponents.length;
	  },
	  close: function close() {
	    if (this.dirtyComponentsLength !== dirtyComponents.length) {
	      // Additional updates were enqueued by componentDidUpdate handlers or
	      // similar; before our own UPDATE_QUEUEING wrapper closes, we want to run
	      // these new updates so that if A's componentDidUpdate calls setState on
	      // B, B will update before the callback A's updater provided when calling
	      // setState.
	      dirtyComponents.splice(0, this.dirtyComponentsLength);
	      flushBatchedUpdates();
	    } else {
	      dirtyComponents.length = 0;
	    }
	  }
	};

	var UPDATE_QUEUEING = {
	  initialize: function initialize() {
	    this.callbackQueue.reset();
	  },
	  close: function close() {
	    this.callbackQueue.notifyAll();
	  }
	};

	var TRANSACTION_WRAPPERS = [NESTED_UPDATES, UPDATE_QUEUEING];

	function ReactUpdatesFlushTransaction() {
	  this.reinitializeTransaction();
	  this.dirtyComponentsLength = null;
	  this.callbackQueue = CallbackQueue.getPooled();
	  this.reconcileTransaction = ReactUpdates.ReactReconcileTransaction.getPooled();
	}

	assign(ReactUpdatesFlushTransaction.prototype, Transaction.Mixin, {
	  getTransactionWrappers: function getTransactionWrappers() {
	    return TRANSACTION_WRAPPERS;
	  },

	  destructor: function destructor() {
	    this.dirtyComponentsLength = null;
	    CallbackQueue.release(this.callbackQueue);
	    this.callbackQueue = null;
	    ReactUpdates.ReactReconcileTransaction.release(this.reconcileTransaction);
	    this.reconcileTransaction = null;
	  },

	  perform: function perform(method, scope, a) {
	    // Essentially calls `this.reconcileTransaction.perform(method, scope, a)`
	    // with this transaction's wrappers around it.
	    return Transaction.Mixin.perform.call(this, this.reconcileTransaction.perform, this.reconcileTransaction, method, scope, a);
	  }
	});

	PooledClass.addPoolingTo(ReactUpdatesFlushTransaction);

	function batchedUpdates(callback, a, b, c, d) {
	  ensureInjected();
	  batchingStrategy.batchedUpdates(callback, a, b, c, d);
	}

	/**
	 * Array comparator for ReactComponents by mount ordering.
	 *
	 * @param {ReactComponent} c1 first component you're comparing
	 * @param {ReactComponent} c2 second component you're comparing
	 * @return {number} Return value usable by Array.prototype.sort().
	 */
	function mountOrderComparator(c1, c2) {
	  return c1._mountOrder - c2._mountOrder;
	}

	function runBatchedUpdates(transaction) {
	  var len = transaction.dirtyComponentsLength;
	  "production" !== process.env.NODE_ENV ? invariant(len === dirtyComponents.length, 'Expected flush transaction\'s stored dirty-components length (%s) to ' + 'match dirty-components array length (%s).', len, dirtyComponents.length) : invariant(len === dirtyComponents.length);

	  // Since reconciling a component higher in the owner hierarchy usually (not
	  // always -- see shouldComponentUpdate()) will reconcile children, reconcile
	  // them before their children by sorting the array.
	  dirtyComponents.sort(mountOrderComparator);

	  for (var i = 0; i < len; i++) {
	    // If a component is unmounted before pending changes apply, it will still
	    // be here, but we assume that it has cleared its _pendingCallbacks and
	    // that performUpdateIfNecessary is a noop.
	    var component = dirtyComponents[i];

	    // If performUpdateIfNecessary happens to enqueue any new updates, we
	    // shouldn't execute the callbacks until the next render happens, so
	    // stash the callbacks first
	    var callbacks = component._pendingCallbacks;
	    component._pendingCallbacks = null;

	    ReactReconciler.performUpdateIfNecessary(component, transaction.reconcileTransaction);

	    if (callbacks) {
	      for (var j = 0; j < callbacks.length; j++) {
	        transaction.callbackQueue.enqueue(callbacks[j], component.getPublicInstance());
	      }
	    }
	  }
	}

	var flushBatchedUpdates = function flushBatchedUpdates() {
	  // ReactUpdatesFlushTransaction's wrappers will clear the dirtyComponents
	  // array and perform any updates enqueued by mount-ready handlers (i.e.,
	  // componentDidUpdate) but we need to check here too in order to catch
	  // updates enqueued by setState callbacks and asap calls.
	  while (dirtyComponents.length || asapEnqueued) {
	    if (dirtyComponents.length) {
	      var transaction = ReactUpdatesFlushTransaction.getPooled();
	      transaction.perform(runBatchedUpdates, null, transaction);
	      ReactUpdatesFlushTransaction.release(transaction);
	    }

	    if (asapEnqueued) {
	      asapEnqueued = false;
	      var queue = asapCallbackQueue;
	      asapCallbackQueue = CallbackQueue.getPooled();
	      queue.notifyAll();
	      CallbackQueue.release(queue);
	    }
	  }
	};
	flushBatchedUpdates = ReactPerf.measure('ReactUpdates', 'flushBatchedUpdates', flushBatchedUpdates);

	/**
	 * Mark a component as needing a rerender, adding an optional callback to a
	 * list of functions which will be executed once the rerender occurs.
	 */
	function enqueueUpdate(component) {
	  ensureInjected();

	  // Various parts of our code (such as ReactCompositeComponent's
	  // _renderValidatedComponent) assume that calls to render aren't nested;
	  // verify that that's the case. (This is called by each top-level update
	  // function, like setProps, setState, forceUpdate, etc.; creation and
	  // destruction of top-level components is guarded in ReactMount.)
	  "production" !== process.env.NODE_ENV ? warning(ReactCurrentOwner.current == null, 'enqueueUpdate(): Render methods should be a pure function of props ' + 'and state; triggering nested component updates from render is not ' + 'allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate.') : null;

	  if (!batchingStrategy.isBatchingUpdates) {
	    batchingStrategy.batchedUpdates(enqueueUpdate, component);
	    return;
	  }

	  dirtyComponents.push(component);
	}

	/**
	 * Enqueue a callback to be run at the end of the current batching cycle. Throws
	 * if no updates are currently being performed.
	 */
	function asap(callback, context) {
	  "production" !== process.env.NODE_ENV ? invariant(batchingStrategy.isBatchingUpdates, 'ReactUpdates.asap: Can\'t enqueue an asap callback in a context where' + 'updates are not being batched.') : invariant(batchingStrategy.isBatchingUpdates);
	  asapCallbackQueue.enqueue(callback, context);
	  asapEnqueued = true;
	}

	var ReactUpdatesInjection = {
	  injectReconcileTransaction: function injectReconcileTransaction(ReconcileTransaction) {
	    "production" !== process.env.NODE_ENV ? invariant(ReconcileTransaction, 'ReactUpdates: must provide a reconcile transaction class') : invariant(ReconcileTransaction);
	    ReactUpdates.ReactReconcileTransaction = ReconcileTransaction;
	  },

	  injectBatchingStrategy: function injectBatchingStrategy(_batchingStrategy) {
	    "production" !== process.env.NODE_ENV ? invariant(_batchingStrategy, 'ReactUpdates: must provide a batching strategy') : invariant(_batchingStrategy);
	    "production" !== process.env.NODE_ENV ? invariant(typeof _batchingStrategy.batchedUpdates === 'function', 'ReactUpdates: must provide a batchedUpdates() function') : invariant(typeof _batchingStrategy.batchedUpdates === 'function');
	    "production" !== process.env.NODE_ENV ? invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean', 'ReactUpdates: must provide an isBatchingUpdates boolean attribute') : invariant(typeof _batchingStrategy.isBatchingUpdates === 'boolean');
	    batchingStrategy = _batchingStrategy;
	  }
	};

	var ReactUpdates = {
	  /**
	   * React references `ReactReconcileTransaction` using this property in order
	   * to allow dependency injection.
	   *
	   * @internal
	   */
	  ReactReconcileTransaction: null,

	  batchedUpdates: batchedUpdates,
	  enqueueUpdate: enqueueUpdate,
	  flushBatchedUpdates: flushBatchedUpdates,
	  injection: ReactUpdatesInjection,
	  asap: asap
	};

	module.exports = ReactUpdates;

/***/ },
/* 43 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule CallbackQueue
	 */

	'use strict';

	var PooledClass = __webpack_require__(25);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);

	/**
	 * A specialized pseudo-event module to help keep track of components waiting to
	 * be notified when their DOM representations are available for use.
	 *
	 * This implements `PooledClass`, so you should never need to instantiate this.
	 * Instead, use `CallbackQueue.getPooled()`.
	 *
	 * @class ReactMountReady
	 * @implements PooledClass
	 * @internal
	 */
	function CallbackQueue() {
	  this._callbacks = null;
	  this._contexts = null;
	}

	assign(CallbackQueue.prototype, {

	  /**
	   * Enqueues a callback to be invoked when `notifyAll` is invoked.
	   *
	   * @param {function} callback Invoked when `notifyAll` is invoked.
	   * @param {?object} context Context to call `callback` with.
	   * @internal
	   */
	  enqueue: function enqueue(callback, context) {
	    this._callbacks = this._callbacks || [];
	    this._contexts = this._contexts || [];
	    this._callbacks.push(callback);
	    this._contexts.push(context);
	  },

	  /**
	   * Invokes all enqueued callbacks and clears the queue. This is invoked after
	   * the DOM representation of a component has been created or updated.
	   *
	   * @internal
	   */
	  notifyAll: function notifyAll() {
	    var callbacks = this._callbacks;
	    var contexts = this._contexts;
	    if (callbacks) {
	      "production" !== process.env.NODE_ENV ? invariant(callbacks.length === contexts.length, 'Mismatched list of contexts in callback queue') : invariant(callbacks.length === contexts.length);
	      this._callbacks = null;
	      this._contexts = null;
	      for (var i = 0, l = callbacks.length; i < l; i++) {
	        callbacks[i].call(contexts[i]);
	      }
	      callbacks.length = 0;
	      contexts.length = 0;
	    }
	  },

	  /**
	   * Resets the internal queue.
	   *
	   * @internal
	   */
	  reset: function reset() {
	    this._callbacks = null;
	    this._contexts = null;
	  },

	  /**
	   * `PooledClass` looks for this.
	   */
	  destructor: function destructor() {
	    this.reset();
	  }

	});

	PooledClass.addPoolingTo(CallbackQueue);

	module.exports = CallbackQueue;

/***/ },
/* 44 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactPerf
	 * @typechecks static-only
	 */

	'use strict';

	/**
	 * ReactPerf is a general AOP system designed to measure performance. This
	 * module only has the hooks: see ReactDefaultPerf for the analysis tool.
	 */
	var ReactPerf = {
	  /**
	   * Boolean to enable/disable measurement. Set to false by default to prevent
	   * accidental logging and perf loss.
	   */
	  enableMeasure: false,

	  /**
	   * Holds onto the measure function in use. By default, don't measure
	   * anything, but we'll override this if we inject a measure function.
	   */
	  storedMeasure: _noMeasure,

	  /**
	   * @param {object} object
	   * @param {string} objectName
	   * @param {object<string>} methodNames
	   */
	  measureMethods: function measureMethods(object, objectName, methodNames) {
	    if ("production" !== process.env.NODE_ENV) {
	      for (var key in methodNames) {
	        if (!methodNames.hasOwnProperty(key)) {
	          continue;
	        }
	        object[key] = ReactPerf.measure(objectName, methodNames[key], object[key]);
	      }
	    }
	  },

	  /**
	   * Use this to wrap methods you want to measure. Zero overhead in production.
	   *
	   * @param {string} objName
	   * @param {string} fnName
	   * @param {function} func
	   * @return {function}
	   */
	  measure: function measure(objName, fnName, func) {
	    if ("production" !== process.env.NODE_ENV) {
	      var measuredFunc = null;
	      var wrapper = function wrapper() {
	        if (ReactPerf.enableMeasure) {
	          if (!measuredFunc) {
	            measuredFunc = ReactPerf.storedMeasure(objName, fnName, func);
	          }
	          return measuredFunc.apply(this, arguments);
	        }
	        return func.apply(this, arguments);
	      };
	      wrapper.displayName = objName + '_' + fnName;
	      return wrapper;
	    }
	    return func;
	  },

	  injection: {
	    /**
	     * @param {function} measure
	     */
	    injectMeasure: function injectMeasure(measure) {
	      ReactPerf.storedMeasure = measure;
	    }
	  }
	};

	/**
	 * Simply passes through the measured function, without measuring it.
	 *
	 * @param {string} objName
	 * @param {string} fnName
	 * @param {function} func
	 * @return {function}
	 */
	function _noMeasure(objName, fnName, func) {
	  return func;
	}

	module.exports = ReactPerf;

/***/ },
/* 45 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactReconciler
	 */

	'use strict';

	var ReactRef = __webpack_require__(46);
	var ReactElementValidator = __webpack_require__(48);

	/**
	 * Helper to call ReactRef.attachRefs with this composite component, split out
	 * to avoid allocations in the transaction mount-ready queue.
	 */
	function attachRefs() {
	  ReactRef.attachRefs(this, this._currentElement);
	}

	var ReactReconciler = {

	  /**
	   * Initializes the component, renders markup, and registers event listeners.
	   *
	   * @param {ReactComponent} internalInstance
	   * @param {string} rootID DOM ID of the root node.
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @return {?string} Rendered markup to be inserted into the DOM.
	   * @final
	   * @internal
	   */
	  mountComponent: function mountComponent(internalInstance, rootID, transaction, context) {
	    var markup = internalInstance.mountComponent(rootID, transaction, context);
	    if ("production" !== process.env.NODE_ENV) {
	      ReactElementValidator.checkAndWarnForMutatedProps(internalInstance._currentElement);
	    }
	    transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
	    return markup;
	  },

	  /**
	   * Releases any resources allocated by `mountComponent`.
	   *
	   * @final
	   * @internal
	   */
	  unmountComponent: function unmountComponent(internalInstance) {
	    ReactRef.detachRefs(internalInstance, internalInstance._currentElement);
	    internalInstance.unmountComponent();
	  },

	  /**
	   * Update a component using a new element.
	   *
	   * @param {ReactComponent} internalInstance
	   * @param {ReactElement} nextElement
	   * @param {ReactReconcileTransaction} transaction
	   * @param {object} context
	   * @internal
	   */
	  receiveComponent: function receiveComponent(internalInstance, nextElement, transaction, context) {
	    var prevElement = internalInstance._currentElement;

	    if (nextElement === prevElement && nextElement._owner != null) {
	      // Since elements are immutable after the owner is rendered,
	      // we can do a cheap identity compare here to determine if this is a
	      // superfluous reconcile. It's possible for state to be mutable but such
	      // change should trigger an update of the owner which would recreate
	      // the element. We explicitly check for the existence of an owner since
	      // it's possible for an element created outside a composite to be
	      // deeply mutated and reused.
	      return;
	    }

	    if ("production" !== process.env.NODE_ENV) {
	      ReactElementValidator.checkAndWarnForMutatedProps(nextElement);
	    }

	    var refsChanged = ReactRef.shouldUpdateRefs(prevElement, nextElement);

	    if (refsChanged) {
	      ReactRef.detachRefs(internalInstance, prevElement);
	    }

	    internalInstance.receiveComponent(nextElement, transaction, context);

	    if (refsChanged) {
	      transaction.getReactMountReady().enqueue(attachRefs, internalInstance);
	    }
	  },

	  /**
	   * Flush any dirty changes in a component.
	   *
	   * @param {ReactComponent} internalInstance
	   * @param {ReactReconcileTransaction} transaction
	   * @internal
	   */
	  performUpdateIfNecessary: function performUpdateIfNecessary(internalInstance, transaction) {
	    internalInstance.performUpdateIfNecessary(transaction);
	  }

	};

	module.exports = ReactReconciler;

/***/ },
/* 46 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactRef
	 */

	'use strict';

	var ReactOwner = __webpack_require__(47);

	var ReactRef = {};

	function attachRef(ref, component, owner) {
	  if (typeof ref === 'function') {
	    ref(component.getPublicInstance());
	  } else {
	    // Legacy ref
	    ReactOwner.addComponentAsRefTo(component, ref, owner);
	  }
	}

	function detachRef(ref, component, owner) {
	  if (typeof ref === 'function') {
	    ref(null);
	  } else {
	    // Legacy ref
	    ReactOwner.removeComponentAsRefFrom(component, ref, owner);
	  }
	}

	ReactRef.attachRefs = function (instance, element) {
	  var ref = element.ref;
	  if (ref != null) {
	    attachRef(ref, instance, element._owner);
	  }
	};

	ReactRef.shouldUpdateRefs = function (prevElement, nextElement) {
	  // If either the owner or a `ref` has changed, make sure the newest owner
	  // has stored a reference to `this`, and the previous owner (if different)
	  // has forgotten the reference to `this`. We use the element instead
	  // of the public this.props because the post processing cannot determine
	  // a ref. The ref conceptually lives on the element.

	  // TODO: Should this even be possible? The owner cannot change because
	  // it's forbidden by shouldUpdateReactComponent. The ref can change
	  // if you swap the keys of but not the refs. Reconsider where this check
	  // is made. It probably belongs where the key checking and
	  // instantiateReactComponent is done.

	  return nextElement._owner !== prevElement._owner || nextElement.ref !== prevElement.ref;
	};

	ReactRef.detachRefs = function (instance, element) {
	  var ref = element.ref;
	  if (ref != null) {
	    detachRef(ref, instance, element._owner);
	  }
	};

	module.exports = ReactRef;

/***/ },
/* 47 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactOwner
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	/**
	 * ReactOwners are capable of storing references to owned components.
	 *
	 * All components are capable of //being// referenced by owner components, but
	 * only ReactOwner components are capable of //referencing// owned components.
	 * The named reference is known as a "ref".
	 *
	 * Refs are available when mounted and updated during reconciliation.
	 *
	 *   var MyComponent = React.createClass({
	 *     render: function() {
	 *       return (
	 *         <div onClick={this.handleClick}>
	 *           <CustomComponent ref="custom" />
	 *         </div>
	 *       );
	 *     },
	 *     handleClick: function() {
	 *       this.refs.custom.handleClick();
	 *     },
	 *     componentDidMount: function() {
	 *       this.refs.custom.initialize();
	 *     }
	 *   });
	 *
	 * Refs should rarely be used. When refs are used, they should only be done to
	 * control data that is not handled by React's data flow.
	 *
	 * @class ReactOwner
	 */
	var ReactOwner = {

	  /**
	   * @param {?object} object
	   * @return {boolean} True if `object` is a valid owner.
	   * @final
	   */
	  isValidOwner: function isValidOwner(object) {
	    return !!(object && typeof object.attachRef === 'function' && typeof object.detachRef === 'function');
	  },

	  /**
	   * Adds a component by ref to an owner component.
	   *
	   * @param {ReactComponent} component Component to reference.
	   * @param {string} ref Name by which to refer to the component.
	   * @param {ReactOwner} owner Component on which to record the ref.
	   * @final
	   * @internal
	   */
	  addComponentAsRefTo: function addComponentAsRefTo(component, ref, owner) {
	    "production" !== process.env.NODE_ENV ? invariant(ReactOwner.isValidOwner(owner), 'addComponentAsRefTo(...): Only a ReactOwner can have refs. This ' + 'usually means that you\'re trying to add a ref to a component that ' + 'doesn\'t have an owner (that is, was not created inside of another ' + 'component\'s `render` method). Try rendering this component inside of ' + 'a new top-level component which will hold the ref.') : invariant(ReactOwner.isValidOwner(owner));
	    owner.attachRef(ref, component);
	  },

	  /**
	   * Removes a component by ref from an owner component.
	   *
	   * @param {ReactComponent} component Component to dereference.
	   * @param {string} ref Name of the ref to remove.
	   * @param {ReactOwner} owner Component on which the ref is recorded.
	   * @final
	   * @internal
	   */
	  removeComponentAsRefFrom: function removeComponentAsRefFrom(component, ref, owner) {
	    "production" !== process.env.NODE_ENV ? invariant(ReactOwner.isValidOwner(owner), 'removeComponentAsRefFrom(...): Only a ReactOwner can have refs. This ' + 'usually means that you\'re trying to remove a ref to a component that ' + 'doesn\'t have an owner (that is, was not created inside of another ' + 'component\'s `render` method). Try rendering this component inside of ' + 'a new top-level component which will hold the ref.') : invariant(ReactOwner.isValidOwner(owner));
	    // Check that `component` is still the current ref because we do not want to
	    // detach the ref if another component stole it.
	    if (owner.getPublicInstance().refs[ref] === component.getPublicInstance()) {
	      owner.detachRef(ref);
	    }
	  }

	};

	module.exports = ReactOwner;

/***/ },
/* 48 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactElementValidator
	 */

	/**
	 * ReactElementValidator provides a wrapper around a element factory
	 * which validates the props passed to the element. This is intended to be
	 * used only in DEV and could be replaced by a static type checker for languages
	 * that support it.
	 */

	'use strict';

	var ReactElement = __webpack_require__(27);
	var ReactFragment = __webpack_require__(26);
	var ReactPropTypeLocations = __webpack_require__(49);
	var ReactPropTypeLocationNames = __webpack_require__(50);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactNativeComponent = __webpack_require__(51);

	var getIteratorFn = __webpack_require__(37);
	var invariant = __webpack_require__(23);
	var warning = __webpack_require__(31);

	function getDeclarationErrorAddendum() {
	  if (ReactCurrentOwner.current) {
	    var name = ReactCurrentOwner.current.getName();
	    if (name) {
	      return ' Check the render method of `' + name + '`.';
	    }
	  }
	  return '';
	}

	/**
	 * Warn if there's no key explicitly set on dynamic arrays of children or
	 * object keys are not valid. This allows us to keep track of children between
	 * updates.
	 */
	var ownerHasKeyUseWarning = {};

	var loggedTypeFailures = {};

	var NUMERIC_PROPERTY_REGEX = /^\d+$/;

	/**
	 * Gets the instance's name for use in warnings.
	 *
	 * @internal
	 * @return {?string} Display name or undefined
	 */
	function getName(instance) {
	  var publicInstance = instance && instance.getPublicInstance();
	  if (!publicInstance) {
	    return undefined;
	  }
	  var constructor = publicInstance.constructor;
	  if (!constructor) {
	    return undefined;
	  }
	  return constructor.displayName || constructor.name || undefined;
	}

	/**
	 * Gets the current owner's displayName for use in warnings.
	 *
	 * @internal
	 * @return {?string} Display name or undefined
	 */
	function getCurrentOwnerDisplayName() {
	  var current = ReactCurrentOwner.current;
	  return current && getName(current) || undefined;
	}

	/**
	 * Warn if the element doesn't have an explicit key assigned to it.
	 * This element is in an array. The array could grow and shrink or be
	 * reordered. All children that haven't already been validated are required to
	 * have a "key" property assigned to it.
	 *
	 * @internal
	 * @param {ReactElement} element Element that requires a key.
	 * @param {*} parentType element's parent's type.
	 */
	function validateExplicitKey(element, parentType) {
	  if (element._store.validated || element.key != null) {
	    return;
	  }
	  element._store.validated = true;

	  warnAndMonitorForKeyUse('Each child in an array or iterator should have a unique "key" prop.', element, parentType);
	}

	/**
	 * Warn if the key is being defined as an object property but has an incorrect
	 * value.
	 *
	 * @internal
	 * @param {string} name Property name of the key.
	 * @param {ReactElement} element Component that requires a key.
	 * @param {*} parentType element's parent's type.
	 */
	function validatePropertyKey(name, element, parentType) {
	  if (!NUMERIC_PROPERTY_REGEX.test(name)) {
	    return;
	  }
	  warnAndMonitorForKeyUse('Child objects should have non-numeric keys so ordering is preserved.', element, parentType);
	}

	/**
	 * Shared warning and monitoring code for the key warnings.
	 *
	 * @internal
	 * @param {string} message The base warning that gets output.
	 * @param {ReactElement} element Component that requires a key.
	 * @param {*} parentType element's parent's type.
	 */
	function warnAndMonitorForKeyUse(message, element, parentType) {
	  var ownerName = getCurrentOwnerDisplayName();
	  var parentName = typeof parentType === 'string' ? parentType : parentType.displayName || parentType.name;

	  var useName = ownerName || parentName;
	  var memoizer = ownerHasKeyUseWarning[message] || (ownerHasKeyUseWarning[message] = {});
	  if (memoizer.hasOwnProperty(useName)) {
	    return;
	  }
	  memoizer[useName] = true;

	  var parentOrOwnerAddendum = ownerName ? " Check the render method of " + ownerName + "." : parentName ? " Check the React.render call using <" + parentName + ">." : '';

	  // Usually the current owner is the offender, but if it accepts children as a
	  // property, it may be the creator of the child that's responsible for
	  // assigning it a key.
	  var childOwnerAddendum = '';
	  if (element && element._owner && element._owner !== ReactCurrentOwner.current) {
	    // Name of the component that originally created this child.
	    var childOwnerName = getName(element._owner);

	    childOwnerAddendum = " It was passed a child from " + childOwnerName + ".";
	  }

	  "production" !== process.env.NODE_ENV ? warning(false, message + '%s%s See https://fb.me/react-warning-keys for more information.', parentOrOwnerAddendum, childOwnerAddendum) : null;
	}

	/**
	 * Ensure that every element either is passed in a static location, in an
	 * array with an explicit keys property defined, or in an object literal
	 * with valid key property.
	 *
	 * @internal
	 * @param {ReactNode} node Statically passed child of any type.
	 * @param {*} parentType node's parent's type.
	 */
	function validateChildKeys(node, parentType) {
	  if (Array.isArray(node)) {
	    for (var i = 0; i < node.length; i++) {
	      var child = node[i];
	      if (ReactElement.isValidElement(child)) {
	        validateExplicitKey(child, parentType);
	      }
	    }
	  } else if (ReactElement.isValidElement(node)) {
	    // This element was passed in a valid location.
	    node._store.validated = true;
	  } else if (node) {
	    var iteratorFn = getIteratorFn(node);
	    // Entry iterators provide implicit keys.
	    if (iteratorFn) {
	      if (iteratorFn !== node.entries) {
	        var iterator = iteratorFn.call(node);
	        var step;
	        while (!(step = iterator.next()).done) {
	          if (ReactElement.isValidElement(step.value)) {
	            validateExplicitKey(step.value, parentType);
	          }
	        }
	      }
	    } else if (typeof node === 'object') {
	      var fragment = ReactFragment.extractIfFragment(node);
	      for (var key in fragment) {
	        if (fragment.hasOwnProperty(key)) {
	          validatePropertyKey(key, fragment[key], parentType);
	        }
	      }
	    }
	  }
	}

	/**
	 * Assert that the props are valid
	 *
	 * @param {string} componentName Name of the component for error messages.
	 * @param {object} propTypes Map of prop name to a ReactPropType
	 * @param {object} props
	 * @param {string} location e.g. "prop", "context", "child context"
	 * @private
	 */
	function checkPropTypes(componentName, propTypes, props, location) {
	  for (var propName in propTypes) {
	    if (propTypes.hasOwnProperty(propName)) {
	      var error;
	      // Prop type validation may throw. In case they do, we don't want to
	      // fail the render phase where it didn't fail before. So we log it.
	      // After these have been cleaned up, we'll let them throw.
	      try {
	        // This is intentionally an invariant that gets caught. It's the same
	        // behavior as without this statement except with a better message.
	        "production" !== process.env.NODE_ENV ? invariant(typeof propTypes[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(typeof propTypes[propName] === 'function');
	        error = propTypes[propName](props, propName, componentName, location);
	      } catch (ex) {
	        error = ex;
	      }
	      if (error instanceof Error && !(error.message in loggedTypeFailures)) {
	        // Only monitor this failure once because there tends to be a lot of the
	        // same error.
	        loggedTypeFailures[error.message] = true;

	        var addendum = getDeclarationErrorAddendum(this);
	        "production" !== process.env.NODE_ENV ? warning(false, 'Failed propType: %s%s', error.message, addendum) : null;
	      }
	    }
	  }
	}

	var warnedPropsMutations = {};

	/**
	 * Warn about mutating props when setting `propName` on `element`.
	 *
	 * @param {string} propName The string key within props that was set
	 * @param {ReactElement} element
	 */
	function warnForPropsMutation(propName, element) {
	  var type = element.type;
	  var elementName = typeof type === 'string' ? type : type.displayName;
	  var ownerName = element._owner ? element._owner.getPublicInstance().constructor.displayName : null;

	  var warningKey = propName + '|' + elementName + '|' + ownerName;
	  if (warnedPropsMutations.hasOwnProperty(warningKey)) {
	    return;
	  }
	  warnedPropsMutations[warningKey] = true;

	  var elementInfo = '';
	  if (elementName) {
	    elementInfo = ' <' + elementName + ' />';
	  }
	  var ownerInfo = '';
	  if (ownerName) {
	    ownerInfo = ' The element was created by ' + ownerName + '.';
	  }

	  "production" !== process.env.NODE_ENV ? warning(false, 'Don\'t set .props.%s of the React component%s. Instead, specify the ' + 'correct value when initially creating the element or use ' + 'React.cloneElement to make a new element with updated props.%s', propName, elementInfo, ownerInfo) : null;
	}

	// Inline Object.is polyfill
	function is(a, b) {
	  if (a !== a) {
	    // NaN
	    return b !== b;
	  }
	  if (a === 0 && b === 0) {
	    // +-0
	    return 1 / a === 1 / b;
	  }
	  return a === b;
	}

	/**
	 * Given an element, check if its props have been mutated since element
	 * creation (or the last call to this function). In particular, check if any
	 * new props have been added, which we can't directly catch by defining warning
	 * properties on the props object.
	 *
	 * @param {ReactElement} element
	 */
	function checkAndWarnForMutatedProps(element) {
	  if (!element._store) {
	    // Element was created using `new ReactElement` directly or with
	    // `ReactElement.createElement`; skip mutation checking
	    return;
	  }

	  var originalProps = element._store.originalProps;
	  var props = element.props;

	  for (var propName in props) {
	    if (props.hasOwnProperty(propName)) {
	      if (!originalProps.hasOwnProperty(propName) || !is(originalProps[propName], props[propName])) {
	        warnForPropsMutation(propName, element);

	        // Copy over the new value so that the two props objects match again
	        originalProps[propName] = props[propName];
	      }
	    }
	  }
	}

	/**
	 * Given an element, validate that its props follow the propTypes definition,
	 * provided by the type.
	 *
	 * @param {ReactElement} element
	 */
	function validatePropTypes(element) {
	  if (element.type == null) {
	    // This has already warned. Don't throw.
	    return;
	  }
	  // Extract the component class from the element. Converts string types
	  // to a composite class which may have propTypes.
	  // TODO: Validating a string's propTypes is not decoupled from the
	  // rendering target which is problematic.
	  var componentClass = ReactNativeComponent.getComponentClassForElement(element);
	  var name = componentClass.displayName || componentClass.name;
	  if (componentClass.propTypes) {
	    checkPropTypes(name, componentClass.propTypes, element.props, ReactPropTypeLocations.prop);
	  }
	  if (typeof componentClass.getDefaultProps === 'function') {
	    "production" !== process.env.NODE_ENV ? warning(componentClass.getDefaultProps.isReactClassApproved, 'getDefaultProps is only used on classic React.createClass ' + 'definitions. Use a static property named `defaultProps` instead.') : null;
	  }
	}

	var ReactElementValidator = {

	  checkAndWarnForMutatedProps: checkAndWarnForMutatedProps,

	  createElement: function createElement(type, props, children) {
	    // We warn in this case but don't throw. We expect the element creation to
	    // succeed and there will likely be errors in render.
	    "production" !== process.env.NODE_ENV ? warning(type != null, 'React.createElement: type should not be null or undefined. It should ' + 'be a string (for DOM elements) or a ReactClass (for composite ' + 'components).') : null;

	    var element = ReactElement.createElement.apply(this, arguments);

	    // The result can be nullish if a mock or a custom function is used.
	    // TODO: Drop this when these are no longer allowed as the type argument.
	    if (element == null) {
	      return element;
	    }

	    for (var i = 2; i < arguments.length; i++) {
	      validateChildKeys(arguments[i], type);
	    }

	    validatePropTypes(element);

	    return element;
	  },

	  createFactory: function createFactory(type) {
	    var validatedFactory = ReactElementValidator.createElement.bind(null, type);
	    // Legacy hook TODO: Warn if this is accessed
	    validatedFactory.type = type;

	    if ("production" !== process.env.NODE_ENV) {
	      try {
	        Object.defineProperty(validatedFactory, 'type', {
	          enumerable: false,
	          get: function get() {
	            "production" !== process.env.NODE_ENV ? warning(false, 'Factory.type is deprecated. Access the class directly ' + 'before passing it to createFactory.') : null;
	            Object.defineProperty(this, 'type', {
	              value: type
	            });
	            return type;
	          }
	        });
	      } catch (x) {
	        // IE will fail on defineProperty (es5-shim/sham too)
	      }
	    }

	    return validatedFactory;
	  },

	  cloneElement: function cloneElement(element, props, children) {
	    var newElement = ReactElement.cloneElement.apply(this, arguments);
	    for (var i = 2; i < arguments.length; i++) {
	      validateChildKeys(arguments[i], newElement.type);
	    }
	    validatePropTypes(newElement);
	    return newElement;
	  }

	};

	module.exports = ReactElementValidator;

/***/ },
/* 49 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactPropTypeLocations
	 */

	'use strict';

	var keyMirror = __webpack_require__(22);

	var ReactPropTypeLocations = keyMirror({
	  prop: null,
	  context: null,
	  childContext: null
	});

	module.exports = ReactPropTypeLocations;

/***/ },
/* 50 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactPropTypeLocationNames
	 */

	'use strict';

	var ReactPropTypeLocationNames = {};

	if ("production" !== process.env.NODE_ENV) {
	  ReactPropTypeLocationNames = {
	    prop: 'prop',
	    context: 'context',
	    childContext: 'child context'
	  };
	}

	module.exports = ReactPropTypeLocationNames;

/***/ },
/* 51 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactNativeComponent
	 */

	'use strict';

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);

	var autoGenerateWrapperClass = null;
	var genericComponentClass = null;
	// This registry keeps track of wrapper classes around native tags
	var tagToComponentClass = {};
	var textComponentClass = null;

	var ReactNativeComponentInjection = {
	  // This accepts a class that receives the tag string. This is a catch all
	  // that can render any kind of tag.
	  injectGenericComponentClass: function injectGenericComponentClass(componentClass) {
	    genericComponentClass = componentClass;
	  },
	  // This accepts a text component class that takes the text string to be
	  // rendered as props.
	  injectTextComponentClass: function injectTextComponentClass(componentClass) {
	    textComponentClass = componentClass;
	  },
	  // This accepts a keyed object with classes as values. Each key represents a
	  // tag. That particular tag will use this class instead of the generic one.
	  injectComponentClasses: function injectComponentClasses(componentClasses) {
	    assign(tagToComponentClass, componentClasses);
	  },
	  // Temporary hack since we expect DOM refs to behave like composites,
	  // for this release.
	  injectAutoWrapper: function injectAutoWrapper(wrapperFactory) {
	    autoGenerateWrapperClass = wrapperFactory;
	  }
	};

	/**
	 * Get a composite component wrapper class for a specific tag.
	 *
	 * @param {ReactElement} element The tag for which to get the class.
	 * @return {function} The React class constructor function.
	 */
	function getComponentClassForElement(element) {
	  if (typeof element.type === 'function') {
	    return element.type;
	  }
	  var tag = element.type;
	  var componentClass = tagToComponentClass[tag];
	  if (componentClass == null) {
	    tagToComponentClass[tag] = componentClass = autoGenerateWrapperClass(tag);
	  }
	  return componentClass;
	}

	/**
	 * Get a native internal component class for a specific tag.
	 *
	 * @param {ReactElement} element The element to create.
	 * @return {function} The internal class constructor function.
	 */
	function createInternalComponent(element) {
	  "production" !== process.env.NODE_ENV ? invariant(genericComponentClass, 'There is no registered component for the tag %s', element.type) : invariant(genericComponentClass);
	  return new genericComponentClass(element.type, element.props);
	}

	/**
	 * @param {ReactText} text
	 * @return {ReactComponent}
	 */
	function createInstanceForText(text) {
	  return new textComponentClass(text);
	}

	/**
	 * @param {ReactComponent} component
	 * @return {boolean}
	 */
	function isTextComponent(component) {
	  return component instanceof textComponentClass;
	}

	var ReactNativeComponent = {
	  getComponentClassForElement: getComponentClassForElement,
	  createInternalComponent: createInternalComponent,
	  createInstanceForText: createInstanceForText,
	  isTextComponent: isTextComponent,
	  injection: ReactNativeComponentInjection
	};

	module.exports = ReactNativeComponent;

/***/ },
/* 52 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule Transaction
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	/**
	 * `Transaction` creates a black box that is able to wrap any method such that
	 * certain invariants are maintained before and after the method is invoked
	 * (Even if an exception is thrown while invoking the wrapped method). Whoever
	 * instantiates a transaction can provide enforcers of the invariants at
	 * creation time. The `Transaction` class itself will supply one additional
	 * automatic invariant for you - the invariant that any transaction instance
	 * should not be run while it is already being run. You would typically create a
	 * single instance of a `Transaction` for reuse multiple times, that potentially
	 * is used to wrap several different methods. Wrappers are extremely simple -
	 * they only require implementing two methods.
	 *
	 * <pre>
	 *                       wrappers (injected at creation time)
	 *                                      +        +
	 *                                      |        |
	 *                    +-----------------|--------|--------------+
	 *                    |                 v        |              |
	 *                    |      +---------------+   |              |
	 *                    |   +--|    wrapper1   |---|----+         |
	 *                    |   |  +---------------+   v    |         |
	 *                    |   |          +-------------+  |         |
	 *                    |   |     +----|   wrapper2  |--------+   |
	 *                    |   |     |    +-------------+  |     |   |
	 *                    |   |     |                     |     |   |
	 *                    |   v     v                     v     v   | wrapper
	 *                    | +---+ +---+   +---------+   +---+ +---+ | invariants
	 * perform(anyMethod) | |   | |   |   |         |   |   | |   | | maintained
	 * +----------------->|-|---|-|---|-->|anyMethod|---|---|-|---|-|-------->
	 *                    | |   | |   |   |         |   |   | |   | |
	 *                    | |   | |   |   |         |   |   | |   | |
	 *                    | |   | |   |   |         |   |   | |   | |
	 *                    | +---+ +---+   +---------+   +---+ +---+ |
	 *                    |  initialize                    close    |
	 *                    +-----------------------------------------+
	 * </pre>
	 *
	 * Use cases:
	 * - Preserving the input selection ranges before/after reconciliation.
	 *   Restoring selection even in the event of an unexpected error.
	 * - Deactivating events while rearranging the DOM, preventing blurs/focuses,
	 *   while guaranteeing that afterwards, the event system is reactivated.
	 * - Flushing a queue of collected DOM mutations to the main UI thread after a
	 *   reconciliation takes place in a worker thread.
	 * - Invoking any collected `componentDidUpdate` callbacks after rendering new
	 *   content.
	 * - (Future use case): Wrapping particular flushes of the `ReactWorker` queue
	 *   to preserve the `scrollTop` (an automatic scroll aware DOM).
	 * - (Future use case): Layout calculations before and after DOM updates.
	 *
	 * Transactional plugin API:
	 * - A module that has an `initialize` method that returns any precomputation.
	 * - and a `close` method that accepts the precomputation. `close` is invoked
	 *   when the wrapped process is completed, or has failed.
	 *
	 * @param {Array<TransactionalWrapper>} transactionWrapper Wrapper modules
	 * that implement `initialize` and `close`.
	 * @return {Transaction} Single transaction for reuse in thread.
	 *
	 * @class Transaction
	 */
	var Mixin = {
	  /**
	   * Sets up this instance so that it is prepared for collecting metrics. Does
	   * so such that this setup method may be used on an instance that is already
	   * initialized, in a way that does not consume additional memory upon reuse.
	   * That can be useful if you decide to make your subclass of this mixin a
	   * "PooledClass".
	   */
	  reinitializeTransaction: function reinitializeTransaction() {
	    this.transactionWrappers = this.getTransactionWrappers();
	    if (!this.wrapperInitData) {
	      this.wrapperInitData = [];
	    } else {
	      this.wrapperInitData.length = 0;
	    }
	    this._isInTransaction = false;
	  },

	  _isInTransaction: false,

	  /**
	   * @abstract
	   * @return {Array<TransactionWrapper>} Array of transaction wrappers.
	   */
	  getTransactionWrappers: null,

	  isInTransaction: function isInTransaction() {
	    return !!this._isInTransaction;
	  },

	  /**
	   * Executes the function within a safety window. Use this for the top level
	   * methods that result in large amounts of computation/mutations that would
	   * need to be safety checked.
	   *
	   * @param {function} method Member of scope to call.
	   * @param {Object} scope Scope to invoke from.
	   * @param {Object?=} args... Arguments to pass to the method (optional).
	   *                           Helps prevent need to bind in many cases.
	   * @return Return value from `method`.
	   */
	  perform: function perform(method, scope, a, b, c, d, e, f) {
	    "production" !== process.env.NODE_ENV ? invariant(!this.isInTransaction(), 'Transaction.perform(...): Cannot initialize a transaction when there ' + 'is already an outstanding transaction.') : invariant(!this.isInTransaction());
	    var errorThrown;
	    var ret;
	    try {
	      this._isInTransaction = true;
	      // Catching errors makes debugging more difficult, so we start with
	      // errorThrown set to true before setting it to false after calling
	      // close -- if it's still set to true in the finally block, it means
	      // one of these calls threw.
	      errorThrown = true;
	      this.initializeAll(0);
	      ret = method.call(scope, a, b, c, d, e, f);
	      errorThrown = false;
	    } finally {
	      try {
	        if (errorThrown) {
	          // If `method` throws, prefer to show that stack trace over any thrown
	          // by invoking `closeAll`.
	          try {
	            this.closeAll(0);
	          } catch (err) {}
	        } else {
	          // Since `method` didn't throw, we don't want to silence the exception
	          // here.
	          this.closeAll(0);
	        }
	      } finally {
	        this._isInTransaction = false;
	      }
	    }
	    return ret;
	  },

	  initializeAll: function initializeAll(startIndex) {
	    var transactionWrappers = this.transactionWrappers;
	    for (var i = startIndex; i < transactionWrappers.length; i++) {
	      var wrapper = transactionWrappers[i];
	      try {
	        // Catching errors makes debugging more difficult, so we start with the
	        // OBSERVED_ERROR state before overwriting it with the real return value
	        // of initialize -- if it's still set to OBSERVED_ERROR in the finally
	        // block, it means wrapper.initialize threw.
	        this.wrapperInitData[i] = Transaction.OBSERVED_ERROR;
	        this.wrapperInitData[i] = wrapper.initialize ? wrapper.initialize.call(this) : null;
	      } finally {
	        if (this.wrapperInitData[i] === Transaction.OBSERVED_ERROR) {
	          // The initializer for wrapper i threw an error; initialize the
	          // remaining wrappers but silence any exceptions from them to ensure
	          // that the first error is the one to bubble up.
	          try {
	            this.initializeAll(i + 1);
	          } catch (err) {}
	        }
	      }
	    }
	  },

	  /**
	   * Invokes each of `this.transactionWrappers.close[i]` functions, passing into
	   * them the respective return values of `this.transactionWrappers.init[i]`
	   * (`close`rs that correspond to initializers that failed will not be
	   * invoked).
	   */
	  closeAll: function closeAll(startIndex) {
	    "production" !== process.env.NODE_ENV ? invariant(this.isInTransaction(), 'Transaction.closeAll(): Cannot close transaction when none are open.') : invariant(this.isInTransaction());
	    var transactionWrappers = this.transactionWrappers;
	    for (var i = startIndex; i < transactionWrappers.length; i++) {
	      var wrapper = transactionWrappers[i];
	      var initData = this.wrapperInitData[i];
	      var errorThrown;
	      try {
	        // Catching errors makes debugging more difficult, so we start with
	        // errorThrown set to true before setting it to false after calling
	        // close -- if it's still set to true in the finally block, it means
	        // wrapper.close threw.
	        errorThrown = true;
	        if (initData !== Transaction.OBSERVED_ERROR && wrapper.close) {
	          wrapper.close.call(this, initData);
	        }
	        errorThrown = false;
	      } finally {
	        if (errorThrown) {
	          // The closer for wrapper i threw an error; close the remaining
	          // wrappers but silence any exceptions from them to ensure that the
	          // first error is the one to bubble up.
	          try {
	            this.closeAll(i + 1);
	          } catch (e) {}
	        }
	      }
	    }
	    this.wrapperInitData.length = 0;
	  }
	};

	var Transaction = {

	  Mixin: Mixin,

	  /**
	   * Token to look for to determine if an error occured.
	   */
	  OBSERVED_ERROR: {}

	};

	module.exports = Transaction;

/***/ },
/* 53 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactClass
	 */

	'use strict';

	var ReactComponent = __webpack_require__(38);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactElement = __webpack_require__(27);
	var ReactErrorUtils = __webpack_require__(54);
	var ReactInstanceMap = __webpack_require__(41);
	var ReactLifeCycle = __webpack_require__(40);
	var ReactPropTypeLocations = __webpack_require__(49);
	var ReactPropTypeLocationNames = __webpack_require__(50);
	var ReactUpdateQueue = __webpack_require__(39);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);
	var keyMirror = __webpack_require__(22);
	var keyOf = __webpack_require__(55);
	var warning = __webpack_require__(31);

	var MIXINS_KEY = keyOf({ mixins: null });

	/**
	 * Policies that describe methods in `ReactClassInterface`.
	 */
	var SpecPolicy = keyMirror({
	  /**
	   * These methods may be defined only once by the class specification or mixin.
	   */
	  DEFINE_ONCE: null,
	  /**
	   * These methods may be defined by both the class specification and mixins.
	   * Subsequent definitions will be chained. These methods must return void.
	   */
	  DEFINE_MANY: null,
	  /**
	   * These methods are overriding the base class.
	   */
	  OVERRIDE_BASE: null,
	  /**
	   * These methods are similar to DEFINE_MANY, except we assume they return
	   * objects. We try to merge the keys of the return values of all the mixed in
	   * functions. If there is a key conflict we throw.
	   */
	  DEFINE_MANY_MERGED: null
	});

	var injectedMixins = [];

	/**
	 * Composite components are higher-level components that compose other composite
	 * or native components.
	 *
	 * To create a new type of `ReactClass`, pass a specification of
	 * your new class to `React.createClass`. The only requirement of your class
	 * specification is that you implement a `render` method.
	 *
	 *   var MyComponent = React.createClass({
	 *     render: function() {
	 *       return <div>Hello World</div>;
	 *     }
	 *   });
	 *
	 * The class specification supports a specific protocol of methods that have
	 * special meaning (e.g. `render`). See `ReactClassInterface` for
	 * more the comprehensive protocol. Any other properties and methods in the
	 * class specification will available on the prototype.
	 *
	 * @interface ReactClassInterface
	 * @internal
	 */
	var ReactClassInterface = {

	  /**
	   * An array of Mixin objects to include when defining your component.
	   *
	   * @type {array}
	   * @optional
	   */
	  mixins: SpecPolicy.DEFINE_MANY,

	  /**
	   * An object containing properties and methods that should be defined on
	   * the component's constructor instead of its prototype (static methods).
	   *
	   * @type {object}
	   * @optional
	   */
	  statics: SpecPolicy.DEFINE_MANY,

	  /**
	   * Definition of prop types for this component.
	   *
	   * @type {object}
	   * @optional
	   */
	  propTypes: SpecPolicy.DEFINE_MANY,

	  /**
	   * Definition of context types for this component.
	   *
	   * @type {object}
	   * @optional
	   */
	  contextTypes: SpecPolicy.DEFINE_MANY,

	  /**
	   * Definition of context types this component sets for its children.
	   *
	   * @type {object}
	   * @optional
	   */
	  childContextTypes: SpecPolicy.DEFINE_MANY,

	  // ==== Definition methods ====

	  /**
	   * Invoked when the component is mounted. Values in the mapping will be set on
	   * `this.props` if that prop is not specified (i.e. using an `in` check).
	   *
	   * This method is invoked before `getInitialState` and therefore cannot rely
	   * on `this.state` or use `this.setState`.
	   *
	   * @return {object}
	   * @optional
	   */
	  getDefaultProps: SpecPolicy.DEFINE_MANY_MERGED,

	  /**
	   * Invoked once before the component is mounted. The return value will be used
	   * as the initial value of `this.state`.
	   *
	   *   getInitialState: function() {
	   *     return {
	   *       isOn: false,
	   *       fooBaz: new BazFoo()
	   *     }
	   *   }
	   *
	   * @return {object}
	   * @optional
	   */
	  getInitialState: SpecPolicy.DEFINE_MANY_MERGED,

	  /**
	   * @return {object}
	   * @optional
	   */
	  getChildContext: SpecPolicy.DEFINE_MANY_MERGED,

	  /**
	   * Uses props from `this.props` and state from `this.state` to render the
	   * structure of the component.
	   *
	   * No guarantees are made about when or how often this method is invoked, so
	   * it must not have side effects.
	   *
	   *   render: function() {
	   *     var name = this.props.name;
	   *     return <div>Hello, {name}!</div>;
	   *   }
	   *
	   * @return {ReactComponent}
	   * @nosideeffects
	   * @required
	   */
	  render: SpecPolicy.DEFINE_ONCE,

	  // ==== Delegate methods ====

	  /**
	   * Invoked when the component is initially created and about to be mounted.
	   * This may have side effects, but any external subscriptions or data created
	   * by this method must be cleaned up in `componentWillUnmount`.
	   *
	   * @optional
	   */
	  componentWillMount: SpecPolicy.DEFINE_MANY,

	  /**
	   * Invoked when the component has been mounted and has a DOM representation.
	   * However, there is no guarantee that the DOM node is in the document.
	   *
	   * Use this as an opportunity to operate on the DOM when the component has
	   * been mounted (initialized and rendered) for the first time.
	   *
	   * @param {DOMElement} rootNode DOM element representing the component.
	   * @optional
	   */
	  componentDidMount: SpecPolicy.DEFINE_MANY,

	  /**
	   * Invoked before the component receives new props.
	   *
	   * Use this as an opportunity to react to a prop transition by updating the
	   * state using `this.setState`. Current props are accessed via `this.props`.
	   *
	   *   componentWillReceiveProps: function(nextProps, nextContext) {
	   *     this.setState({
	   *       likesIncreasing: nextProps.likeCount > this.props.likeCount
	   *     });
	   *   }
	   *
	   * NOTE: There is no equivalent `componentWillReceiveState`. An incoming prop
	   * transition may cause a state change, but the opposite is not true. If you
	   * need it, you are probably looking for `componentWillUpdate`.
	   *
	   * @param {object} nextProps
	   * @optional
	   */
	  componentWillReceiveProps: SpecPolicy.DEFINE_MANY,

	  /**
	   * Invoked while deciding if the component should be updated as a result of
	   * receiving new props, state and/or context.
	   *
	   * Use this as an opportunity to `return false` when you're certain that the
	   * transition to the new props/state/context will not require a component
	   * update.
	   *
	   *   shouldComponentUpdate: function(nextProps, nextState, nextContext) {
	   *     return !equal(nextProps, this.props) ||
	   *       !equal(nextState, this.state) ||
	   *       !equal(nextContext, this.context);
	   *   }
	   *
	   * @param {object} nextProps
	   * @param {?object} nextState
	   * @param {?object} nextContext
	   * @return {boolean} True if the component should update.
	   * @optional
	   */
	  shouldComponentUpdate: SpecPolicy.DEFINE_ONCE,

	  /**
	   * Invoked when the component is about to update due to a transition from
	   * `this.props`, `this.state` and `this.context` to `nextProps`, `nextState`
	   * and `nextContext`.
	   *
	   * Use this as an opportunity to perform preparation before an update occurs.
	   *
	   * NOTE: You **cannot** use `this.setState()` in this method.
	   *
	   * @param {object} nextProps
	   * @param {?object} nextState
	   * @param {?object} nextContext
	   * @param {ReactReconcileTransaction} transaction
	   * @optional
	   */
	  componentWillUpdate: SpecPolicy.DEFINE_MANY,

	  /**
	   * Invoked when the component's DOM representation has been updated.
	   *
	   * Use this as an opportunity to operate on the DOM when the component has
	   * been updated.
	   *
	   * @param {object} prevProps
	   * @param {?object} prevState
	   * @param {?object} prevContext
	   * @param {DOMElement} rootNode DOM element representing the component.
	   * @optional
	   */
	  componentDidUpdate: SpecPolicy.DEFINE_MANY,

	  /**
	   * Invoked when the component is about to be removed from its parent and have
	   * its DOM representation destroyed.
	   *
	   * Use this as an opportunity to deallocate any external resources.
	   *
	   * NOTE: There is no `componentDidUnmount` since your component will have been
	   * destroyed by that point.
	   *
	   * @optional
	   */
	  componentWillUnmount: SpecPolicy.DEFINE_MANY,

	  // ==== Advanced methods ====

	  /**
	   * Updates the component's currently mounted DOM representation.
	   *
	   * By default, this implements React's rendering and reconciliation algorithm.
	   * Sophisticated clients may wish to override this.
	   *
	   * @param {ReactReconcileTransaction} transaction
	   * @internal
	   * @overridable
	   */
	  updateComponent: SpecPolicy.OVERRIDE_BASE

	};

	/**
	 * Mapping from class specification keys to special processing functions.
	 *
	 * Although these are declared like instance properties in the specification
	 * when defining classes using `React.createClass`, they are actually static
	 * and are accessible on the constructor instead of the prototype. Despite
	 * being static, they must be defined outside of the "statics" key under
	 * which all other static methods are defined.
	 */
	var RESERVED_SPEC_KEYS = {
	  displayName: function displayName(Constructor, _displayName) {
	    Constructor.displayName = _displayName;
	  },
	  mixins: function mixins(Constructor, _mixins) {
	    if (_mixins) {
	      for (var i = 0; i < _mixins.length; i++) {
	        mixSpecIntoComponent(Constructor, _mixins[i]);
	      }
	    }
	  },
	  childContextTypes: function childContextTypes(Constructor, _childContextTypes) {
	    if ("production" !== process.env.NODE_ENV) {
	      validateTypeDef(Constructor, _childContextTypes, ReactPropTypeLocations.childContext);
	    }
	    Constructor.childContextTypes = assign({}, Constructor.childContextTypes, _childContextTypes);
	  },
	  contextTypes: function contextTypes(Constructor, _contextTypes) {
	    if ("production" !== process.env.NODE_ENV) {
	      validateTypeDef(Constructor, _contextTypes, ReactPropTypeLocations.context);
	    }
	    Constructor.contextTypes = assign({}, Constructor.contextTypes, _contextTypes);
	  },
	  /**
	   * Special case getDefaultProps which should move into statics but requires
	   * automatic merging.
	   */
	  getDefaultProps: function getDefaultProps(Constructor, _getDefaultProps) {
	    if (Constructor.getDefaultProps) {
	      Constructor.getDefaultProps = createMergedResultFunction(Constructor.getDefaultProps, _getDefaultProps);
	    } else {
	      Constructor.getDefaultProps = _getDefaultProps;
	    }
	  },
	  propTypes: function propTypes(Constructor, _propTypes) {
	    if ("production" !== process.env.NODE_ENV) {
	      validateTypeDef(Constructor, _propTypes, ReactPropTypeLocations.prop);
	    }
	    Constructor.propTypes = assign({}, Constructor.propTypes, _propTypes);
	  },
	  statics: function statics(Constructor, _statics) {
	    mixStaticSpecIntoComponent(Constructor, _statics);
	  }
	};

	function validateTypeDef(Constructor, typeDef, location) {
	  for (var propName in typeDef) {
	    if (typeDef.hasOwnProperty(propName)) {
	      // use a warning instead of an invariant so components
	      // don't show up in prod but not in __DEV__
	      "production" !== process.env.NODE_ENV ? warning(typeof typeDef[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually from ' + 'React.PropTypes.', Constructor.displayName || 'ReactClass', ReactPropTypeLocationNames[location], propName) : null;
	    }
	  }
	}

	function validateMethodOverride(proto, name) {
	  var specPolicy = ReactClassInterface.hasOwnProperty(name) ? ReactClassInterface[name] : null;

	  // Disallow overriding of base class methods unless explicitly allowed.
	  if (ReactClassMixin.hasOwnProperty(name)) {
	    "production" !== process.env.NODE_ENV ? invariant(specPolicy === SpecPolicy.OVERRIDE_BASE, 'ReactClassInterface: You are attempting to override ' + '`%s` from your class specification. Ensure that your method names ' + 'do not overlap with React methods.', name) : invariant(specPolicy === SpecPolicy.OVERRIDE_BASE);
	  }

	  // Disallow defining methods more than once unless explicitly allowed.
	  if (proto.hasOwnProperty(name)) {
	    "production" !== process.env.NODE_ENV ? invariant(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED, 'ReactClassInterface: You are attempting to define ' + '`%s` on your component more than once. This conflict may be due ' + 'to a mixin.', name) : invariant(specPolicy === SpecPolicy.DEFINE_MANY || specPolicy === SpecPolicy.DEFINE_MANY_MERGED);
	  }
	}

	/**
	 * Mixin helper which handles policy validation and reserved
	 * specification keys when building React classses.
	 */
	function mixSpecIntoComponent(Constructor, spec) {
	  if (!spec) {
	    return;
	  }

	  "production" !== process.env.NODE_ENV ? invariant(typeof spec !== 'function', 'ReactClass: You\'re attempting to ' + 'use a component class as a mixin. Instead, just use a regular object.') : invariant(typeof spec !== 'function');
	  "production" !== process.env.NODE_ENV ? invariant(!ReactElement.isValidElement(spec), 'ReactClass: You\'re attempting to ' + 'use a component as a mixin. Instead, just use a regular object.') : invariant(!ReactElement.isValidElement(spec));

	  var proto = Constructor.prototype;

	  // By handling mixins before any other properties, we ensure the same
	  // chaining order is applied to methods with DEFINE_MANY policy, whether
	  // mixins are listed before or after these methods in the spec.
	  if (spec.hasOwnProperty(MIXINS_KEY)) {
	    RESERVED_SPEC_KEYS.mixins(Constructor, spec.mixins);
	  }

	  for (var name in spec) {
	    if (!spec.hasOwnProperty(name)) {
	      continue;
	    }

	    if (name === MIXINS_KEY) {
	      // We have already handled mixins in a special case above
	      continue;
	    }

	    var property = spec[name];
	    validateMethodOverride(proto, name);

	    if (RESERVED_SPEC_KEYS.hasOwnProperty(name)) {
	      RESERVED_SPEC_KEYS[name](Constructor, property);
	    } else {
	      // Setup methods on prototype:
	      // The following member methods should not be automatically bound:
	      // 1. Expected ReactClass methods (in the "interface").
	      // 2. Overridden methods (that were mixed in).
	      var isReactClassMethod = ReactClassInterface.hasOwnProperty(name);
	      var isAlreadyDefined = proto.hasOwnProperty(name);
	      var markedDontBind = property && property.__reactDontBind;
	      var isFunction = typeof property === 'function';
	      var shouldAutoBind = isFunction && !isReactClassMethod && !isAlreadyDefined && !markedDontBind;

	      if (shouldAutoBind) {
	        if (!proto.__reactAutoBindMap) {
	          proto.__reactAutoBindMap = {};
	        }
	        proto.__reactAutoBindMap[name] = property;
	        proto[name] = property;
	      } else {
	        if (isAlreadyDefined) {
	          var specPolicy = ReactClassInterface[name];

	          // These cases should already be caught by validateMethodOverride
	          "production" !== process.env.NODE_ENV ? invariant(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY), 'ReactClass: Unexpected spec policy %s for key %s ' + 'when mixing in component specs.', specPolicy, name) : invariant(isReactClassMethod && (specPolicy === SpecPolicy.DEFINE_MANY_MERGED || specPolicy === SpecPolicy.DEFINE_MANY));

	          // For methods which are defined more than once, call the existing
	          // methods before calling the new property, merging if appropriate.
	          if (specPolicy === SpecPolicy.DEFINE_MANY_MERGED) {
	            proto[name] = createMergedResultFunction(proto[name], property);
	          } else if (specPolicy === SpecPolicy.DEFINE_MANY) {
	            proto[name] = createChainedFunction(proto[name], property);
	          }
	        } else {
	          proto[name] = property;
	          if ("production" !== process.env.NODE_ENV) {
	            // Add verbose displayName to the function, which helps when looking
	            // at profiling tools.
	            if (typeof property === 'function' && spec.displayName) {
	              proto[name].displayName = spec.displayName + '_' + name;
	            }
	          }
	        }
	      }
	    }
	  }
	}

	function mixStaticSpecIntoComponent(Constructor, statics) {
	  if (!statics) {
	    return;
	  }
	  for (var name in statics) {
	    var property = statics[name];
	    if (!statics.hasOwnProperty(name)) {
	      continue;
	    }

	    var isReserved = (name in RESERVED_SPEC_KEYS);
	    "production" !== process.env.NODE_ENV ? invariant(!isReserved, 'ReactClass: You are attempting to define a reserved ' + 'property, `%s`, that shouldn\'t be on the "statics" key. Define it ' + 'as an instance property instead; it will still be accessible on the ' + 'constructor.', name) : invariant(!isReserved);

	    var isInherited = (name in Constructor);
	    "production" !== process.env.NODE_ENV ? invariant(!isInherited, 'ReactClass: You are attempting to define ' + '`%s` on your component more than once. This conflict may be ' + 'due to a mixin.', name) : invariant(!isInherited);
	    Constructor[name] = property;
	  }
	}

	/**
	 * Merge two objects, but throw if both contain the same key.
	 *
	 * @param {object} one The first object, which is mutated.
	 * @param {object} two The second object
	 * @return {object} one after it has been mutated to contain everything in two.
	 */
	function mergeIntoWithNoDuplicateKeys(one, two) {
	  "production" !== process.env.NODE_ENV ? invariant(one && two && typeof one === 'object' && typeof two === 'object', 'mergeIntoWithNoDuplicateKeys(): Cannot merge non-objects.') : invariant(one && two && typeof one === 'object' && typeof two === 'object');

	  for (var key in two) {
	    if (two.hasOwnProperty(key)) {
	      "production" !== process.env.NODE_ENV ? invariant(one[key] === undefined, 'mergeIntoWithNoDuplicateKeys(): ' + 'Tried to merge two objects with the same key: `%s`. This conflict ' + 'may be due to a mixin; in particular, this may be caused by two ' + 'getInitialState() or getDefaultProps() methods returning objects ' + 'with clashing keys.', key) : invariant(one[key] === undefined);
	      one[key] = two[key];
	    }
	  }
	  return one;
	}

	/**
	 * Creates a function that invokes two functions and merges their return values.
	 *
	 * @param {function} one Function to invoke first.
	 * @param {function} two Function to invoke second.
	 * @return {function} Function that invokes the two argument functions.
	 * @private
	 */
	function createMergedResultFunction(one, two) {
	  return function mergedResult() {
	    var a = one.apply(this, arguments);
	    var b = two.apply(this, arguments);
	    if (a == null) {
	      return b;
	    } else if (b == null) {
	      return a;
	    }
	    var c = {};
	    mergeIntoWithNoDuplicateKeys(c, a);
	    mergeIntoWithNoDuplicateKeys(c, b);
	    return c;
	  };
	}

	/**
	 * Creates a function that invokes two functions and ignores their return vales.
	 *
	 * @param {function} one Function to invoke first.
	 * @param {function} two Function to invoke second.
	 * @return {function} Function that invokes the two argument functions.
	 * @private
	 */
	function createChainedFunction(one, two) {
	  return function chainedFunction() {
	    one.apply(this, arguments);
	    two.apply(this, arguments);
	  };
	}

	/**
	 * Binds a method to the component.
	 *
	 * @param {object} component Component whose method is going to be bound.
	 * @param {function} method Method to be bound.
	 * @return {function} The bound method.
	 */
	function bindAutoBindMethod(component, method) {
	  var boundMethod = method.bind(component);
	  if ("production" !== process.env.NODE_ENV) {
	    boundMethod.__reactBoundContext = component;
	    boundMethod.__reactBoundMethod = method;
	    boundMethod.__reactBoundArguments = null;
	    var componentName = component.constructor.displayName;
	    var _bind = boundMethod.bind;
	    /* eslint-disable block-scoped-var, no-undef */
	    boundMethod.bind = function (newThis) {
	      for (var args = [], $__0 = 1, $__1 = arguments.length; $__0 < $__1; $__0++) args.push(arguments[$__0]);
	      // User is trying to bind() an autobound method; we effectively will
	      // ignore the value of "this" that the user is trying to use, so
	      // let's warn.
	      if (newThis !== component && newThis !== null) {
	        "production" !== process.env.NODE_ENV ? warning(false, 'bind(): React component methods may only be bound to the ' + 'component instance. See %s', componentName) : null;
	      } else if (!args.length) {
	        "production" !== process.env.NODE_ENV ? warning(false, 'bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See %s', componentName) : null;
	        return boundMethod;
	      }
	      var reboundMethod = _bind.apply(boundMethod, arguments);
	      reboundMethod.__reactBoundContext = component;
	      reboundMethod.__reactBoundMethod = method;
	      reboundMethod.__reactBoundArguments = args;
	      return reboundMethod;
	      /* eslint-enable */
	    };
	  }
	  return boundMethod;
	}

	/**
	 * Binds all auto-bound methods in a component.
	 *
	 * @param {object} component Component whose method is going to be bound.
	 */
	function bindAutoBindMethods(component) {
	  for (var autoBindKey in component.__reactAutoBindMap) {
	    if (component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) {
	      var method = component.__reactAutoBindMap[autoBindKey];
	      component[autoBindKey] = bindAutoBindMethod(component, ReactErrorUtils.guard(method, component.constructor.displayName + '.' + autoBindKey));
	    }
	  }
	}

	var typeDeprecationDescriptor = {
	  enumerable: false,
	  get: function get() {
	    var displayName = this.displayName || this.name || 'Component';
	    "production" !== process.env.NODE_ENV ? warning(false, '%s.type is deprecated. Use %s directly to access the class.', displayName, displayName) : null;
	    Object.defineProperty(this, 'type', {
	      value: this
	    });
	    return this;
	  }
	};

	/**
	 * Add more to the ReactClass base class. These are all legacy features and
	 * therefore not already part of the modern ReactComponent.
	 */
	var ReactClassMixin = {

	  /**
	   * TODO: This will be deprecated because state should always keep a consistent
	   * type signature and the only use case for this, is to avoid that.
	   */
	  replaceState: function replaceState(newState, callback) {
	    ReactUpdateQueue.enqueueReplaceState(this, newState);
	    if (callback) {
	      ReactUpdateQueue.enqueueCallback(this, callback);
	    }
	  },

	  /**
	   * Checks whether or not this composite component is mounted.
	   * @return {boolean} True if mounted, false otherwise.
	   * @protected
	   * @final
	   */
	  isMounted: function isMounted() {
	    if ("production" !== process.env.NODE_ENV) {
	      var owner = ReactCurrentOwner.current;
	      if (owner !== null) {
	        "production" !== process.env.NODE_ENV ? warning(owner._warnedAboutRefsInRender, '%s is accessing isMounted inside its render() function. ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : null;
	        owner._warnedAboutRefsInRender = true;
	      }
	    }
	    var internalInstance = ReactInstanceMap.get(this);
	    return internalInstance && internalInstance !== ReactLifeCycle.currentlyMountingInstance;
	  },

	  /**
	   * Sets a subset of the props.
	   *
	   * @param {object} partialProps Subset of the next props.
	   * @param {?function} callback Called after props are updated.
	   * @final
	   * @public
	   * @deprecated
	   */
	  setProps: function setProps(partialProps, callback) {
	    ReactUpdateQueue.enqueueSetProps(this, partialProps);
	    if (callback) {
	      ReactUpdateQueue.enqueueCallback(this, callback);
	    }
	  },

	  /**
	   * Replace all the props.
	   *
	   * @param {object} newProps Subset of the next props.
	   * @param {?function} callback Called after props are updated.
	   * @final
	   * @public
	   * @deprecated
	   */
	  replaceProps: function replaceProps(newProps, callback) {
	    ReactUpdateQueue.enqueueReplaceProps(this, newProps);
	    if (callback) {
	      ReactUpdateQueue.enqueueCallback(this, callback);
	    }
	  }
	};

	var ReactClassComponent = function ReactClassComponent() {};
	assign(ReactClassComponent.prototype, ReactComponent.prototype, ReactClassMixin);

	/**
	 * Module for creating composite components.
	 *
	 * @class ReactClass
	 */
	var ReactClass = {

	  /**
	   * Creates a composite component class given a class specification.
	   *
	   * @param {object} spec Class specification (which must define `render`).
	   * @return {function} Component constructor function.
	   * @public
	   */
	  createClass: function createClass(spec) {
	    var Constructor = function Constructor(props, context) {
	      // This constructor is overridden by mocks. The argument is used
	      // by mocks to assert on what gets mounted.

	      if ("production" !== process.env.NODE_ENV) {
	        "production" !== process.env.NODE_ENV ? warning(this instanceof Constructor, 'Something is calling a React component directly. Use a factory or ' + 'JSX instead. See: https://fb.me/react-legacyfactory') : null;
	      }

	      // Wire up auto-binding
	      if (this.__reactAutoBindMap) {
	        bindAutoBindMethods(this);
	      }

	      this.props = props;
	      this.context = context;
	      this.state = null;

	      // ReactClasses doesn't have constructors. Instead, they use the
	      // getInitialState and componentWillMount methods for initialization.

	      var initialState = this.getInitialState ? this.getInitialState() : null;
	      if ("production" !== process.env.NODE_ENV) {
	        // We allow auto-mocks to proceed as if they're returning null.
	        if (typeof initialState === 'undefined' && this.getInitialState._isMockFunction) {
	          // This is probably bad practice. Consider warning here and
	          // deprecating this convenience.
	          initialState = null;
	        }
	      }
	      "production" !== process.env.NODE_ENV ? invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.getInitialState(): must return an object or null', Constructor.displayName || 'ReactCompositeComponent') : invariant(typeof initialState === 'object' && !Array.isArray(initialState));

	      this.state = initialState;
	    };
	    Constructor.prototype = new ReactClassComponent();
	    Constructor.prototype.constructor = Constructor;

	    injectedMixins.forEach(mixSpecIntoComponent.bind(null, Constructor));

	    mixSpecIntoComponent(Constructor, spec);

	    // Initialize the defaultProps property after all mixins have been merged
	    if (Constructor.getDefaultProps) {
	      Constructor.defaultProps = Constructor.getDefaultProps();
	    }

	    if ("production" !== process.env.NODE_ENV) {
	      // This is a tag to indicate that the use of these method names is ok,
	      // since it's used with createClass. If it's not, then it's likely a
	      // mistake so we'll warn you to use the static property, property
	      // initializer or constructor respectively.
	      if (Constructor.getDefaultProps) {
	        Constructor.getDefaultProps.isReactClassApproved = {};
	      }
	      if (Constructor.prototype.getInitialState) {
	        Constructor.prototype.getInitialState.isReactClassApproved = {};
	      }
	    }

	    "production" !== process.env.NODE_ENV ? invariant(Constructor.prototype.render, 'createClass(...): Class specification must implement a `render` method.') : invariant(Constructor.prototype.render);

	    if ("production" !== process.env.NODE_ENV) {
	      "production" !== process.env.NODE_ENV ? warning(!Constructor.prototype.componentShouldUpdate, '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', spec.displayName || 'A component') : null;
	    }

	    // Reduce time spent doing lookups by setting these on the prototype.
	    for (var methodName in ReactClassInterface) {
	      if (!Constructor.prototype[methodName]) {
	        Constructor.prototype[methodName] = null;
	      }
	    }

	    // Legacy hook
	    Constructor.type = Constructor;
	    if ("production" !== process.env.NODE_ENV) {
	      try {
	        Object.defineProperty(Constructor, 'type', typeDeprecationDescriptor);
	      } catch (x) {
	        // IE will fail on defineProperty (es5-shim/sham too)
	      }
	    }

	    return Constructor;
	  },

	  injection: {
	    injectMixin: function injectMixin(mixin) {
	      injectedMixins.push(mixin);
	    }
	  }

	};

	module.exports = ReactClass;

/***/ },
/* 54 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactErrorUtils
	 * @typechecks
	 */

	"use strict";

	var ReactErrorUtils = {
	  /**
	   * Creates a guarded version of a function. This is supposed to make debugging
	   * of event handlers easier. To aid debugging with the browser's debugger,
	   * this currently simply returns the original function.
	   *
	   * @param {function} func Function to be executed
	   * @param {string} name The name of the guard
	   * @return {function}
	   */
	  guard: function guard(func, name) {
	    return func;
	  }
	};

	module.exports = ReactErrorUtils;

/***/ },
/* 55 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule keyOf
	 */

	/**
	 * Allows extraction of a minified key. Let's the build system minify keys
	 * without loosing the ability to dynamically use key strings as values
	 * themselves. Pass in an object with a single key/val pair and it will return
	 * you the string key of that single record. Suppose you want to grab the
	 * value for a key 'className' inside of an object. Key/val minification may
	 * have aliased that key to be 'xa12'. keyOf({className: null}) will return
	 * 'xa12' in that case. Resolve keys you want to use once at startup time, then
	 * reuse those resolutions.
	 */
	"use strict";

	var keyOf = function keyOf(oneKeyObj) {
	  var key;
	  for (key in oneKeyObj) {
	    if (!oneKeyObj.hasOwnProperty(key)) {
	      continue;
	    }
	    return key;
	  }
	  return null;
	};

	module.exports = keyOf;

/***/ },
/* 56 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOM
	 * @typechecks static-only
	 */

	'use strict';

	var ReactElement = __webpack_require__(27);
	var ReactElementValidator = __webpack_require__(48);

	var mapObject = __webpack_require__(57);

	/**
	 * Create a factory that creates HTML tag elements.
	 *
	 * @param {string} tag Tag name (e.g. `div`).
	 * @private
	 */
	function createDOMFactory(tag) {
	  if ("production" !== process.env.NODE_ENV) {
	    return ReactElementValidator.createFactory(tag);
	  }
	  return ReactElement.createFactory(tag);
	}

	/**
	 * Creates a mapping from supported HTML tags to `ReactDOMComponent` classes.
	 * This is also accessible via `React.DOM`.
	 *
	 * @public
	 */
	var ReactDOM = mapObject({
	  a: 'a',
	  abbr: 'abbr',
	  address: 'address',
	  area: 'area',
	  article: 'article',
	  aside: 'aside',
	  audio: 'audio',
	  b: 'b',
	  base: 'base',
	  bdi: 'bdi',
	  bdo: 'bdo',
	  big: 'big',
	  blockquote: 'blockquote',
	  body: 'body',
	  br: 'br',
	  button: 'button',
	  canvas: 'canvas',
	  caption: 'caption',
	  cite: 'cite',
	  code: 'code',
	  col: 'col',
	  colgroup: 'colgroup',
	  data: 'data',
	  datalist: 'datalist',
	  dd: 'dd',
	  del: 'del',
	  details: 'details',
	  dfn: 'dfn',
	  dialog: 'dialog',
	  div: 'div',
	  dl: 'dl',
	  dt: 'dt',
	  em: 'em',
	  embed: 'embed',
	  fieldset: 'fieldset',
	  figcaption: 'figcaption',
	  figure: 'figure',
	  footer: 'footer',
	  form: 'form',
	  h1: 'h1',
	  h2: 'h2',
	  h3: 'h3',
	  h4: 'h4',
	  h5: 'h5',
	  h6: 'h6',
	  head: 'head',
	  header: 'header',
	  hr: 'hr',
	  html: 'html',
	  i: 'i',
	  iframe: 'iframe',
	  img: 'img',
	  input: 'input',
	  ins: 'ins',
	  kbd: 'kbd',
	  keygen: 'keygen',
	  label: 'label',
	  legend: 'legend',
	  li: 'li',
	  link: 'link',
	  main: 'main',
	  map: 'map',
	  mark: 'mark',
	  menu: 'menu',
	  menuitem: 'menuitem',
	  meta: 'meta',
	  meter: 'meter',
	  nav: 'nav',
	  noscript: 'noscript',
	  object: 'object',
	  ol: 'ol',
	  optgroup: 'optgroup',
	  option: 'option',
	  output: 'output',
	  p: 'p',
	  param: 'param',
	  picture: 'picture',
	  pre: 'pre',
	  progress: 'progress',
	  q: 'q',
	  rp: 'rp',
	  rt: 'rt',
	  ruby: 'ruby',
	  s: 's',
	  samp: 'samp',
	  script: 'script',
	  section: 'section',
	  select: 'select',
	  small: 'small',
	  source: 'source',
	  span: 'span',
	  strong: 'strong',
	  style: 'style',
	  sub: 'sub',
	  summary: 'summary',
	  sup: 'sup',
	  table: 'table',
	  tbody: 'tbody',
	  td: 'td',
	  textarea: 'textarea',
	  tfoot: 'tfoot',
	  th: 'th',
	  thead: 'thead',
	  time: 'time',
	  title: 'title',
	  tr: 'tr',
	  track: 'track',
	  u: 'u',
	  ul: 'ul',
	  'var': 'var',
	  video: 'video',
	  wbr: 'wbr',

	  // SVG
	  circle: 'circle',
	  clipPath: 'clipPath',
	  defs: 'defs',
	  ellipse: 'ellipse',
	  g: 'g',
	  line: 'line',
	  linearGradient: 'linearGradient',
	  mask: 'mask',
	  path: 'path',
	  pattern: 'pattern',
	  polygon: 'polygon',
	  polyline: 'polyline',
	  radialGradient: 'radialGradient',
	  rect: 'rect',
	  stop: 'stop',
	  svg: 'svg',
	  text: 'text',
	  tspan: 'tspan'

	}, createDOMFactory);

	module.exports = ReactDOM;

/***/ },
/* 57 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule mapObject
	 */

	'use strict';

	var hasOwnProperty = Object.prototype.hasOwnProperty;

	/**
	 * Executes the provided `callback` once for each enumerable own property in the
	 * object and constructs a new object from the results. The `callback` is
	 * invoked with three arguments:
	 *
	 *  - the property value
	 *  - the property name
	 *  - the object being traversed
	 *
	 * Properties that are added after the call to `mapObject` will not be visited
	 * by `callback`. If the values of existing properties are changed, the value
	 * passed to `callback` will be the value at the time `mapObject` visits them.
	 * Properties that are deleted before being visited are not visited.
	 *
	 * @grep function objectMap()
	 * @grep function objMap()
	 *
	 * @param {?object} object
	 * @param {function} callback
	 * @param {*} context
	 * @return {?object}
	 */
	function mapObject(object, callback, context) {
	  if (!object) {
	    return null;
	  }
	  var result = {};
	  for (var name in object) {
	    if (hasOwnProperty.call(object, name)) {
	      result[name] = callback.call(context, object[name], name, object);
	    }
	  }
	  return result;
	}

	module.exports = mapObject;

/***/ },
/* 58 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMTextComponent
	 * @typechecks static-only
	 */

	'use strict';

	var DOMPropertyOperations = __webpack_require__(59);
	var ReactComponentBrowserEnvironment = __webpack_require__(63);
	var ReactDOMComponent = __webpack_require__(103);

	var assign = __webpack_require__(29);
	var escapeTextContentForBrowser = __webpack_require__(62);

	/**
	 * Text nodes violate a couple assumptions that React makes about components:
	 *
	 *  - When mounting text into the DOM, adjacent text nodes are merged.
	 *  - Text nodes cannot be assigned a React root ID.
	 *
	 * This component is used to wrap strings in elements so that they can undergo
	 * the same reconciliation that is applied to elements.
	 *
	 * TODO: Investigate representing React components in the DOM with text nodes.
	 *
	 * @class ReactDOMTextComponent
	 * @extends ReactComponent
	 * @internal
	 */
	var ReactDOMTextComponent = function ReactDOMTextComponent(props) {
	  // This constructor and its argument is currently used by mocks.
	};

	assign(ReactDOMTextComponent.prototype, {

	  /**
	   * @param {ReactText} text
	   * @internal
	   */
	  construct: function construct(text) {
	    // TODO: This is really a ReactText (ReactNode), not a ReactElement
	    this._currentElement = text;
	    this._stringText = '' + text;

	    // Properties
	    this._rootNodeID = null;
	    this._mountIndex = 0;
	  },

	  /**
	   * Creates the markup for this text node. This node is not intended to have
	   * any features besides containing text content.
	   *
	   * @param {string} rootID DOM ID of the root node.
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @return {string} Markup for this text node.
	   * @internal
	   */
	  mountComponent: function mountComponent(rootID, transaction, context) {
	    this._rootNodeID = rootID;
	    var escapedText = escapeTextContentForBrowser(this._stringText);

	    if (transaction.renderToStaticMarkup) {
	      // Normally we'd wrap this in a `span` for the reasons stated above, but
	      // since this is a situation where React won't take over (static pages),
	      // we can simply return the text as it is.
	      return escapedText;
	    }

	    return '<span ' + DOMPropertyOperations.createMarkupForID(rootID) + '>' + escapedText + '</span>';
	  },

	  /**
	   * Updates this component by updating the text content.
	   *
	   * @param {ReactText} nextText The next text content
	   * @param {ReactReconcileTransaction} transaction
	   * @internal
	   */
	  receiveComponent: function receiveComponent(nextText, transaction) {
	    if (nextText !== this._currentElement) {
	      this._currentElement = nextText;
	      var nextStringText = '' + nextText;
	      if (nextStringText !== this._stringText) {
	        // TODO: Save this as pending props and use performUpdateIfNecessary
	        // and/or updateComponent to do the actual update for consistency with
	        // other component types?
	        this._stringText = nextStringText;
	        ReactDOMComponent.BackendIDOperations.updateTextContentByID(this._rootNodeID, nextStringText);
	      }
	    }
	  },

	  unmountComponent: function unmountComponent() {
	    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
	  }

	});

	module.exports = ReactDOMTextComponent;

/***/ },
/* 59 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule DOMPropertyOperations
	 * @typechecks static-only
	 */

	'use strict';

	var DOMProperty = __webpack_require__(60);

	var quoteAttributeValueForBrowser = __webpack_require__(61);
	var warning = __webpack_require__(31);

	function shouldIgnoreValue(name, value) {
	  return value == null || DOMProperty.hasBooleanValue[name] && !value || DOMProperty.hasNumericValue[name] && isNaN(value) || DOMProperty.hasPositiveNumericValue[name] && value < 1 || DOMProperty.hasOverloadedBooleanValue[name] && value === false;
	}

	if ("production" !== process.env.NODE_ENV) {
	  var reactProps = {
	    children: true,
	    dangerouslySetInnerHTML: true,
	    key: true,
	    ref: true
	  };
	  var warnedProperties = {};

	  var warnUnknownProperty = function warnUnknownProperty(name) {
	    if (reactProps.hasOwnProperty(name) && reactProps[name] || warnedProperties.hasOwnProperty(name) && warnedProperties[name]) {
	      return;
	    }

	    warnedProperties[name] = true;
	    var lowerCasedName = name.toLowerCase();

	    // data-* attributes should be lowercase; suggest the lowercase version
	    var standardName = DOMProperty.isCustomAttribute(lowerCasedName) ? lowerCasedName : DOMProperty.getPossibleStandardName.hasOwnProperty(lowerCasedName) ? DOMProperty.getPossibleStandardName[lowerCasedName] : null;

	    // For now, only warn when we have a suggested correction. This prevents
	    // logging too much when using transferPropsTo.
	    "production" !== process.env.NODE_ENV ? warning(standardName == null, 'Unknown DOM property %s. Did you mean %s?', name, standardName) : null;
	  };
	}

	/**
	 * Operations for dealing with DOM properties.
	 */
	var DOMPropertyOperations = {

	  /**
	   * Creates markup for the ID property.
	   *
	   * @param {string} id Unescaped ID.
	   * @return {string} Markup string.
	   */
	  createMarkupForID: function createMarkupForID(id) {
	    return DOMProperty.ID_ATTRIBUTE_NAME + '=' + quoteAttributeValueForBrowser(id);
	  },

	  /**
	   * Creates markup for a property.
	   *
	   * @param {string} name
	   * @param {*} value
	   * @return {?string} Markup string, or null if the property was invalid.
	   */
	  createMarkupForProperty: function createMarkupForProperty(name, value) {
	    if (DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]) {
	      if (shouldIgnoreValue(name, value)) {
	        return '';
	      }
	      var attributeName = DOMProperty.getAttributeName[name];
	      if (DOMProperty.hasBooleanValue[name] || DOMProperty.hasOverloadedBooleanValue[name] && value === true) {
	        return attributeName;
	      }
	      return attributeName + '=' + quoteAttributeValueForBrowser(value);
	    } else if (DOMProperty.isCustomAttribute(name)) {
	      if (value == null) {
	        return '';
	      }
	      return name + '=' + quoteAttributeValueForBrowser(value);
	    } else if ("production" !== process.env.NODE_ENV) {
	      warnUnknownProperty(name);
	    }
	    return null;
	  },

	  /**
	   * Sets the value for a property on a node.
	   *
	   * @param {DOMElement} node
	   * @param {string} name
	   * @param {*} value
	   */
	  setValueForProperty: function setValueForProperty(node, name, value) {
	    if (DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]) {
	      var mutationMethod = DOMProperty.getMutationMethod[name];
	      if (mutationMethod) {
	        mutationMethod(node, value);
	      } else if (shouldIgnoreValue(name, value)) {
	        this.deleteValueForProperty(node, name);
	      } else if (DOMProperty.mustUseAttribute[name]) {
	        // `setAttribute` with objects becomes only `[object]` in IE8/9,
	        // ('' + value) makes it output the correct toString()-value.
	        node.setAttribute(DOMProperty.getAttributeName[name], '' + value);
	      } else {
	        var propName = DOMProperty.getPropertyName[name];
	        // Must explicitly cast values for HAS_SIDE_EFFECTS-properties to the
	        // property type before comparing; only `value` does and is string.
	        if (!DOMProperty.hasSideEffects[name] || '' + node[propName] !== '' + value) {
	          // Contrary to `setAttribute`, object properties are properly
	          // `toString`ed by IE8/9.
	          node[propName] = value;
	        }
	      }
	    } else if (DOMProperty.isCustomAttribute(name)) {
	      if (value == null) {
	        node.removeAttribute(name);
	      } else {
	        node.setAttribute(name, '' + value);
	      }
	    } else if ("production" !== process.env.NODE_ENV) {
	      warnUnknownProperty(name);
	    }
	  },

	  /**
	   * Deletes the value for a property on a node.
	   *
	   * @param {DOMElement} node
	   * @param {string} name
	   */
	  deleteValueForProperty: function deleteValueForProperty(node, name) {
	    if (DOMProperty.isStandardName.hasOwnProperty(name) && DOMProperty.isStandardName[name]) {
	      var mutationMethod = DOMProperty.getMutationMethod[name];
	      if (mutationMethod) {
	        mutationMethod(node, undefined);
	      } else if (DOMProperty.mustUseAttribute[name]) {
	        node.removeAttribute(DOMProperty.getAttributeName[name]);
	      } else {
	        var propName = DOMProperty.getPropertyName[name];
	        var defaultValue = DOMProperty.getDefaultValueForProperty(node.nodeName, propName);
	        if (!DOMProperty.hasSideEffects[name] || '' + node[propName] !== defaultValue) {
	          node[propName] = defaultValue;
	        }
	      }
	    } else if (DOMProperty.isCustomAttribute(name)) {
	      node.removeAttribute(name);
	    } else if ("production" !== process.env.NODE_ENV) {
	      warnUnknownProperty(name);
	    }
	  }

	};

	module.exports = DOMPropertyOperations;

/***/ },
/* 60 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule DOMProperty
	 * @typechecks static-only
	 */

	/*jslint bitwise: true */

	'use strict';

	var invariant = __webpack_require__(23);

	function checkMask(value, bitmask) {
	  return (value & bitmask) === bitmask;
	}

	var DOMPropertyInjection = {
	  /**
	   * Mapping from normalized, camelcased property names to a configuration that
	   * specifies how the associated DOM property should be accessed or rendered.
	   */
	  MUST_USE_ATTRIBUTE: 0x1,
	  MUST_USE_PROPERTY: 0x2,
	  HAS_SIDE_EFFECTS: 0x4,
	  HAS_BOOLEAN_VALUE: 0x8,
	  HAS_NUMERIC_VALUE: 0x10,
	  HAS_POSITIVE_NUMERIC_VALUE: 0x20 | 0x10,
	  HAS_OVERLOADED_BOOLEAN_VALUE: 0x40,

	  /**
	   * Inject some specialized knowledge about the DOM. This takes a config object
	   * with the following properties:
	   *
	   * isCustomAttribute: function that given an attribute name will return true
	   * if it can be inserted into the DOM verbatim. Useful for data-* or aria-*
	   * attributes where it's impossible to enumerate all of the possible
	   * attribute names,
	   *
	   * Properties: object mapping DOM property name to one of the
	   * DOMPropertyInjection constants or null. If your attribute isn't in here,
	   * it won't get written to the DOM.
	   *
	   * DOMAttributeNames: object mapping React attribute name to the DOM
	   * attribute name. Attribute names not specified use the **lowercase**
	   * normalized name.
	   *
	   * DOMPropertyNames: similar to DOMAttributeNames but for DOM properties.
	   * Property names not specified use the normalized name.
	   *
	   * DOMMutationMethods: Properties that require special mutation methods. If
	   * `value` is undefined, the mutation method should unset the property.
	   *
	   * @param {object} domPropertyConfig the config as described above.
	   */
	  injectDOMPropertyConfig: function injectDOMPropertyConfig(domPropertyConfig) {
	    var Properties = domPropertyConfig.Properties || {};
	    var DOMAttributeNames = domPropertyConfig.DOMAttributeNames || {};
	    var DOMPropertyNames = domPropertyConfig.DOMPropertyNames || {};
	    var DOMMutationMethods = domPropertyConfig.DOMMutationMethods || {};

	    if (domPropertyConfig.isCustomAttribute) {
	      DOMProperty._isCustomAttributeFunctions.push(domPropertyConfig.isCustomAttribute);
	    }

	    for (var propName in Properties) {
	      "production" !== process.env.NODE_ENV ? invariant(!DOMProperty.isStandardName.hasOwnProperty(propName), 'injectDOMPropertyConfig(...): You\'re trying to inject DOM property ' + '\'%s\' which has already been injected. You may be accidentally ' + 'injecting the same DOM property config twice, or you may be ' + 'injecting two configs that have conflicting property names.', propName) : invariant(!DOMProperty.isStandardName.hasOwnProperty(propName));

	      DOMProperty.isStandardName[propName] = true;

	      var lowerCased = propName.toLowerCase();
	      DOMProperty.getPossibleStandardName[lowerCased] = propName;

	      if (DOMAttributeNames.hasOwnProperty(propName)) {
	        var attributeName = DOMAttributeNames[propName];
	        DOMProperty.getPossibleStandardName[attributeName] = propName;
	        DOMProperty.getAttributeName[propName] = attributeName;
	      } else {
	        DOMProperty.getAttributeName[propName] = lowerCased;
	      }

	      DOMProperty.getPropertyName[propName] = DOMPropertyNames.hasOwnProperty(propName) ? DOMPropertyNames[propName] : propName;

	      if (DOMMutationMethods.hasOwnProperty(propName)) {
	        DOMProperty.getMutationMethod[propName] = DOMMutationMethods[propName];
	      } else {
	        DOMProperty.getMutationMethod[propName] = null;
	      }

	      var propConfig = Properties[propName];
	      DOMProperty.mustUseAttribute[propName] = checkMask(propConfig, DOMPropertyInjection.MUST_USE_ATTRIBUTE);
	      DOMProperty.mustUseProperty[propName] = checkMask(propConfig, DOMPropertyInjection.MUST_USE_PROPERTY);
	      DOMProperty.hasSideEffects[propName] = checkMask(propConfig, DOMPropertyInjection.HAS_SIDE_EFFECTS);
	      DOMProperty.hasBooleanValue[propName] = checkMask(propConfig, DOMPropertyInjection.HAS_BOOLEAN_VALUE);
	      DOMProperty.hasNumericValue[propName] = checkMask(propConfig, DOMPropertyInjection.HAS_NUMERIC_VALUE);
	      DOMProperty.hasPositiveNumericValue[propName] = checkMask(propConfig, DOMPropertyInjection.HAS_POSITIVE_NUMERIC_VALUE);
	      DOMProperty.hasOverloadedBooleanValue[propName] = checkMask(propConfig, DOMPropertyInjection.HAS_OVERLOADED_BOOLEAN_VALUE);

	      "production" !== process.env.NODE_ENV ? invariant(!DOMProperty.mustUseAttribute[propName] || !DOMProperty.mustUseProperty[propName], 'DOMProperty: Cannot require using both attribute and property: %s', propName) : invariant(!DOMProperty.mustUseAttribute[propName] || !DOMProperty.mustUseProperty[propName]);
	      "production" !== process.env.NODE_ENV ? invariant(DOMProperty.mustUseProperty[propName] || !DOMProperty.hasSideEffects[propName], 'DOMProperty: Properties that have side effects must use property: %s', propName) : invariant(DOMProperty.mustUseProperty[propName] || !DOMProperty.hasSideEffects[propName]);
	      "production" !== process.env.NODE_ENV ? invariant(!!DOMProperty.hasBooleanValue[propName] + !!DOMProperty.hasNumericValue[propName] + !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1, 'DOMProperty: Value can be one of boolean, overloaded boolean, or ' + 'numeric value, but not a combination: %s', propName) : invariant(!!DOMProperty.hasBooleanValue[propName] + !!DOMProperty.hasNumericValue[propName] + !!DOMProperty.hasOverloadedBooleanValue[propName] <= 1);
	    }
	  }
	};
	var defaultValueCache = {};

	/**
	 * DOMProperty exports lookup objects that can be used like functions:
	 *
	 *   > DOMProperty.isValid['id']
	 *   true
	 *   > DOMProperty.isValid['foobar']
	 *   undefined
	 *
	 * Although this may be confusing, it performs better in general.
	 *
	 * @see http://jsperf.com/key-exists
	 * @see http://jsperf.com/key-missing
	 */
	var DOMProperty = {

	  ID_ATTRIBUTE_NAME: 'data-reactid',

	  /**
	   * Checks whether a property name is a standard property.
	   * @type {Object}
	   */
	  isStandardName: {},

	  /**
	   * Mapping from lowercase property names to the properly cased version, used
	   * to warn in the case of missing properties.
	   * @type {Object}
	   */
	  getPossibleStandardName: {},

	  /**
	   * Mapping from normalized names to attribute names that differ. Attribute
	   * names are used when rendering markup or with `*Attribute()`.
	   * @type {Object}
	   */
	  getAttributeName: {},

	  /**
	   * Mapping from normalized names to properties on DOM node instances.
	   * (This includes properties that mutate due to external factors.)
	   * @type {Object}
	   */
	  getPropertyName: {},

	  /**
	   * Mapping from normalized names to mutation methods. This will only exist if
	   * mutation cannot be set simply by the property or `setAttribute()`.
	   * @type {Object}
	   */
	  getMutationMethod: {},

	  /**
	   * Whether the property must be accessed and mutated as an object property.
	   * @type {Object}
	   */
	  mustUseAttribute: {},

	  /**
	   * Whether the property must be accessed and mutated using `*Attribute()`.
	   * (This includes anything that fails `<propName> in <element>`.)
	   * @type {Object}
	   */
	  mustUseProperty: {},

	  /**
	   * Whether or not setting a value causes side effects such as triggering
	   * resources to be loaded or text selection changes. We must ensure that
	   * the value is only set if it has changed.
	   * @type {Object}
	   */
	  hasSideEffects: {},

	  /**
	   * Whether the property should be removed when set to a falsey value.
	   * @type {Object}
	   */
	  hasBooleanValue: {},

	  /**
	   * Whether the property must be numeric or parse as a
	   * numeric and should be removed when set to a falsey value.
	   * @type {Object}
	   */
	  hasNumericValue: {},

	  /**
	   * Whether the property must be positive numeric or parse as a positive
	   * numeric and should be removed when set to a falsey value.
	   * @type {Object}
	   */
	  hasPositiveNumericValue: {},

	  /**
	   * Whether the property can be used as a flag as well as with a value. Removed
	   * when strictly equal to false; present without a value when strictly equal
	   * to true; present with a value otherwise.
	   * @type {Object}
	   */
	  hasOverloadedBooleanValue: {},

	  /**
	   * All of the isCustomAttribute() functions that have been injected.
	   */
	  _isCustomAttributeFunctions: [],

	  /**
	   * Checks whether a property name is a custom attribute.
	   * @method
	   */
	  isCustomAttribute: function isCustomAttribute(attributeName) {
	    for (var i = 0; i < DOMProperty._isCustomAttributeFunctions.length; i++) {
	      var isCustomAttributeFn = DOMProperty._isCustomAttributeFunctions[i];
	      if (isCustomAttributeFn(attributeName)) {
	        return true;
	      }
	    }
	    return false;
	  },

	  /**
	   * Returns the default property value for a DOM property (i.e., not an
	   * attribute). Most default values are '' or false, but not all. Worse yet,
	   * some (in particular, `type`) vary depending on the type of element.
	   *
	   * TODO: Is it better to grab all the possible properties when creating an
	   * element to avoid having to create the same element twice?
	   */
	  getDefaultValueForProperty: function getDefaultValueForProperty(nodeName, prop) {
	    var nodeDefaults = defaultValueCache[nodeName];
	    var testElement;
	    if (!nodeDefaults) {
	      defaultValueCache[nodeName] = nodeDefaults = {};
	    }
	    if (!(prop in nodeDefaults)) {
	      testElement = document.createElement(nodeName);
	      nodeDefaults[prop] = testElement[prop];
	    }
	    return nodeDefaults[prop];
	  },

	  injection: DOMPropertyInjection
	};

	module.exports = DOMProperty;

/***/ },
/* 61 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule quoteAttributeValueForBrowser
	 */

	'use strict';

	var escapeTextContentForBrowser = __webpack_require__(62);

	/**
	 * Escapes attribute value to prevent scripting attacks.
	 *
	 * @param {*} value Value to escape.
	 * @return {string} An escaped string.
	 */
	function quoteAttributeValueForBrowser(value) {
	  return '"' + escapeTextContentForBrowser(value) + '"';
	}

	module.exports = quoteAttributeValueForBrowser;

/***/ },
/* 62 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule escapeTextContentForBrowser
	 */

	'use strict';

	var ESCAPE_LOOKUP = {
	  '&': '&amp;',
	  '>': '&gt;',
	  '<': '&lt;',
	  '"': '&quot;',
	  '\'': '&#x27;'
	};

	var ESCAPE_REGEX = /[&><"']/g;

	function escaper(match) {
	  return ESCAPE_LOOKUP[match];
	}

	/**
	 * Escapes text to prevent scripting attacks.
	 *
	 * @param {*} text Text value to escape.
	 * @return {string} An escaped string.
	 */
	function escapeTextContentForBrowser(text) {
	  return ('' + text).replace(ESCAPE_REGEX, escaper);
	}

	module.exports = escapeTextContentForBrowser;

/***/ },
/* 63 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactComponentBrowserEnvironment
	 */

	/*jslint evil: true */

	'use strict';

	var ReactDOMIDOperations = __webpack_require__(64);
	var ReactMount = __webpack_require__(83);

	/**
	 * Abstracts away all functionality of the reconciler that requires knowledge of
	 * the browser context. TODO: These callers should be refactored to avoid the
	 * need for this injection.
	 */
	var ReactComponentBrowserEnvironment = {

	  processChildrenUpdates: ReactDOMIDOperations.dangerouslyProcessChildrenUpdates,

	  replaceNodeWithMarkupByID: ReactDOMIDOperations.dangerouslyReplaceNodeWithMarkupByID,

	  /**
	   * If a particular environment requires that some resources be cleaned up,
	   * specify this in the injected Mixin. In the DOM, we would likely want to
	   * purge any cached node ID lookups.
	   *
	   * @private
	   */
	  unmountIDFromEnvironment: function unmountIDFromEnvironment(rootNodeID) {
	    ReactMount.purgeID(rootNodeID);
	  }

	};

	module.exports = ReactComponentBrowserEnvironment;

/***/ },
/* 64 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMIDOperations
	 * @typechecks static-only
	 */

	/*jslint evil: true */

	'use strict';

	var CSSPropertyOperations = __webpack_require__(65);
	var DOMChildrenOperations = __webpack_require__(74);
	var DOMPropertyOperations = __webpack_require__(59);
	var ReactMount = __webpack_require__(83);
	var ReactPerf = __webpack_require__(44);

	var invariant = __webpack_require__(23);
	var setInnerHTML = __webpack_require__(82);

	/**
	 * Errors for properties that should not be updated with `updatePropertyById()`.
	 *
	 * @type {object}
	 * @private
	 */
	var INVALID_PROPERTY_ERRORS = {
	  dangerouslySetInnerHTML: '`dangerouslySetInnerHTML` must be set using `updateInnerHTMLByID()`.',
	  style: '`style` must be set using `updateStylesByID()`.'
	};

	/**
	 * Operations used to process updates to DOM nodes. This is made injectable via
	 * `ReactDOMComponent.BackendIDOperations`.
	 */
	var ReactDOMIDOperations = {

	  /**
	   * Updates a DOM node with new property values. This should only be used to
	   * update DOM properties in `DOMProperty`.
	   *
	   * @param {string} id ID of the node to update.
	   * @param {string} name A valid property name, see `DOMProperty`.
	   * @param {*} value New value of the property.
	   * @internal
	   */
	  updatePropertyByID: function updatePropertyByID(id, name, value) {
	    var node = ReactMount.getNode(id);
	    "production" !== process.env.NODE_ENV ? invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name), 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name));

	    // If we're updating to null or undefined, we should remove the property
	    // from the DOM node instead of inadvertantly setting to a string. This
	    // brings us in line with the same behavior we have on initial render.
	    if (value != null) {
	      DOMPropertyOperations.setValueForProperty(node, name, value);
	    } else {
	      DOMPropertyOperations.deleteValueForProperty(node, name);
	    }
	  },

	  /**
	   * Updates a DOM node to remove a property. This should only be used to remove
	   * DOM properties in `DOMProperty`.
	   *
	   * @param {string} id ID of the node to update.
	   * @param {string} name A property name to remove, see `DOMProperty`.
	   * @internal
	   */
	  deletePropertyByID: function deletePropertyByID(id, name, value) {
	    var node = ReactMount.getNode(id);
	    "production" !== process.env.NODE_ENV ? invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name), 'updatePropertyByID(...): %s', INVALID_PROPERTY_ERRORS[name]) : invariant(!INVALID_PROPERTY_ERRORS.hasOwnProperty(name));
	    DOMPropertyOperations.deleteValueForProperty(node, name, value);
	  },

	  /**
	   * Updates a DOM node with new style values. If a value is specified as '',
	   * the corresponding style property will be unset.
	   *
	   * @param {string} id ID of the node to update.
	   * @param {object} styles Mapping from styles to values.
	   * @internal
	   */
	  updateStylesByID: function updateStylesByID(id, styles) {
	    var node = ReactMount.getNode(id);
	    CSSPropertyOperations.setValueForStyles(node, styles);
	  },

	  /**
	   * Updates a DOM node's innerHTML.
	   *
	   * @param {string} id ID of the node to update.
	   * @param {string} html An HTML string.
	   * @internal
	   */
	  updateInnerHTMLByID: function updateInnerHTMLByID(id, html) {
	    var node = ReactMount.getNode(id);
	    setInnerHTML(node, html);
	  },

	  /**
	   * Updates a DOM node's text content set by `props.content`.
	   *
	   * @param {string} id ID of the node to update.
	   * @param {string} content Text content.
	   * @internal
	   */
	  updateTextContentByID: function updateTextContentByID(id, content) {
	    var node = ReactMount.getNode(id);
	    DOMChildrenOperations.updateTextContent(node, content);
	  },

	  /**
	   * Replaces a DOM node that exists in the document with markup.
	   *
	   * @param {string} id ID of child to be replaced.
	   * @param {string} markup Dangerous markup to inject in place of child.
	   * @internal
	   * @see {Danger.dangerouslyReplaceNodeWithMarkup}
	   */
	  dangerouslyReplaceNodeWithMarkupByID: function dangerouslyReplaceNodeWithMarkupByID(id, markup) {
	    var node = ReactMount.getNode(id);
	    DOMChildrenOperations.dangerouslyReplaceNodeWithMarkup(node, markup);
	  },

	  /**
	   * Updates a component's children by processing a series of updates.
	   *
	   * @param {array<object>} updates List of update configurations.
	   * @param {array<string>} markup List of markup strings.
	   * @internal
	   */
	  dangerouslyProcessChildrenUpdates: function dangerouslyProcessChildrenUpdates(updates, markup) {
	    for (var i = 0; i < updates.length; i++) {
	      updates[i].parentNode = ReactMount.getNode(updates[i].parentID);
	    }
	    DOMChildrenOperations.processUpdates(updates, markup);
	  }
	};

	ReactPerf.measureMethods(ReactDOMIDOperations, 'ReactDOMIDOperations', {
	  updatePropertyByID: 'updatePropertyByID',
	  deletePropertyByID: 'deletePropertyByID',
	  updateStylesByID: 'updateStylesByID',
	  updateInnerHTMLByID: 'updateInnerHTMLByID',
	  updateTextContentByID: 'updateTextContentByID',
	  dangerouslyReplaceNodeWithMarkupByID: 'dangerouslyReplaceNodeWithMarkupByID',
	  dangerouslyProcessChildrenUpdates: 'dangerouslyProcessChildrenUpdates'
	});

	module.exports = ReactDOMIDOperations;

/***/ },
/* 65 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule CSSPropertyOperations
	 * @typechecks static-only
	 */

	'use strict';

	var CSSProperty = __webpack_require__(66);
	var ExecutionEnvironment = __webpack_require__(67);

	var camelizeStyleName = __webpack_require__(68);
	var dangerousStyleValue = __webpack_require__(70);
	var hyphenateStyleName = __webpack_require__(71);
	var memoizeStringOnly = __webpack_require__(73);
	var warning = __webpack_require__(31);

	var processStyleName = memoizeStringOnly(function (styleName) {
	  return hyphenateStyleName(styleName);
	});

	var styleFloatAccessor = 'cssFloat';
	if (ExecutionEnvironment.canUseDOM) {
	  // IE8 only supports accessing cssFloat (standard) as styleFloat
	  if (document.documentElement.style.cssFloat === undefined) {
	    styleFloatAccessor = 'styleFloat';
	  }
	}

	if ("production" !== process.env.NODE_ENV) {
	  // 'msTransform' is correct, but the other prefixes should be capitalized
	  var badVendoredStyleNamePattern = /^(?:webkit|moz|o)[A-Z]/;

	  // style values shouldn't contain a semicolon
	  var badStyleValueWithSemicolonPattern = /;\s*$/;

	  var warnedStyleNames = {};
	  var warnedStyleValues = {};

	  var warnHyphenatedStyleName = function warnHyphenatedStyleName(name) {
	    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
	      return;
	    }

	    warnedStyleNames[name] = true;
	    "production" !== process.env.NODE_ENV ? warning(false, 'Unsupported style property %s. Did you mean %s?', name, camelizeStyleName(name)) : null;
	  };

	  var warnBadVendoredStyleName = function warnBadVendoredStyleName(name) {
	    if (warnedStyleNames.hasOwnProperty(name) && warnedStyleNames[name]) {
	      return;
	    }

	    warnedStyleNames[name] = true;
	    "production" !== process.env.NODE_ENV ? warning(false, 'Unsupported vendor-prefixed style property %s. Did you mean %s?', name, name.charAt(0).toUpperCase() + name.slice(1)) : null;
	  };

	  var warnStyleValueWithSemicolon = function warnStyleValueWithSemicolon(name, value) {
	    if (warnedStyleValues.hasOwnProperty(value) && warnedStyleValues[value]) {
	      return;
	    }

	    warnedStyleValues[value] = true;
	    "production" !== process.env.NODE_ENV ? warning(false, 'Style property values shouldn\'t contain a semicolon. ' + 'Try "%s: %s" instead.', name, value.replace(badStyleValueWithSemicolonPattern, '')) : null;
	  };

	  /**
	   * @param {string} name
	   * @param {*} value
	   */
	  var warnValidStyle = function warnValidStyle(name, value) {
	    if (name.indexOf('-') > -1) {
	      warnHyphenatedStyleName(name);
	    } else if (badVendoredStyleNamePattern.test(name)) {
	      warnBadVendoredStyleName(name);
	    } else if (badStyleValueWithSemicolonPattern.test(value)) {
	      warnStyleValueWithSemicolon(name, value);
	    }
	  };
	}

	/**
	 * Operations for dealing with CSS properties.
	 */
	var CSSPropertyOperations = {

	  /**
	   * Serializes a mapping of style properties for use as inline styles:
	   *
	   *   > createMarkupForStyles({width: '200px', height: 0})
	   *   "width:200px;height:0;"
	   *
	   * Undefined values are ignored so that declarative programming is easier.
	   * The result should be HTML-escaped before insertion into the DOM.
	   *
	   * @param {object} styles
	   * @return {?string}
	   */
	  createMarkupForStyles: function createMarkupForStyles(styles) {
	    var serialized = '';
	    for (var styleName in styles) {
	      if (!styles.hasOwnProperty(styleName)) {
	        continue;
	      }
	      var styleValue = styles[styleName];
	      if ("production" !== process.env.NODE_ENV) {
	        warnValidStyle(styleName, styleValue);
	      }
	      if (styleValue != null) {
	        serialized += processStyleName(styleName) + ':';
	        serialized += dangerousStyleValue(styleName, styleValue) + ';';
	      }
	    }
	    return serialized || null;
	  },

	  /**
	   * Sets the value for multiple styles on a node.  If a value is specified as
	   * '' (empty string), the corresponding style property will be unset.
	   *
	   * @param {DOMElement} node
	   * @param {object} styles
	   */
	  setValueForStyles: function setValueForStyles(node, styles) {
	    var style = node.style;
	    for (var styleName in styles) {
	      if (!styles.hasOwnProperty(styleName)) {
	        continue;
	      }
	      if ("production" !== process.env.NODE_ENV) {
	        warnValidStyle(styleName, styles[styleName]);
	      }
	      var styleValue = dangerousStyleValue(styleName, styles[styleName]);
	      if (styleName === 'float') {
	        styleName = styleFloatAccessor;
	      }
	      if (styleValue) {
	        style[styleName] = styleValue;
	      } else {
	        var expansion = CSSProperty.shorthandPropertyExpansions[styleName];
	        if (expansion) {
	          // Shorthand property that IE8 won't like unsetting, so unset each
	          // component to placate it
	          for (var individualStyleName in expansion) {
	            style[individualStyleName] = '';
	          }
	        } else {
	          style[styleName] = '';
	        }
	      }
	    }
	  }

	};

	module.exports = CSSPropertyOperations;

/***/ },
/* 66 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule CSSProperty
	 */

	'use strict';

	/**
	 * CSS properties which accept numbers but are not in units of "px".
	 */
	var isUnitlessNumber = {
	  boxFlex: true,
	  boxFlexGroup: true,
	  columnCount: true,
	  flex: true,
	  flexGrow: true,
	  flexPositive: true,
	  flexShrink: true,
	  flexNegative: true,
	  fontWeight: true,
	  lineClamp: true,
	  lineHeight: true,
	  opacity: true,
	  order: true,
	  orphans: true,
	  widows: true,
	  zIndex: true,
	  zoom: true,

	  // SVG-related properties
	  fillOpacity: true,
	  strokeDashoffset: true,
	  strokeOpacity: true,
	  strokeWidth: true
	};

	/**
	 * @param {string} prefix vendor-specific prefix, eg: Webkit
	 * @param {string} key style name, eg: transitionDuration
	 * @return {string} style name prefixed with `prefix`, properly camelCased, eg:
	 * WebkitTransitionDuration
	 */
	function prefixKey(prefix, key) {
	  return prefix + key.charAt(0).toUpperCase() + key.substring(1);
	}

	/**
	 * Support style names that may come passed in prefixed by adding permutations
	 * of vendor prefixes.
	 */
	var prefixes = ['Webkit', 'ms', 'Moz', 'O'];

	// Using Object.keys here, or else the vanilla for-in loop makes IE8 go into an
	// infinite loop, because it iterates over the newly added props too.
	Object.keys(isUnitlessNumber).forEach(function (prop) {
	  prefixes.forEach(function (prefix) {
	    isUnitlessNumber[prefixKey(prefix, prop)] = isUnitlessNumber[prop];
	  });
	});

	/**
	 * Most style properties can be unset by doing .style[prop] = '' but IE8
	 * doesn't like doing that with shorthand properties so for the properties that
	 * IE8 breaks on, which are listed here, we instead unset each of the
	 * individual properties. See http://bugs.jquery.com/ticket/12385.
	 * The 4-value 'clock' properties like margin, padding, border-width seem to
	 * behave without any problems. Curiously, list-style works too without any
	 * special prodding.
	 */
	var shorthandPropertyExpansions = {
	  background: {
	    backgroundImage: true,
	    backgroundPosition: true,
	    backgroundRepeat: true,
	    backgroundColor: true
	  },
	  border: {
	    borderWidth: true,
	    borderStyle: true,
	    borderColor: true
	  },
	  borderBottom: {
	    borderBottomWidth: true,
	    borderBottomStyle: true,
	    borderBottomColor: true
	  },
	  borderLeft: {
	    borderLeftWidth: true,
	    borderLeftStyle: true,
	    borderLeftColor: true
	  },
	  borderRight: {
	    borderRightWidth: true,
	    borderRightStyle: true,
	    borderRightColor: true
	  },
	  borderTop: {
	    borderTopWidth: true,
	    borderTopStyle: true,
	    borderTopColor: true
	  },
	  font: {
	    fontStyle: true,
	    fontVariant: true,
	    fontWeight: true,
	    fontSize: true,
	    lineHeight: true,
	    fontFamily: true
	  }
	};

	var CSSProperty = {
	  isUnitlessNumber: isUnitlessNumber,
	  shorthandPropertyExpansions: shorthandPropertyExpansions
	};

	module.exports = CSSProperty;

/***/ },
/* 67 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ExecutionEnvironment
	 */

	/*jslint evil: true */

	"use strict";

	var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);

	/**
	 * Simple, lightweight module assisting with the detection and context of
	 * Worker. Helps avoid circular dependencies and allows code to reason about
	 * whether or not they are in a Worker, even if they never include the main
	 * `ReactWorker` dependency.
	 */
	var ExecutionEnvironment = {

	  canUseDOM: canUseDOM,

	  canUseWorkers: typeof Worker !== 'undefined',

	  canUseEventListeners: canUseDOM && !!(window.addEventListener || window.attachEvent),

	  canUseViewport: canUseDOM && !!window.screen,

	  isInWorker: !canUseDOM // For now, this is true - might change in the future.

	};

	module.exports = ExecutionEnvironment;

/***/ },
/* 68 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule camelizeStyleName
	 * @typechecks
	 */

	"use strict";

	var camelize = __webpack_require__(69);

	var msPattern = /^-ms-/;

	/**
	 * Camelcases a hyphenated CSS property name, for example:
	 *
	 *   > camelizeStyleName('background-color')
	 *   < "backgroundColor"
	 *   > camelizeStyleName('-moz-transition')
	 *   < "MozTransition"
	 *   > camelizeStyleName('-ms-transition')
	 *   < "msTransition"
	 *
	 * As Andi Smith suggests
	 * (http://www.andismith.com/blog/2012/02/modernizr-prefixed/), an `-ms` prefix
	 * is converted to lowercase `ms`.
	 *
	 * @param {string} string
	 * @return {string}
	 */
	function camelizeStyleName(string) {
	  return camelize(string.replace(msPattern, 'ms-'));
	}

	module.exports = camelizeStyleName;

/***/ },
/* 69 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule camelize
	 * @typechecks
	 */

	"use strict";

	var _hyphenPattern = /-(.)/g;

	/**
	 * Camelcases a hyphenated string, for example:
	 *
	 *   > camelize('background-color')
	 *   < "backgroundColor"
	 *
	 * @param {string} string
	 * @return {string}
	 */
	function camelize(string) {
	  return string.replace(_hyphenPattern, function (_, character) {
	    return character.toUpperCase();
	  });
	}

	module.exports = camelize;

/***/ },
/* 70 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule dangerousStyleValue
	 * @typechecks static-only
	 */

	'use strict';

	var CSSProperty = __webpack_require__(66);

	var isUnitlessNumber = CSSProperty.isUnitlessNumber;

	/**
	 * Convert a value into the proper css writable value. The style name `name`
	 * should be logical (no hyphens), as specified
	 * in `CSSProperty.isUnitlessNumber`.
	 *
	 * @param {string} name CSS property name such as `topMargin`.
	 * @param {*} value CSS property value such as `10px`.
	 * @return {string} Normalized style value with dimensions applied.
	 */
	function dangerousStyleValue(name, value) {
	  // Note that we've removed escapeTextForBrowser() calls here since the
	  // whole string will be escaped when the attribute is injected into
	  // the markup. If you provide unsafe user data here they can inject
	  // arbitrary CSS which may be problematic (I couldn't repro this):
	  // https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
	  // http://www.thespanner.co.uk/2007/11/26/ultimate-xss-css-injection/
	  // This is not an XSS hole but instead a potential CSS injection issue
	  // which has lead to a greater discussion about how we're going to
	  // trust URLs moving forward. See #2115901

	  var isEmpty = value == null || typeof value === 'boolean' || value === '';
	  if (isEmpty) {
	    return '';
	  }

	  var isNonNumeric = isNaN(value);
	  if (isNonNumeric || value === 0 || isUnitlessNumber.hasOwnProperty(name) && isUnitlessNumber[name]) {
	    return '' + value; // cast to string
	  }

	  if (typeof value === 'string') {
	    value = value.trim();
	  }
	  return value + 'px';
	}

	module.exports = dangerousStyleValue;

/***/ },
/* 71 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule hyphenateStyleName
	 * @typechecks
	 */

	"use strict";

	var hyphenate = __webpack_require__(72);

	var msPattern = /^ms-/;

	/**
	 * Hyphenates a camelcased CSS property name, for example:
	 *
	 *   > hyphenateStyleName('backgroundColor')
	 *   < "background-color"
	 *   > hyphenateStyleName('MozTransition')
	 *   < "-moz-transition"
	 *   > hyphenateStyleName('msTransition')
	 *   < "-ms-transition"
	 *
	 * As Modernizr suggests (http://modernizr.com/docs/#prefixed), an `ms` prefix
	 * is converted to `-ms-`.
	 *
	 * @param {string} string
	 * @return {string}
	 */
	function hyphenateStyleName(string) {
	  return hyphenate(string).replace(msPattern, '-ms-');
	}

	module.exports = hyphenateStyleName;

/***/ },
/* 72 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule hyphenate
	 * @typechecks
	 */

	'use strict';

	var _uppercasePattern = /([A-Z])/g;

	/**
	 * Hyphenates a camelcased string, for example:
	 *
	 *   > hyphenate('backgroundColor')
	 *   < "background-color"
	 *
	 * For CSS style names, use `hyphenateStyleName` instead which works properly
	 * with all vendor prefixes, including `ms`.
	 *
	 * @param {string} string
	 * @return {string}
	 */
	function hyphenate(string) {
	  return string.replace(_uppercasePattern, '-$1').toLowerCase();
	}

	module.exports = hyphenate;

/***/ },
/* 73 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule memoizeStringOnly
	 * @typechecks static-only
	 */

	'use strict';

	/**
	 * Memoizes the return value of a function that accepts one string argument.
	 *
	 * @param {function} callback
	 * @return {function}
	 */
	function memoizeStringOnly(callback) {
	  var cache = {};
	  return function (string) {
	    if (!cache.hasOwnProperty(string)) {
	      cache[string] = callback.call(this, string);
	    }
	    return cache[string];
	  };
	}

	module.exports = memoizeStringOnly;

/***/ },
/* 74 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule DOMChildrenOperations
	 * @typechecks static-only
	 */

	'use strict';

	var Danger = __webpack_require__(75);
	var ReactMultiChildUpdateTypes = __webpack_require__(80);

	var setTextContent = __webpack_require__(81);
	var invariant = __webpack_require__(23);

	/**
	 * Inserts `childNode` as a child of `parentNode` at the `index`.
	 *
	 * @param {DOMElement} parentNode Parent node in which to insert.
	 * @param {DOMElement} childNode Child node to insert.
	 * @param {number} index Index at which to insert the child.
	 * @internal
	 */
	function insertChildAt(parentNode, childNode, index) {
	  // By exploiting arrays returning `undefined` for an undefined index, we can
	  // rely exclusively on `insertBefore(node, null)` instead of also using
	  // `appendChild(node)`. However, using `undefined` is not allowed by all
	  // browsers so we must replace it with `null`.
	  parentNode.insertBefore(childNode, parentNode.childNodes[index] || null);
	}

	/**
	 * Operations for updating with DOM children.
	 */
	var DOMChildrenOperations = {

	  dangerouslyReplaceNodeWithMarkup: Danger.dangerouslyReplaceNodeWithMarkup,

	  updateTextContent: setTextContent,

	  /**
	   * Updates a component's children by processing a series of updates. The
	   * update configurations are each expected to have a `parentNode` property.
	   *
	   * @param {array<object>} updates List of update configurations.
	   * @param {array<string>} markupList List of markup strings.
	   * @internal
	   */
	  processUpdates: function processUpdates(updates, markupList) {
	    var update;
	    // Mapping from parent IDs to initial child orderings.
	    var initialChildren = null;
	    // List of children that will be moved or removed.
	    var updatedChildren = null;

	    for (var i = 0; i < updates.length; i++) {
	      update = updates[i];
	      if (update.type === ReactMultiChildUpdateTypes.MOVE_EXISTING || update.type === ReactMultiChildUpdateTypes.REMOVE_NODE) {
	        var updatedIndex = update.fromIndex;
	        var updatedChild = update.parentNode.childNodes[updatedIndex];
	        var parentID = update.parentID;

	        "production" !== process.env.NODE_ENV ? invariant(updatedChild, 'processUpdates(): Unable to find child %s of element. This ' + 'probably means the DOM was unexpectedly mutated (e.g., by the ' + 'browser), usually due to forgetting a <tbody> when using tables, ' + 'nesting tags like <form>, <p>, or <a>, or using non-SVG elements ' + 'in an <svg> parent. Try inspecting the child nodes of the element ' + 'with React ID `%s`.', updatedIndex, parentID) : invariant(updatedChild);

	        initialChildren = initialChildren || {};
	        initialChildren[parentID] = initialChildren[parentID] || [];
	        initialChildren[parentID][updatedIndex] = updatedChild;

	        updatedChildren = updatedChildren || [];
	        updatedChildren.push(updatedChild);
	      }
	    }

	    var renderedMarkup = Danger.dangerouslyRenderMarkup(markupList);

	    // Remove updated children first so that `toIndex` is consistent.
	    if (updatedChildren) {
	      for (var j = 0; j < updatedChildren.length; j++) {
	        updatedChildren[j].parentNode.removeChild(updatedChildren[j]);
	      }
	    }

	    for (var k = 0; k < updates.length; k++) {
	      update = updates[k];
	      switch (update.type) {
	        case ReactMultiChildUpdateTypes.INSERT_MARKUP:
	          insertChildAt(update.parentNode, renderedMarkup[update.markupIndex], update.toIndex);
	          break;
	        case ReactMultiChildUpdateTypes.MOVE_EXISTING:
	          insertChildAt(update.parentNode, initialChildren[update.parentID][update.fromIndex], update.toIndex);
	          break;
	        case ReactMultiChildUpdateTypes.TEXT_CONTENT:
	          setTextContent(update.parentNode, update.textContent);
	          break;
	        case ReactMultiChildUpdateTypes.REMOVE_NODE:
	          // Already removed by the for-loop above.
	          break;
	      }
	    }
	  }

	};

	module.exports = DOMChildrenOperations;

/***/ },
/* 75 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule Danger
	 * @typechecks static-only
	 */

	/*jslint evil: true, sub: true */

	'use strict';

	var ExecutionEnvironment = __webpack_require__(67);

	var createNodesFromMarkup = __webpack_require__(76);
	var emptyFunction = __webpack_require__(32);
	var getMarkupWrap = __webpack_require__(79);
	var invariant = __webpack_require__(23);

	var OPEN_TAG_NAME_EXP = /^(<[^ \/>]+)/;
	var RESULT_INDEX_ATTR = 'data-danger-index';

	/**
	 * Extracts the `nodeName` from a string of markup.
	 *
	 * NOTE: Extracting the `nodeName` does not require a regular expression match
	 * because we make assumptions about React-generated markup (i.e. there are no
	 * spaces surrounding the opening tag and there is at least one attribute).
	 *
	 * @param {string} markup String of markup.
	 * @return {string} Node name of the supplied markup.
	 * @see http://jsperf.com/extract-nodename
	 */
	function getNodeName(markup) {
	  return markup.substring(1, markup.indexOf(' '));
	}

	var Danger = {

	  /**
	   * Renders markup into an array of nodes. The markup is expected to render
	   * into a list of root nodes. Also, the length of `resultList` and
	   * `markupList` should be the same.
	   *
	   * @param {array<string>} markupList List of markup strings to render.
	   * @return {array<DOMElement>} List of rendered nodes.
	   * @internal
	   */
	  dangerouslyRenderMarkup: function dangerouslyRenderMarkup(markupList) {
	    "production" !== process.env.NODE_ENV ? invariant(ExecutionEnvironment.canUseDOM, 'dangerouslyRenderMarkup(...): Cannot render markup in a worker ' + 'thread. Make sure `window` and `document` are available globally ' + 'before requiring React when unit testing or use ' + 'React.renderToString for server rendering.') : invariant(ExecutionEnvironment.canUseDOM);
	    var nodeName;
	    var markupByNodeName = {};
	    // Group markup by `nodeName` if a wrap is necessary, else by '*'.
	    for (var i = 0; i < markupList.length; i++) {
	      "production" !== process.env.NODE_ENV ? invariant(markupList[i], 'dangerouslyRenderMarkup(...): Missing markup.') : invariant(markupList[i]);
	      nodeName = getNodeName(markupList[i]);
	      nodeName = getMarkupWrap(nodeName) ? nodeName : '*';
	      markupByNodeName[nodeName] = markupByNodeName[nodeName] || [];
	      markupByNodeName[nodeName][i] = markupList[i];
	    }
	    var resultList = [];
	    var resultListAssignmentCount = 0;
	    for (nodeName in markupByNodeName) {
	      if (!markupByNodeName.hasOwnProperty(nodeName)) {
	        continue;
	      }
	      var markupListByNodeName = markupByNodeName[nodeName];

	      // This for-in loop skips the holes of the sparse array. The order of
	      // iteration should follow the order of assignment, which happens to match
	      // numerical index order, but we don't rely on that.
	      var resultIndex;
	      for (resultIndex in markupListByNodeName) {
	        if (markupListByNodeName.hasOwnProperty(resultIndex)) {
	          var markup = markupListByNodeName[resultIndex];

	          // Push the requested markup with an additional RESULT_INDEX_ATTR
	          // attribute.  If the markup does not start with a < character, it
	          // will be discarded below (with an appropriate console.error).
	          markupListByNodeName[resultIndex] = markup.replace(OPEN_TAG_NAME_EXP,
	          // This index will be parsed back out below.
	          '$1 ' + RESULT_INDEX_ATTR + '="' + resultIndex + '" ');
	        }
	      }

	      // Render each group of markup with similar wrapping `nodeName`.
	      var renderNodes = createNodesFromMarkup(markupListByNodeName.join(''), emptyFunction // Do nothing special with <script> tags.
	      );

	      for (var j = 0; j < renderNodes.length; ++j) {
	        var renderNode = renderNodes[j];
	        if (renderNode.hasAttribute && renderNode.hasAttribute(RESULT_INDEX_ATTR)) {

	          resultIndex = +renderNode.getAttribute(RESULT_INDEX_ATTR);
	          renderNode.removeAttribute(RESULT_INDEX_ATTR);

	          "production" !== process.env.NODE_ENV ? invariant(!resultList.hasOwnProperty(resultIndex), 'Danger: Assigning to an already-occupied result index.') : invariant(!resultList.hasOwnProperty(resultIndex));

	          resultList[resultIndex] = renderNode;

	          // This should match resultList.length and markupList.length when
	          // we're done.
	          resultListAssignmentCount += 1;
	        } else if ("production" !== process.env.NODE_ENV) {
	          console.error('Danger: Discarding unexpected node:', renderNode);
	        }
	      }
	    }

	    // Although resultList was populated out of order, it should now be a dense
	    // array.
	    "production" !== process.env.NODE_ENV ? invariant(resultListAssignmentCount === resultList.length, 'Danger: Did not assign to every index of resultList.') : invariant(resultListAssignmentCount === resultList.length);

	    "production" !== process.env.NODE_ENV ? invariant(resultList.length === markupList.length, 'Danger: Expected markup to render %s nodes, but rendered %s.', markupList.length, resultList.length) : invariant(resultList.length === markupList.length);

	    return resultList;
	  },

	  /**
	   * Replaces a node with a string of markup at its current position within its
	   * parent. The markup must render into a single root node.
	   *
	   * @param {DOMElement} oldChild Child node to replace.
	   * @param {string} markup Markup to render in place of the child node.
	   * @internal
	   */
	  dangerouslyReplaceNodeWithMarkup: function dangerouslyReplaceNodeWithMarkup(oldChild, markup) {
	    "production" !== process.env.NODE_ENV ? invariant(ExecutionEnvironment.canUseDOM, 'dangerouslyReplaceNodeWithMarkup(...): Cannot render markup in a ' + 'worker thread. Make sure `window` and `document` are available ' + 'globally before requiring React when unit testing or use ' + 'React.renderToString for server rendering.') : invariant(ExecutionEnvironment.canUseDOM);
	    "production" !== process.env.NODE_ENV ? invariant(markup, 'dangerouslyReplaceNodeWithMarkup(...): Missing markup.') : invariant(markup);
	    "production" !== process.env.NODE_ENV ? invariant(oldChild.tagName.toLowerCase() !== 'html', 'dangerouslyReplaceNodeWithMarkup(...): Cannot replace markup of the ' + '<html> node. This is because browser quirks make this unreliable ' + 'and/or slow. If you want to render to the root you must use ' + 'server rendering. See React.renderToString().') : invariant(oldChild.tagName.toLowerCase() !== 'html');

	    var newChild = createNodesFromMarkup(markup, emptyFunction)[0];
	    oldChild.parentNode.replaceChild(newChild, oldChild);
	  }

	};

	module.exports = Danger;

/***/ },
/* 76 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule createNodesFromMarkup
	 * @typechecks
	 */

	/*jslint evil: true, sub: true */

	"use strict";

	var ExecutionEnvironment = __webpack_require__(67);

	var createArrayFromMixed = __webpack_require__(77);
	var getMarkupWrap = __webpack_require__(79);
	var invariant = __webpack_require__(23);

	/**
	 * Dummy container used to render all markup.
	 */
	var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;

	/**
	 * Pattern used by `getNodeName`.
	 */
	var nodeNamePattern = /^\s*<(\w+)/;

	/**
	 * Extracts the `nodeName` of the first element in a string of markup.
	 *
	 * @param {string} markup String of markup.
	 * @return {?string} Node name of the supplied markup.
	 */
	function getNodeName(markup) {
	  var nodeNameMatch = markup.match(nodeNamePattern);
	  return nodeNameMatch && nodeNameMatch[1].toLowerCase();
	}

	/**
	 * Creates an array containing the nodes rendered from the supplied markup. The
	 * optionally supplied `handleScript` function will be invoked once for each
	 * <script> element that is rendered. If no `handleScript` function is supplied,
	 * an exception is thrown if any <script> elements are rendered.
	 *
	 * @param {string} markup A string of valid HTML markup.
	 * @param {?function} handleScript Invoked once for each rendered <script>.
	 * @return {array<DOMElement|DOMTextNode>} An array of rendered nodes.
	 */
	function createNodesFromMarkup(markup, handleScript) {
	  var node = dummyNode;
	  "production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'createNodesFromMarkup dummy not initialized') : invariant(!!dummyNode);
	  var nodeName = getNodeName(markup);

	  var wrap = nodeName && getMarkupWrap(nodeName);
	  if (wrap) {
	    node.innerHTML = wrap[1] + markup + wrap[2];

	    var wrapDepth = wrap[0];
	    while (wrapDepth--) {
	      node = node.lastChild;
	    }
	  } else {
	    node.innerHTML = markup;
	  }

	  var scripts = node.getElementsByTagName('script');
	  if (scripts.length) {
	    "production" !== process.env.NODE_ENV ? invariant(handleScript, 'createNodesFromMarkup(...): Unexpected <script> element rendered.') : invariant(handleScript);
	    createArrayFromMixed(scripts).forEach(handleScript);
	  }

	  var nodes = createArrayFromMixed(node.childNodes);
	  while (node.lastChild) {
	    node.removeChild(node.lastChild);
	  }
	  return nodes;
	}

	module.exports = createNodesFromMarkup;

/***/ },
/* 77 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule createArrayFromMixed
	 * @typechecks
	 */

	'use strict';

	var toArray = __webpack_require__(78);

	/**
	 * Perform a heuristic test to determine if an object is "array-like".
	 *
	 *   A monk asked Joshu, a Zen master, "Has a dog Buddha nature?"
	 *   Joshu replied: "Mu."
	 *
	 * This function determines if its argument has "array nature": it returns
	 * true if the argument is an actual array, an `arguments' object, or an
	 * HTMLCollection (e.g. node.childNodes or node.getElementsByTagName()).
	 *
	 * It will return false for other array-like objects like Filelist.
	 *
	 * @param {*} obj
	 * @return {boolean}
	 */
	function hasArrayNature(obj) {
	  return(
	    // not null/false
	    !!obj && (
	    // arrays are objects, NodeLists are functions in Safari
	    typeof obj == 'object' || typeof obj == 'function') &&
	    // quacks like an array
	    'length' in obj &&
	    // not window
	    !('setInterval' in obj) &&
	    // no DOM node should be considered an array-like
	    // a 'select' element has 'length' and 'item' properties on IE8
	    typeof obj.nodeType != 'number' && (
	    // a real array
	    // HTMLCollection/NodeList
	    Array.isArray(obj) ||
	    // arguments
	    'callee' in obj || 'item' in obj)
	  );
	}

	/**
	 * Ensure that the argument is an array by wrapping it in an array if it is not.
	 * Creates a copy of the argument if it is already an array.
	 *
	 * This is mostly useful idiomatically:
	 *
	 *   var createArrayFromMixed = require('createArrayFromMixed');
	 *
	 *   function takesOneOrMoreThings(things) {
	 *     things = createArrayFromMixed(things);
	 *     ...
	 *   }
	 *
	 * This allows you to treat `things' as an array, but accept scalars in the API.
	 *
	 * If you need to convert an array-like object, like `arguments`, into an array
	 * use toArray instead.
	 *
	 * @param {*} obj
	 * @return {array}
	 */
	function createArrayFromMixed(obj) {
	  if (!hasArrayNature(obj)) {
	    return [obj];
	  } else if (Array.isArray(obj)) {
	    return obj.slice();
	  } else {
	    return toArray(obj);
	  }
	}

	module.exports = createArrayFromMixed;

/***/ },
/* 78 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule toArray
	 * @typechecks
	 */

	"use strict";

	var invariant = __webpack_require__(23);

	/**
	 * Convert array-like objects to arrays.
	 *
	 * This API assumes the caller knows the contents of the data type. For less
	 * well defined inputs use createArrayFromMixed.
	 *
	 * @param {object|function|filelist} obj
	 * @return {array}
	 */
	function toArray(obj) {
	  var length = obj.length;

	  // Some browse builtin objects can report typeof 'function' (e.g. NodeList in
	  // old versions of Safari).
	  "production" !== process.env.NODE_ENV ? invariant(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function'), 'toArray: Array-like object expected') : invariant(!Array.isArray(obj) && (typeof obj === 'object' || typeof obj === 'function'));

	  "production" !== process.env.NODE_ENV ? invariant(typeof length === 'number', 'toArray: Object needs a length property') : invariant(typeof length === 'number');

	  "production" !== process.env.NODE_ENV ? invariant(length === 0 || length - 1 in obj, 'toArray: Object should have keys for indices') : invariant(length === 0 || length - 1 in obj);

	  // Old IE doesn't give collections access to hasOwnProperty. Assume inputs
	  // without method will throw during the slice call and skip straight to the
	  // fallback.
	  if (obj.hasOwnProperty) {
	    try {
	      return Array.prototype.slice.call(obj);
	    } catch (e) {
	      // IE < 9 does not support Array#slice on collections objects
	    }
	  }

	  // Fall back to copying key by key. This assumes all keys have a value,
	  // so will not preserve sparsely populated inputs.
	  var ret = Array(length);
	  for (var ii = 0; ii < length; ii++) {
	    ret[ii] = obj[ii];
	  }
	  return ret;
	}

	module.exports = toArray;

/***/ },
/* 79 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getMarkupWrap
	 */

	"use strict";

	var ExecutionEnvironment = __webpack_require__(67);

	var invariant = __webpack_require__(23);

	/**
	 * Dummy container used to detect which wraps are necessary.
	 */
	var dummyNode = ExecutionEnvironment.canUseDOM ? document.createElement('div') : null;

	/**
	 * Some browsers cannot use `innerHTML` to render certain elements standalone,
	 * so we wrap them, render the wrapped nodes, then extract the desired node.
	 *
	 * In IE8, certain elements cannot render alone, so wrap all elements ('*').
	 */
	var shouldWrap = {
	  // Force wrapping for SVG elements because if they get created inside a <div>,
	  // they will be initialized in the wrong namespace (and will not display).
	  'circle': true,
	  'clipPath': true,
	  'defs': true,
	  'ellipse': true,
	  'g': true,
	  'line': true,
	  'linearGradient': true,
	  'path': true,
	  'polygon': true,
	  'polyline': true,
	  'radialGradient': true,
	  'rect': true,
	  'stop': true,
	  'text': true
	};

	var selectWrap = [1, '<select multiple="true">', '</select>'];
	var tableWrap = [1, '<table>', '</table>'];
	var trWrap = [3, '<table><tbody><tr>', '</tr></tbody></table>'];

	var svgWrap = [1, '<svg>', '</svg>'];

	var markupWrap = {
	  '*': [1, '?<div>', '</div>'],

	  'area': [1, '<map>', '</map>'],
	  'col': [2, '<table><tbody></tbody><colgroup>', '</colgroup></table>'],
	  'legend': [1, '<fieldset>', '</fieldset>'],
	  'param': [1, '<object>', '</object>'],
	  'tr': [2, '<table><tbody>', '</tbody></table>'],

	  'optgroup': selectWrap,
	  'option': selectWrap,

	  'caption': tableWrap,
	  'colgroup': tableWrap,
	  'tbody': tableWrap,
	  'tfoot': tableWrap,
	  'thead': tableWrap,

	  'td': trWrap,
	  'th': trWrap,

	  'circle': svgWrap,
	  'clipPath': svgWrap,
	  'defs': svgWrap,
	  'ellipse': svgWrap,
	  'g': svgWrap,
	  'line': svgWrap,
	  'linearGradient': svgWrap,
	  'path': svgWrap,
	  'polygon': svgWrap,
	  'polyline': svgWrap,
	  'radialGradient': svgWrap,
	  'rect': svgWrap,
	  'stop': svgWrap,
	  'text': svgWrap
	};

	/**
	 * Gets the markup wrap configuration for the supplied `nodeName`.
	 *
	 * NOTE: This lazily detects which wraps are necessary for the current browser.
	 *
	 * @param {string} nodeName Lowercase `nodeName`.
	 * @return {?array} Markup wrap configuration, if applicable.
	 */
	function getMarkupWrap(nodeName) {
	  "production" !== process.env.NODE_ENV ? invariant(!!dummyNode, 'Markup wrapping node not initialized') : invariant(!!dummyNode);
	  if (!markupWrap.hasOwnProperty(nodeName)) {
	    nodeName = '*';
	  }
	  if (!shouldWrap.hasOwnProperty(nodeName)) {
	    if (nodeName === '*') {
	      dummyNode.innerHTML = '<link />';
	    } else {
	      dummyNode.innerHTML = '<' + nodeName + '></' + nodeName + '>';
	    }
	    shouldWrap[nodeName] = !dummyNode.firstChild;
	  }
	  return shouldWrap[nodeName] ? markupWrap[nodeName] : null;
	}

	module.exports = getMarkupWrap;

/***/ },
/* 80 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactMultiChildUpdateTypes
	 */

	'use strict';

	var keyMirror = __webpack_require__(22);

	/**
	 * When a component's children are updated, a series of update configuration
	 * objects are created in order to batch and serialize the required changes.
	 *
	 * Enumerates all the possible types of update configurations.
	 *
	 * @internal
	 */
	var ReactMultiChildUpdateTypes = keyMirror({
	  INSERT_MARKUP: null,
	  MOVE_EXISTING: null,
	  REMOVE_NODE: null,
	  TEXT_CONTENT: null
	});

	module.exports = ReactMultiChildUpdateTypes;

/***/ },
/* 81 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule setTextContent
	 */

	'use strict';

	var ExecutionEnvironment = __webpack_require__(67);
	var escapeTextContentForBrowser = __webpack_require__(62);
	var setInnerHTML = __webpack_require__(82);

	/**
	 * Set the textContent property of a node, ensuring that whitespace is preserved
	 * even in IE8. innerText is a poor substitute for textContent and, among many
	 * issues, inserts <br> instead of the literal newline chars. innerHTML behaves
	 * as it should.
	 *
	 * @param {DOMElement} node
	 * @param {string} text
	 * @internal
	 */
	var setTextContent = function setTextContent(node, text) {
	  node.textContent = text;
	};

	if (ExecutionEnvironment.canUseDOM) {
	  if (!('textContent' in document.documentElement)) {
	    setTextContent = function (node, text) {
	      setInnerHTML(node, escapeTextContentForBrowser(text));
	    };
	  }
	}

	module.exports = setTextContent;

/***/ },
/* 82 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule setInnerHTML
	 */

	/* globals MSApp */

	'use strict';

	var ExecutionEnvironment = __webpack_require__(67);

	var WHITESPACE_TEST = /^[ \r\n\t\f]/;
	var NONVISIBLE_TEST = /<(!--|link|noscript|meta|script|style)[ \r\n\t\f\/>]/;

	/**
	 * Set the innerHTML property of a node, ensuring that whitespace is preserved
	 * even in IE8.
	 *
	 * @param {DOMElement} node
	 * @param {string} html
	 * @internal
	 */
	var setInnerHTML = function setInnerHTML(node, html) {
	  node.innerHTML = html;
	};

	// Win8 apps: Allow all html to be inserted
	if (typeof MSApp !== 'undefined' && MSApp.execUnsafeLocalFunction) {
	  setInnerHTML = function (node, html) {
	    MSApp.execUnsafeLocalFunction(function () {
	      node.innerHTML = html;
	    });
	  };
	}

	if (ExecutionEnvironment.canUseDOM) {
	  // IE8: When updating a just created node with innerHTML only leading
	  // whitespace is removed. When updating an existing node with innerHTML
	  // whitespace in root TextNodes is also collapsed.
	  // @see quirksmode.org/bugreports/archives/2004/11/innerhtml_and_t.html

	  // Feature detection; only IE8 is known to behave improperly like this.
	  var testElement = document.createElement('div');
	  testElement.innerHTML = ' ';
	  if (testElement.innerHTML === '') {
	    setInnerHTML = function (node, html) {
	      // Magic theory: IE8 supposedly differentiates between added and updated
	      // nodes when processing innerHTML, innerHTML on updated nodes suffers
	      // from worse whitespace behavior. Re-adding a node like this triggers
	      // the initial and more favorable whitespace behavior.
	      // TODO: What to do on a detached node?
	      if (node.parentNode) {
	        node.parentNode.replaceChild(node, node);
	      }

	      // We also implement a workaround for non-visible tags disappearing into
	      // thin air on IE8, this only happens if there is no visible text
	      // in-front of the non-visible tags. Piggyback on the whitespace fix
	      // and simply check if any non-visible tags appear in the source.
	      if (WHITESPACE_TEST.test(html) || html[0] === '<' && NONVISIBLE_TEST.test(html)) {
	        // Recover leading whitespace by temporarily prepending any character.
	        // \uFEFF has the potential advantage of being zero-width/invisible.
	        node.innerHTML = '﻿' + html;

	        // deleteData leaves an empty `TextNode` which offsets the index of all
	        // children. Definitely want to avoid this.
	        var textNode = node.firstChild;
	        if (textNode.data.length === 1) {
	          node.removeChild(textNode);
	        } else {
	          textNode.deleteData(0, 1);
	        }
	      } else {
	        node.innerHTML = html;
	      }
	    };
	  }
	}

	module.exports = setInnerHTML;

/***/ },
/* 83 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactMount
	 */

	'use strict';

	var DOMProperty = __webpack_require__(60);
	var ReactBrowserEventEmitter = __webpack_require__(84);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactElement = __webpack_require__(27);
	var ReactElementValidator = __webpack_require__(48);
	var ReactEmptyComponent = __webpack_require__(92);
	var ReactInstanceHandles = __webpack_require__(35);
	var ReactInstanceMap = __webpack_require__(41);
	var ReactMarkupChecksum = __webpack_require__(93);
	var ReactPerf = __webpack_require__(44);
	var ReactReconciler = __webpack_require__(45);
	var ReactUpdateQueue = __webpack_require__(39);
	var ReactUpdates = __webpack_require__(42);

	var emptyObject = __webpack_require__(30);
	var containsNode = __webpack_require__(95);
	var getReactRootElementInContainer = __webpack_require__(98);
	var instantiateReactComponent = __webpack_require__(99);
	var invariant = __webpack_require__(23);
	var setInnerHTML = __webpack_require__(82);
	var shouldUpdateReactComponent = __webpack_require__(102);
	var warning = __webpack_require__(31);

	var SEPARATOR = ReactInstanceHandles.SEPARATOR;

	var ATTR_NAME = DOMProperty.ID_ATTRIBUTE_NAME;
	var nodeCache = {};

	var ELEMENT_NODE_TYPE = 1;
	var DOC_NODE_TYPE = 9;

	/** Mapping from reactRootID to React component instance. */
	var instancesByReactRootID = {};

	/** Mapping from reactRootID to `container` nodes. */
	var containersByReactRootID = {};

	if ("production" !== process.env.NODE_ENV) {
	  /** __DEV__-only mapping from reactRootID to root elements. */
	  var rootElementsByReactRootID = {};
	}

	// Used to store breadth-first search state in findComponentRoot.
	var findComponentRootReusableArray = [];

	/**
	 * Finds the index of the first character
	 * that's not common between the two given strings.
	 *
	 * @return {number} the index of the character where the strings diverge
	 */
	function firstDifferenceIndex(string1, string2) {
	  var minLen = Math.min(string1.length, string2.length);
	  for (var i = 0; i < minLen; i++) {
	    if (string1.charAt(i) !== string2.charAt(i)) {
	      return i;
	    }
	  }
	  return string1.length === string2.length ? -1 : minLen;
	}

	/**
	 * @param {DOMElement} container DOM element that may contain a React component.
	 * @return {?string} A "reactRoot" ID, if a React component is rendered.
	 */
	function getReactRootID(container) {
	  var rootElement = getReactRootElementInContainer(container);
	  return rootElement && ReactMount.getID(rootElement);
	}

	/**
	 * Accessing node[ATTR_NAME] or calling getAttribute(ATTR_NAME) on a form
	 * element can return its control whose name or ID equals ATTR_NAME. All
	 * DOM nodes support `getAttributeNode` but this can also get called on
	 * other objects so just return '' if we're given something other than a
	 * DOM node (such as window).
	 *
	 * @param {?DOMElement|DOMWindow|DOMDocument|DOMTextNode} node DOM node.
	 * @return {string} ID of the supplied `domNode`.
	 */
	function getID(node) {
	  var id = internalGetID(node);
	  if (id) {
	    if (nodeCache.hasOwnProperty(id)) {
	      var cached = nodeCache[id];
	      if (cached !== node) {
	        "production" !== process.env.NODE_ENV ? invariant(!isValid(cached, id), 'ReactMount: Two valid but unequal nodes with the same `%s`: %s', ATTR_NAME, id) : invariant(!isValid(cached, id));

	        nodeCache[id] = node;
	      }
	    } else {
	      nodeCache[id] = node;
	    }
	  }

	  return id;
	}

	function internalGetID(node) {
	  // If node is something like a window, document, or text node, none of
	  // which support attributes or a .getAttribute method, gracefully return
	  // the empty string, as if the attribute were missing.
	  return node && node.getAttribute && node.getAttribute(ATTR_NAME) || '';
	}

	/**
	 * Sets the React-specific ID of the given node.
	 *
	 * @param {DOMElement} node The DOM node whose ID will be set.
	 * @param {string} id The value of the ID attribute.
	 */
	function setID(node, id) {
	  var oldID = internalGetID(node);
	  if (oldID !== id) {
	    delete nodeCache[oldID];
	  }
	  node.setAttribute(ATTR_NAME, id);
	  nodeCache[id] = node;
	}

	/**
	 * Finds the node with the supplied React-generated DOM ID.
	 *
	 * @param {string} id A React-generated DOM ID.
	 * @return {DOMElement} DOM node with the suppled `id`.
	 * @internal
	 */
	function getNode(id) {
	  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {
	    nodeCache[id] = ReactMount.findReactNodeByID(id);
	  }
	  return nodeCache[id];
	}

	/**
	 * Finds the node with the supplied public React instance.
	 *
	 * @param {*} instance A public React instance.
	 * @return {?DOMElement} DOM node with the suppled `id`.
	 * @internal
	 */
	function getNodeFromInstance(instance) {
	  var id = ReactInstanceMap.get(instance)._rootNodeID;
	  if (ReactEmptyComponent.isNullComponentID(id)) {
	    return null;
	  }
	  if (!nodeCache.hasOwnProperty(id) || !isValid(nodeCache[id], id)) {
	    nodeCache[id] = ReactMount.findReactNodeByID(id);
	  }
	  return nodeCache[id];
	}

	/**
	 * A node is "valid" if it is contained by a currently mounted container.
	 *
	 * This means that the node does not have to be contained by a document in
	 * order to be considered valid.
	 *
	 * @param {?DOMElement} node The candidate DOM node.
	 * @param {string} id The expected ID of the node.
	 * @return {boolean} Whether the node is contained by a mounted container.
	 */
	function isValid(node, id) {
	  if (node) {
	    "production" !== process.env.NODE_ENV ? invariant(internalGetID(node) === id, 'ReactMount: Unexpected modification of `%s`', ATTR_NAME) : invariant(internalGetID(node) === id);

	    var container = ReactMount.findReactContainerForID(id);
	    if (container && containsNode(container, node)) {
	      return true;
	    }
	  }

	  return false;
	}

	/**
	 * Causes the cache to forget about one React-specific ID.
	 *
	 * @param {string} id The ID to forget.
	 */
	function purgeID(id) {
	  delete nodeCache[id];
	}

	var deepestNodeSoFar = null;
	function findDeepestCachedAncestorImpl(ancestorID) {
	  var ancestor = nodeCache[ancestorID];
	  if (ancestor && isValid(ancestor, ancestorID)) {
	    deepestNodeSoFar = ancestor;
	  } else {
	    // This node isn't populated in the cache, so presumably none of its
	    // descendants are. Break out of the loop.
	    return false;
	  }
	}

	/**
	 * Return the deepest cached node whose ID is a prefix of `targetID`.
	 */
	function findDeepestCachedAncestor(targetID) {
	  deepestNodeSoFar = null;
	  ReactInstanceHandles.traverseAncestors(targetID, findDeepestCachedAncestorImpl);

	  var foundNode = deepestNodeSoFar;
	  deepestNodeSoFar = null;
	  return foundNode;
	}

	/**
	 * Mounts this component and inserts it into the DOM.
	 *
	 * @param {ReactComponent} componentInstance The instance to mount.
	 * @param {string} rootID DOM ID of the root node.
	 * @param {DOMElement} container DOM element to mount into.
	 * @param {ReactReconcileTransaction} transaction
	 * @param {boolean} shouldReuseMarkup If true, do not insert markup
	 */
	function mountComponentIntoNode(componentInstance, rootID, container, transaction, shouldReuseMarkup) {
	  var markup = ReactReconciler.mountComponent(componentInstance, rootID, transaction, emptyObject);
	  componentInstance._isTopLevel = true;
	  ReactMount._mountImageIntoNode(markup, container, shouldReuseMarkup);
	}

	/**
	 * Batched mount.
	 *
	 * @param {ReactComponent} componentInstance The instance to mount.
	 * @param {string} rootID DOM ID of the root node.
	 * @param {DOMElement} container DOM element to mount into.
	 * @param {boolean} shouldReuseMarkup If true, do not insert markup
	 */
	function batchedMountComponentIntoNode(componentInstance, rootID, container, shouldReuseMarkup) {
	  var transaction = ReactUpdates.ReactReconcileTransaction.getPooled();
	  transaction.perform(mountComponentIntoNode, null, componentInstance, rootID, container, transaction, shouldReuseMarkup);
	  ReactUpdates.ReactReconcileTransaction.release(transaction);
	}

	/**
	 * Mounting is the process of initializing a React component by creating its
	 * representative DOM elements and inserting them into a supplied `container`.
	 * Any prior content inside `container` is destroyed in the process.
	 *
	 *   ReactMount.render(
	 *     component,
	 *     document.getElementById('container')
	 *   );
	 *
	 *   <div id="container">                   <-- Supplied `container`.
	 *     <div data-reactid=".3">              <-- Rendered reactRoot of React
	 *       // ...                                 component.
	 *     </div>
	 *   </div>
	 *
	 * Inside of `container`, the first element rendered is the "reactRoot".
	 */
	var ReactMount = {
	  /** Exposed for debugging purposes **/
	  _instancesByReactRootID: instancesByReactRootID,

	  /**
	   * This is a hook provided to support rendering React components while
	   * ensuring that the apparent scroll position of its `container` does not
	   * change.
	   *
	   * @param {DOMElement} container The `container` being rendered into.
	   * @param {function} renderCallback This must be called once to do the render.
	   */
	  scrollMonitor: function scrollMonitor(container, renderCallback) {
	    renderCallback();
	  },

	  /**
	   * Take a component that's already mounted into the DOM and replace its props
	   * @param {ReactComponent} prevComponent component instance already in the DOM
	   * @param {ReactElement} nextElement component instance to render
	   * @param {DOMElement} container container to render into
	   * @param {?function} callback function triggered on completion
	   */
	  _updateRootComponent: function _updateRootComponent(prevComponent, nextElement, container, callback) {
	    if ("production" !== process.env.NODE_ENV) {
	      ReactElementValidator.checkAndWarnForMutatedProps(nextElement);
	    }

	    ReactMount.scrollMonitor(container, function () {
	      ReactUpdateQueue.enqueueElementInternal(prevComponent, nextElement);
	      if (callback) {
	        ReactUpdateQueue.enqueueCallbackInternal(prevComponent, callback);
	      }
	    });

	    if ("production" !== process.env.NODE_ENV) {
	      // Record the root element in case it later gets transplanted.
	      rootElementsByReactRootID[getReactRootID(container)] = getReactRootElementInContainer(container);
	    }

	    return prevComponent;
	  },

	  /**
	   * Register a component into the instance map and starts scroll value
	   * monitoring
	   * @param {ReactComponent} nextComponent component instance to render
	   * @param {DOMElement} container container to render into
	   * @return {string} reactRoot ID prefix
	   */
	  _registerComponent: function _registerComponent(nextComponent, container) {
	    "production" !== process.env.NODE_ENV ? invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE), '_registerComponent(...): Target container is not a DOM element.') : invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE));

	    ReactBrowserEventEmitter.ensureScrollValueMonitoring();

	    var reactRootID = ReactMount.registerContainer(container);
	    instancesByReactRootID[reactRootID] = nextComponent;
	    return reactRootID;
	  },

	  /**
	   * Render a new component into the DOM.
	   * @param {ReactElement} nextElement element to render
	   * @param {DOMElement} container container to render into
	   * @param {boolean} shouldReuseMarkup if we should skip the markup insertion
	   * @return {ReactComponent} nextComponent
	   */
	  _renderNewRootComponent: function _renderNewRootComponent(nextElement, container, shouldReuseMarkup) {
	    // Various parts of our code (such as ReactCompositeComponent's
	    // _renderValidatedComponent) assume that calls to render aren't nested;
	    // verify that that's the case.
	    "production" !== process.env.NODE_ENV ? warning(ReactCurrentOwner.current == null, '_renderNewRootComponent(): Render methods should be a pure function ' + 'of props and state; triggering nested component updates from ' + 'render is not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate.') : null;

	    var componentInstance = instantiateReactComponent(nextElement, null);
	    var reactRootID = ReactMount._registerComponent(componentInstance, container);

	    // The initial render is synchronous but any updates that happen during
	    // rendering, in componentWillMount or componentDidMount, will be batched
	    // according to the current batching strategy.

	    ReactUpdates.batchedUpdates(batchedMountComponentIntoNode, componentInstance, reactRootID, container, shouldReuseMarkup);

	    if ("production" !== process.env.NODE_ENV) {
	      // Record the root element in case it later gets transplanted.
	      rootElementsByReactRootID[reactRootID] = getReactRootElementInContainer(container);
	    }

	    return componentInstance;
	  },

	  /**
	   * Renders a React component into the DOM in the supplied `container`.
	   *
	   * If the React component was previously rendered into `container`, this will
	   * perform an update on it and only mutate the DOM as necessary to reflect the
	   * latest React component.
	   *
	   * @param {ReactElement} nextElement Component element to render.
	   * @param {DOMElement} container DOM element to render into.
	   * @param {?function} callback function triggered on completion
	   * @return {ReactComponent} Component instance rendered in `container`.
	   */
	  render: function render(nextElement, container, callback) {
	    "production" !== process.env.NODE_ENV ? invariant(ReactElement.isValidElement(nextElement), 'React.render(): Invalid component element.%s', typeof nextElement === 'string' ? ' Instead of passing an element string, make sure to instantiate ' + 'it by passing it to React.createElement.' : typeof nextElement === 'function' ? ' Instead of passing a component class, make sure to instantiate ' + 'it by passing it to React.createElement.' :
	    // Check if it quacks like an element
	    nextElement != null && nextElement.props !== undefined ? ' This may be caused by unintentionally loading two independent ' + 'copies of React.' : '') : invariant(ReactElement.isValidElement(nextElement));

	    var prevComponent = instancesByReactRootID[getReactRootID(container)];

	    if (prevComponent) {
	      var prevElement = prevComponent._currentElement;
	      if (shouldUpdateReactComponent(prevElement, nextElement)) {
	        return ReactMount._updateRootComponent(prevComponent, nextElement, container, callback).getPublicInstance();
	      } else {
	        ReactMount.unmountComponentAtNode(container);
	      }
	    }

	    var reactRootElement = getReactRootElementInContainer(container);
	    var containerHasReactMarkup = reactRootElement && ReactMount.isRenderedByReact(reactRootElement);

	    if ("production" !== process.env.NODE_ENV) {
	      if (!containerHasReactMarkup || reactRootElement.nextSibling) {
	        var rootElementSibling = reactRootElement;
	        while (rootElementSibling) {
	          if (ReactMount.isRenderedByReact(rootElementSibling)) {
	            "production" !== process.env.NODE_ENV ? warning(false, 'render(): Target node has markup rendered by React, but there ' + 'are unrelated nodes as well. This is most commonly caused by ' + 'white-space inserted around server-rendered markup.') : null;
	            break;
	          }

	          rootElementSibling = rootElementSibling.nextSibling;
	        }
	      }
	    }

	    var shouldReuseMarkup = containerHasReactMarkup && !prevComponent;

	    var component = ReactMount._renderNewRootComponent(nextElement, container, shouldReuseMarkup).getPublicInstance();
	    if (callback) {
	      callback.call(component);
	    }
	    return component;
	  },

	  /**
	   * Constructs a component instance of `constructor` with `initialProps` and
	   * renders it into the supplied `container`.
	   *
	   * @param {function} constructor React component constructor.
	   * @param {?object} props Initial props of the component instance.
	   * @param {DOMElement} container DOM element to render into.
	   * @return {ReactComponent} Component instance rendered in `container`.
	   */
	  constructAndRenderComponent: function constructAndRenderComponent(constructor, props, container) {
	    var element = ReactElement.createElement(constructor, props);
	    return ReactMount.render(element, container);
	  },

	  /**
	   * Constructs a component instance of `constructor` with `initialProps` and
	   * renders it into a container node identified by supplied `id`.
	   *
	   * @param {function} componentConstructor React component constructor
	   * @param {?object} props Initial props of the component instance.
	   * @param {string} id ID of the DOM element to render into.
	   * @return {ReactComponent} Component instance rendered in the container node.
	   */
	  constructAndRenderComponentByID: function constructAndRenderComponentByID(constructor, props, id) {
	    var domNode = document.getElementById(id);
	    "production" !== process.env.NODE_ENV ? invariant(domNode, 'Tried to get element with id of "%s" but it is not present on the page.', id) : invariant(domNode);
	    return ReactMount.constructAndRenderComponent(constructor, props, domNode);
	  },

	  /**
	   * Registers a container node into which React components will be rendered.
	   * This also creates the "reactRoot" ID that will be assigned to the element
	   * rendered within.
	   *
	   * @param {DOMElement} container DOM element to register as a container.
	   * @return {string} The "reactRoot" ID of elements rendered within.
	   */
	  registerContainer: function registerContainer(container) {
	    var reactRootID = getReactRootID(container);
	    if (reactRootID) {
	      // If one exists, make sure it is a valid "reactRoot" ID.
	      reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(reactRootID);
	    }
	    if (!reactRootID) {
	      // No valid "reactRoot" ID found, create one.
	      reactRootID = ReactInstanceHandles.createReactRootID();
	    }
	    containersByReactRootID[reactRootID] = container;
	    return reactRootID;
	  },

	  /**
	   * Unmounts and destroys the React component rendered in the `container`.
	   *
	   * @param {DOMElement} container DOM element containing a React component.
	   * @return {boolean} True if a component was found in and unmounted from
	   *                   `container`
	   */
	  unmountComponentAtNode: function unmountComponentAtNode(container) {
	    // Various parts of our code (such as ReactCompositeComponent's
	    // _renderValidatedComponent) assume that calls to render aren't nested;
	    // verify that that's the case. (Strictly speaking, unmounting won't cause a
	    // render but we still don't expect to be in a render call here.)
	    "production" !== process.env.NODE_ENV ? warning(ReactCurrentOwner.current == null, 'unmountComponentAtNode(): Render methods should be a pure function of ' + 'props and state; triggering nested component updates from render is ' + 'not allowed. If necessary, trigger nested updates in ' + 'componentDidUpdate.') : null;

	    "production" !== process.env.NODE_ENV ? invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE), 'unmountComponentAtNode(...): Target container is not a DOM element.') : invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE));

	    var reactRootID = getReactRootID(container);
	    var component = instancesByReactRootID[reactRootID];
	    if (!component) {
	      return false;
	    }
	    ReactMount.unmountComponentFromNode(component, container);
	    delete instancesByReactRootID[reactRootID];
	    delete containersByReactRootID[reactRootID];
	    if ("production" !== process.env.NODE_ENV) {
	      delete rootElementsByReactRootID[reactRootID];
	    }
	    return true;
	  },

	  /**
	   * Unmounts a component and removes it from the DOM.
	   *
	   * @param {ReactComponent} instance React component instance.
	   * @param {DOMElement} container DOM element to unmount from.
	   * @final
	   * @internal
	   * @see {ReactMount.unmountComponentAtNode}
	   */
	  unmountComponentFromNode: function unmountComponentFromNode(instance, container) {
	    ReactReconciler.unmountComponent(instance);

	    if (container.nodeType === DOC_NODE_TYPE) {
	      container = container.documentElement;
	    }

	    // http://jsperf.com/emptying-a-node
	    while (container.lastChild) {
	      container.removeChild(container.lastChild);
	    }
	  },

	  /**
	   * Finds the container DOM element that contains React component to which the
	   * supplied DOM `id` belongs.
	   *
	   * @param {string} id The ID of an element rendered by a React component.
	   * @return {?DOMElement} DOM element that contains the `id`.
	   */
	  findReactContainerForID: function findReactContainerForID(id) {
	    var reactRootID = ReactInstanceHandles.getReactRootIDFromNodeID(id);
	    var container = containersByReactRootID[reactRootID];

	    if ("production" !== process.env.NODE_ENV) {
	      var rootElement = rootElementsByReactRootID[reactRootID];
	      if (rootElement && rootElement.parentNode !== container) {
	        "production" !== process.env.NODE_ENV ? invariant(
	        // Call internalGetID here because getID calls isValid which calls
	        // findReactContainerForID (this function).
	        internalGetID(rootElement) === reactRootID, 'ReactMount: Root element ID differed from reactRootID.') : invariant( // Call internalGetID here because getID calls isValid which calls
	        // findReactContainerForID (this function).
	        internalGetID(rootElement) === reactRootID);

	        var containerChild = container.firstChild;
	        if (containerChild && reactRootID === internalGetID(containerChild)) {
	          // If the container has a new child with the same ID as the old
	          // root element, then rootElementsByReactRootID[reactRootID] is
	          // just stale and needs to be updated. The case that deserves a
	          // warning is when the container is empty.
	          rootElementsByReactRootID[reactRootID] = containerChild;
	        } else {
	          "production" !== process.env.NODE_ENV ? warning(false, 'ReactMount: Root element has been removed from its original ' + 'container. New container:', rootElement.parentNode) : null;
	        }
	      }
	    }

	    return container;
	  },

	  /**
	   * Finds an element rendered by React with the supplied ID.
	   *
	   * @param {string} id ID of a DOM node in the React component.
	   * @return {DOMElement} Root DOM node of the React component.
	   */
	  findReactNodeByID: function findReactNodeByID(id) {
	    var reactRoot = ReactMount.findReactContainerForID(id);
	    return ReactMount.findComponentRoot(reactRoot, id);
	  },

	  /**
	   * True if the supplied `node` is rendered by React.
	   *
	   * @param {*} node DOM Element to check.
	   * @return {boolean} True if the DOM Element appears to be rendered by React.
	   * @internal
	   */
	  isRenderedByReact: function isRenderedByReact(node) {
	    if (node.nodeType !== 1) {
	      // Not a DOMElement, therefore not a React component
	      return false;
	    }
	    var id = ReactMount.getID(node);
	    return id ? id.charAt(0) === SEPARATOR : false;
	  },

	  /**
	   * Traverses up the ancestors of the supplied node to find a node that is a
	   * DOM representation of a React component.
	   *
	   * @param {*} node
	   * @return {?DOMEventTarget}
	   * @internal
	   */
	  getFirstReactDOM: function getFirstReactDOM(node) {
	    var current = node;
	    while (current && current.parentNode !== current) {
	      if (ReactMount.isRenderedByReact(current)) {
	        return current;
	      }
	      current = current.parentNode;
	    }
	    return null;
	  },

	  /**
	   * Finds a node with the supplied `targetID` inside of the supplied
	   * `ancestorNode`.  Exploits the ID naming scheme to perform the search
	   * quickly.
	   *
	   * @param {DOMEventTarget} ancestorNode Search from this root.
	   * @pararm {string} targetID ID of the DOM representation of the component.
	   * @return {DOMEventTarget} DOM node with the supplied `targetID`.
	   * @internal
	   */
	  findComponentRoot: function findComponentRoot(ancestorNode, targetID) {
	    var firstChildren = findComponentRootReusableArray;
	    var childIndex = 0;

	    var deepestAncestor = findDeepestCachedAncestor(targetID) || ancestorNode;

	    firstChildren[0] = deepestAncestor.firstChild;
	    firstChildren.length = 1;

	    while (childIndex < firstChildren.length) {
	      var child = firstChildren[childIndex++];
	      var targetChild;

	      while (child) {
	        var childID = ReactMount.getID(child);
	        if (childID) {
	          // Even if we find the node we're looking for, we finish looping
	          // through its siblings to ensure they're cached so that we don't have
	          // to revisit this node again. Otherwise, we make n^2 calls to getID
	          // when visiting the many children of a single node in order.

	          if (targetID === childID) {
	            targetChild = child;
	          } else if (ReactInstanceHandles.isAncestorIDOf(childID, targetID)) {
	            // If we find a child whose ID is an ancestor of the given ID,
	            // then we can be sure that we only want to search the subtree
	            // rooted at this child, so we can throw out the rest of the
	            // search state.
	            firstChildren.length = childIndex = 0;
	            firstChildren.push(child.firstChild);
	          }
	        } else {
	          // If this child had no ID, then there's a chance that it was
	          // injected automatically by the browser, as when a `<table>`
	          // element sprouts an extra `<tbody>` child as a side effect of
	          // `.innerHTML` parsing. Optimistically continue down this
	          // branch, but not before examining the other siblings.
	          firstChildren.push(child.firstChild);
	        }

	        child = child.nextSibling;
	      }

	      if (targetChild) {
	        // Emptying firstChildren/findComponentRootReusableArray is
	        // not necessary for correctness, but it helps the GC reclaim
	        // any nodes that were left at the end of the search.
	        firstChildren.length = 0;

	        return targetChild;
	      }
	    }

	    firstChildren.length = 0;

	    "production" !== process.env.NODE_ENV ? invariant(false, 'findComponentRoot(..., %s): Unable to find element. This probably ' + 'means the DOM was unexpectedly mutated (e.g., by the browser), ' + 'usually due to forgetting a <tbody> when using tables, nesting tags ' + 'like <form>, <p>, or <a>, or using non-SVG elements in an <svg> ' + 'parent. ' + 'Try inspecting the child nodes of the element with React ID `%s`.', targetID, ReactMount.getID(ancestorNode)) : invariant(false);
	  },

	  _mountImageIntoNode: function _mountImageIntoNode(markup, container, shouldReuseMarkup) {
	    "production" !== process.env.NODE_ENV ? invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE), 'mountComponentIntoNode(...): Target container is not valid.') : invariant(container && (container.nodeType === ELEMENT_NODE_TYPE || container.nodeType === DOC_NODE_TYPE));

	    if (shouldReuseMarkup) {
	      var rootElement = getReactRootElementInContainer(container);
	      if (ReactMarkupChecksum.canReuseMarkup(markup, rootElement)) {
	        return;
	      } else {
	        var checksum = rootElement.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
	        rootElement.removeAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);

	        var rootMarkup = rootElement.outerHTML;
	        rootElement.setAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME, checksum);

	        var diffIndex = firstDifferenceIndex(markup, rootMarkup);
	        var difference = ' (client) ' + markup.substring(diffIndex - 20, diffIndex + 20) + '\n (server) ' + rootMarkup.substring(diffIndex - 20, diffIndex + 20);

	        "production" !== process.env.NODE_ENV ? invariant(container.nodeType !== DOC_NODE_TYPE, 'You\'re trying to render a component to the document using ' + 'server rendering but the checksum was invalid. This usually ' + 'means you rendered a different component type or props on ' + 'the client from the one on the server, or your render() ' + 'methods are impure. React cannot handle this case due to ' + 'cross-browser quirks by rendering at the document root. You ' + 'should look for environment dependent code in your components ' + 'and ensure the props are the same client and server side:\n%s', difference) : invariant(container.nodeType !== DOC_NODE_TYPE);

	        if ("production" !== process.env.NODE_ENV) {
	          "production" !== process.env.NODE_ENV ? warning(false, 'React attempted to reuse markup in a container but the ' + 'checksum was invalid. This generally means that you are ' + 'using server rendering and the markup generated on the ' + 'server was not what the client was expecting. React injected ' + 'new markup to compensate which works but you have lost many ' + 'of the benefits of server rendering. Instead, figure out ' + 'why the markup being generated is different on the client ' + 'or server:\n%s', difference) : null;
	        }
	      }
	    }

	    "production" !== process.env.NODE_ENV ? invariant(container.nodeType !== DOC_NODE_TYPE, 'You\'re trying to render a component to the document but ' + 'you didn\'t use server rendering. We can\'t do this ' + 'without using server rendering due to cross-browser quirks. ' + 'See React.renderToString() for server rendering.') : invariant(container.nodeType !== DOC_NODE_TYPE);

	    setInnerHTML(container, markup);
	  },

	  /**
	   * React ID utilities.
	   */

	  getReactRootID: getReactRootID,

	  getID: getID,

	  setID: setID,

	  getNode: getNode,

	  getNodeFromInstance: getNodeFromInstance,

	  purgeID: purgeID
	};

	ReactPerf.measureMethods(ReactMount, 'ReactMount', {
	  _renderNewRootComponent: '_renderNewRootComponent',
	  _mountImageIntoNode: '_mountImageIntoNode'
	});

	module.exports = ReactMount;

/***/ },
/* 84 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactBrowserEventEmitter
	 * @typechecks static-only
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPluginHub = __webpack_require__(85);
	var EventPluginRegistry = __webpack_require__(86);
	var ReactEventEmitterMixin = __webpack_require__(89);
	var ViewportMetrics = __webpack_require__(90);

	var assign = __webpack_require__(29);
	var isEventSupported = __webpack_require__(91);

	/**
	 * Summary of `ReactBrowserEventEmitter` event handling:
	 *
	 *  - Top-level delegation is used to trap most native browser events. This
	 *    may only occur in the main thread and is the responsibility of
	 *    ReactEventListener, which is injected and can therefore support pluggable
	 *    event sources. This is the only work that occurs in the main thread.
	 *
	 *  - We normalize and de-duplicate events to account for browser quirks. This
	 *    may be done in the worker thread.
	 *
	 *  - Forward these native events (with the associated top-level type used to
	 *    trap it) to `EventPluginHub`, which in turn will ask plugins if they want
	 *    to extract any synthetic events.
	 *
	 *  - The `EventPluginHub` will then process each event by annotating them with
	 *    "dispatches", a sequence of listeners and IDs that care about that event.
	 *
	 *  - The `EventPluginHub` then dispatches the events.
	 *
	 * Overview of React and the event system:
	 *
	 * +------------+    .
	 * |    DOM     |    .
	 * +------------+    .
	 *       |           .
	 *       v           .
	 * +------------+    .
	 * | ReactEvent |    .
	 * |  Listener  |    .
	 * +------------+    .                         +-----------+
	 *       |           .               +--------+|SimpleEvent|
	 *       |           .               |         |Plugin     |
	 * +-----|------+    .               v         +-----------+
	 * |     |      |    .    +--------------+                    +------------+
	 * |     +-----------.--->|EventPluginHub|                    |    Event   |
	 * |            |    .    |              |     +-----------+  | Propagators|
	 * | ReactEvent |    .    |              |     |TapEvent   |  |------------|
	 * |  Emitter   |    .    |              |<---+|Plugin     |  |other plugin|
	 * |            |    .    |              |     +-----------+  |  utilities |
	 * |     +-----------.--->|              |                    +------------+
	 * |     |      |    .    +--------------+
	 * +-----|------+    .                ^        +-----------+
	 *       |           .                |        |Enter/Leave|
	 *       +           .                +-------+|Plugin     |
	 * +-------------+   .                         +-----------+
	 * | application |   .
	 * |-------------|   .
	 * |             |   .
	 * |             |   .
	 * +-------------+   .
	 *                   .
	 *    React Core     .  General Purpose Event Plugin System
	 */

	var alreadyListeningTo = {};
	var isMonitoringScrollValue = false;
	var reactTopListenersCounter = 0;

	// For events like 'submit' which don't consistently bubble (which we trap at a
	// lower node than `document`), binding at `document` would cause duplicate
	// events so we don't include them here
	var topEventMapping = {
	  topBlur: 'blur',
	  topChange: 'change',
	  topClick: 'click',
	  topCompositionEnd: 'compositionend',
	  topCompositionStart: 'compositionstart',
	  topCompositionUpdate: 'compositionupdate',
	  topContextMenu: 'contextmenu',
	  topCopy: 'copy',
	  topCut: 'cut',
	  topDoubleClick: 'dblclick',
	  topDrag: 'drag',
	  topDragEnd: 'dragend',
	  topDragEnter: 'dragenter',
	  topDragExit: 'dragexit',
	  topDragLeave: 'dragleave',
	  topDragOver: 'dragover',
	  topDragStart: 'dragstart',
	  topDrop: 'drop',
	  topFocus: 'focus',
	  topInput: 'input',
	  topKeyDown: 'keydown',
	  topKeyPress: 'keypress',
	  topKeyUp: 'keyup',
	  topMouseDown: 'mousedown',
	  topMouseMove: 'mousemove',
	  topMouseOut: 'mouseout',
	  topMouseOver: 'mouseover',
	  topMouseUp: 'mouseup',
	  topPaste: 'paste',
	  topScroll: 'scroll',
	  topSelectionChange: 'selectionchange',
	  topTextInput: 'textInput',
	  topTouchCancel: 'touchcancel',
	  topTouchEnd: 'touchend',
	  topTouchMove: 'touchmove',
	  topTouchStart: 'touchstart',
	  topWheel: 'wheel'
	};

	/**
	 * To ensure no conflicts with other potential React instances on the page
	 */
	var topListenersIDKey = '_reactListenersID' + String(Math.random()).slice(2);

	function getListeningForDocument(mountAt) {
	  // In IE8, `mountAt` is a host object and doesn't have `hasOwnProperty`
	  // directly.
	  if (!Object.prototype.hasOwnProperty.call(mountAt, topListenersIDKey)) {
	    mountAt[topListenersIDKey] = reactTopListenersCounter++;
	    alreadyListeningTo[mountAt[topListenersIDKey]] = {};
	  }
	  return alreadyListeningTo[mountAt[topListenersIDKey]];
	}

	/**
	 * `ReactBrowserEventEmitter` is used to attach top-level event listeners. For
	 * example:
	 *
	 *   ReactBrowserEventEmitter.putListener('myID', 'onClick', myFunction);
	 *
	 * This would allocate a "registration" of `('onClick', myFunction)` on 'myID'.
	 *
	 * @internal
	 */
	var ReactBrowserEventEmitter = assign({}, ReactEventEmitterMixin, {

	  /**
	   * Injectable event backend
	   */
	  ReactEventListener: null,

	  injection: {
	    /**
	     * @param {object} ReactEventListener
	     */
	    injectReactEventListener: function injectReactEventListener(ReactEventListener) {
	      ReactEventListener.setHandleTopLevel(ReactBrowserEventEmitter.handleTopLevel);
	      ReactBrowserEventEmitter.ReactEventListener = ReactEventListener;
	    }
	  },

	  /**
	   * Sets whether or not any created callbacks should be enabled.
	   *
	   * @param {boolean} enabled True if callbacks should be enabled.
	   */
	  setEnabled: function setEnabled(enabled) {
	    if (ReactBrowserEventEmitter.ReactEventListener) {
	      ReactBrowserEventEmitter.ReactEventListener.setEnabled(enabled);
	    }
	  },

	  /**
	   * @return {boolean} True if callbacks are enabled.
	   */
	  isEnabled: function isEnabled() {
	    return !!(ReactBrowserEventEmitter.ReactEventListener && ReactBrowserEventEmitter.ReactEventListener.isEnabled());
	  },

	  /**
	   * We listen for bubbled touch events on the document object.
	   *
	   * Firefox v8.01 (and possibly others) exhibited strange behavior when
	   * mounting `onmousemove` events at some node that was not the document
	   * element. The symptoms were that if your mouse is not moving over something
	   * contained within that mount point (for example on the background) the
	   * top-level listeners for `onmousemove` won't be called. However, if you
	   * register the `mousemove` on the document object, then it will of course
	   * catch all `mousemove`s. This along with iOS quirks, justifies restricting
	   * top-level listeners to the document object only, at least for these
	   * movement types of events and possibly all events.
	   *
	   * @see http://www.quirksmode.org/blog/archives/2010/09/click_event_del.html
	   *
	   * Also, `keyup`/`keypress`/`keydown` do not bubble to the window on IE, but
	   * they bubble to document.
	   *
	   * @param {string} registrationName Name of listener (e.g. `onClick`).
	   * @param {object} contentDocumentHandle Document which owns the container
	   */
	  listenTo: function listenTo(registrationName, contentDocumentHandle) {
	    var mountAt = contentDocumentHandle;
	    var isListening = getListeningForDocument(mountAt);
	    var dependencies = EventPluginRegistry.registrationNameDependencies[registrationName];

	    var topLevelTypes = EventConstants.topLevelTypes;
	    for (var i = 0, l = dependencies.length; i < l; i++) {
	      var dependency = dependencies[i];
	      if (!(isListening.hasOwnProperty(dependency) && isListening[dependency])) {
	        if (dependency === topLevelTypes.topWheel) {
	          if (isEventSupported('wheel')) {
	            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'wheel', mountAt);
	          } else if (isEventSupported('mousewheel')) {
	            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'mousewheel', mountAt);
	          } else {
	            // Firefox needs to capture a different mouse scroll event.
	            // @see http://www.quirksmode.org/dom/events/tests/scroll.html
	            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topWheel, 'DOMMouseScroll', mountAt);
	          }
	        } else if (dependency === topLevelTypes.topScroll) {

	          if (isEventSupported('scroll', true)) {
	            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topScroll, 'scroll', mountAt);
	          } else {
	            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topScroll, 'scroll', ReactBrowserEventEmitter.ReactEventListener.WINDOW_HANDLE);
	          }
	        } else if (dependency === topLevelTypes.topFocus || dependency === topLevelTypes.topBlur) {

	          if (isEventSupported('focus', true)) {
	            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topFocus, 'focus', mountAt);
	            ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelTypes.topBlur, 'blur', mountAt);
	          } else if (isEventSupported('focusin')) {
	            // IE has `focusin` and `focusout` events which bubble.
	            // @see http://www.quirksmode.org/blog/archives/2008/04/delegating_the.html
	            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topFocus, 'focusin', mountAt);
	            ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelTypes.topBlur, 'focusout', mountAt);
	          }

	          // to make sure blur and focus event listeners are only attached once
	          isListening[topLevelTypes.topBlur] = true;
	          isListening[topLevelTypes.topFocus] = true;
	        } else if (topEventMapping.hasOwnProperty(dependency)) {
	          ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(dependency, topEventMapping[dependency], mountAt);
	        }

	        isListening[dependency] = true;
	      }
	    }
	  },

	  trapBubbledEvent: function trapBubbledEvent(topLevelType, handlerBaseName, handle) {
	    return ReactBrowserEventEmitter.ReactEventListener.trapBubbledEvent(topLevelType, handlerBaseName, handle);
	  },

	  trapCapturedEvent: function trapCapturedEvent(topLevelType, handlerBaseName, handle) {
	    return ReactBrowserEventEmitter.ReactEventListener.trapCapturedEvent(topLevelType, handlerBaseName, handle);
	  },

	  /**
	   * Listens to window scroll and resize events. We cache scroll values so that
	   * application code can access them without triggering reflows.
	   *
	   * NOTE: Scroll events do not bubble.
	   *
	   * @see http://www.quirksmode.org/dom/events/scroll.html
	   */
	  ensureScrollValueMonitoring: function ensureScrollValueMonitoring() {
	    if (!isMonitoringScrollValue) {
	      var refresh = ViewportMetrics.refreshScrollValues;
	      ReactBrowserEventEmitter.ReactEventListener.monitorScrollValue(refresh);
	      isMonitoringScrollValue = true;
	    }
	  },

	  eventNameDispatchConfigs: EventPluginHub.eventNameDispatchConfigs,

	  registrationNameModules: EventPluginHub.registrationNameModules,

	  putListener: EventPluginHub.putListener,

	  getListener: EventPluginHub.getListener,

	  deleteListener: EventPluginHub.deleteListener,

	  deleteAllListeners: EventPluginHub.deleteAllListeners

	});

	module.exports = ReactBrowserEventEmitter;

/***/ },
/* 85 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule EventPluginHub
	 */

	'use strict';

	var EventPluginRegistry = __webpack_require__(86);
	var EventPluginUtils = __webpack_require__(20);

	var accumulateInto = __webpack_require__(87);
	var forEachAccumulated = __webpack_require__(88);
	var invariant = __webpack_require__(23);

	/**
	 * Internal store for event listeners
	 */
	var listenerBank = {};

	/**
	 * Internal queue of events that have accumulated their dispatches and are
	 * waiting to have their dispatches executed.
	 */
	var eventQueue = null;

	/**
	 * Dispatches an event and releases it back into the pool, unless persistent.
	 *
	 * @param {?object} event Synthetic event to be dispatched.
	 * @private
	 */
	var executeDispatchesAndRelease = function executeDispatchesAndRelease(event) {
	  if (event) {
	    var executeDispatch = EventPluginUtils.executeDispatch;
	    // Plugins can provide custom behavior when dispatching events.
	    var PluginModule = EventPluginRegistry.getPluginModuleForEvent(event);
	    if (PluginModule && PluginModule.executeDispatch) {
	      executeDispatch = PluginModule.executeDispatch;
	    }
	    EventPluginUtils.executeDispatchesInOrder(event, executeDispatch);

	    if (!event.isPersistent()) {
	      event.constructor.release(event);
	    }
	  }
	};

	/**
	 * - `InstanceHandle`: [required] Module that performs logical traversals of DOM
	 *   hierarchy given ids of the logical DOM elements involved.
	 */
	var InstanceHandle = null;

	function validateInstanceHandle() {
	  var valid = InstanceHandle && InstanceHandle.traverseTwoPhase && InstanceHandle.traverseEnterLeave;
	  "production" !== process.env.NODE_ENV ? invariant(valid, 'InstanceHandle not injected before use!') : invariant(valid);
	}

	/**
	 * This is a unified interface for event plugins to be installed and configured.
	 *
	 * Event plugins can implement the following properties:
	 *
	 *   `extractEvents` {function(string, DOMEventTarget, string, object): *}
	 *     Required. When a top-level event is fired, this method is expected to
	 *     extract synthetic events that will in turn be queued and dispatched.
	 *
	 *   `eventTypes` {object}
	 *     Optional, plugins that fire events must publish a mapping of registration
	 *     names that are used to register listeners. Values of this mapping must
	 *     be objects that contain `registrationName` or `phasedRegistrationNames`.
	 *
	 *   `executeDispatch` {function(object, function, string)}
	 *     Optional, allows plugins to override how an event gets dispatched. By
	 *     default, the listener is simply invoked.
	 *
	 * Each plugin that is injected into `EventsPluginHub` is immediately operable.
	 *
	 * @public
	 */
	var EventPluginHub = {

	  /**
	   * Methods for injecting dependencies.
	   */
	  injection: {

	    /**
	     * @param {object} InjectedMount
	     * @public
	     */
	    injectMount: EventPluginUtils.injection.injectMount,

	    /**
	     * @param {object} InjectedInstanceHandle
	     * @public
	     */
	    injectInstanceHandle: function injectInstanceHandle(InjectedInstanceHandle) {
	      InstanceHandle = InjectedInstanceHandle;
	      if ("production" !== process.env.NODE_ENV) {
	        validateInstanceHandle();
	      }
	    },

	    getInstanceHandle: function getInstanceHandle() {
	      if ("production" !== process.env.NODE_ENV) {
	        validateInstanceHandle();
	      }
	      return InstanceHandle;
	    },

	    /**
	     * @param {array} InjectedEventPluginOrder
	     * @public
	     */
	    injectEventPluginOrder: EventPluginRegistry.injectEventPluginOrder,

	    /**
	     * @param {object} injectedNamesToPlugins Map from names to plugin modules.
	     */
	    injectEventPluginsByName: EventPluginRegistry.injectEventPluginsByName

	  },

	  eventNameDispatchConfigs: EventPluginRegistry.eventNameDispatchConfigs,

	  registrationNameModules: EventPluginRegistry.registrationNameModules,

	  /**
	   * Stores `listener` at `listenerBank[registrationName][id]`. Is idempotent.
	   *
	   * @param {string} id ID of the DOM element.
	   * @param {string} registrationName Name of listener (e.g. `onClick`).
	   * @param {?function} listener The callback to store.
	   */
	  putListener: function putListener(id, registrationName, listener) {
	    "production" !== process.env.NODE_ENV ? invariant(!listener || typeof listener === 'function', 'Expected %s listener to be a function, instead got type %s', registrationName, typeof listener) : invariant(!listener || typeof listener === 'function');

	    var bankForRegistrationName = listenerBank[registrationName] || (listenerBank[registrationName] = {});
	    bankForRegistrationName[id] = listener;
	  },

	  /**
	   * @param {string} id ID of the DOM element.
	   * @param {string} registrationName Name of listener (e.g. `onClick`).
	   * @return {?function} The stored callback.
	   */
	  getListener: function getListener(id, registrationName) {
	    var bankForRegistrationName = listenerBank[registrationName];
	    return bankForRegistrationName && bankForRegistrationName[id];
	  },

	  /**
	   * Deletes a listener from the registration bank.
	   *
	   * @param {string} id ID of the DOM element.
	   * @param {string} registrationName Name of listener (e.g. `onClick`).
	   */
	  deleteListener: function deleteListener(id, registrationName) {
	    var bankForRegistrationName = listenerBank[registrationName];
	    if (bankForRegistrationName) {
	      delete bankForRegistrationName[id];
	    }
	  },

	  /**
	   * Deletes all listeners for the DOM element with the supplied ID.
	   *
	   * @param {string} id ID of the DOM element.
	   */
	  deleteAllListeners: function deleteAllListeners(id) {
	    for (var registrationName in listenerBank) {
	      delete listenerBank[registrationName][id];
	    }
	  },

	  /**
	   * Allows registered plugins an opportunity to extract events from top-level
	   * native browser events.
	   *
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @internal
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	    var events;
	    var plugins = EventPluginRegistry.plugins;
	    for (var i = 0, l = plugins.length; i < l; i++) {
	      // Not every plugin in the ordering may be loaded at runtime.
	      var possiblePlugin = plugins[i];
	      if (possiblePlugin) {
	        var extractedEvents = possiblePlugin.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent);
	        if (extractedEvents) {
	          events = accumulateInto(events, extractedEvents);
	        }
	      }
	    }
	    return events;
	  },

	  /**
	   * Enqueues a synthetic event that should be dispatched when
	   * `processEventQueue` is invoked.
	   *
	   * @param {*} events An accumulation of synthetic events.
	   * @internal
	   */
	  enqueueEvents: function enqueueEvents(events) {
	    if (events) {
	      eventQueue = accumulateInto(eventQueue, events);
	    }
	  },

	  /**
	   * Dispatches all synthetic events on the event queue.
	   *
	   * @internal
	   */
	  processEventQueue: function processEventQueue() {
	    // Set `eventQueue` to null before processing it so that we can tell if more
	    // events get enqueued while processing.
	    var processingEventQueue = eventQueue;
	    eventQueue = null;
	    forEachAccumulated(processingEventQueue, executeDispatchesAndRelease);
	    "production" !== process.env.NODE_ENV ? invariant(!eventQueue, 'processEventQueue(): Additional events were enqueued while processing ' + 'an event queue. Support for this has not yet been implemented.') : invariant(!eventQueue);
	  },

	  /**
	   * These are needed for tests only. Do not use!
	   */
	  __purge: function __purge() {
	    listenerBank = {};
	  },

	  __getListenerBank: function __getListenerBank() {
	    return listenerBank;
	  }

	};

	module.exports = EventPluginHub;

/***/ },
/* 86 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule EventPluginRegistry
	 * @typechecks static-only
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	/**
	 * Injectable ordering of event plugins.
	 */
	var EventPluginOrder = null;

	/**
	 * Injectable mapping from names to event plugin modules.
	 */
	var namesToPlugins = {};

	/**
	 * Recomputes the plugin list using the injected plugins and plugin ordering.
	 *
	 * @private
	 */
	function recomputePluginOrdering() {
	  if (!EventPluginOrder) {
	    // Wait until an `EventPluginOrder` is injected.
	    return;
	  }
	  for (var pluginName in namesToPlugins) {
	    var PluginModule = namesToPlugins[pluginName];
	    var pluginIndex = EventPluginOrder.indexOf(pluginName);
	    "production" !== process.env.NODE_ENV ? invariant(pluginIndex > -1, 'EventPluginRegistry: Cannot inject event plugins that do not exist in ' + 'the plugin ordering, `%s`.', pluginName) : invariant(pluginIndex > -1);
	    if (EventPluginRegistry.plugins[pluginIndex]) {
	      continue;
	    }
	    "production" !== process.env.NODE_ENV ? invariant(PluginModule.extractEvents, 'EventPluginRegistry: Event plugins must implement an `extractEvents` ' + 'method, but `%s` does not.', pluginName) : invariant(PluginModule.extractEvents);
	    EventPluginRegistry.plugins[pluginIndex] = PluginModule;
	    var publishedEvents = PluginModule.eventTypes;
	    for (var eventName in publishedEvents) {
	      "production" !== process.env.NODE_ENV ? invariant(publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName), 'EventPluginRegistry: Failed to publish event `%s` for plugin `%s`.', eventName, pluginName) : invariant(publishEventForPlugin(publishedEvents[eventName], PluginModule, eventName));
	    }
	  }
	}

	/**
	 * Publishes an event so that it can be dispatched by the supplied plugin.
	 *
	 * @param {object} dispatchConfig Dispatch configuration for the event.
	 * @param {object} PluginModule Plugin publishing the event.
	 * @return {boolean} True if the event was successfully published.
	 * @private
	 */
	function publishEventForPlugin(dispatchConfig, PluginModule, eventName) {
	  "production" !== process.env.NODE_ENV ? invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName), 'EventPluginHub: More than one plugin attempted to publish the same ' + 'event name, `%s`.', eventName) : invariant(!EventPluginRegistry.eventNameDispatchConfigs.hasOwnProperty(eventName));
	  EventPluginRegistry.eventNameDispatchConfigs[eventName] = dispatchConfig;

	  var phasedRegistrationNames = dispatchConfig.phasedRegistrationNames;
	  if (phasedRegistrationNames) {
	    for (var phaseName in phasedRegistrationNames) {
	      if (phasedRegistrationNames.hasOwnProperty(phaseName)) {
	        var phasedRegistrationName = phasedRegistrationNames[phaseName];
	        publishRegistrationName(phasedRegistrationName, PluginModule, eventName);
	      }
	    }
	    return true;
	  } else if (dispatchConfig.registrationName) {
	    publishRegistrationName(dispatchConfig.registrationName, PluginModule, eventName);
	    return true;
	  }
	  return false;
	}

	/**
	 * Publishes a registration name that is used to identify dispatched events and
	 * can be used with `EventPluginHub.putListener` to register listeners.
	 *
	 * @param {string} registrationName Registration name to add.
	 * @param {object} PluginModule Plugin publishing the event.
	 * @private
	 */
	function publishRegistrationName(registrationName, PluginModule, eventName) {
	  "production" !== process.env.NODE_ENV ? invariant(!EventPluginRegistry.registrationNameModules[registrationName], 'EventPluginHub: More than one plugin attempted to publish the same ' + 'registration name, `%s`.', registrationName) : invariant(!EventPluginRegistry.registrationNameModules[registrationName]);
	  EventPluginRegistry.registrationNameModules[registrationName] = PluginModule;
	  EventPluginRegistry.registrationNameDependencies[registrationName] = PluginModule.eventTypes[eventName].dependencies;
	}

	/**
	 * Registers plugins so that they can extract and dispatch events.
	 *
	 * @see {EventPluginHub}
	 */
	var EventPluginRegistry = {

	  /**
	   * Ordered list of injected plugins.
	   */
	  plugins: [],

	  /**
	   * Mapping from event name to dispatch config
	   */
	  eventNameDispatchConfigs: {},

	  /**
	   * Mapping from registration name to plugin module
	   */
	  registrationNameModules: {},

	  /**
	   * Mapping from registration name to event name
	   */
	  registrationNameDependencies: {},

	  /**
	   * Injects an ordering of plugins (by plugin name). This allows the ordering
	   * to be decoupled from injection of the actual plugins so that ordering is
	   * always deterministic regardless of packaging, on-the-fly injection, etc.
	   *
	   * @param {array} InjectedEventPluginOrder
	   * @internal
	   * @see {EventPluginHub.injection.injectEventPluginOrder}
	   */
	  injectEventPluginOrder: function injectEventPluginOrder(InjectedEventPluginOrder) {
	    "production" !== process.env.NODE_ENV ? invariant(!EventPluginOrder, 'EventPluginRegistry: Cannot inject event plugin ordering more than ' + 'once. You are likely trying to load more than one copy of React.') : invariant(!EventPluginOrder);
	    // Clone the ordering so it cannot be dynamically mutated.
	    EventPluginOrder = Array.prototype.slice.call(InjectedEventPluginOrder);
	    recomputePluginOrdering();
	  },

	  /**
	   * Injects plugins to be used by `EventPluginHub`. The plugin names must be
	   * in the ordering injected by `injectEventPluginOrder`.
	   *
	   * Plugins can be injected as part of page initialization or on-the-fly.
	   *
	   * @param {object} injectedNamesToPlugins Map from names to plugin modules.
	   * @internal
	   * @see {EventPluginHub.injection.injectEventPluginsByName}
	   */
	  injectEventPluginsByName: function injectEventPluginsByName(injectedNamesToPlugins) {
	    var isOrderingDirty = false;
	    for (var pluginName in injectedNamesToPlugins) {
	      if (!injectedNamesToPlugins.hasOwnProperty(pluginName)) {
	        continue;
	      }
	      var PluginModule = injectedNamesToPlugins[pluginName];
	      if (!namesToPlugins.hasOwnProperty(pluginName) || namesToPlugins[pluginName] !== PluginModule) {
	        "production" !== process.env.NODE_ENV ? invariant(!namesToPlugins[pluginName], 'EventPluginRegistry: Cannot inject two different event plugins ' + 'using the same name, `%s`.', pluginName) : invariant(!namesToPlugins[pluginName]);
	        namesToPlugins[pluginName] = PluginModule;
	        isOrderingDirty = true;
	      }
	    }
	    if (isOrderingDirty) {
	      recomputePluginOrdering();
	    }
	  },

	  /**
	   * Looks up the plugin for the supplied event.
	   *
	   * @param {object} event A synthetic event.
	   * @return {?object} The plugin that created the supplied event.
	   * @internal
	   */
	  getPluginModuleForEvent: function getPluginModuleForEvent(event) {
	    var dispatchConfig = event.dispatchConfig;
	    if (dispatchConfig.registrationName) {
	      return EventPluginRegistry.registrationNameModules[dispatchConfig.registrationName] || null;
	    }
	    for (var phase in dispatchConfig.phasedRegistrationNames) {
	      if (!dispatchConfig.phasedRegistrationNames.hasOwnProperty(phase)) {
	        continue;
	      }
	      var PluginModule = EventPluginRegistry.registrationNameModules[dispatchConfig.phasedRegistrationNames[phase]];
	      if (PluginModule) {
	        return PluginModule;
	      }
	    }
	    return null;
	  },

	  /**
	   * Exposed for unit testing.
	   * @private
	   */
	  _resetEventPlugins: function _resetEventPlugins() {
	    EventPluginOrder = null;
	    for (var pluginName in namesToPlugins) {
	      if (namesToPlugins.hasOwnProperty(pluginName)) {
	        delete namesToPlugins[pluginName];
	      }
	    }
	    EventPluginRegistry.plugins.length = 0;

	    var eventNameDispatchConfigs = EventPluginRegistry.eventNameDispatchConfigs;
	    for (var eventName in eventNameDispatchConfigs) {
	      if (eventNameDispatchConfigs.hasOwnProperty(eventName)) {
	        delete eventNameDispatchConfigs[eventName];
	      }
	    }

	    var registrationNameModules = EventPluginRegistry.registrationNameModules;
	    for (var registrationName in registrationNameModules) {
	      if (registrationNameModules.hasOwnProperty(registrationName)) {
	        delete registrationNameModules[registrationName];
	      }
	    }
	  }

	};

	module.exports = EventPluginRegistry;

/***/ },
/* 87 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule accumulateInto
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	/**
	 *
	 * Accumulates items that must not be null or undefined into the first one. This
	 * is used to conserve memory by avoiding array allocations, and thus sacrifices
	 * API cleanness. Since `current` can be null before being passed in and not
	 * null after this function, make sure to assign it back to `current`:
	 *
	 * `a = accumulateInto(a, b);`
	 *
	 * This API should be sparingly used. Try `accumulate` for something cleaner.
	 *
	 * @return {*|array<*>} An accumulation of items.
	 */

	function accumulateInto(current, next) {
	  "production" !== process.env.NODE_ENV ? invariant(next != null, 'accumulateInto(...): Accumulated items must not be null or undefined.') : invariant(next != null);
	  if (current == null) {
	    return next;
	  }

	  // Both are not empty. Warning: Never call x.concat(y) when you are not
	  // certain that x is an Array (x could be a string with concat method).
	  var currentIsArray = Array.isArray(current);
	  var nextIsArray = Array.isArray(next);

	  if (currentIsArray && nextIsArray) {
	    current.push.apply(current, next);
	    return current;
	  }

	  if (currentIsArray) {
	    current.push(next);
	    return current;
	  }

	  if (nextIsArray) {
	    // A bit too dangerous to mutate `next`.
	    return [current].concat(next);
	  }

	  return [current, next];
	}

	module.exports = accumulateInto;

/***/ },
/* 88 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule forEachAccumulated
	 */

	'use strict';

	/**
	 * @param {array} an "accumulation" of items which is either an Array or
	 * a single item. Useful when paired with the `accumulate` module. This is a
	 * simple utility that allows us to reason about a collection of items, but
	 * handling the case when there is exactly one item (and we do not need to
	 * allocate an array).
	 */
	var forEachAccumulated = function forEachAccumulated(arr, cb, scope) {
	  if (Array.isArray(arr)) {
	    arr.forEach(cb, scope);
	  } else if (arr) {
	    cb.call(scope, arr);
	  }
	};

	module.exports = forEachAccumulated;

/***/ },
/* 89 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactEventEmitterMixin
	 */

	'use strict';

	var EventPluginHub = __webpack_require__(85);

	function runEventQueueInBatch(events) {
	  EventPluginHub.enqueueEvents(events);
	  EventPluginHub.processEventQueue();
	}

	var ReactEventEmitterMixin = {

	  /**
	   * Streams a fired top-level event to `EventPluginHub` where plugins have the
	   * opportunity to create `ReactEvent`s to be dispatched.
	   *
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {object} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native environment event.
	   */
	  handleTopLevel: function handleTopLevel(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	    var events = EventPluginHub.extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent);

	    runEventQueueInBatch(events);
	  }
	};

	module.exports = ReactEventEmitterMixin;

/***/ },
/* 90 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ViewportMetrics
	 */

	'use strict';

	var ViewportMetrics = {

	  currentScrollLeft: 0,

	  currentScrollTop: 0,

	  refreshScrollValues: function refreshScrollValues(scrollPosition) {
	    ViewportMetrics.currentScrollLeft = scrollPosition.x;
	    ViewportMetrics.currentScrollTop = scrollPosition.y;
	  }

	};

	module.exports = ViewportMetrics;

/***/ },
/* 91 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule isEventSupported
	 */

	'use strict';

	var ExecutionEnvironment = __webpack_require__(67);

	var useHasFeature;
	if (ExecutionEnvironment.canUseDOM) {
	  useHasFeature = document.implementation && document.implementation.hasFeature &&
	  // always returns true in newer browsers as per the standard.
	  // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature
	  document.implementation.hasFeature('', '') !== true;
	}

	/**
	 * Checks if an event is supported in the current execution environment.
	 *
	 * NOTE: This will not work correctly for non-generic events such as `change`,
	 * `reset`, `load`, `error`, and `select`.
	 *
	 * Borrows from Modernizr.
	 *
	 * @param {string} eventNameSuffix Event name, e.g. "click".
	 * @param {?boolean} capture Check if the capture phase is supported.
	 * @return {boolean} True if the event is supported.
	 * @internal
	 * @license Modernizr 3.0.0pre (Custom Build) | MIT
	 */
	function isEventSupported(eventNameSuffix, capture) {
	  if (!ExecutionEnvironment.canUseDOM || capture && !('addEventListener' in document)) {
	    return false;
	  }

	  var eventName = 'on' + eventNameSuffix;
	  var isSupported = (eventName in document);

	  if (!isSupported) {
	    var element = document.createElement('div');
	    element.setAttribute(eventName, 'return;');
	    isSupported = typeof element[eventName] === 'function';
	  }

	  if (!isSupported && useHasFeature && eventNameSuffix === 'wheel') {
	    // This is the only way to test support for the `wheel` event in IE9+.
	    isSupported = document.implementation.hasFeature('Events.wheel', '3.0');
	  }

	  return isSupported;
	}

	module.exports = isEventSupported;

/***/ },
/* 92 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactEmptyComponent
	 */

	'use strict';

	var ReactElement = __webpack_require__(27);
	var ReactInstanceMap = __webpack_require__(41);

	var invariant = __webpack_require__(23);

	var component;
	// This registry keeps track of the React IDs of the components that rendered to
	// `null` (in reality a placeholder such as `noscript`)
	var nullComponentIDsRegistry = {};

	var ReactEmptyComponentInjection = {
	  injectEmptyComponent: function injectEmptyComponent(emptyComponent) {
	    component = ReactElement.createFactory(emptyComponent);
	  }
	};

	var ReactEmptyComponentType = function ReactEmptyComponentType() {};
	ReactEmptyComponentType.prototype.componentDidMount = function () {
	  var internalInstance = ReactInstanceMap.get(this);
	  // TODO: Make sure we run these methods in the correct order, we shouldn't
	  // need this check. We're going to assume if we're here it means we ran
	  // componentWillUnmount already so there is no internal instance (it gets
	  // removed as part of the unmounting process).
	  if (!internalInstance) {
	    return;
	  }
	  registerNullComponentID(internalInstance._rootNodeID);
	};
	ReactEmptyComponentType.prototype.componentWillUnmount = function () {
	  var internalInstance = ReactInstanceMap.get(this);
	  // TODO: Get rid of this check. See TODO in componentDidMount.
	  if (!internalInstance) {
	    return;
	  }
	  deregisterNullComponentID(internalInstance._rootNodeID);
	};
	ReactEmptyComponentType.prototype.render = function () {
	  "production" !== process.env.NODE_ENV ? invariant(component, 'Trying to return null from a render, but no null placeholder component ' + 'was injected.') : invariant(component);
	  return component();
	};

	var emptyElement = ReactElement.createElement(ReactEmptyComponentType);

	/**
	 * Mark the component as having rendered to null.
	 * @param {string} id Component's `_rootNodeID`.
	 */
	function registerNullComponentID(id) {
	  nullComponentIDsRegistry[id] = true;
	}

	/**
	 * Unmark the component as having rendered to null: it renders to something now.
	 * @param {string} id Component's `_rootNodeID`.
	 */
	function deregisterNullComponentID(id) {
	  delete nullComponentIDsRegistry[id];
	}

	/**
	 * @param {string} id Component's `_rootNodeID`.
	 * @return {boolean} True if the component is rendered to null.
	 */
	function isNullComponentID(id) {
	  return !!nullComponentIDsRegistry[id];
	}

	var ReactEmptyComponent = {
	  emptyElement: emptyElement,
	  injection: ReactEmptyComponentInjection,
	  isNullComponentID: isNullComponentID
	};

	module.exports = ReactEmptyComponent;

/***/ },
/* 93 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactMarkupChecksum
	 */

	'use strict';

	var adler32 = __webpack_require__(94);

	var ReactMarkupChecksum = {
	  CHECKSUM_ATTR_NAME: 'data-react-checksum',

	  /**
	   * @param {string} markup Markup string
	   * @return {string} Markup string with checksum attribute attached
	   */
	  addChecksumToMarkup: function addChecksumToMarkup(markup) {
	    var checksum = adler32(markup);
	    return markup.replace('>', ' ' + ReactMarkupChecksum.CHECKSUM_ATTR_NAME + '="' + checksum + '">');
	  },

	  /**
	   * @param {string} markup to use
	   * @param {DOMElement} element root React element
	   * @returns {boolean} whether or not the markup is the same
	   */
	  canReuseMarkup: function canReuseMarkup(markup, element) {
	    var existingChecksum = element.getAttribute(ReactMarkupChecksum.CHECKSUM_ATTR_NAME);
	    existingChecksum = existingChecksum && parseInt(existingChecksum, 10);
	    var markupChecksum = adler32(markup);
	    return markupChecksum === existingChecksum;
	  }
	};

	module.exports = ReactMarkupChecksum;

/***/ },
/* 94 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule adler32
	 */

	/* jslint bitwise:true */

	'use strict';

	var MOD = 65521;

	// This is a clean-room implementation of adler32 designed for detecting
	// if markup is not what we expect it to be. It does not need to be
	// cryptographically strong, only reasonably good at detecting if markup
	// generated on the server is different than that on the client.
	function adler32(data) {
	  var a = 1;
	  var b = 0;
	  for (var i = 0; i < data.length; i++) {
	    a = (a + data.charCodeAt(i)) % MOD;
	    b = (b + a) % MOD;
	  }
	  return a | b << 16;
	}

	module.exports = adler32;

/***/ },
/* 95 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule containsNode
	 * @typechecks
	 */

	"use strict";

	var isTextNode = __webpack_require__(96);

	/*jslint bitwise:true */

	/**
	 * Checks if a given DOM node contains or is another DOM node.
	 *
	 * @param {?DOMNode} outerNode Outer DOM node.
	 * @param {?DOMNode} innerNode Inner DOM node.
	 * @return {boolean} True if `outerNode` contains or is `innerNode`.
	 */
	function containsNode(_x, _x2) {
	  var _again = true;

	  _function: while (_again) {
	    var outerNode = _x,
	        innerNode = _x2;
	    _again = false;

	    if (!outerNode || !innerNode) {
	      return false;
	    } else if (outerNode === innerNode) {
	      return true;
	    } else if (isTextNode(outerNode)) {
	      return false;
	    } else if (isTextNode(innerNode)) {
	      _x = outerNode;
	      _x2 = innerNode.parentNode;
	      _again = true;
	      continue _function;
	    } else if (outerNode.contains) {
	      return outerNode.contains(innerNode);
	    } else if (outerNode.compareDocumentPosition) {
	      return !!(outerNode.compareDocumentPosition(innerNode) & 16);
	    } else {
	      return false;
	    }
	  }
	}

	module.exports = containsNode;

/***/ },
/* 96 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule isTextNode
	 * @typechecks
	 */

	"use strict";

	var isNode = __webpack_require__(97);

	/**
	 * @param {*} object The object to check.
	 * @return {boolean} Whether or not the object is a DOM text node.
	 */
	function isTextNode(object) {
	  return isNode(object) && object.nodeType == 3;
	}

	module.exports = isTextNode;

/***/ },
/* 97 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule isNode
	 * @typechecks
	 */

	/**
	 * @param {*} object The object to check.
	 * @return {boolean} Whether or not the object is a DOM node.
	 */
	'use strict';

	function isNode(object) {
	  return !!(object && (typeof Node === 'function' ? object instanceof Node : typeof object === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string'));
	}

	module.exports = isNode;

/***/ },
/* 98 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getReactRootElementInContainer
	 */

	'use strict';

	var DOC_NODE_TYPE = 9;

	/**
	 * @param {DOMElement|DOMDocument} container DOM element that may contain
	 *                                           a React component
	 * @return {?*} DOM element that may have the reactRoot ID, or null.
	 */
	function getReactRootElementInContainer(container) {
	  if (!container) {
	    return null;
	  }

	  if (container.nodeType === DOC_NODE_TYPE) {
	    return container.documentElement;
	  } else {
	    return container.firstChild;
	  }
	}

	module.exports = getReactRootElementInContainer;

/***/ },
/* 99 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule instantiateReactComponent
	 * @typechecks static-only
	 */

	'use strict';

	var ReactCompositeComponent = __webpack_require__(100);
	var ReactEmptyComponent = __webpack_require__(92);
	var ReactNativeComponent = __webpack_require__(51);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);
	var warning = __webpack_require__(31);

	// To avoid a cyclic dependency, we create the final class in this module
	var ReactCompositeComponentWrapper = function ReactCompositeComponentWrapper() {};
	assign(ReactCompositeComponentWrapper.prototype, ReactCompositeComponent.Mixin, {
	  _instantiateReactComponent: instantiateReactComponent
	});

	/**
	 * Check if the type reference is a known internal type. I.e. not a user
	 * provided composite type.
	 *
	 * @param {function} type
	 * @return {boolean} Returns true if this is a valid internal type.
	 */
	function isInternalComponentType(type) {
	  return typeof type === 'function' && typeof type.prototype !== 'undefined' && typeof type.prototype.mountComponent === 'function' && typeof type.prototype.receiveComponent === 'function';
	}

	/**
	 * Given a ReactNode, create an instance that will actually be mounted.
	 *
	 * @param {ReactNode} node
	 * @param {*} parentCompositeType The composite type that resolved this.
	 * @return {object} A new instance of the element's constructor.
	 * @protected
	 */
	function instantiateReactComponent(node, parentCompositeType) {
	  var instance;

	  if (node === null || node === false) {
	    node = ReactEmptyComponent.emptyElement;
	  }

	  if (typeof node === 'object') {
	    var element = node;
	    if ("production" !== process.env.NODE_ENV) {
	      "production" !== process.env.NODE_ENV ? warning(element && (typeof element.type === 'function' || typeof element.type === 'string'), 'Only functions or strings can be mounted as React components.') : null;
	    }

	    // Special case string values
	    if (parentCompositeType === element.type && typeof element.type === 'string') {
	      // Avoid recursion if the wrapper renders itself.
	      instance = ReactNativeComponent.createInternalComponent(element);
	      // All native components are currently wrapped in a composite so we're
	      // safe to assume that this is what we should instantiate.
	    } else if (isInternalComponentType(element.type)) {
	        // This is temporarily available for custom components that are not string
	        // represenations. I.e. ART. Once those are updated to use the string
	        // representation, we can drop this code path.
	        instance = new element.type(element);
	      } else {
	        instance = new ReactCompositeComponentWrapper();
	      }
	  } else if (typeof node === 'string' || typeof node === 'number') {
	    instance = ReactNativeComponent.createInstanceForText(node);
	  } else {
	    "production" !== process.env.NODE_ENV ? invariant(false, 'Encountered invalid React node of type %s', typeof node) : invariant(false);
	  }

	  if ("production" !== process.env.NODE_ENV) {
	    "production" !== process.env.NODE_ENV ? warning(typeof instance.construct === 'function' && typeof instance.mountComponent === 'function' && typeof instance.receiveComponent === 'function' && typeof instance.unmountComponent === 'function', 'Only React Components can be mounted.') : null;
	  }

	  // Sets up the instance. This can probably just move into the constructor now.
	  instance.construct(node);

	  // These two fields are used by the DOM and ART diffing algorithms
	  // respectively. Instead of using expandos on components, we should be
	  // storing the state needed by the diffing algorithms elsewhere.
	  instance._mountIndex = 0;
	  instance._mountImage = null;

	  if ("production" !== process.env.NODE_ENV) {
	    instance._isOwnerNecessary = false;
	    instance._warnedAboutRefsInRender = false;
	  }

	  // Internal instances should fully constructed at this point, so they should
	  // not get any new fields added to them at this point.
	  if ("production" !== process.env.NODE_ENV) {
	    if (Object.preventExtensions) {
	      Object.preventExtensions(instance);
	    }
	  }

	  return instance;
	}

	module.exports = instantiateReactComponent;

/***/ },
/* 100 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactCompositeComponent
	 */

	'use strict';

	var ReactComponentEnvironment = __webpack_require__(101);
	var ReactContext = __webpack_require__(28);
	var ReactCurrentOwner = __webpack_require__(33);
	var ReactElement = __webpack_require__(27);
	var ReactElementValidator = __webpack_require__(48);
	var ReactInstanceMap = __webpack_require__(41);
	var ReactLifeCycle = __webpack_require__(40);
	var ReactNativeComponent = __webpack_require__(51);
	var ReactPerf = __webpack_require__(44);
	var ReactPropTypeLocations = __webpack_require__(49);
	var ReactPropTypeLocationNames = __webpack_require__(50);
	var ReactReconciler = __webpack_require__(45);
	var ReactUpdates = __webpack_require__(42);

	var assign = __webpack_require__(29);
	var emptyObject = __webpack_require__(30);
	var invariant = __webpack_require__(23);
	var shouldUpdateReactComponent = __webpack_require__(102);
	var warning = __webpack_require__(31);

	function getDeclarationErrorAddendum(component) {
	  var owner = component._currentElement._owner || null;
	  if (owner) {
	    var name = owner.getName();
	    if (name) {
	      return ' Check the render method of `' + name + '`.';
	    }
	  }
	  return '';
	}

	/**
	 * ------------------ The Life-Cycle of a Composite Component ------------------
	 *
	 * - constructor: Initialization of state. The instance is now retained.
	 *   - componentWillMount
	 *   - render
	 *   - [children's constructors]
	 *     - [children's componentWillMount and render]
	 *     - [children's componentDidMount]
	 *     - componentDidMount
	 *
	 *       Update Phases:
	 *       - componentWillReceiveProps (only called if parent updated)
	 *       - shouldComponentUpdate
	 *         - componentWillUpdate
	 *           - render
	 *           - [children's constructors or receive props phases]
	 *         - componentDidUpdate
	 *
	 *     - componentWillUnmount
	 *     - [children's componentWillUnmount]
	 *   - [children destroyed]
	 * - (destroyed): The instance is now blank, released by React and ready for GC.
	 *
	 * -----------------------------------------------------------------------------
	 */

	/**
	 * An incrementing ID assigned to each component when it is mounted. This is
	 * used to enforce the order in which `ReactUpdates` updates dirty components.
	 *
	 * @private
	 */
	var nextMountID = 1;

	/**
	 * @lends {ReactCompositeComponent.prototype}
	 */
	var ReactCompositeComponentMixin = {

	  /**
	   * Base constructor for all composite component.
	   *
	   * @param {ReactElement} element
	   * @final
	   * @internal
	   */
	  construct: function construct(element) {
	    this._currentElement = element;
	    this._rootNodeID = null;
	    this._instance = null;

	    // See ReactUpdateQueue
	    this._pendingElement = null;
	    this._pendingStateQueue = null;
	    this._pendingReplaceState = false;
	    this._pendingForceUpdate = false;

	    this._renderedComponent = null;

	    this._context = null;
	    this._mountOrder = 0;
	    this._isTopLevel = false;

	    // See ReactUpdates and ReactUpdateQueue.
	    this._pendingCallbacks = null;
	  },

	  /**
	   * Initializes the component, renders markup, and registers event listeners.
	   *
	   * @param {string} rootID DOM ID of the root node.
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @return {?string} Rendered markup to be inserted into the DOM.
	   * @final
	   * @internal
	   */
	  mountComponent: function mountComponent(rootID, transaction, context) {
	    this._context = context;
	    this._mountOrder = nextMountID++;
	    this._rootNodeID = rootID;

	    var publicProps = this._processProps(this._currentElement.props);
	    var publicContext = this._processContext(this._currentElement._context);

	    var Component = ReactNativeComponent.getComponentClassForElement(this._currentElement);

	    // Initialize the public class
	    var inst = new Component(publicProps, publicContext);

	    if ("production" !== process.env.NODE_ENV) {
	      // This will throw later in _renderValidatedComponent, but add an early
	      // warning now to help debugging
	      "production" !== process.env.NODE_ENV ? warning(inst.render != null, '%s(...): No `render` method found on the returned component ' + 'instance: you may have forgotten to define `render` in your ' + 'component or you may have accidentally tried to render an element ' + 'whose type is a function that isn\'t a React component.', Component.displayName || Component.name || 'Component') : null;
	    }

	    // These should be set up in the constructor, but as a convenience for
	    // simpler class abstractions, we set them up after the fact.
	    inst.props = publicProps;
	    inst.context = publicContext;
	    inst.refs = emptyObject;

	    this._instance = inst;

	    // Store a reference from the instance back to the internal representation
	    ReactInstanceMap.set(inst, this);

	    if ("production" !== process.env.NODE_ENV) {
	      this._warnIfContextsDiffer(this._currentElement._context, context);
	    }

	    if ("production" !== process.env.NODE_ENV) {
	      // Since plain JS classes are defined without any special initialization
	      // logic, we can not catch common errors early. Therefore, we have to
	      // catch them here, at initialization time, instead.
	      "production" !== process.env.NODE_ENV ? warning(!inst.getInitialState || inst.getInitialState.isReactClassApproved, 'getInitialState was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Did you mean to define a state property instead?', this.getName() || 'a component') : null;
	      "production" !== process.env.NODE_ENV ? warning(!inst.getDefaultProps || inst.getDefaultProps.isReactClassApproved, 'getDefaultProps was defined on %s, a plain JavaScript class. ' + 'This is only supported for classes created using React.createClass. ' + 'Use a static property to define defaultProps instead.', this.getName() || 'a component') : null;
	      "production" !== process.env.NODE_ENV ? warning(!inst.propTypes, 'propTypes was defined as an instance property on %s. Use a static ' + 'property to define propTypes instead.', this.getName() || 'a component') : null;
	      "production" !== process.env.NODE_ENV ? warning(!inst.contextTypes, 'contextTypes was defined as an instance property on %s. Use a ' + 'static property to define contextTypes instead.', this.getName() || 'a component') : null;
	      "production" !== process.env.NODE_ENV ? warning(typeof inst.componentShouldUpdate !== 'function', '%s has a method called ' + 'componentShouldUpdate(). Did you mean shouldComponentUpdate()? ' + 'The name is phrased as a question because the function is ' + 'expected to return a value.', this.getName() || 'A component') : null;
	    }

	    var initialState = inst.state;
	    if (initialState === undefined) {
	      inst.state = initialState = null;
	    }
	    "production" !== process.env.NODE_ENV ? invariant(typeof initialState === 'object' && !Array.isArray(initialState), '%s.state: must be set to an object or null', this.getName() || 'ReactCompositeComponent') : invariant(typeof initialState === 'object' && !Array.isArray(initialState));

	    this._pendingStateQueue = null;
	    this._pendingReplaceState = false;
	    this._pendingForceUpdate = false;

	    var childContext;
	    var renderedElement;

	    var previouslyMounting = ReactLifeCycle.currentlyMountingInstance;
	    ReactLifeCycle.currentlyMountingInstance = this;
	    try {
	      if (inst.componentWillMount) {
	        inst.componentWillMount();
	        // When mounting, calls to `setState` by `componentWillMount` will set
	        // `this._pendingStateQueue` without triggering a re-render.
	        if (this._pendingStateQueue) {
	          inst.state = this._processPendingState(inst.props, inst.context);
	        }
	      }

	      childContext = this._getValidatedChildContext(context);
	      renderedElement = this._renderValidatedComponent(childContext);
	    } finally {
	      ReactLifeCycle.currentlyMountingInstance = previouslyMounting;
	    }

	    this._renderedComponent = this._instantiateReactComponent(renderedElement, this._currentElement.type // The wrapping type
	    );

	    var markup = ReactReconciler.mountComponent(this._renderedComponent, rootID, transaction, this._mergeChildContext(context, childContext));
	    if (inst.componentDidMount) {
	      transaction.getReactMountReady().enqueue(inst.componentDidMount, inst);
	    }

	    return markup;
	  },

	  /**
	   * Releases any resources allocated by `mountComponent`.
	   *
	   * @final
	   * @internal
	   */
	  unmountComponent: function unmountComponent() {
	    var inst = this._instance;

	    if (inst.componentWillUnmount) {
	      var previouslyUnmounting = ReactLifeCycle.currentlyUnmountingInstance;
	      ReactLifeCycle.currentlyUnmountingInstance = this;
	      try {
	        inst.componentWillUnmount();
	      } finally {
	        ReactLifeCycle.currentlyUnmountingInstance = previouslyUnmounting;
	      }
	    }

	    ReactReconciler.unmountComponent(this._renderedComponent);
	    this._renderedComponent = null;

	    // Reset pending fields
	    this._pendingStateQueue = null;
	    this._pendingReplaceState = false;
	    this._pendingForceUpdate = false;
	    this._pendingCallbacks = null;
	    this._pendingElement = null;

	    // These fields do not really need to be reset since this object is no
	    // longer accessible.
	    this._context = null;
	    this._rootNodeID = null;

	    // Delete the reference from the instance to this internal representation
	    // which allow the internals to be properly cleaned up even if the user
	    // leaks a reference to the public instance.
	    ReactInstanceMap.remove(inst);

	    // Some existing components rely on inst.props even after they've been
	    // destroyed (in event handlers).
	    // TODO: inst.props = null;
	    // TODO: inst.state = null;
	    // TODO: inst.context = null;
	  },

	  /**
	   * Schedule a partial update to the props. Only used for internal testing.
	   *
	   * @param {object} partialProps Subset of the next props.
	   * @param {?function} callback Called after props are updated.
	   * @final
	   * @internal
	   */
	  _setPropsInternal: function _setPropsInternal(partialProps, callback) {
	    // This is a deoptimized path. We optimize for always having an element.
	    // This creates an extra internal element.
	    var element = this._pendingElement || this._currentElement;
	    this._pendingElement = ReactElement.cloneAndReplaceProps(element, assign({}, element.props, partialProps));
	    ReactUpdates.enqueueUpdate(this, callback);
	  },

	  /**
	   * Filters the context object to only contain keys specified in
	   * `contextTypes`
	   *
	   * @param {object} context
	   * @return {?object}
	   * @private
	   */
	  _maskContext: function _maskContext(context) {
	    var maskedContext = null;
	    // This really should be getting the component class for the element,
	    // but we know that we're not going to need it for built-ins.
	    if (typeof this._currentElement.type === 'string') {
	      return emptyObject;
	    }
	    var contextTypes = this._currentElement.type.contextTypes;
	    if (!contextTypes) {
	      return emptyObject;
	    }
	    maskedContext = {};
	    for (var contextName in contextTypes) {
	      maskedContext[contextName] = context[contextName];
	    }
	    return maskedContext;
	  },

	  /**
	   * Filters the context object to only contain keys specified in
	   * `contextTypes`, and asserts that they are valid.
	   *
	   * @param {object} context
	   * @return {?object}
	   * @private
	   */
	  _processContext: function _processContext(context) {
	    var maskedContext = this._maskContext(context);
	    if ("production" !== process.env.NODE_ENV) {
	      var Component = ReactNativeComponent.getComponentClassForElement(this._currentElement);
	      if (Component.contextTypes) {
	        this._checkPropTypes(Component.contextTypes, maskedContext, ReactPropTypeLocations.context);
	      }
	    }
	    return maskedContext;
	  },

	  /**
	   * @param {object} currentContext
	   * @return {object}
	   * @private
	   */
	  _getValidatedChildContext: function _getValidatedChildContext(currentContext) {
	    var inst = this._instance;
	    var childContext = inst.getChildContext && inst.getChildContext();
	    if (childContext) {
	      "production" !== process.env.NODE_ENV ? invariant(typeof inst.constructor.childContextTypes === 'object', '%s.getChildContext(): childContextTypes must be defined in order to ' + 'use getChildContext().', this.getName() || 'ReactCompositeComponent') : invariant(typeof inst.constructor.childContextTypes === 'object');
	      if ("production" !== process.env.NODE_ENV) {
	        this._checkPropTypes(inst.constructor.childContextTypes, childContext, ReactPropTypeLocations.childContext);
	      }
	      for (var name in childContext) {
	        "production" !== process.env.NODE_ENV ? invariant(name in inst.constructor.childContextTypes, '%s.getChildContext(): key "%s" is not defined in childContextTypes.', this.getName() || 'ReactCompositeComponent', name) : invariant(name in inst.constructor.childContextTypes);
	      }
	      return childContext;
	    }
	    return null;
	  },

	  _mergeChildContext: function _mergeChildContext(currentContext, childContext) {
	    if (childContext) {
	      return assign({}, currentContext, childContext);
	    }
	    return currentContext;
	  },

	  /**
	   * Processes props by setting default values for unspecified props and
	   * asserting that the props are valid. Does not mutate its argument; returns
	   * a new props object with defaults merged in.
	   *
	   * @param {object} newProps
	   * @return {object}
	   * @private
	   */
	  _processProps: function _processProps(newProps) {
	    if ("production" !== process.env.NODE_ENV) {
	      var Component = ReactNativeComponent.getComponentClassForElement(this._currentElement);
	      if (Component.propTypes) {
	        this._checkPropTypes(Component.propTypes, newProps, ReactPropTypeLocations.prop);
	      }
	    }
	    return newProps;
	  },

	  /**
	   * Assert that the props are valid
	   *
	   * @param {object} propTypes Map of prop name to a ReactPropType
	   * @param {object} props
	   * @param {string} location e.g. "prop", "context", "child context"
	   * @private
	   */
	  _checkPropTypes: function _checkPropTypes(propTypes, props, location) {
	    // TODO: Stop validating prop types here and only use the element
	    // validation.
	    var componentName = this.getName();
	    for (var propName in propTypes) {
	      if (propTypes.hasOwnProperty(propName)) {
	        var error;
	        try {
	          // This is intentionally an invariant that gets caught. It's the same
	          // behavior as without this statement except with a better message.
	          "production" !== process.env.NODE_ENV ? invariant(typeof propTypes[propName] === 'function', '%s: %s type `%s` is invalid; it must be a function, usually ' + 'from React.PropTypes.', componentName || 'React class', ReactPropTypeLocationNames[location], propName) : invariant(typeof propTypes[propName] === 'function');
	          error = propTypes[propName](props, propName, componentName, location);
	        } catch (ex) {
	          error = ex;
	        }
	        if (error instanceof Error) {
	          // We may want to extend this logic for similar errors in
	          // React.render calls, so I'm abstracting it away into
	          // a function to minimize refactoring in the future
	          var addendum = getDeclarationErrorAddendum(this);

	          if (location === ReactPropTypeLocations.prop) {
	            // Preface gives us something to blacklist in warning module
	            "production" !== process.env.NODE_ENV ? warning(false, 'Failed Composite propType: %s%s', error.message, addendum) : null;
	          } else {
	            "production" !== process.env.NODE_ENV ? warning(false, 'Failed Context Types: %s%s', error.message, addendum) : null;
	          }
	        }
	      }
	    }
	  },

	  receiveComponent: function receiveComponent(nextElement, transaction, nextContext) {
	    var prevElement = this._currentElement;
	    var prevContext = this._context;

	    this._pendingElement = null;

	    this.updateComponent(transaction, prevElement, nextElement, prevContext, nextContext);
	  },

	  /**
	   * If any of `_pendingElement`, `_pendingStateQueue`, or `_pendingForceUpdate`
	   * is set, update the component.
	   *
	   * @param {ReactReconcileTransaction} transaction
	   * @internal
	   */
	  performUpdateIfNecessary: function performUpdateIfNecessary(transaction) {
	    if (this._pendingElement != null) {
	      ReactReconciler.receiveComponent(this, this._pendingElement || this._currentElement, transaction, this._context);
	    }

	    if (this._pendingStateQueue !== null || this._pendingForceUpdate) {
	      if ("production" !== process.env.NODE_ENV) {
	        ReactElementValidator.checkAndWarnForMutatedProps(this._currentElement);
	      }

	      this.updateComponent(transaction, this._currentElement, this._currentElement, this._context, this._context);
	    }
	  },

	  /**
	   * Compare two contexts, warning if they are different
	   * TODO: Remove this check when owner-context is removed
	   */
	  _warnIfContextsDiffer: function _warnIfContextsDiffer(ownerBasedContext, parentBasedContext) {
	    ownerBasedContext = this._maskContext(ownerBasedContext);
	    parentBasedContext = this._maskContext(parentBasedContext);
	    var parentKeys = Object.keys(parentBasedContext).sort();
	    var displayName = this.getName() || 'ReactCompositeComponent';
	    for (var i = 0; i < parentKeys.length; i++) {
	      var key = parentKeys[i];
	      "production" !== process.env.NODE_ENV ? warning(ownerBasedContext[key] === parentBasedContext[key], 'owner-based and parent-based contexts differ ' + '(values: `%s` vs `%s`) for key (%s) while mounting %s ' + '(see: http://fb.me/react-context-by-parent)', ownerBasedContext[key], parentBasedContext[key], key, displayName) : null;
	    }
	  },

	  /**
	   * Perform an update to a mounted component. The componentWillReceiveProps and
	   * shouldComponentUpdate methods are called, then (assuming the update isn't
	   * skipped) the remaining update lifecycle methods are called and the DOM
	   * representation is updated.
	   *
	   * By default, this implements React's rendering and reconciliation algorithm.
	   * Sophisticated clients may wish to override this.
	   *
	   * @param {ReactReconcileTransaction} transaction
	   * @param {ReactElement} prevParentElement
	   * @param {ReactElement} nextParentElement
	   * @internal
	   * @overridable
	   */
	  updateComponent: function updateComponent(transaction, prevParentElement, nextParentElement, prevUnmaskedContext, nextUnmaskedContext) {
	    var inst = this._instance;

	    var nextContext = inst.context;
	    var nextProps = inst.props;

	    // Distinguish between a props update versus a simple state update
	    if (prevParentElement !== nextParentElement) {
	      nextContext = this._processContext(nextParentElement._context);
	      nextProps = this._processProps(nextParentElement.props);

	      if ("production" !== process.env.NODE_ENV) {
	        if (nextUnmaskedContext != null) {
	          this._warnIfContextsDiffer(nextParentElement._context, nextUnmaskedContext);
	        }
	      }

	      // An update here will schedule an update but immediately set
	      // _pendingStateQueue which will ensure that any state updates gets
	      // immediately reconciled instead of waiting for the next batch.

	      if (inst.componentWillReceiveProps) {
	        inst.componentWillReceiveProps(nextProps, nextContext);
	      }
	    }

	    var nextState = this._processPendingState(nextProps, nextContext);

	    var shouldUpdate = this._pendingForceUpdate || !inst.shouldComponentUpdate || inst.shouldComponentUpdate(nextProps, nextState, nextContext);

	    if ("production" !== process.env.NODE_ENV) {
	      "production" !== process.env.NODE_ENV ? warning(typeof shouldUpdate !== 'undefined', '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', this.getName() || 'ReactCompositeComponent') : null;
	    }

	    if (shouldUpdate) {
	      this._pendingForceUpdate = false;
	      // Will set `this.props`, `this.state` and `this.context`.
	      this._performComponentUpdate(nextParentElement, nextProps, nextState, nextContext, transaction, nextUnmaskedContext);
	    } else {
	      // If it's determined that a component should not update, we still want
	      // to set props and state but we shortcut the rest of the update.
	      this._currentElement = nextParentElement;
	      this._context = nextUnmaskedContext;
	      inst.props = nextProps;
	      inst.state = nextState;
	      inst.context = nextContext;
	    }
	  },

	  _processPendingState: function _processPendingState(props, context) {
	    var inst = this._instance;
	    var queue = this._pendingStateQueue;
	    var replace = this._pendingReplaceState;
	    this._pendingReplaceState = false;
	    this._pendingStateQueue = null;

	    if (!queue) {
	      return inst.state;
	    }

	    if (replace && queue.length === 1) {
	      return queue[0];
	    }

	    var nextState = assign({}, replace ? queue[0] : inst.state);
	    for (var i = replace ? 1 : 0; i < queue.length; i++) {
	      var partial = queue[i];
	      assign(nextState, typeof partial === 'function' ? partial.call(inst, nextState, props, context) : partial);
	    }

	    return nextState;
	  },

	  /**
	   * Merges new props and state, notifies delegate methods of update and
	   * performs update.
	   *
	   * @param {ReactElement} nextElement Next element
	   * @param {object} nextProps Next public object to set as properties.
	   * @param {?object} nextState Next object to set as state.
	   * @param {?object} nextContext Next public object to set as context.
	   * @param {ReactReconcileTransaction} transaction
	   * @param {?object} unmaskedContext
	   * @private
	   */
	  _performComponentUpdate: function _performComponentUpdate(nextElement, nextProps, nextState, nextContext, transaction, unmaskedContext) {
	    var inst = this._instance;

	    var prevProps = inst.props;
	    var prevState = inst.state;
	    var prevContext = inst.context;

	    if (inst.componentWillUpdate) {
	      inst.componentWillUpdate(nextProps, nextState, nextContext);
	    }

	    this._currentElement = nextElement;
	    this._context = unmaskedContext;
	    inst.props = nextProps;
	    inst.state = nextState;
	    inst.context = nextContext;

	    this._updateRenderedComponent(transaction, unmaskedContext);

	    if (inst.componentDidUpdate) {
	      transaction.getReactMountReady().enqueue(inst.componentDidUpdate.bind(inst, prevProps, prevState, prevContext), inst);
	    }
	  },

	  /**
	   * Call the component's `render` method and update the DOM accordingly.
	   *
	   * @param {ReactReconcileTransaction} transaction
	   * @internal
	   */
	  _updateRenderedComponent: function _updateRenderedComponent(transaction, context) {
	    var prevComponentInstance = this._renderedComponent;
	    var prevRenderedElement = prevComponentInstance._currentElement;
	    var childContext = this._getValidatedChildContext();
	    var nextRenderedElement = this._renderValidatedComponent(childContext);
	    if (shouldUpdateReactComponent(prevRenderedElement, nextRenderedElement)) {
	      ReactReconciler.receiveComponent(prevComponentInstance, nextRenderedElement, transaction, this._mergeChildContext(context, childContext));
	    } else {
	      // These two IDs are actually the same! But nothing should rely on that.
	      var thisID = this._rootNodeID;
	      var prevComponentID = prevComponentInstance._rootNodeID;
	      ReactReconciler.unmountComponent(prevComponentInstance);

	      this._renderedComponent = this._instantiateReactComponent(nextRenderedElement, this._currentElement.type);
	      var nextMarkup = ReactReconciler.mountComponent(this._renderedComponent, thisID, transaction, this._mergeChildContext(context, childContext));
	      this._replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
	    }
	  },

	  /**
	   * @protected
	   */
	  _replaceNodeWithMarkupByID: function _replaceNodeWithMarkupByID(prevComponentID, nextMarkup) {
	    ReactComponentEnvironment.replaceNodeWithMarkupByID(prevComponentID, nextMarkup);
	  },

	  /**
	   * @protected
	   */
	  _renderValidatedComponentWithoutOwnerOrContext: function _renderValidatedComponentWithoutOwnerOrContext() {
	    var inst = this._instance;
	    var renderedComponent = inst.render();
	    if ("production" !== process.env.NODE_ENV) {
	      // We allow auto-mocks to proceed as if they're returning null.
	      if (typeof renderedComponent === 'undefined' && inst.render._isMockFunction) {
	        // This is probably bad practice. Consider warning here and
	        // deprecating this convenience.
	        renderedComponent = null;
	      }
	    }

	    return renderedComponent;
	  },

	  /**
	   * @private
	   */
	  _renderValidatedComponent: function _renderValidatedComponent(childContext) {
	    var renderedComponent;
	    var previousContext = ReactContext.current;
	    ReactContext.current = this._mergeChildContext(this._currentElement._context, childContext);
	    ReactCurrentOwner.current = this;
	    try {
	      renderedComponent = this._renderValidatedComponentWithoutOwnerOrContext();
	    } finally {
	      ReactContext.current = previousContext;
	      ReactCurrentOwner.current = null;
	    }
	    "production" !== process.env.NODE_ENV ? invariant(
	    // TODO: An `isValidNode` function would probably be more appropriate
	    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent), '%s.render(): A valid ReactComponent must be returned. You may have ' + 'returned undefined, an array or some other invalid object.', this.getName() || 'ReactCompositeComponent') : invariant( // TODO: An `isValidNode` function would probably be more appropriate
	    renderedComponent === null || renderedComponent === false || ReactElement.isValidElement(renderedComponent));
	    return renderedComponent;
	  },

	  /**
	   * Lazily allocates the refs object and stores `component` as `ref`.
	   *
	   * @param {string} ref Reference name.
	   * @param {component} component Component to store as `ref`.
	   * @final
	   * @private
	   */
	  attachRef: function attachRef(ref, component) {
	    var inst = this.getPublicInstance();
	    var refs = inst.refs === emptyObject ? inst.refs = {} : inst.refs;
	    refs[ref] = component.getPublicInstance();
	  },

	  /**
	   * Detaches a reference name.
	   *
	   * @param {string} ref Name to dereference.
	   * @final
	   * @private
	   */
	  detachRef: function detachRef(ref) {
	    var refs = this.getPublicInstance().refs;
	    delete refs[ref];
	  },

	  /**
	   * Get a text description of the component that can be used to identify it
	   * in error messages.
	   * @return {string} The name or null.
	   * @internal
	   */
	  getName: function getName() {
	    var type = this._currentElement.type;
	    var constructor = this._instance && this._instance.constructor;
	    return type.displayName || constructor && constructor.displayName || type.name || constructor && constructor.name || null;
	  },

	  /**
	   * Get the publicly accessible representation of this component - i.e. what
	   * is exposed by refs and returned by React.render. Can be null for stateless
	   * components.
	   *
	   * @return {ReactComponent} the public component instance.
	   * @internal
	   */
	  getPublicInstance: function getPublicInstance() {
	    return this._instance;
	  },

	  // Stub
	  _instantiateReactComponent: null

	};

	ReactPerf.measureMethods(ReactCompositeComponentMixin, 'ReactCompositeComponent', {
	  mountComponent: 'mountComponent',
	  updateComponent: 'updateComponent',
	  _renderValidatedComponent: '_renderValidatedComponent'
	});

	var ReactCompositeComponent = {

	  Mixin: ReactCompositeComponentMixin

	};

	module.exports = ReactCompositeComponent;

/***/ },
/* 101 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactComponentEnvironment
	 */

	'use strict';

	var invariant = __webpack_require__(23);

	var injected = false;

	var ReactComponentEnvironment = {

	  /**
	   * Optionally injectable environment dependent cleanup hook. (server vs.
	   * browser etc). Example: A browser system caches DOM nodes based on component
	   * ID and must remove that cache entry when this instance is unmounted.
	   */
	  unmountIDFromEnvironment: null,

	  /**
	   * Optionally injectable hook for swapping out mount images in the middle of
	   * the tree.
	   */
	  replaceNodeWithMarkupByID: null,

	  /**
	   * Optionally injectable hook for processing a queue of child updates. Will
	   * later move into MultiChildComponents.
	   */
	  processChildrenUpdates: null,

	  injection: {
	    injectEnvironment: function injectEnvironment(environment) {
	      "production" !== process.env.NODE_ENV ? invariant(!injected, 'ReactCompositeComponent: injectEnvironment() can only be called once.') : invariant(!injected);
	      ReactComponentEnvironment.unmountIDFromEnvironment = environment.unmountIDFromEnvironment;
	      ReactComponentEnvironment.replaceNodeWithMarkupByID = environment.replaceNodeWithMarkupByID;
	      ReactComponentEnvironment.processChildrenUpdates = environment.processChildrenUpdates;
	      injected = true;
	    }
	  }

	};

	module.exports = ReactComponentEnvironment;

/***/ },
/* 102 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule shouldUpdateReactComponent
	 * @typechecks static-only
	 */

	'use strict';

	var warning = __webpack_require__(31);

	/**
	 * Given a `prevElement` and `nextElement`, determines if the existing
	 * instance should be updated as opposed to being destroyed or replaced by a new
	 * instance. Both arguments are elements. This ensures that this logic can
	 * operate on stateless trees without any backing instance.
	 *
	 * @param {?object} prevElement
	 * @param {?object} nextElement
	 * @return {boolean} True if the existing instance should be updated.
	 * @protected
	 */
	function shouldUpdateReactComponent(prevElement, nextElement) {
	  if (prevElement != null && nextElement != null) {
	    var prevType = typeof prevElement;
	    var nextType = typeof nextElement;
	    if (prevType === 'string' || prevType === 'number') {
	      return nextType === 'string' || nextType === 'number';
	    } else {
	      if (nextType === 'object' && prevElement.type === nextElement.type && prevElement.key === nextElement.key) {
	        var ownersMatch = prevElement._owner === nextElement._owner;
	        var prevName = null;
	        var nextName = null;
	        var nextDisplayName = null;
	        if ("production" !== process.env.NODE_ENV) {
	          if (!ownersMatch) {
	            if (prevElement._owner != null && prevElement._owner.getPublicInstance() != null && prevElement._owner.getPublicInstance().constructor != null) {
	              prevName = prevElement._owner.getPublicInstance().constructor.displayName;
	            }
	            if (nextElement._owner != null && nextElement._owner.getPublicInstance() != null && nextElement._owner.getPublicInstance().constructor != null) {
	              nextName = nextElement._owner.getPublicInstance().constructor.displayName;
	            }
	            if (nextElement.type != null && nextElement.type.displayName != null) {
	              nextDisplayName = nextElement.type.displayName;
	            }
	            if (nextElement.type != null && typeof nextElement.type === 'string') {
	              nextDisplayName = nextElement.type;
	            }
	            if (typeof nextElement.type !== 'string' || nextElement.type === 'input' || nextElement.type === 'textarea') {
	              if (prevElement._owner != null && prevElement._owner._isOwnerNecessary === false || nextElement._owner != null && nextElement._owner._isOwnerNecessary === false) {
	                if (prevElement._owner != null) {
	                  prevElement._owner._isOwnerNecessary = true;
	                }
	                if (nextElement._owner != null) {
	                  nextElement._owner._isOwnerNecessary = true;
	                }
	                "production" !== process.env.NODE_ENV ? warning(false, '<%s /> is being rendered by both %s and %s using the same ' + 'key (%s) in the same place. Currently, this means that ' + 'they don\'t preserve state. This behavior should be very ' + 'rare so we\'re considering deprecating it. Please contact ' + 'the React team and explain your use case so that we can ' + 'take that into consideration.', nextDisplayName || 'Unknown Component', prevName || '[Unknown]', nextName || '[Unknown]', prevElement.key) : null;
	              }
	            }
	          }
	        }
	        return ownersMatch;
	      }
	    }
	  }
	  return false;
	}

	module.exports = shouldUpdateReactComponent;

/***/ },
/* 103 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMComponent
	 * @typechecks static-only
	 */

	/* global hasOwnProperty:true */

	'use strict';

	var CSSPropertyOperations = __webpack_require__(65);
	var DOMProperty = __webpack_require__(60);
	var DOMPropertyOperations = __webpack_require__(59);
	var ReactBrowserEventEmitter = __webpack_require__(84);
	var ReactComponentBrowserEnvironment = __webpack_require__(63);
	var ReactMount = __webpack_require__(83);
	var ReactMultiChild = __webpack_require__(104);
	var ReactPerf = __webpack_require__(44);

	var assign = __webpack_require__(29);
	var escapeTextContentForBrowser = __webpack_require__(62);
	var invariant = __webpack_require__(23);
	var isEventSupported = __webpack_require__(91);
	var keyOf = __webpack_require__(55);
	var warning = __webpack_require__(31);

	var deleteListener = ReactBrowserEventEmitter.deleteListener;
	var listenTo = ReactBrowserEventEmitter.listenTo;
	var registrationNameModules = ReactBrowserEventEmitter.registrationNameModules;

	// For quickly matching children type, to test if can be treated as content.
	var CONTENT_TYPES = { 'string': true, 'number': true };

	var STYLE = keyOf({ style: null });

	var ELEMENT_NODE_TYPE = 1;

	/**
	 * Optionally injectable operations for mutating the DOM
	 */
	var BackendIDOperations = null;

	/**
	 * @param {?object} props
	 */
	function assertValidProps(props) {
	  if (!props) {
	    return;
	  }
	  // Note the use of `==` which checks for null or undefined.
	  if (props.dangerouslySetInnerHTML != null) {
	    "production" !== process.env.NODE_ENV ? invariant(props.children == null, 'Can only set one of `children` or `props.dangerouslySetInnerHTML`.') : invariant(props.children == null);
	    "production" !== process.env.NODE_ENV ? invariant(typeof props.dangerouslySetInnerHTML === 'object' && '__html' in props.dangerouslySetInnerHTML, '`props.dangerouslySetInnerHTML` must be in the form `{__html: ...}`. ' + 'Please visit https://fb.me/react-invariant-dangerously-set-inner-html ' + 'for more information.') : invariant(typeof props.dangerouslySetInnerHTML === 'object' && '__html' in props.dangerouslySetInnerHTML);
	  }
	  if ("production" !== process.env.NODE_ENV) {
	    "production" !== process.env.NODE_ENV ? warning(props.innerHTML == null, 'Directly setting property `innerHTML` is not permitted. ' + 'For more information, lookup documentation on `dangerouslySetInnerHTML`.') : null;
	    "production" !== process.env.NODE_ENV ? warning(!props.contentEditable || props.children == null, 'A component is `contentEditable` and contains `children` managed by ' + 'React. It is now your responsibility to guarantee that none of ' + 'those nodes are unexpectedly modified or duplicated. This is ' + 'probably not intentional.') : null;
	  }
	  "production" !== process.env.NODE_ENV ? invariant(props.style == null || typeof props.style === 'object', 'The `style` prop expects a mapping from style properties to values, ' + 'not a string. For example, style={{marginRight: spacing + \'em\'}} when ' + 'using JSX.') : invariant(props.style == null || typeof props.style === 'object');
	}

	function putListener(id, registrationName, listener, transaction) {
	  if ("production" !== process.env.NODE_ENV) {
	    // IE8 has no API for event capturing and the `onScroll` event doesn't
	    // bubble.
	    "production" !== process.env.NODE_ENV ? warning(registrationName !== 'onScroll' || isEventSupported('scroll', true), 'This browser doesn\'t support the `onScroll` event') : null;
	  }
	  var container = ReactMount.findReactContainerForID(id);
	  if (container) {
	    var doc = container.nodeType === ELEMENT_NODE_TYPE ? container.ownerDocument : container;
	    listenTo(registrationName, doc);
	  }
	  transaction.getPutListenerQueue().enqueuePutListener(id, registrationName, listener);
	}

	// For HTML, certain tags should omit their close tag. We keep a whitelist for
	// those special cased tags.

	var omittedCloseTags = {
	  'area': true,
	  'base': true,
	  'br': true,
	  'col': true,
	  'embed': true,
	  'hr': true,
	  'img': true,
	  'input': true,
	  'keygen': true,
	  'link': true,
	  'meta': true,
	  'param': true,
	  'source': true,
	  'track': true,
	  'wbr': true
	  // NOTE: menuitem's close tag should be omitted, but that causes problems.
	};

	// We accept any tag to be rendered but since this gets injected into abitrary
	// HTML, we want to make sure that it's a safe tag.
	// http://www.w3.org/TR/REC-xml/#NT-Name

	var VALID_TAG_REGEX = /^[a-zA-Z][a-zA-Z:_\.\-\d]*$/; // Simplified subset
	var validatedTagCache = {};
	var hasOwnProperty = ({}).hasOwnProperty;

	function validateDangerousTag(tag) {
	  if (!hasOwnProperty.call(validatedTagCache, tag)) {
	    "production" !== process.env.NODE_ENV ? invariant(VALID_TAG_REGEX.test(tag), 'Invalid tag: %s', tag) : invariant(VALID_TAG_REGEX.test(tag));
	    validatedTagCache[tag] = true;
	  }
	}

	/**
	 * Creates a new React class that is idempotent and capable of containing other
	 * React components. It accepts event listeners and DOM properties that are
	 * valid according to `DOMProperty`.
	 *
	 *  - Event listeners: `onClick`, `onMouseDown`, etc.
	 *  - DOM properties: `className`, `name`, `title`, etc.
	 *
	 * The `style` property functions differently from the DOM API. It accepts an
	 * object mapping of style properties to values.
	 *
	 * @constructor ReactDOMComponent
	 * @extends ReactMultiChild
	 */
	function ReactDOMComponent(tag) {
	  validateDangerousTag(tag);
	  this._tag = tag;
	  this._renderedChildren = null;
	  this._previousStyleCopy = null;
	  this._rootNodeID = null;
	}

	ReactDOMComponent.displayName = 'ReactDOMComponent';

	ReactDOMComponent.Mixin = {

	  construct: function construct(element) {
	    this._currentElement = element;
	  },

	  /**
	   * Generates root tag markup then recurses. This method has side effects and
	   * is not idempotent.
	   *
	   * @internal
	   * @param {string} rootID The root DOM ID for this node.
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @return {string} The computed markup.
	   */
	  mountComponent: function mountComponent(rootID, transaction, context) {
	    this._rootNodeID = rootID;
	    assertValidProps(this._currentElement.props);
	    var closeTag = omittedCloseTags[this._tag] ? '' : '</' + this._tag + '>';
	    return this._createOpenTagMarkupAndPutListeners(transaction) + this._createContentMarkup(transaction, context) + closeTag;
	  },

	  /**
	   * Creates markup for the open tag and all attributes.
	   *
	   * This method has side effects because events get registered.
	   *
	   * Iterating over object properties is faster than iterating over arrays.
	   * @see http://jsperf.com/obj-vs-arr-iteration
	   *
	   * @private
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @return {string} Markup of opening tag.
	   */
	  _createOpenTagMarkupAndPutListeners: function _createOpenTagMarkupAndPutListeners(transaction) {
	    var props = this._currentElement.props;
	    var ret = '<' + this._tag;

	    for (var propKey in props) {
	      if (!props.hasOwnProperty(propKey)) {
	        continue;
	      }
	      var propValue = props[propKey];
	      if (propValue == null) {
	        continue;
	      }
	      if (registrationNameModules.hasOwnProperty(propKey)) {
	        putListener(this._rootNodeID, propKey, propValue, transaction);
	      } else {
	        if (propKey === STYLE) {
	          if (propValue) {
	            propValue = this._previousStyleCopy = assign({}, props.style);
	          }
	          propValue = CSSPropertyOperations.createMarkupForStyles(propValue);
	        }
	        var markup = DOMPropertyOperations.createMarkupForProperty(propKey, propValue);
	        if (markup) {
	          ret += ' ' + markup;
	        }
	      }
	    }

	    // For static pages, no need to put React ID and checksum. Saves lots of
	    // bytes.
	    if (transaction.renderToStaticMarkup) {
	      return ret + '>';
	    }

	    var markupForID = DOMPropertyOperations.createMarkupForID(this._rootNodeID);
	    return ret + ' ' + markupForID + '>';
	  },

	  /**
	   * Creates markup for the content between the tags.
	   *
	   * @private
	   * @param {ReactReconcileTransaction|ReactServerRenderingTransaction} transaction
	   * @param {object} context
	   * @return {string} Content markup.
	   */
	  _createContentMarkup: function _createContentMarkup(transaction, context) {
	    var prefix = '';
	    if (this._tag === 'listing' || this._tag === 'pre' || this._tag === 'textarea') {
	      // Add an initial newline because browsers ignore the first newline in
	      // a <listing>, <pre>, or <textarea> as an "authoring convenience" -- see
	      // https://html.spec.whatwg.org/multipage/syntax.html#parsing-main-inbody.
	      prefix = '\n';
	    }

	    var props = this._currentElement.props;

	    // Intentional use of != to avoid catching zero/false.
	    var innerHTML = props.dangerouslySetInnerHTML;
	    if (innerHTML != null) {
	      if (innerHTML.__html != null) {
	        return prefix + innerHTML.__html;
	      }
	    } else {
	      var contentToUse = CONTENT_TYPES[typeof props.children] ? props.children : null;
	      var childrenToUse = contentToUse != null ? null : props.children;
	      if (contentToUse != null) {
	        return prefix + escapeTextContentForBrowser(contentToUse);
	      } else if (childrenToUse != null) {
	        var mountImages = this.mountChildren(childrenToUse, transaction, context);
	        return prefix + mountImages.join('');
	      }
	    }
	    return prefix;
	  },

	  receiveComponent: function receiveComponent(nextElement, transaction, context) {
	    var prevElement = this._currentElement;
	    this._currentElement = nextElement;
	    this.updateComponent(transaction, prevElement, nextElement, context);
	  },

	  /**
	   * Updates a native DOM component after it has already been allocated and
	   * attached to the DOM. Reconciles the root DOM node, then recurses.
	   *
	   * @param {ReactReconcileTransaction} transaction
	   * @param {ReactElement} prevElement
	   * @param {ReactElement} nextElement
	   * @internal
	   * @overridable
	   */
	  updateComponent: function updateComponent(transaction, prevElement, nextElement, context) {
	    assertValidProps(this._currentElement.props);
	    this._updateDOMProperties(prevElement.props, transaction);
	    this._updateDOMChildren(prevElement.props, transaction, context);
	  },

	  /**
	   * Reconciles the properties by detecting differences in property values and
	   * updating the DOM as necessary. This function is probably the single most
	   * critical path for performance optimization.
	   *
	   * TODO: Benchmark whether checking for changed values in memory actually
	   *       improves performance (especially statically positioned elements).
	   * TODO: Benchmark the effects of putting this at the top since 99% of props
	   *       do not change for a given reconciliation.
	   * TODO: Benchmark areas that can be improved with caching.
	   *
	   * @private
	   * @param {object} lastProps
	   * @param {ReactReconcileTransaction} transaction
	   */
	  _updateDOMProperties: function _updateDOMProperties(lastProps, transaction) {
	    var nextProps = this._currentElement.props;
	    var propKey;
	    var styleName;
	    var styleUpdates;
	    for (propKey in lastProps) {
	      if (nextProps.hasOwnProperty(propKey) || !lastProps.hasOwnProperty(propKey)) {
	        continue;
	      }
	      if (propKey === STYLE) {
	        var lastStyle = this._previousStyleCopy;
	        for (styleName in lastStyle) {
	          if (lastStyle.hasOwnProperty(styleName)) {
	            styleUpdates = styleUpdates || {};
	            styleUpdates[styleName] = '';
	          }
	        }
	        this._previousStyleCopy = null;
	      } else if (registrationNameModules.hasOwnProperty(propKey)) {
	        deleteListener(this._rootNodeID, propKey);
	      } else if (DOMProperty.isStandardName[propKey] || DOMProperty.isCustomAttribute(propKey)) {
	        BackendIDOperations.deletePropertyByID(this._rootNodeID, propKey);
	      }
	    }
	    for (propKey in nextProps) {
	      var nextProp = nextProps[propKey];
	      var lastProp = propKey === STYLE ? this._previousStyleCopy : lastProps[propKey];
	      if (!nextProps.hasOwnProperty(propKey) || nextProp === lastProp) {
	        continue;
	      }
	      if (propKey === STYLE) {
	        if (nextProp) {
	          nextProp = this._previousStyleCopy = assign({}, nextProp);
	        } else {
	          this._previousStyleCopy = null;
	        }
	        if (lastProp) {
	          // Unset styles on `lastProp` but not on `nextProp`.
	          for (styleName in lastProp) {
	            if (lastProp.hasOwnProperty(styleName) && (!nextProp || !nextProp.hasOwnProperty(styleName))) {
	              styleUpdates = styleUpdates || {};
	              styleUpdates[styleName] = '';
	            }
	          }
	          // Update styles that changed since `lastProp`.
	          for (styleName in nextProp) {
	            if (nextProp.hasOwnProperty(styleName) && lastProp[styleName] !== nextProp[styleName]) {
	              styleUpdates = styleUpdates || {};
	              styleUpdates[styleName] = nextProp[styleName];
	            }
	          }
	        } else {
	          // Relies on `updateStylesByID` not mutating `styleUpdates`.
	          styleUpdates = nextProp;
	        }
	      } else if (registrationNameModules.hasOwnProperty(propKey)) {
	        putListener(this._rootNodeID, propKey, nextProp, transaction);
	      } else if (DOMProperty.isStandardName[propKey] || DOMProperty.isCustomAttribute(propKey)) {
	        BackendIDOperations.updatePropertyByID(this._rootNodeID, propKey, nextProp);
	      }
	    }
	    if (styleUpdates) {
	      BackendIDOperations.updateStylesByID(this._rootNodeID, styleUpdates);
	    }
	  },

	  /**
	   * Reconciles the children with the various properties that affect the
	   * children content.
	   *
	   * @param {object} lastProps
	   * @param {ReactReconcileTransaction} transaction
	   */
	  _updateDOMChildren: function _updateDOMChildren(lastProps, transaction, context) {
	    var nextProps = this._currentElement.props;

	    var lastContent = CONTENT_TYPES[typeof lastProps.children] ? lastProps.children : null;
	    var nextContent = CONTENT_TYPES[typeof nextProps.children] ? nextProps.children : null;

	    var lastHtml = lastProps.dangerouslySetInnerHTML && lastProps.dangerouslySetInnerHTML.__html;
	    var nextHtml = nextProps.dangerouslySetInnerHTML && nextProps.dangerouslySetInnerHTML.__html;

	    // Note the use of `!=` which checks for null or undefined.
	    var lastChildren = lastContent != null ? null : lastProps.children;
	    var nextChildren = nextContent != null ? null : nextProps.children;

	    // If we're switching from children to content/html or vice versa, remove
	    // the old content
	    var lastHasContentOrHtml = lastContent != null || lastHtml != null;
	    var nextHasContentOrHtml = nextContent != null || nextHtml != null;
	    if (lastChildren != null && nextChildren == null) {
	      this.updateChildren(null, transaction, context);
	    } else if (lastHasContentOrHtml && !nextHasContentOrHtml) {
	      this.updateTextContent('');
	    }

	    if (nextContent != null) {
	      if (lastContent !== nextContent) {
	        this.updateTextContent('' + nextContent);
	      }
	    } else if (nextHtml != null) {
	      if (lastHtml !== nextHtml) {
	        BackendIDOperations.updateInnerHTMLByID(this._rootNodeID, nextHtml);
	      }
	    } else if (nextChildren != null) {
	      this.updateChildren(nextChildren, transaction, context);
	    }
	  },

	  /**
	   * Destroys all event registrations for this instance. Does not remove from
	   * the DOM. That must be done by the parent.
	   *
	   * @internal
	   */
	  unmountComponent: function unmountComponent() {
	    this.unmountChildren();
	    ReactBrowserEventEmitter.deleteAllListeners(this._rootNodeID);
	    ReactComponentBrowserEnvironment.unmountIDFromEnvironment(this._rootNodeID);
	    this._rootNodeID = null;
	  }

	};

	ReactPerf.measureMethods(ReactDOMComponent, 'ReactDOMComponent', {
	  mountComponent: 'mountComponent',
	  updateComponent: 'updateComponent'
	});

	assign(ReactDOMComponent.prototype, ReactDOMComponent.Mixin, ReactMultiChild.Mixin);

	ReactDOMComponent.injection = {
	  injectIDOperations: function injectIDOperations(IDOperations) {
	    ReactDOMComponent.BackendIDOperations = BackendIDOperations = IDOperations;
	  }
	};

	module.exports = ReactDOMComponent;

/***/ },
/* 104 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactMultiChild
	 * @typechecks static-only
	 */

	'use strict';

	var ReactComponentEnvironment = __webpack_require__(101);
	var ReactMultiChildUpdateTypes = __webpack_require__(80);

	var ReactReconciler = __webpack_require__(45);
	var ReactChildReconciler = __webpack_require__(105);

	/**
	 * Updating children of a component may trigger recursive updates. The depth is
	 * used to batch recursive updates to render markup more efficiently.
	 *
	 * @type {number}
	 * @private
	 */
	var updateDepth = 0;

	/**
	 * Queue of update configuration objects.
	 *
	 * Each object has a `type` property that is in `ReactMultiChildUpdateTypes`.
	 *
	 * @type {array<object>}
	 * @private
	 */
	var updateQueue = [];

	/**
	 * Queue of markup to be rendered.
	 *
	 * @type {array<string>}
	 * @private
	 */
	var markupQueue = [];

	/**
	 * Enqueues markup to be rendered and inserted at a supplied index.
	 *
	 * @param {string} parentID ID of the parent component.
	 * @param {string} markup Markup that renders into an element.
	 * @param {number} toIndex Destination index.
	 * @private
	 */
	function enqueueMarkup(parentID, markup, toIndex) {
	  // NOTE: Null values reduce hidden classes.
	  updateQueue.push({
	    parentID: parentID,
	    parentNode: null,
	    type: ReactMultiChildUpdateTypes.INSERT_MARKUP,
	    markupIndex: markupQueue.push(markup) - 1,
	    textContent: null,
	    fromIndex: null,
	    toIndex: toIndex
	  });
	}

	/**
	 * Enqueues moving an existing element to another index.
	 *
	 * @param {string} parentID ID of the parent component.
	 * @param {number} fromIndex Source index of the existing element.
	 * @param {number} toIndex Destination index of the element.
	 * @private
	 */
	function enqueueMove(parentID, fromIndex, toIndex) {
	  // NOTE: Null values reduce hidden classes.
	  updateQueue.push({
	    parentID: parentID,
	    parentNode: null,
	    type: ReactMultiChildUpdateTypes.MOVE_EXISTING,
	    markupIndex: null,
	    textContent: null,
	    fromIndex: fromIndex,
	    toIndex: toIndex
	  });
	}

	/**
	 * Enqueues removing an element at an index.
	 *
	 * @param {string} parentID ID of the parent component.
	 * @param {number} fromIndex Index of the element to remove.
	 * @private
	 */
	function enqueueRemove(parentID, fromIndex) {
	  // NOTE: Null values reduce hidden classes.
	  updateQueue.push({
	    parentID: parentID,
	    parentNode: null,
	    type: ReactMultiChildUpdateTypes.REMOVE_NODE,
	    markupIndex: null,
	    textContent: null,
	    fromIndex: fromIndex,
	    toIndex: null
	  });
	}

	/**
	 * Enqueues setting the text content.
	 *
	 * @param {string} parentID ID of the parent component.
	 * @param {string} textContent Text content to set.
	 * @private
	 */
	function enqueueTextContent(parentID, textContent) {
	  // NOTE: Null values reduce hidden classes.
	  updateQueue.push({
	    parentID: parentID,
	    parentNode: null,
	    type: ReactMultiChildUpdateTypes.TEXT_CONTENT,
	    markupIndex: null,
	    textContent: textContent,
	    fromIndex: null,
	    toIndex: null
	  });
	}

	/**
	 * Processes any enqueued updates.
	 *
	 * @private
	 */
	function processQueue() {
	  if (updateQueue.length) {
	    ReactComponentEnvironment.processChildrenUpdates(updateQueue, markupQueue);
	    clearQueue();
	  }
	}

	/**
	 * Clears any enqueued updates.
	 *
	 * @private
	 */
	function clearQueue() {
	  updateQueue.length = 0;
	  markupQueue.length = 0;
	}

	/**
	 * ReactMultiChild are capable of reconciling multiple children.
	 *
	 * @class ReactMultiChild
	 * @internal
	 */
	var ReactMultiChild = {

	  /**
	   * Provides common functionality for components that must reconcile multiple
	   * children. This is used by `ReactDOMComponent` to mount, update, and
	   * unmount child components.
	   *
	   * @lends {ReactMultiChild.prototype}
	   */
	  Mixin: {

	    /**
	     * Generates a "mount image" for each of the supplied children. In the case
	     * of `ReactDOMComponent`, a mount image is a string of markup.
	     *
	     * @param {?object} nestedChildren Nested child maps.
	     * @return {array} An array of mounted representations.
	     * @internal
	     */
	    mountChildren: function mountChildren(nestedChildren, transaction, context) {
	      var children = ReactChildReconciler.instantiateChildren(nestedChildren, transaction, context);
	      this._renderedChildren = children;
	      var mountImages = [];
	      var index = 0;
	      for (var name in children) {
	        if (children.hasOwnProperty(name)) {
	          var child = children[name];
	          // Inlined for performance, see `ReactInstanceHandles.createReactID`.
	          var rootID = this._rootNodeID + name;
	          var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);
	          child._mountIndex = index;
	          mountImages.push(mountImage);
	          index++;
	        }
	      }
	      return mountImages;
	    },

	    /**
	     * Replaces any rendered children with a text content string.
	     *
	     * @param {string} nextContent String of content.
	     * @internal
	     */
	    updateTextContent: function updateTextContent(nextContent) {
	      updateDepth++;
	      var errorThrown = true;
	      try {
	        var prevChildren = this._renderedChildren;
	        // Remove any rendered children.
	        ReactChildReconciler.unmountChildren(prevChildren);
	        // TODO: The setTextContent operation should be enough
	        for (var name in prevChildren) {
	          if (prevChildren.hasOwnProperty(name)) {
	            this._unmountChildByName(prevChildren[name], name);
	          }
	        }
	        // Set new text content.
	        this.setTextContent(nextContent);
	        errorThrown = false;
	      } finally {
	        updateDepth--;
	        if (!updateDepth) {
	          if (errorThrown) {
	            clearQueue();
	          } else {
	            processQueue();
	          }
	        }
	      }
	    },

	    /**
	     * Updates the rendered children with new children.
	     *
	     * @param {?object} nextNestedChildren Nested child maps.
	     * @param {ReactReconcileTransaction} transaction
	     * @internal
	     */
	    updateChildren: function updateChildren(nextNestedChildren, transaction, context) {
	      updateDepth++;
	      var errorThrown = true;
	      try {
	        this._updateChildren(nextNestedChildren, transaction, context);
	        errorThrown = false;
	      } finally {
	        updateDepth--;
	        if (!updateDepth) {
	          if (errorThrown) {
	            clearQueue();
	          } else {
	            processQueue();
	          }
	        }
	      }
	    },

	    /**
	     * Improve performance by isolating this hot code path from the try/catch
	     * block in `updateChildren`.
	     *
	     * @param {?object} nextNestedChildren Nested child maps.
	     * @param {ReactReconcileTransaction} transaction
	     * @final
	     * @protected
	     */
	    _updateChildren: function _updateChildren(nextNestedChildren, transaction, context) {
	      var prevChildren = this._renderedChildren;
	      var nextChildren = ReactChildReconciler.updateChildren(prevChildren, nextNestedChildren, transaction, context);
	      this._renderedChildren = nextChildren;
	      if (!nextChildren && !prevChildren) {
	        return;
	      }
	      var name;
	      // `nextIndex` will increment for each child in `nextChildren`, but
	      // `lastIndex` will be the last index visited in `prevChildren`.
	      var lastIndex = 0;
	      var nextIndex = 0;
	      for (name in nextChildren) {
	        if (!nextChildren.hasOwnProperty(name)) {
	          continue;
	        }
	        var prevChild = prevChildren && prevChildren[name];
	        var nextChild = nextChildren[name];
	        if (prevChild === nextChild) {
	          this.moveChild(prevChild, nextIndex, lastIndex);
	          lastIndex = Math.max(prevChild._mountIndex, lastIndex);
	          prevChild._mountIndex = nextIndex;
	        } else {
	          if (prevChild) {
	            // Update `lastIndex` before `_mountIndex` gets unset by unmounting.
	            lastIndex = Math.max(prevChild._mountIndex, lastIndex);
	            this._unmountChildByName(prevChild, name);
	          }
	          // The child must be instantiated before it's mounted.
	          this._mountChildByNameAtIndex(nextChild, name, nextIndex, transaction, context);
	        }
	        nextIndex++;
	      }
	      // Remove children that are no longer present.
	      for (name in prevChildren) {
	        if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
	          this._unmountChildByName(prevChildren[name], name);
	        }
	      }
	    },

	    /**
	     * Unmounts all rendered children. This should be used to clean up children
	     * when this component is unmounted.
	     *
	     * @internal
	     */
	    unmountChildren: function unmountChildren() {
	      var renderedChildren = this._renderedChildren;
	      ReactChildReconciler.unmountChildren(renderedChildren);
	      this._renderedChildren = null;
	    },

	    /**
	     * Moves a child component to the supplied index.
	     *
	     * @param {ReactComponent} child Component to move.
	     * @param {number} toIndex Destination index of the element.
	     * @param {number} lastIndex Last index visited of the siblings of `child`.
	     * @protected
	     */
	    moveChild: function moveChild(child, toIndex, lastIndex) {
	      // If the index of `child` is less than `lastIndex`, then it needs to
	      // be moved. Otherwise, we do not need to move it because a child will be
	      // inserted or moved before `child`.
	      if (child._mountIndex < lastIndex) {
	        enqueueMove(this._rootNodeID, child._mountIndex, toIndex);
	      }
	    },

	    /**
	     * Creates a child component.
	     *
	     * @param {ReactComponent} child Component to create.
	     * @param {string} mountImage Markup to insert.
	     * @protected
	     */
	    createChild: function createChild(child, mountImage) {
	      enqueueMarkup(this._rootNodeID, mountImage, child._mountIndex);
	    },

	    /**
	     * Removes a child component.
	     *
	     * @param {ReactComponent} child Child to remove.
	     * @protected
	     */
	    removeChild: function removeChild(child) {
	      enqueueRemove(this._rootNodeID, child._mountIndex);
	    },

	    /**
	     * Sets this text content string.
	     *
	     * @param {string} textContent Text content to set.
	     * @protected
	     */
	    setTextContent: function setTextContent(textContent) {
	      enqueueTextContent(this._rootNodeID, textContent);
	    },

	    /**
	     * Mounts a child with the supplied name.
	     *
	     * NOTE: This is part of `updateChildren` and is here for readability.
	     *
	     * @param {ReactComponent} child Component to mount.
	     * @param {string} name Name of the child.
	     * @param {number} index Index at which to insert the child.
	     * @param {ReactReconcileTransaction} transaction
	     * @private
	     */
	    _mountChildByNameAtIndex: function _mountChildByNameAtIndex(child, name, index, transaction, context) {
	      // Inlined for performance, see `ReactInstanceHandles.createReactID`.
	      var rootID = this._rootNodeID + name;
	      var mountImage = ReactReconciler.mountComponent(child, rootID, transaction, context);
	      child._mountIndex = index;
	      this.createChild(child, mountImage);
	    },

	    /**
	     * Unmounts a rendered child by name.
	     *
	     * NOTE: This is part of `updateChildren` and is here for readability.
	     *
	     * @param {ReactComponent} child Component to unmount.
	     * @param {string} name Name of the child in `this._renderedChildren`.
	     * @private
	     */
	    _unmountChildByName: function _unmountChildByName(child, name) {
	      this.removeChild(child);
	      child._mountIndex = null;
	    }

	  }

	};

	module.exports = ReactMultiChild;

/***/ },
/* 105 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactChildReconciler
	 * @typechecks static-only
	 */

	'use strict';

	var ReactReconciler = __webpack_require__(45);

	var flattenChildren = __webpack_require__(106);
	var instantiateReactComponent = __webpack_require__(99);
	var shouldUpdateReactComponent = __webpack_require__(102);

	/**
	 * ReactChildReconciler provides helpers for initializing or updating a set of
	 * children. Its output is suitable for passing it onto ReactMultiChild which
	 * does diffed reordering and insertion.
	 */
	var ReactChildReconciler = {

	  /**
	   * Generates a "mount image" for each of the supplied children. In the case
	   * of `ReactDOMComponent`, a mount image is a string of markup.
	   *
	   * @param {?object} nestedChildNodes Nested child maps.
	   * @return {?object} A set of child instances.
	   * @internal
	   */
	  instantiateChildren: function instantiateChildren(nestedChildNodes, transaction, context) {
	    var children = flattenChildren(nestedChildNodes);
	    for (var name in children) {
	      if (children.hasOwnProperty(name)) {
	        var child = children[name];
	        // The rendered children must be turned into instances as they're
	        // mounted.
	        var childInstance = instantiateReactComponent(child, null);
	        children[name] = childInstance;
	      }
	    }
	    return children;
	  },

	  /**
	   * Updates the rendered children and returns a new set of children.
	   *
	   * @param {?object} prevChildren Previously initialized set of children.
	   * @param {?object} nextNestedChildNodes Nested child maps.
	   * @param {ReactReconcileTransaction} transaction
	   * @param {object} context
	   * @return {?object} A new set of child instances.
	   * @internal
	   */
	  updateChildren: function updateChildren(prevChildren, nextNestedChildNodes, transaction, context) {
	    // We currently don't have a way to track moves here but if we use iterators
	    // instead of for..in we can zip the iterators and check if an item has
	    // moved.
	    // TODO: If nothing has changed, return the prevChildren object so that we
	    // can quickly bailout if nothing has changed.
	    var nextChildren = flattenChildren(nextNestedChildNodes);
	    if (!nextChildren && !prevChildren) {
	      return null;
	    }
	    var name;
	    for (name in nextChildren) {
	      if (!nextChildren.hasOwnProperty(name)) {
	        continue;
	      }
	      var prevChild = prevChildren && prevChildren[name];
	      var prevElement = prevChild && prevChild._currentElement;
	      var nextElement = nextChildren[name];
	      if (shouldUpdateReactComponent(prevElement, nextElement)) {
	        ReactReconciler.receiveComponent(prevChild, nextElement, transaction, context);
	        nextChildren[name] = prevChild;
	      } else {
	        if (prevChild) {
	          ReactReconciler.unmountComponent(prevChild, name);
	        }
	        // The child must be instantiated before it's mounted.
	        var nextChildInstance = instantiateReactComponent(nextElement, null);
	        nextChildren[name] = nextChildInstance;
	      }
	    }
	    // Unmount children that are no longer present.
	    for (name in prevChildren) {
	      if (prevChildren.hasOwnProperty(name) && !(nextChildren && nextChildren.hasOwnProperty(name))) {
	        ReactReconciler.unmountComponent(prevChildren[name]);
	      }
	    }
	    return nextChildren;
	  },

	  /**
	   * Unmounts all rendered children. This should be used to clean up children
	   * when this component is unmounted.
	   *
	   * @param {?object} renderedChildren Previously initialized set of children.
	   * @internal
	   */
	  unmountChildren: function unmountChildren(renderedChildren) {
	    for (var name in renderedChildren) {
	      var renderedChild = renderedChildren[name];
	      ReactReconciler.unmountComponent(renderedChild);
	    }
	  }

	};

	module.exports = ReactChildReconciler;

/***/ },
/* 106 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule flattenChildren
	 */

	'use strict';

	var traverseAllChildren = __webpack_require__(34);
	var warning = __webpack_require__(31);

	/**
	 * @param {function} traverseContext Context passed through traversal.
	 * @param {?ReactComponent} child React child component.
	 * @param {!string} name String name of key path to child.
	 */
	function flattenSingleChildIntoContext(traverseContext, child, name) {
	  // We found a component instance.
	  var result = traverseContext;
	  var keyUnique = !result.hasOwnProperty(name);
	  if ("production" !== process.env.NODE_ENV) {
	    "production" !== process.env.NODE_ENV ? warning(keyUnique, 'flattenChildren(...): Encountered two children with the same key, ' + '`%s`. Child keys must be unique; when two children share a key, only ' + 'the first child will be used.', name) : null;
	  }
	  if (keyUnique && child != null) {
	    result[name] = child;
	  }
	}

	/**
	 * Flattens children that are typically specified as `props.children`. Any null
	 * children will not be included in the resulting object.
	 * @return {!object} flattened children keyed by name.
	 */
	function flattenChildren(children) {
	  if (children == null) {
	    return children;
	  }
	  var result = {};
	  traverseAllChildren(children, flattenSingleChildIntoContext, result);
	  return result;
	}

	module.exports = flattenChildren;

/***/ },
/* 107 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDefaultInjection
	 */

	'use strict';

	var BeforeInputEventPlugin = __webpack_require__(108);
	var ChangeEventPlugin = __webpack_require__(116);
	var ClientReactRootIndex = __webpack_require__(118);
	var DefaultEventPluginOrder = __webpack_require__(119);
	var EnterLeaveEventPlugin = __webpack_require__(120);
	var ExecutionEnvironment = __webpack_require__(67);
	var HTMLDOMPropertyConfig = __webpack_require__(124);
	var MobileSafariClickEventPlugin = __webpack_require__(125);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactComponentBrowserEnvironment = __webpack_require__(63);
	var ReactDefaultBatchingStrategy = __webpack_require__(128);
	var ReactDOMComponent = __webpack_require__(103);
	var ReactDOMButton = __webpack_require__(129);
	var ReactDOMForm = __webpack_require__(132);
	var ReactDOMImg = __webpack_require__(134);
	var ReactDOMIDOperations = __webpack_require__(64);
	var ReactDOMIframe = __webpack_require__(135);
	var ReactDOMInput = __webpack_require__(136);
	var ReactDOMOption = __webpack_require__(139);
	var ReactDOMSelect = __webpack_require__(140);
	var ReactDOMTextarea = __webpack_require__(141);
	var ReactDOMTextComponent = __webpack_require__(58);
	var ReactElement = __webpack_require__(27);
	var ReactEventListener = __webpack_require__(142);
	var ReactInjection = __webpack_require__(145);
	var ReactInstanceHandles = __webpack_require__(35);
	var ReactMount = __webpack_require__(83);
	var ReactReconcileTransaction = __webpack_require__(146);
	var SelectEventPlugin = __webpack_require__(152);
	var ServerReactRootIndex = __webpack_require__(154);
	var SimpleEventPlugin = __webpack_require__(155);
	var SVGDOMPropertyConfig = __webpack_require__(164);

	var createFullPageComponent = __webpack_require__(165);

	function autoGenerateWrapperClass(type) {
	  return ReactClass.createClass({
	    tagName: type.toUpperCase(),
	    render: function render() {
	      return new ReactElement(type, null, null, null, null, this.props);
	    }
	  });
	}

	function inject() {
	  ReactInjection.EventEmitter.injectReactEventListener(ReactEventListener);

	  /**
	   * Inject modules for resolving DOM hierarchy and plugin ordering.
	   */
	  ReactInjection.EventPluginHub.injectEventPluginOrder(DefaultEventPluginOrder);
	  ReactInjection.EventPluginHub.injectInstanceHandle(ReactInstanceHandles);
	  ReactInjection.EventPluginHub.injectMount(ReactMount);

	  /**
	   * Some important event plugins included by default (without having to require
	   * them).
	   */
	  ReactInjection.EventPluginHub.injectEventPluginsByName({
	    SimpleEventPlugin: SimpleEventPlugin,
	    EnterLeaveEventPlugin: EnterLeaveEventPlugin,
	    ChangeEventPlugin: ChangeEventPlugin,
	    MobileSafariClickEventPlugin: MobileSafariClickEventPlugin,
	    SelectEventPlugin: SelectEventPlugin,
	    BeforeInputEventPlugin: BeforeInputEventPlugin
	  });

	  ReactInjection.NativeComponent.injectGenericComponentClass(ReactDOMComponent);

	  ReactInjection.NativeComponent.injectTextComponentClass(ReactDOMTextComponent);

	  ReactInjection.NativeComponent.injectAutoWrapper(autoGenerateWrapperClass);

	  // This needs to happen before createFullPageComponent() otherwise the mixin
	  // won't be included.
	  ReactInjection.Class.injectMixin(ReactBrowserComponentMixin);

	  ReactInjection.NativeComponent.injectComponentClasses({
	    'button': ReactDOMButton,
	    'form': ReactDOMForm,
	    'iframe': ReactDOMIframe,
	    'img': ReactDOMImg,
	    'input': ReactDOMInput,
	    'option': ReactDOMOption,
	    'select': ReactDOMSelect,
	    'textarea': ReactDOMTextarea,

	    'html': createFullPageComponent('html'),
	    'head': createFullPageComponent('head'),
	    'body': createFullPageComponent('body')
	  });

	  ReactInjection.DOMProperty.injectDOMPropertyConfig(HTMLDOMPropertyConfig);
	  ReactInjection.DOMProperty.injectDOMPropertyConfig(SVGDOMPropertyConfig);

	  ReactInjection.EmptyComponent.injectEmptyComponent('noscript');

	  ReactInjection.Updates.injectReconcileTransaction(ReactReconcileTransaction);
	  ReactInjection.Updates.injectBatchingStrategy(ReactDefaultBatchingStrategy);

	  ReactInjection.RootIndex.injectCreateReactRootIndex(ExecutionEnvironment.canUseDOM ? ClientReactRootIndex.createReactRootIndex : ServerReactRootIndex.createReactRootIndex);

	  ReactInjection.Component.injectEnvironment(ReactComponentBrowserEnvironment);
	  ReactInjection.DOMComponent.injectIDOperations(ReactDOMIDOperations);

	  if ("production" !== process.env.NODE_ENV) {
	    var url = ExecutionEnvironment.canUseDOM && window.location.href || '';
	    if (/[?&]react_perf\b/.test(url)) {
	      var ReactDefaultPerf = __webpack_require__(166);
	      ReactDefaultPerf.start();
	    }
	  }
	}

	module.exports = {
	  inject: inject
	};

/***/ },
/* 108 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015 Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule BeforeInputEventPlugin
	 * @typechecks static-only
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPropagators = __webpack_require__(109);
	var ExecutionEnvironment = __webpack_require__(67);
	var FallbackCompositionState = __webpack_require__(110);
	var SyntheticCompositionEvent = __webpack_require__(112);
	var SyntheticInputEvent = __webpack_require__(115);

	var keyOf = __webpack_require__(55);

	var END_KEYCODES = [9, 13, 27, 32]; // Tab, Return, Esc, Space
	var START_KEYCODE = 229;

	var canUseCompositionEvent = ExecutionEnvironment.canUseDOM && 'CompositionEvent' in window;

	var documentMode = null;
	if (ExecutionEnvironment.canUseDOM && 'documentMode' in document) {
	  documentMode = document.documentMode;
	}

	// Webkit offers a very useful `textInput` event that can be used to
	// directly represent `beforeInput`. The IE `textinput` event is not as
	// useful, so we don't use it.
	var canUseTextInputEvent = ExecutionEnvironment.canUseDOM && 'TextEvent' in window && !documentMode && !isPresto();

	// In IE9+, we have access to composition events, but the data supplied
	// by the native compositionend event may be incorrect. Japanese ideographic
	// spaces, for instance (\u3000) are not recorded correctly.
	var useFallbackCompositionData = ExecutionEnvironment.canUseDOM && (!canUseCompositionEvent || documentMode && documentMode > 8 && documentMode <= 11);

	/**
	 * Opera <= 12 includes TextEvent in window, but does not fire
	 * text input events. Rely on keypress instead.
	 */
	function isPresto() {
	  var opera = window.opera;
	  return typeof opera === 'object' && typeof opera.version === 'function' && parseInt(opera.version(), 10) <= 12;
	}

	var SPACEBAR_CODE = 32;
	var SPACEBAR_CHAR = String.fromCharCode(SPACEBAR_CODE);

	var topLevelTypes = EventConstants.topLevelTypes;

	// Events and their corresponding property names.
	var eventTypes = {
	  beforeInput: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onBeforeInput: null }),
	      captured: keyOf({ onBeforeInputCapture: null })
	    },
	    dependencies: [topLevelTypes.topCompositionEnd, topLevelTypes.topKeyPress, topLevelTypes.topTextInput, topLevelTypes.topPaste]
	  },
	  compositionEnd: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onCompositionEnd: null }),
	      captured: keyOf({ onCompositionEndCapture: null })
	    },
	    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionEnd, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
	  },
	  compositionStart: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onCompositionStart: null }),
	      captured: keyOf({ onCompositionStartCapture: null })
	    },
	    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionStart, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
	  },
	  compositionUpdate: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onCompositionUpdate: null }),
	      captured: keyOf({ onCompositionUpdateCapture: null })
	    },
	    dependencies: [topLevelTypes.topBlur, topLevelTypes.topCompositionUpdate, topLevelTypes.topKeyDown, topLevelTypes.topKeyPress, topLevelTypes.topKeyUp, topLevelTypes.topMouseDown]
	  }
	};

	// Track whether we've ever handled a keypress on the space key.
	var hasSpaceKeypress = false;

	/**
	 * Return whether a native keypress event is assumed to be a command.
	 * This is required because Firefox fires `keypress` events for key commands
	 * (cut, copy, select-all, etc.) even though no character is inserted.
	 */
	function isKeypressCommand(nativeEvent) {
	  return (nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) &&
	  // ctrlKey && altKey is equivalent to AltGr, and is not a command.
	  !(nativeEvent.ctrlKey && nativeEvent.altKey);
	}

	/**
	 * Translate native top level events into event types.
	 *
	 * @param {string} topLevelType
	 * @return {object}
	 */
	function getCompositionEventType(topLevelType) {
	  switch (topLevelType) {
	    case topLevelTypes.topCompositionStart:
	      return eventTypes.compositionStart;
	    case topLevelTypes.topCompositionEnd:
	      return eventTypes.compositionEnd;
	    case topLevelTypes.topCompositionUpdate:
	      return eventTypes.compositionUpdate;
	  }
	}

	/**
	 * Does our fallback best-guess model think this event signifies that
	 * composition has begun?
	 *
	 * @param {string} topLevelType
	 * @param {object} nativeEvent
	 * @return {boolean}
	 */
	function isFallbackCompositionStart(topLevelType, nativeEvent) {
	  return topLevelType === topLevelTypes.topKeyDown && nativeEvent.keyCode === START_KEYCODE;
	}

	/**
	 * Does our fallback mode think that this event is the end of composition?
	 *
	 * @param {string} topLevelType
	 * @param {object} nativeEvent
	 * @return {boolean}
	 */
	function isFallbackCompositionEnd(topLevelType, nativeEvent) {
	  switch (topLevelType) {
	    case topLevelTypes.topKeyUp:
	      // Command keys insert or clear IME input.
	      return END_KEYCODES.indexOf(nativeEvent.keyCode) !== -1;
	    case topLevelTypes.topKeyDown:
	      // Expect IME keyCode on each keydown. If we get any other
	      // code we must have exited earlier.
	      return nativeEvent.keyCode !== START_KEYCODE;
	    case topLevelTypes.topKeyPress:
	    case topLevelTypes.topMouseDown:
	    case topLevelTypes.topBlur:
	      // Events are not possible without cancelling IME.
	      return true;
	    default:
	      return false;
	  }
	}

	/**
	 * Google Input Tools provides composition data via a CustomEvent,
	 * with the `data` property populated in the `detail` object. If this
	 * is available on the event object, use it. If not, this is a plain
	 * composition event and we have nothing special to extract.
	 *
	 * @param {object} nativeEvent
	 * @return {?string}
	 */
	function getDataFromCustomEvent(nativeEvent) {
	  var detail = nativeEvent.detail;
	  if (typeof detail === 'object' && 'data' in detail) {
	    return detail.data;
	  }
	  return null;
	}

	// Track the current IME composition fallback object, if any.
	var currentComposition = null;

	/**
	 * @param {string} topLevelType Record from `EventConstants`.
	 * @param {DOMEventTarget} topLevelTarget The listening component root node.
	 * @param {string} topLevelTargetID ID of `topLevelTarget`.
	 * @param {object} nativeEvent Native browser event.
	 * @return {?object} A SyntheticCompositionEvent.
	 */
	function extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	  var eventType;
	  var fallbackData;

	  if (canUseCompositionEvent) {
	    eventType = getCompositionEventType(topLevelType);
	  } else if (!currentComposition) {
	    if (isFallbackCompositionStart(topLevelType, nativeEvent)) {
	      eventType = eventTypes.compositionStart;
	    }
	  } else if (isFallbackCompositionEnd(topLevelType, nativeEvent)) {
	    eventType = eventTypes.compositionEnd;
	  }

	  if (!eventType) {
	    return null;
	  }

	  if (useFallbackCompositionData) {
	    // The current composition is stored statically and must not be
	    // overwritten while composition continues.
	    if (!currentComposition && eventType === eventTypes.compositionStart) {
	      currentComposition = FallbackCompositionState.getPooled(topLevelTarget);
	    } else if (eventType === eventTypes.compositionEnd) {
	      if (currentComposition) {
	        fallbackData = currentComposition.getData();
	      }
	    }
	  }

	  var event = SyntheticCompositionEvent.getPooled(eventType, topLevelTargetID, nativeEvent);

	  if (fallbackData) {
	    // Inject data generated from fallback path into the synthetic event.
	    // This matches the property of native CompositionEventInterface.
	    event.data = fallbackData;
	  } else {
	    var customData = getDataFromCustomEvent(nativeEvent);
	    if (customData !== null) {
	      event.data = customData;
	    }
	  }

	  EventPropagators.accumulateTwoPhaseDispatches(event);
	  return event;
	}

	/**
	 * @param {string} topLevelType Record from `EventConstants`.
	 * @param {object} nativeEvent Native browser event.
	 * @return {?string} The string corresponding to this `beforeInput` event.
	 */
	function getNativeBeforeInputChars(topLevelType, nativeEvent) {
	  switch (topLevelType) {
	    case topLevelTypes.topCompositionEnd:
	      return getDataFromCustomEvent(nativeEvent);
	    case topLevelTypes.topKeyPress:
	      /**
	       * If native `textInput` events are available, our goal is to make
	       * use of them. However, there is a special case: the spacebar key.
	       * In Webkit, preventing default on a spacebar `textInput` event
	       * cancels character insertion, but it *also* causes the browser
	       * to fall back to its default spacebar behavior of scrolling the
	       * page.
	       *
	       * Tracking at:
	       * https://code.google.com/p/chromium/issues/detail?id=355103
	       *
	       * To avoid this issue, use the keypress event as if no `textInput`
	       * event is available.
	       */
	      var which = nativeEvent.which;
	      if (which !== SPACEBAR_CODE) {
	        return null;
	      }

	      hasSpaceKeypress = true;
	      return SPACEBAR_CHAR;

	    case topLevelTypes.topTextInput:
	      // Record the characters to be added to the DOM.
	      var chars = nativeEvent.data;

	      // If it's a spacebar character, assume that we have already handled
	      // it at the keypress level and bail immediately. Android Chrome
	      // doesn't give us keycodes, so we need to blacklist it.
	      if (chars === SPACEBAR_CHAR && hasSpaceKeypress) {
	        return null;
	      }

	      return chars;

	    default:
	      // For other native event types, do nothing.
	      return null;
	  }
	}

	/**
	 * For browsers that do not provide the `textInput` event, extract the
	 * appropriate string to use for SyntheticInputEvent.
	 *
	 * @param {string} topLevelType Record from `EventConstants`.
	 * @param {object} nativeEvent Native browser event.
	 * @return {?string} The fallback string for this `beforeInput` event.
	 */
	function getFallbackBeforeInputChars(topLevelType, nativeEvent) {
	  // If we are currently composing (IME) and using a fallback to do so,
	  // try to extract the composed characters from the fallback object.
	  if (currentComposition) {
	    if (topLevelType === topLevelTypes.topCompositionEnd || isFallbackCompositionEnd(topLevelType, nativeEvent)) {
	      var chars = currentComposition.getData();
	      FallbackCompositionState.release(currentComposition);
	      currentComposition = null;
	      return chars;
	    }
	    return null;
	  }

	  switch (topLevelType) {
	    case topLevelTypes.topPaste:
	      // If a paste event occurs after a keypress, throw out the input
	      // chars. Paste events should not lead to BeforeInput events.
	      return null;
	    case topLevelTypes.topKeyPress:
	      /**
	       * As of v27, Firefox may fire keypress events even when no character
	       * will be inserted. A few possibilities:
	       *
	       * - `which` is `0`. Arrow keys, Esc key, etc.
	       *
	       * - `which` is the pressed key code, but no char is available.
	       *   Ex: 'AltGr + d` in Polish. There is no modified character for
	       *   this key combination and no character is inserted into the
	       *   document, but FF fires the keypress for char code `100` anyway.
	       *   No `input` event will occur.
	       *
	       * - `which` is the pressed key code, but a command combination is
	       *   being used. Ex: `Cmd+C`. No character is inserted, and no
	       *   `input` event will occur.
	       */
	      if (nativeEvent.which && !isKeypressCommand(nativeEvent)) {
	        return String.fromCharCode(nativeEvent.which);
	      }
	      return null;
	    case topLevelTypes.topCompositionEnd:
	      return useFallbackCompositionData ? null : nativeEvent.data;
	    default:
	      return null;
	  }
	}

	/**
	 * Extract a SyntheticInputEvent for `beforeInput`, based on either native
	 * `textInput` or fallback behavior.
	 *
	 * @param {string} topLevelType Record from `EventConstants`.
	 * @param {DOMEventTarget} topLevelTarget The listening component root node.
	 * @param {string} topLevelTargetID ID of `topLevelTarget`.
	 * @param {object} nativeEvent Native browser event.
	 * @return {?object} A SyntheticInputEvent.
	 */
	function extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	  var chars;

	  if (canUseTextInputEvent) {
	    chars = getNativeBeforeInputChars(topLevelType, nativeEvent);
	  } else {
	    chars = getFallbackBeforeInputChars(topLevelType, nativeEvent);
	  }

	  // If no characters are being inserted, no BeforeInput event should
	  // be fired.
	  if (!chars) {
	    return null;
	  }

	  var event = SyntheticInputEvent.getPooled(eventTypes.beforeInput, topLevelTargetID, nativeEvent);

	  event.data = chars;
	  EventPropagators.accumulateTwoPhaseDispatches(event);
	  return event;
	}

	/**
	 * Create an `onBeforeInput` event to match
	 * http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105/#events-inputevents.
	 *
	 * This event plugin is based on the native `textInput` event
	 * available in Chrome, Safari, Opera, and IE. This event fires after
	 * `onKeyPress` and `onCompositionEnd`, but before `onInput`.
	 *
	 * `beforeInput` is spec'd but not implemented in any browsers, and
	 * the `input` event does not provide any useful information about what has
	 * actually been added, contrary to the spec. Thus, `textInput` is the best
	 * available event to identify the characters that have actually been inserted
	 * into the target node.
	 *
	 * This plugin is also responsible for emitting `composition` events, thus
	 * allowing us to share composition fallback code for both `beforeInput` and
	 * `composition` event types.
	 */
	var BeforeInputEventPlugin = {

	  eventTypes: eventTypes,

	  /**
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @see {EventPluginHub.extractEvents}
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	    return [extractCompositionEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent), extractBeforeInputEvent(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent)];
	  }
	};

	module.exports = BeforeInputEventPlugin;

/***/ },
/* 109 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule EventPropagators
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPluginHub = __webpack_require__(85);

	var accumulateInto = __webpack_require__(87);
	var forEachAccumulated = __webpack_require__(88);

	var PropagationPhases = EventConstants.PropagationPhases;
	var getListener = EventPluginHub.getListener;

	/**
	 * Some event types have a notion of different registration names for different
	 * "phases" of propagation. This finds listeners by a given phase.
	 */
	function listenerAtPhase(id, event, propagationPhase) {
	  var registrationName = event.dispatchConfig.phasedRegistrationNames[propagationPhase];
	  return getListener(id, registrationName);
	}

	/**
	 * Tags a `SyntheticEvent` with dispatched listeners. Creating this function
	 * here, allows us to not have to bind or create functions for each event.
	 * Mutating the event's members allows us to not have to create a wrapping
	 * "dispatch" object that pairs the event with the listener.
	 */
	function accumulateDirectionalDispatches(domID, upwards, event) {
	  if ("production" !== process.env.NODE_ENV) {
	    if (!domID) {
	      throw new Error('Dispatching id must not be null');
	    }
	  }
	  var phase = upwards ? PropagationPhases.bubbled : PropagationPhases.captured;
	  var listener = listenerAtPhase(domID, event, phase);
	  if (listener) {
	    event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
	    event._dispatchIDs = accumulateInto(event._dispatchIDs, domID);
	  }
	}

	/**
	 * Collect dispatches (must be entirely collected before dispatching - see unit
	 * tests). Lazily allocate the array to conserve memory.  We must loop through
	 * each event and perform the traversal for each one. We can not perform a
	 * single traversal for the entire collection of events because each event may
	 * have a different target.
	 */
	function accumulateTwoPhaseDispatchesSingle(event) {
	  if (event && event.dispatchConfig.phasedRegistrationNames) {
	    EventPluginHub.injection.getInstanceHandle().traverseTwoPhase(event.dispatchMarker, accumulateDirectionalDispatches, event);
	  }
	}

	/**
	 * Accumulates without regard to direction, does not look for phased
	 * registration names. Same as `accumulateDirectDispatchesSingle` but without
	 * requiring that the `dispatchMarker` be the same as the dispatched ID.
	 */
	function accumulateDispatches(id, ignoredDirection, event) {
	  if (event && event.dispatchConfig.registrationName) {
	    var registrationName = event.dispatchConfig.registrationName;
	    var listener = getListener(id, registrationName);
	    if (listener) {
	      event._dispatchListeners = accumulateInto(event._dispatchListeners, listener);
	      event._dispatchIDs = accumulateInto(event._dispatchIDs, id);
	    }
	  }
	}

	/**
	 * Accumulates dispatches on an `SyntheticEvent`, but only for the
	 * `dispatchMarker`.
	 * @param {SyntheticEvent} event
	 */
	function accumulateDirectDispatchesSingle(event) {
	  if (event && event.dispatchConfig.registrationName) {
	    accumulateDispatches(event.dispatchMarker, null, event);
	  }
	}

	function accumulateTwoPhaseDispatches(events) {
	  forEachAccumulated(events, accumulateTwoPhaseDispatchesSingle);
	}

	function accumulateEnterLeaveDispatches(leave, enter, fromID, toID) {
	  EventPluginHub.injection.getInstanceHandle().traverseEnterLeave(fromID, toID, accumulateDispatches, leave, enter);
	}

	function accumulateDirectDispatches(events) {
	  forEachAccumulated(events, accumulateDirectDispatchesSingle);
	}

	/**
	 * A small set of propagation patterns, each of which will accept a small amount
	 * of information, and generate a set of "dispatch ready event objects" - which
	 * are sets of events that have already been annotated with a set of dispatched
	 * listener functions/ids. The API is designed this way to discourage these
	 * propagation strategies from actually executing the dispatches, since we
	 * always want to collect the entire set of dispatches before executing event a
	 * single one.
	 *
	 * @constructor EventPropagators
	 */
	var EventPropagators = {
	  accumulateTwoPhaseDispatches: accumulateTwoPhaseDispatches,
	  accumulateDirectDispatches: accumulateDirectDispatches,
	  accumulateEnterLeaveDispatches: accumulateEnterLeaveDispatches
	};

	module.exports = EventPropagators;

/***/ },
/* 110 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule FallbackCompositionState
	 * @typechecks static-only
	 */

	'use strict';

	var PooledClass = __webpack_require__(25);

	var assign = __webpack_require__(29);
	var getTextContentAccessor = __webpack_require__(111);

	/**
	 * This helper class stores information about text content of a target node,
	 * allowing comparison of content before and after a given event.
	 *
	 * Identify the node where selection currently begins, then observe
	 * both its text content and its current position in the DOM. Since the
	 * browser may natively replace the target node during composition, we can
	 * use its position to find its replacement.
	 *
	 * @param {DOMEventTarget} root
	 */
	function FallbackCompositionState(root) {
	  this._root = root;
	  this._startText = this.getText();
	  this._fallbackText = null;
	}

	assign(FallbackCompositionState.prototype, {
	  /**
	   * Get current text of input.
	   *
	   * @return {string}
	   */
	  getText: function getText() {
	    if ('value' in this._root) {
	      return this._root.value;
	    }
	    return this._root[getTextContentAccessor()];
	  },

	  /**
	   * Determine the differing substring between the initially stored
	   * text content and the current content.
	   *
	   * @return {string}
	   */
	  getData: function getData() {
	    if (this._fallbackText) {
	      return this._fallbackText;
	    }

	    var start;
	    var startValue = this._startText;
	    var startLength = startValue.length;
	    var end;
	    var endValue = this.getText();
	    var endLength = endValue.length;

	    for (start = 0; start < startLength; start++) {
	      if (startValue[start] !== endValue[start]) {
	        break;
	      }
	    }

	    var minEnd = startLength - start;
	    for (end = 1; end <= minEnd; end++) {
	      if (startValue[startLength - end] !== endValue[endLength - end]) {
	        break;
	      }
	    }

	    var sliceTail = end > 1 ? 1 - end : undefined;
	    this._fallbackText = endValue.slice(start, sliceTail);
	    return this._fallbackText;
	  }
	});

	PooledClass.addPoolingTo(FallbackCompositionState);

	module.exports = FallbackCompositionState;

/***/ },
/* 111 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getTextContentAccessor
	 */

	'use strict';

	var ExecutionEnvironment = __webpack_require__(67);

	var contentKey = null;

	/**
	 * Gets the key used to access text content on a DOM node.
	 *
	 * @return {?string} Key used to access text content.
	 * @internal
	 */
	function getTextContentAccessor() {
	  if (!contentKey && ExecutionEnvironment.canUseDOM) {
	    // Prefer textContent to innerText because many browsers support both but
	    // SVG <text> elements don't support innerText even when <div> does.
	    contentKey = 'textContent' in document.documentElement ? 'textContent' : 'innerText';
	  }
	  return contentKey;
	}

	module.exports = getTextContentAccessor;

/***/ },
/* 112 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticCompositionEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticEvent = __webpack_require__(113);

	/**
	 * @interface Event
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/#events-compositionevents
	 */
	var CompositionEventInterface = {
	  data: null
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticCompositionEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticEvent.augmentClass(SyntheticCompositionEvent, CompositionEventInterface);

	module.exports = SyntheticCompositionEvent;

/***/ },
/* 113 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticEvent
	 * @typechecks static-only
	 */

	'use strict';

	var PooledClass = __webpack_require__(25);

	var assign = __webpack_require__(29);
	var emptyFunction = __webpack_require__(32);
	var getEventTarget = __webpack_require__(114);

	/**
	 * @interface Event
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var EventInterface = {
	  type: null,
	  target: getEventTarget,
	  // currentTarget is set when dispatching; no use in copying it here
	  currentTarget: emptyFunction.thatReturnsNull,
	  eventPhase: null,
	  bubbles: null,
	  cancelable: null,
	  timeStamp: function timeStamp(event) {
	    return event.timeStamp || Date.now();
	  },
	  defaultPrevented: null,
	  isTrusted: null
	};

	/**
	 * Synthetic events are dispatched by event plugins, typically in response to a
	 * top-level event delegation handler.
	 *
	 * These systems should generally use pooling to reduce the frequency of garbage
	 * collection. The system should check `isPersistent` to determine whether the
	 * event should be released into the pool after being dispatched. Users that
	 * need a persisted event should invoke `persist`.
	 *
	 * Synthetic events (and subclasses) implement the DOM Level 3 Events API by
	 * normalizing browser quirks. Subclasses do not necessarily have to implement a
	 * DOM interface; custom application-specific events can also subclass this.
	 *
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 */
	function SyntheticEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  this.dispatchConfig = dispatchConfig;
	  this.dispatchMarker = dispatchMarker;
	  this.nativeEvent = nativeEvent;

	  var Interface = this.constructor.Interface;
	  for (var propName in Interface) {
	    if (!Interface.hasOwnProperty(propName)) {
	      continue;
	    }
	    var normalize = Interface[propName];
	    if (normalize) {
	      this[propName] = normalize(nativeEvent);
	    } else {
	      this[propName] = nativeEvent[propName];
	    }
	  }

	  var defaultPrevented = nativeEvent.defaultPrevented != null ? nativeEvent.defaultPrevented : nativeEvent.returnValue === false;
	  if (defaultPrevented) {
	    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
	  } else {
	    this.isDefaultPrevented = emptyFunction.thatReturnsFalse;
	  }
	  this.isPropagationStopped = emptyFunction.thatReturnsFalse;
	}

	assign(SyntheticEvent.prototype, {

	  preventDefault: function preventDefault() {
	    this.defaultPrevented = true;
	    var event = this.nativeEvent;
	    if (event.preventDefault) {
	      event.preventDefault();
	    } else {
	      event.returnValue = false;
	    }
	    this.isDefaultPrevented = emptyFunction.thatReturnsTrue;
	  },

	  stopPropagation: function stopPropagation() {
	    var event = this.nativeEvent;
	    if (event.stopPropagation) {
	      event.stopPropagation();
	    } else {
	      event.cancelBubble = true;
	    }
	    this.isPropagationStopped = emptyFunction.thatReturnsTrue;
	  },

	  /**
	   * We release all dispatched `SyntheticEvent`s after each event loop, adding
	   * them back into the pool. This allows a way to hold onto a reference that
	   * won't be added back into the pool.
	   */
	  persist: function persist() {
	    this.isPersistent = emptyFunction.thatReturnsTrue;
	  },

	  /**
	   * Checks if this event should be released back into the pool.
	   *
	   * @return {boolean} True if this should not be released, false otherwise.
	   */
	  isPersistent: emptyFunction.thatReturnsFalse,

	  /**
	   * `PooledClass` looks for `destructor` on each instance it releases.
	   */
	  destructor: function destructor() {
	    var Interface = this.constructor.Interface;
	    for (var propName in Interface) {
	      this[propName] = null;
	    }
	    this.dispatchConfig = null;
	    this.dispatchMarker = null;
	    this.nativeEvent = null;
	  }

	});

	SyntheticEvent.Interface = EventInterface;

	/**
	 * Helper to reduce boilerplate when creating subclasses.
	 *
	 * @param {function} Class
	 * @param {?object} Interface
	 */
	SyntheticEvent.augmentClass = function (Class, Interface) {
	  var Super = this;

	  var prototype = Object.create(Super.prototype);
	  assign(prototype, Class.prototype);
	  Class.prototype = prototype;
	  Class.prototype.constructor = Class;

	  Class.Interface = assign({}, Super.Interface, Interface);
	  Class.augmentClass = Super.augmentClass;

	  PooledClass.addPoolingTo(Class, PooledClass.threeArgumentPooler);
	};

	PooledClass.addPoolingTo(SyntheticEvent, PooledClass.threeArgumentPooler);

	module.exports = SyntheticEvent;

/***/ },
/* 114 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getEventTarget
	 * @typechecks static-only
	 */

	'use strict';

	/**
	 * Gets the target node from a native browser event by accounting for
	 * inconsistencies in browser DOM APIs.
	 *
	 * @param {object} nativeEvent Native browser event.
	 * @return {DOMEventTarget} Target node.
	 */
	function getEventTarget(nativeEvent) {
	  var target = nativeEvent.target || nativeEvent.srcElement || window;
	  // Safari may fire events on text nodes (Node.TEXT_NODE is 3).
	  // @see http://www.quirksmode.org/js/events_properties.html
	  return target.nodeType === 3 ? target.parentNode : target;
	}

	module.exports = getEventTarget;

/***/ },
/* 115 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticInputEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticEvent = __webpack_require__(113);

	/**
	 * @interface Event
	 * @see http://www.w3.org/TR/2013/WD-DOM-Level-3-Events-20131105
	 *      /#events-inputevents
	 */
	var InputEventInterface = {
	  data: null
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticInputEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticEvent.augmentClass(SyntheticInputEvent, InputEventInterface);

	module.exports = SyntheticInputEvent;

/***/ },
/* 116 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ChangeEventPlugin
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPluginHub = __webpack_require__(85);
	var EventPropagators = __webpack_require__(109);
	var ExecutionEnvironment = __webpack_require__(67);
	var ReactUpdates = __webpack_require__(42);
	var SyntheticEvent = __webpack_require__(113);

	var isEventSupported = __webpack_require__(91);
	var isTextInputElement = __webpack_require__(117);
	var keyOf = __webpack_require__(55);

	var topLevelTypes = EventConstants.topLevelTypes;

	var eventTypes = {
	  change: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onChange: null }),
	      captured: keyOf({ onChangeCapture: null })
	    },
	    dependencies: [topLevelTypes.topBlur, topLevelTypes.topChange, topLevelTypes.topClick, topLevelTypes.topFocus, topLevelTypes.topInput, topLevelTypes.topKeyDown, topLevelTypes.topKeyUp, topLevelTypes.topSelectionChange]
	  }
	};

	/**
	 * For IE shims
	 */
	var activeElement = null;
	var activeElementID = null;
	var activeElementValue = null;
	var activeElementValueProp = null;

	/**
	 * SECTION: handle `change` event
	 */
	function shouldUseChangeEvent(elem) {
	  return elem.nodeName === 'SELECT' || elem.nodeName === 'INPUT' && elem.type === 'file';
	}

	var doesChangeEventBubble = false;
	if (ExecutionEnvironment.canUseDOM) {
	  // See `handleChange` comment below
	  doesChangeEventBubble = isEventSupported('change') && (!('documentMode' in document) || document.documentMode > 8);
	}

	function manualDispatchChangeEvent(nativeEvent) {
	  var event = SyntheticEvent.getPooled(eventTypes.change, activeElementID, nativeEvent);
	  EventPropagators.accumulateTwoPhaseDispatches(event);

	  // If change and propertychange bubbled, we'd just bind to it like all the
	  // other events and have it go through ReactBrowserEventEmitter. Since it
	  // doesn't, we manually listen for the events and so we have to enqueue and
	  // process the abstract event manually.
	  //
	  // Batching is necessary here in order to ensure that all event handlers run
	  // before the next rerender (including event handlers attached to ancestor
	  // elements instead of directly on the input). Without this, controlled
	  // components don't work properly in conjunction with event bubbling because
	  // the component is rerendered and the value reverted before all the event
	  // handlers can run. See https://github.com/facebook/react/issues/708.
	  ReactUpdates.batchedUpdates(runEventInBatch, event);
	}

	function runEventInBatch(event) {
	  EventPluginHub.enqueueEvents(event);
	  EventPluginHub.processEventQueue();
	}

	function startWatchingForChangeEventIE8(target, targetID) {
	  activeElement = target;
	  activeElementID = targetID;
	  activeElement.attachEvent('onchange', manualDispatchChangeEvent);
	}

	function stopWatchingForChangeEventIE8() {
	  if (!activeElement) {
	    return;
	  }
	  activeElement.detachEvent('onchange', manualDispatchChangeEvent);
	  activeElement = null;
	  activeElementID = null;
	}

	function getTargetIDForChangeEvent(topLevelType, topLevelTarget, topLevelTargetID) {
	  if (topLevelType === topLevelTypes.topChange) {
	    return topLevelTargetID;
	  }
	}
	function handleEventsForChangeEventIE8(topLevelType, topLevelTarget, topLevelTargetID) {
	  if (topLevelType === topLevelTypes.topFocus) {
	    // stopWatching() should be a noop here but we call it just in case we
	    // missed a blur event somehow.
	    stopWatchingForChangeEventIE8();
	    startWatchingForChangeEventIE8(topLevelTarget, topLevelTargetID);
	  } else if (topLevelType === topLevelTypes.topBlur) {
	    stopWatchingForChangeEventIE8();
	  }
	}

	/**
	 * SECTION: handle `input` event
	 */
	var isInputEventSupported = false;
	if (ExecutionEnvironment.canUseDOM) {
	  // IE9 claims to support the input event but fails to trigger it when
	  // deleting text, so we ignore its input events
	  isInputEventSupported = isEventSupported('input') && (!('documentMode' in document) || document.documentMode > 9);
	}

	/**
	 * (For old IE.) Replacement getter/setter for the `value` property that gets
	 * set on the active element.
	 */
	var newValueProp = {
	  get: function get() {
	    return activeElementValueProp.get.call(this);
	  },
	  set: function set(val) {
	    // Cast to a string so we can do equality checks.
	    activeElementValue = '' + val;
	    activeElementValueProp.set.call(this, val);
	  }
	};

	/**
	 * (For old IE.) Starts tracking propertychange events on the passed-in element
	 * and override the value property so that we can distinguish user events from
	 * value changes in JS.
	 */
	function startWatchingForValueChange(target, targetID) {
	  activeElement = target;
	  activeElementID = targetID;
	  activeElementValue = target.value;
	  activeElementValueProp = Object.getOwnPropertyDescriptor(target.constructor.prototype, 'value');

	  Object.defineProperty(activeElement, 'value', newValueProp);
	  activeElement.attachEvent('onpropertychange', handlePropertyChange);
	}

	/**
	 * (For old IE.) Removes the event listeners from the currently-tracked element,
	 * if any exists.
	 */
	function stopWatchingForValueChange() {
	  if (!activeElement) {
	    return;
	  }

	  // delete restores the original property definition
	  delete activeElement.value;
	  activeElement.detachEvent('onpropertychange', handlePropertyChange);

	  activeElement = null;
	  activeElementID = null;
	  activeElementValue = null;
	  activeElementValueProp = null;
	}

	/**
	 * (For old IE.) Handles a propertychange event, sending a `change` event if
	 * the value of the active element has changed.
	 */
	function handlePropertyChange(nativeEvent) {
	  if (nativeEvent.propertyName !== 'value') {
	    return;
	  }
	  var value = nativeEvent.srcElement.value;
	  if (value === activeElementValue) {
	    return;
	  }
	  activeElementValue = value;

	  manualDispatchChangeEvent(nativeEvent);
	}

	/**
	 * If a `change` event should be fired, returns the target's ID.
	 */
	function getTargetIDForInputEvent(topLevelType, topLevelTarget, topLevelTargetID) {
	  if (topLevelType === topLevelTypes.topInput) {
	    // In modern browsers (i.e., not IE8 or IE9), the input event is exactly
	    // what we want so fall through here and trigger an abstract event
	    return topLevelTargetID;
	  }
	}

	// For IE8 and IE9.
	function handleEventsForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
	  if (topLevelType === topLevelTypes.topFocus) {
	    // In IE8, we can capture almost all .value changes by adding a
	    // propertychange handler and looking for events with propertyName
	    // equal to 'value'
	    // In IE9, propertychange fires for most input events but is buggy and
	    // doesn't fire when text is deleted, but conveniently, selectionchange
	    // appears to fire in all of the remaining cases so we catch those and
	    // forward the event if the value has changed
	    // In either case, we don't want to call the event handler if the value
	    // is changed from JS so we redefine a setter for `.value` that updates
	    // our activeElementValue variable, allowing us to ignore those changes
	    //
	    // stopWatching() should be a noop here but we call it just in case we
	    // missed a blur event somehow.
	    stopWatchingForValueChange();
	    startWatchingForValueChange(topLevelTarget, topLevelTargetID);
	  } else if (topLevelType === topLevelTypes.topBlur) {
	    stopWatchingForValueChange();
	  }
	}

	// For IE8 and IE9.
	function getTargetIDForInputEventIE(topLevelType, topLevelTarget, topLevelTargetID) {
	  if (topLevelType === topLevelTypes.topSelectionChange || topLevelType === topLevelTypes.topKeyUp || topLevelType === topLevelTypes.topKeyDown) {
	    // On the selectionchange event, the target is just document which isn't
	    // helpful for us so just check activeElement instead.
	    //
	    // 99% of the time, keydown and keyup aren't necessary. IE8 fails to fire
	    // propertychange on the first input event after setting `value` from a
	    // script and fires only keydown, keypress, keyup. Catching keyup usually
	    // gets it and catching keydown lets us fire an event for the first
	    // keystroke if user does a key repeat (it'll be a little delayed: right
	    // before the second keystroke). Other input methods (e.g., paste) seem to
	    // fire selectionchange normally.
	    if (activeElement && activeElement.value !== activeElementValue) {
	      activeElementValue = activeElement.value;
	      return activeElementID;
	    }
	  }
	}

	/**
	 * SECTION: handle `click` event
	 */
	function shouldUseClickEvent(elem) {
	  // Use the `click` event to detect changes to checkbox and radio inputs.
	  // This approach works across all browsers, whereas `change` does not fire
	  // until `blur` in IE8.
	  return elem.nodeName === 'INPUT' && (elem.type === 'checkbox' || elem.type === 'radio');
	}

	function getTargetIDForClickEvent(topLevelType, topLevelTarget, topLevelTargetID) {
	  if (topLevelType === topLevelTypes.topClick) {
	    return topLevelTargetID;
	  }
	}

	/**
	 * This plugin creates an `onChange` event that normalizes change events
	 * across form elements. This event fires at a time when it's possible to
	 * change the element's value without seeing a flicker.
	 *
	 * Supported elements are:
	 * - input (see `isTextInputElement`)
	 * - textarea
	 * - select
	 */
	var ChangeEventPlugin = {

	  eventTypes: eventTypes,

	  /**
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @see {EventPluginHub.extractEvents}
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {

	    var getTargetIDFunc, handleEventFunc;
	    if (shouldUseChangeEvent(topLevelTarget)) {
	      if (doesChangeEventBubble) {
	        getTargetIDFunc = getTargetIDForChangeEvent;
	      } else {
	        handleEventFunc = handleEventsForChangeEventIE8;
	      }
	    } else if (isTextInputElement(topLevelTarget)) {
	      if (isInputEventSupported) {
	        getTargetIDFunc = getTargetIDForInputEvent;
	      } else {
	        getTargetIDFunc = getTargetIDForInputEventIE;
	        handleEventFunc = handleEventsForInputEventIE;
	      }
	    } else if (shouldUseClickEvent(topLevelTarget)) {
	      getTargetIDFunc = getTargetIDForClickEvent;
	    }

	    if (getTargetIDFunc) {
	      var targetID = getTargetIDFunc(topLevelType, topLevelTarget, topLevelTargetID);
	      if (targetID) {
	        var event = SyntheticEvent.getPooled(eventTypes.change, targetID, nativeEvent);
	        EventPropagators.accumulateTwoPhaseDispatches(event);
	        return event;
	      }
	    }

	    if (handleEventFunc) {
	      handleEventFunc(topLevelType, topLevelTarget, topLevelTargetID);
	    }
	  }

	};

	module.exports = ChangeEventPlugin;

/***/ },
/* 117 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule isTextInputElement
	 */

	'use strict';

	/**
	 * @see http://www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary
	 */
	var supportedInputTypes = {
	  'color': true,
	  'date': true,
	  'datetime': true,
	  'datetime-local': true,
	  'email': true,
	  'month': true,
	  'number': true,
	  'password': true,
	  'range': true,
	  'search': true,
	  'tel': true,
	  'text': true,
	  'time': true,
	  'url': true,
	  'week': true
	};

	function isTextInputElement(elem) {
	  return elem && (elem.nodeName === 'INPUT' && supportedInputTypes[elem.type] || elem.nodeName === 'TEXTAREA');
	}

	module.exports = isTextInputElement;

/***/ },
/* 118 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ClientReactRootIndex
	 * @typechecks
	 */

	'use strict';

	var nextReactRootIndex = 0;

	var ClientReactRootIndex = {
	  createReactRootIndex: function createReactRootIndex() {
	    return nextReactRootIndex++;
	  }
	};

	module.exports = ClientReactRootIndex;

/***/ },
/* 119 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule DefaultEventPluginOrder
	 */

	'use strict';

	var keyOf = __webpack_require__(55);

	/**
	 * Module that is injectable into `EventPluginHub`, that specifies a
	 * deterministic ordering of `EventPlugin`s. A convenient way to reason about
	 * plugins, without having to package every one of them. This is better than
	 * having plugins be ordered in the same order that they are injected because
	 * that ordering would be influenced by the packaging order.
	 * `ResponderEventPlugin` must occur before `SimpleEventPlugin` so that
	 * preventing default on events is convenient in `SimpleEventPlugin` handlers.
	 */
	var DefaultEventPluginOrder = [keyOf({ ResponderEventPlugin: null }), keyOf({ SimpleEventPlugin: null }), keyOf({ TapEventPlugin: null }), keyOf({ EnterLeaveEventPlugin: null }), keyOf({ ChangeEventPlugin: null }), keyOf({ SelectEventPlugin: null }), keyOf({ BeforeInputEventPlugin: null }), keyOf({ AnalyticsEventPlugin: null }), keyOf({ MobileSafariClickEventPlugin: null })];

	module.exports = DefaultEventPluginOrder;

/***/ },
/* 120 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule EnterLeaveEventPlugin
	 * @typechecks static-only
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPropagators = __webpack_require__(109);
	var SyntheticMouseEvent = __webpack_require__(121);

	var ReactMount = __webpack_require__(83);
	var keyOf = __webpack_require__(55);

	var topLevelTypes = EventConstants.topLevelTypes;
	var getFirstReactDOM = ReactMount.getFirstReactDOM;

	var eventTypes = {
	  mouseEnter: {
	    registrationName: keyOf({ onMouseEnter: null }),
	    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
	  },
	  mouseLeave: {
	    registrationName: keyOf({ onMouseLeave: null }),
	    dependencies: [topLevelTypes.topMouseOut, topLevelTypes.topMouseOver]
	  }
	};

	var extractedEvents = [null, null];

	var EnterLeaveEventPlugin = {

	  eventTypes: eventTypes,

	  /**
	   * For almost every interaction we care about, there will be both a top-level
	   * `mouseover` and `mouseout` event that occurs. Only use `mouseout` so that
	   * we do not extract duplicate events. However, moving the mouse into the
	   * browser from outside will not fire a `mouseout` event. In this case, we use
	   * the `mouseover` top-level event.
	   *
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @see {EventPluginHub.extractEvents}
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	    if (topLevelType === topLevelTypes.topMouseOver && (nativeEvent.relatedTarget || nativeEvent.fromElement)) {
	      return null;
	    }
	    if (topLevelType !== topLevelTypes.topMouseOut && topLevelType !== topLevelTypes.topMouseOver) {
	      // Must not be a mouse in or mouse out - ignoring.
	      return null;
	    }

	    var win;
	    if (topLevelTarget.window === topLevelTarget) {
	      // `topLevelTarget` is probably a window object.
	      win = topLevelTarget;
	    } else {
	      // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
	      var doc = topLevelTarget.ownerDocument;
	      if (doc) {
	        win = doc.defaultView || doc.parentWindow;
	      } else {
	        win = window;
	      }
	    }

	    var from, to;
	    if (topLevelType === topLevelTypes.topMouseOut) {
	      from = topLevelTarget;
	      to = getFirstReactDOM(nativeEvent.relatedTarget || nativeEvent.toElement) || win;
	    } else {
	      from = win;
	      to = topLevelTarget;
	    }

	    if (from === to) {
	      // Nothing pertains to our managed components.
	      return null;
	    }

	    var fromID = from ? ReactMount.getID(from) : '';
	    var toID = to ? ReactMount.getID(to) : '';

	    var leave = SyntheticMouseEvent.getPooled(eventTypes.mouseLeave, fromID, nativeEvent);
	    leave.type = 'mouseleave';
	    leave.target = from;
	    leave.relatedTarget = to;

	    var enter = SyntheticMouseEvent.getPooled(eventTypes.mouseEnter, toID, nativeEvent);
	    enter.type = 'mouseenter';
	    enter.target = to;
	    enter.relatedTarget = from;

	    EventPropagators.accumulateEnterLeaveDispatches(leave, enter, fromID, toID);

	    extractedEvents[0] = leave;
	    extractedEvents[1] = enter;

	    return extractedEvents;
	  }

	};

	module.exports = EnterLeaveEventPlugin;

/***/ },
/* 121 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticMouseEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticUIEvent = __webpack_require__(122);
	var ViewportMetrics = __webpack_require__(90);

	var getEventModifierState = __webpack_require__(123);

	/**
	 * @interface MouseEvent
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var MouseEventInterface = {
	  screenX: null,
	  screenY: null,
	  clientX: null,
	  clientY: null,
	  ctrlKey: null,
	  shiftKey: null,
	  altKey: null,
	  metaKey: null,
	  getModifierState: getEventModifierState,
	  button: function button(event) {
	    // Webkit, Firefox, IE9+
	    // which:  1 2 3
	    // button: 0 1 2 (standard)
	    var button = event.button;
	    if ('which' in event) {
	      return button;
	    }
	    // IE<9
	    // which:  undefined
	    // button: 0 0 0
	    // button: 1 4 2 (onmouseup)
	    return button === 2 ? 2 : button === 4 ? 1 : 0;
	  },
	  buttons: null,
	  relatedTarget: function relatedTarget(event) {
	    return event.relatedTarget || (event.fromElement === event.srcElement ? event.toElement : event.fromElement);
	  },
	  // "Proprietary" Interface.
	  pageX: function pageX(event) {
	    return 'pageX' in event ? event.pageX : event.clientX + ViewportMetrics.currentScrollLeft;
	  },
	  pageY: function pageY(event) {
	    return 'pageY' in event ? event.pageY : event.clientY + ViewportMetrics.currentScrollTop;
	  }
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticMouseEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticUIEvent.augmentClass(SyntheticMouseEvent, MouseEventInterface);

	module.exports = SyntheticMouseEvent;

/***/ },
/* 122 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticUIEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticEvent = __webpack_require__(113);

	var getEventTarget = __webpack_require__(114);

	/**
	 * @interface UIEvent
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var UIEventInterface = {
	  view: function view(event) {
	    if (event.view) {
	      return event.view;
	    }

	    var target = getEventTarget(event);
	    if (target != null && target.window === target) {
	      // target is a window object
	      return target;
	    }

	    var doc = target.ownerDocument;
	    // TODO: Figure out why `ownerDocument` is sometimes undefined in IE8.
	    if (doc) {
	      return doc.defaultView || doc.parentWindow;
	    } else {
	      return window;
	    }
	  },
	  detail: function detail(event) {
	    return event.detail || 0;
	  }
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticEvent}
	 */
	function SyntheticUIEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticEvent.augmentClass(SyntheticUIEvent, UIEventInterface);

	module.exports = SyntheticUIEvent;

/***/ },
/* 123 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getEventModifierState
	 * @typechecks static-only
	 */

	'use strict';

	/**
	 * Translation from modifier key to the associated property in the event.
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/#keys-Modifiers
	 */

	var modifierKeyToProp = {
	  'Alt': 'altKey',
	  'Control': 'ctrlKey',
	  'Meta': 'metaKey',
	  'Shift': 'shiftKey'
	};

	// IE8 does not implement getModifierState so we simply map it to the only
	// modifier keys exposed by the event itself, does not support Lock-keys.
	// Currently, all major browsers except Chrome seems to support Lock-keys.
	function modifierStateGetter(keyArg) {
	  /*jshint validthis:true */
	  var syntheticEvent = this;
	  var nativeEvent = syntheticEvent.nativeEvent;
	  if (nativeEvent.getModifierState) {
	    return nativeEvent.getModifierState(keyArg);
	  }
	  var keyProp = modifierKeyToProp[keyArg];
	  return keyProp ? !!nativeEvent[keyProp] : false;
	}

	function getEventModifierState(nativeEvent) {
	  return modifierStateGetter;
	}

	module.exports = getEventModifierState;

/***/ },
/* 124 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule HTMLDOMPropertyConfig
	 */

	/*jslint bitwise: true*/

	'use strict';

	var DOMProperty = __webpack_require__(60);
	var ExecutionEnvironment = __webpack_require__(67);

	var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;
	var MUST_USE_PROPERTY = DOMProperty.injection.MUST_USE_PROPERTY;
	var HAS_BOOLEAN_VALUE = DOMProperty.injection.HAS_BOOLEAN_VALUE;
	var HAS_SIDE_EFFECTS = DOMProperty.injection.HAS_SIDE_EFFECTS;
	var HAS_NUMERIC_VALUE = DOMProperty.injection.HAS_NUMERIC_VALUE;
	var HAS_POSITIVE_NUMERIC_VALUE = DOMProperty.injection.HAS_POSITIVE_NUMERIC_VALUE;
	var HAS_OVERLOADED_BOOLEAN_VALUE = DOMProperty.injection.HAS_OVERLOADED_BOOLEAN_VALUE;

	var hasSVG;
	if (ExecutionEnvironment.canUseDOM) {
	  var implementation = document.implementation;
	  hasSVG = implementation && implementation.hasFeature && implementation.hasFeature('http://www.w3.org/TR/SVG11/feature#BasicStructure', '1.1');
	}

	var HTMLDOMPropertyConfig = {
	  isCustomAttribute: RegExp.prototype.test.bind(/^(data|aria)-[a-z_][a-z\d_.\-]*$/),
	  Properties: {
	    /**
	     * Standard Properties
	     */
	    accept: null,
	    acceptCharset: null,
	    accessKey: null,
	    action: null,
	    allowFullScreen: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
	    allowTransparency: MUST_USE_ATTRIBUTE,
	    alt: null,
	    async: HAS_BOOLEAN_VALUE,
	    autoComplete: null,
	    // autoFocus is polyfilled/normalized by AutoFocusMixin
	    // autoFocus: HAS_BOOLEAN_VALUE,
	    autoPlay: HAS_BOOLEAN_VALUE,
	    cellPadding: null,
	    cellSpacing: null,
	    charSet: MUST_USE_ATTRIBUTE,
	    checked: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    classID: MUST_USE_ATTRIBUTE,
	    // To set className on SVG elements, it's necessary to use .setAttribute;
	    // this works on HTML elements too in all browsers except IE8. Conveniently,
	    // IE8 doesn't support SVG and so we can simply use the attribute in
	    // browsers that support SVG and the property in browsers that don't,
	    // regardless of whether the element is HTML or SVG.
	    className: hasSVG ? MUST_USE_ATTRIBUTE : MUST_USE_PROPERTY,
	    cols: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
	    colSpan: null,
	    content: null,
	    contentEditable: null,
	    contextMenu: MUST_USE_ATTRIBUTE,
	    controls: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    coords: null,
	    crossOrigin: null,
	    data: null, // For `<object />` acts as `src`.
	    dateTime: MUST_USE_ATTRIBUTE,
	    defer: HAS_BOOLEAN_VALUE,
	    dir: null,
	    disabled: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
	    download: HAS_OVERLOADED_BOOLEAN_VALUE,
	    draggable: null,
	    encType: null,
	    form: MUST_USE_ATTRIBUTE,
	    formAction: MUST_USE_ATTRIBUTE,
	    formEncType: MUST_USE_ATTRIBUTE,
	    formMethod: MUST_USE_ATTRIBUTE,
	    formNoValidate: HAS_BOOLEAN_VALUE,
	    formTarget: MUST_USE_ATTRIBUTE,
	    frameBorder: MUST_USE_ATTRIBUTE,
	    headers: null,
	    height: MUST_USE_ATTRIBUTE,
	    hidden: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
	    high: null,
	    href: null,
	    hrefLang: null,
	    htmlFor: null,
	    httpEquiv: null,
	    icon: null,
	    id: MUST_USE_PROPERTY,
	    label: null,
	    lang: null,
	    list: MUST_USE_ATTRIBUTE,
	    loop: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    low: null,
	    manifest: MUST_USE_ATTRIBUTE,
	    marginHeight: null,
	    marginWidth: null,
	    max: null,
	    maxLength: MUST_USE_ATTRIBUTE,
	    media: MUST_USE_ATTRIBUTE,
	    mediaGroup: null,
	    method: null,
	    min: null,
	    multiple: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    muted: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    name: null,
	    noValidate: HAS_BOOLEAN_VALUE,
	    open: HAS_BOOLEAN_VALUE,
	    optimum: null,
	    pattern: null,
	    placeholder: null,
	    poster: null,
	    preload: null,
	    radioGroup: null,
	    readOnly: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    rel: null,
	    required: HAS_BOOLEAN_VALUE,
	    role: MUST_USE_ATTRIBUTE,
	    rows: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
	    rowSpan: null,
	    sandbox: null,
	    scope: null,
	    scoped: HAS_BOOLEAN_VALUE,
	    scrolling: null,
	    seamless: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
	    selected: MUST_USE_PROPERTY | HAS_BOOLEAN_VALUE,
	    shape: null,
	    size: MUST_USE_ATTRIBUTE | HAS_POSITIVE_NUMERIC_VALUE,
	    sizes: MUST_USE_ATTRIBUTE,
	    span: HAS_POSITIVE_NUMERIC_VALUE,
	    spellCheck: null,
	    src: null,
	    srcDoc: MUST_USE_PROPERTY,
	    srcSet: MUST_USE_ATTRIBUTE,
	    start: HAS_NUMERIC_VALUE,
	    step: null,
	    style: null,
	    tabIndex: null,
	    target: null,
	    title: null,
	    type: null,
	    useMap: null,
	    value: MUST_USE_PROPERTY | HAS_SIDE_EFFECTS,
	    width: MUST_USE_ATTRIBUTE,
	    wmode: MUST_USE_ATTRIBUTE,

	    /**
	     * Non-standard Properties
	     */
	    // autoCapitalize and autoCorrect are supported in Mobile Safari for
	    // keyboard hints.
	    autoCapitalize: null,
	    autoCorrect: null,
	    // itemProp, itemScope, itemType are for
	    // Microdata support. See http://schema.org/docs/gs.html
	    itemProp: MUST_USE_ATTRIBUTE,
	    itemScope: MUST_USE_ATTRIBUTE | HAS_BOOLEAN_VALUE,
	    itemType: MUST_USE_ATTRIBUTE,
	    // itemID and itemRef are for Microdata support as well but
	    // only specified in the the WHATWG spec document. See
	    // https://html.spec.whatwg.org/multipage/microdata.html#microdata-dom-api
	    itemID: MUST_USE_ATTRIBUTE,
	    itemRef: MUST_USE_ATTRIBUTE,
	    // property is supported for OpenGraph in meta tags.
	    property: null,
	    // IE-only attribute that controls focus behavior
	    unselectable: MUST_USE_ATTRIBUTE
	  },
	  DOMAttributeNames: {
	    acceptCharset: 'accept-charset',
	    className: 'class',
	    htmlFor: 'for',
	    httpEquiv: 'http-equiv'
	  },
	  DOMPropertyNames: {
	    autoCapitalize: 'autocapitalize',
	    autoComplete: 'autocomplete',
	    autoCorrect: 'autocorrect',
	    autoFocus: 'autofocus',
	    autoPlay: 'autoplay',
	    // `encoding` is equivalent to `enctype`, IE8 lacks an `enctype` setter.
	    // http://www.w3.org/TR/html5/forms.html#dom-fs-encoding
	    encType: 'encoding',
	    hrefLang: 'hreflang',
	    radioGroup: 'radiogroup',
	    spellCheck: 'spellcheck',
	    srcDoc: 'srcdoc',
	    srcSet: 'srcset'
	  }
	};

	module.exports = HTMLDOMPropertyConfig;

/***/ },
/* 125 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule MobileSafariClickEventPlugin
	 * @typechecks static-only
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);

	var emptyFunction = __webpack_require__(32);

	var topLevelTypes = EventConstants.topLevelTypes;

	/**
	 * Mobile Safari does not fire properly bubble click events on non-interactive
	 * elements, which means delegated click listeners do not fire. The workaround
	 * for this bug involves attaching an empty click listener on the target node.
	 *
	 * This particular plugin works around the bug by attaching an empty click
	 * listener on `touchstart` (which does fire on every element).
	 */
	var MobileSafariClickEventPlugin = {

	  eventTypes: null,

	  /**
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @see {EventPluginHub.extractEvents}
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	    if (topLevelType === topLevelTypes.topTouchStart) {
	      var target = nativeEvent.target;
	      if (target && !target.onclick) {
	        target.onclick = emptyFunction;
	      }
	    }
	  }

	};

	module.exports = MobileSafariClickEventPlugin;

/***/ },
/* 126 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactBrowserComponentMixin
	 */

	'use strict';

	var findDOMNode = __webpack_require__(127);

	var ReactBrowserComponentMixin = {
	  /**
	   * Returns the DOM node rendered by this component.
	   *
	   * @return {DOMElement} The root node of this component.
	   * @final
	   * @protected
	   */
	  getDOMNode: function getDOMNode() {
	    return findDOMNode(this);
	  }
	};

	module.exports = ReactBrowserComponentMixin;

/***/ },
/* 127 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule findDOMNode
	 * @typechecks static-only
	 */

	'use strict';

	var ReactCurrentOwner = __webpack_require__(33);
	var ReactInstanceMap = __webpack_require__(41);
	var ReactMount = __webpack_require__(83);

	var invariant = __webpack_require__(23);
	var isNode = __webpack_require__(97);
	var warning = __webpack_require__(31);

	/**
	 * Returns the DOM node rendered by this element.
	 *
	 * @param {ReactComponent|DOMElement} componentOrElement
	 * @return {DOMElement} The root node of this element.
	 */
	function findDOMNode(componentOrElement) {
	  if ("production" !== process.env.NODE_ENV) {
	    var owner = ReactCurrentOwner.current;
	    if (owner !== null) {
	      "production" !== process.env.NODE_ENV ? warning(owner._warnedAboutRefsInRender, '%s is accessing getDOMNode or findDOMNode inside its render(). ' + 'render() should be a pure function of props and state. It should ' + 'never access something that requires stale data from the previous ' + 'render, such as refs. Move this logic to componentDidMount and ' + 'componentDidUpdate instead.', owner.getName() || 'A component') : null;
	      owner._warnedAboutRefsInRender = true;
	    }
	  }
	  if (componentOrElement == null) {
	    return null;
	  }
	  if (isNode(componentOrElement)) {
	    return componentOrElement;
	  }
	  if (ReactInstanceMap.has(componentOrElement)) {
	    return ReactMount.getNodeFromInstance(componentOrElement);
	  }
	  "production" !== process.env.NODE_ENV ? invariant(componentOrElement.render == null || typeof componentOrElement.render !== 'function', 'Component (with keys: %s) contains `render` method ' + 'but is not mounted in the DOM', Object.keys(componentOrElement)) : invariant(componentOrElement.render == null || typeof componentOrElement.render !== 'function');
	  "production" !== process.env.NODE_ENV ? invariant(false, 'Element appears to be neither ReactComponent nor DOMNode (keys: %s)', Object.keys(componentOrElement)) : invariant(false);
	}

	module.exports = findDOMNode;

/***/ },
/* 128 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDefaultBatchingStrategy
	 */

	'use strict';

	var ReactUpdates = __webpack_require__(42);
	var Transaction = __webpack_require__(52);

	var assign = __webpack_require__(29);
	var emptyFunction = __webpack_require__(32);

	var RESET_BATCHED_UPDATES = {
	  initialize: emptyFunction,
	  close: function close() {
	    ReactDefaultBatchingStrategy.isBatchingUpdates = false;
	  }
	};

	var FLUSH_BATCHED_UPDATES = {
	  initialize: emptyFunction,
	  close: ReactUpdates.flushBatchedUpdates.bind(ReactUpdates)
	};

	var TRANSACTION_WRAPPERS = [FLUSH_BATCHED_UPDATES, RESET_BATCHED_UPDATES];

	function ReactDefaultBatchingStrategyTransaction() {
	  this.reinitializeTransaction();
	}

	assign(ReactDefaultBatchingStrategyTransaction.prototype, Transaction.Mixin, {
	  getTransactionWrappers: function getTransactionWrappers() {
	    return TRANSACTION_WRAPPERS;
	  }
	});

	var transaction = new ReactDefaultBatchingStrategyTransaction();

	var ReactDefaultBatchingStrategy = {
	  isBatchingUpdates: false,

	  /**
	   * Call the provided function in a context within which calls to `setState`
	   * and friends are batched such that components aren't updated unnecessarily.
	   */
	  batchedUpdates: function batchedUpdates(callback, a, b, c, d) {
	    var alreadyBatchingUpdates = ReactDefaultBatchingStrategy.isBatchingUpdates;

	    ReactDefaultBatchingStrategy.isBatchingUpdates = true;

	    // The code is written this way to avoid extra allocations
	    if (alreadyBatchingUpdates) {
	      callback(a, b, c, d);
	    } else {
	      transaction.perform(callback, null, a, b, c, d);
	    }
	  }
	};

	module.exports = ReactDefaultBatchingStrategy;

/***/ },
/* 129 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMButton
	 */

	'use strict';

	var AutoFocusMixin = __webpack_require__(130);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);

	var keyMirror = __webpack_require__(22);

	var button = ReactElement.createFactory('button');

	var mouseListenerNames = keyMirror({
	  onClick: true,
	  onDoubleClick: true,
	  onMouseDown: true,
	  onMouseMove: true,
	  onMouseUp: true,
	  onClickCapture: true,
	  onDoubleClickCapture: true,
	  onMouseDownCapture: true,
	  onMouseMoveCapture: true,
	  onMouseUpCapture: true
	});

	/**
	 * Implements a <button> native component that does not receive mouse events
	 * when `disabled` is set.
	 */
	var ReactDOMButton = ReactClass.createClass({
	  displayName: 'ReactDOMButton',
	  tagName: 'BUTTON',

	  mixins: [AutoFocusMixin, ReactBrowserComponentMixin],

	  render: function render() {
	    var props = {};

	    // Copy the props; except the mouse listeners if we're disabled
	    for (var key in this.props) {
	      if (this.props.hasOwnProperty(key) && (!this.props.disabled || !mouseListenerNames[key])) {
	        props[key] = this.props[key];
	      }
	    }

	    return button(props, this.props.children);
	  }

	});

	module.exports = ReactDOMButton;

/***/ },
/* 130 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule AutoFocusMixin
	 * @typechecks static-only
	 */

	'use strict';

	var focusNode = __webpack_require__(131);

	var AutoFocusMixin = {
	  componentDidMount: function componentDidMount() {
	    if (this.props.autoFocus) {
	      focusNode(this.getDOMNode());
	    }
	  }
	};

	module.exports = AutoFocusMixin;

/***/ },
/* 131 */
/***/ function(module, exports) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule focusNode
	 */

	"use strict";

	/**
	 * @param {DOMElement} node input/textarea to focus
	 */
	function focusNode(node) {
	  // IE8 can throw "Can't move focus to the control because it is invisible,
	  // not enabled, or of a type that does not accept the focus." for all kinds of
	  // reasons that are too expensive and fragile to test.
	  try {
	    node.focus();
	  } catch (e) {}
	}

	module.exports = focusNode;

/***/ },
/* 132 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMForm
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var LocalEventTrapMixin = __webpack_require__(133);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);

	var form = ReactElement.createFactory('form');

	/**
	 * Since onSubmit doesn't bubble OR capture on the top level in IE8, we need
	 * to capture it on the <form> element itself. There are lots of hacks we could
	 * do to accomplish this, but the most reliable is to make <form> a
	 * composite component and use `componentDidMount` to attach the event handlers.
	 */
	var ReactDOMForm = ReactClass.createClass({
	  displayName: 'ReactDOMForm',
	  tagName: 'FORM',

	  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],

	  render: function render() {
	    // TODO: Instead of using `ReactDOM` directly, we should use JSX. However,
	    // `jshint` fails to parse JSX so in order for linting to work in the open
	    // source repo, we need to just use `ReactDOM.form`.
	    return form(this.props);
	  },

	  componentDidMount: function componentDidMount() {
	    this.trapBubbledEvent(EventConstants.topLevelTypes.topReset, 'reset');
	    this.trapBubbledEvent(EventConstants.topLevelTypes.topSubmit, 'submit');
	  }
	});

	module.exports = ReactDOMForm;

/***/ },
/* 133 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule LocalEventTrapMixin
	 */

	'use strict';

	var ReactBrowserEventEmitter = __webpack_require__(84);

	var accumulateInto = __webpack_require__(87);
	var forEachAccumulated = __webpack_require__(88);
	var invariant = __webpack_require__(23);

	function remove(event) {
	  event.remove();
	}

	var LocalEventTrapMixin = {
	  trapBubbledEvent: function trapBubbledEvent(topLevelType, handlerBaseName) {
	    "production" !== process.env.NODE_ENV ? invariant(this.isMounted(), 'Must be mounted to trap events') : invariant(this.isMounted());
	    // If a component renders to null or if another component fatals and causes
	    // the state of the tree to be corrupted, `node` here can be null.
	    var node = this.getDOMNode();
	    "production" !== process.env.NODE_ENV ? invariant(node, 'LocalEventTrapMixin.trapBubbledEvent(...): Requires node to be rendered.') : invariant(node);
	    var listener = ReactBrowserEventEmitter.trapBubbledEvent(topLevelType, handlerBaseName, node);
	    this._localEventListeners = accumulateInto(this._localEventListeners, listener);
	  },

	  // trapCapturedEvent would look nearly identical. We don't implement that
	  // method because it isn't currently needed.

	  componentWillUnmount: function componentWillUnmount() {
	    if (this._localEventListeners) {
	      forEachAccumulated(this._localEventListeners, remove);
	    }
	  }
	};

	module.exports = LocalEventTrapMixin;

/***/ },
/* 134 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMImg
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var LocalEventTrapMixin = __webpack_require__(133);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);

	var img = ReactElement.createFactory('img');

	/**
	 * Since onLoad doesn't bubble OR capture on the top level in IE8, we need to
	 * capture it on the <img> element itself. There are lots of hacks we could do
	 * to accomplish this, but the most reliable is to make <img> a composite
	 * component and use `componentDidMount` to attach the event handlers.
	 */
	var ReactDOMImg = ReactClass.createClass({
	  displayName: 'ReactDOMImg',
	  tagName: 'IMG',

	  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],

	  render: function render() {
	    return img(this.props);
	  },

	  componentDidMount: function componentDidMount() {
	    this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load');
	    this.trapBubbledEvent(EventConstants.topLevelTypes.topError, 'error');
	  }
	});

	module.exports = ReactDOMImg;

/***/ },
/* 135 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMIframe
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var LocalEventTrapMixin = __webpack_require__(133);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);

	var iframe = ReactElement.createFactory('iframe');

	/**
	 * Since onLoad doesn't bubble OR capture on the top level in IE8, we need to
	 * capture it on the <iframe> element itself. There are lots of hacks we could
	 * do to accomplish this, but the most reliable is to make <iframe> a composite
	 * component and use `componentDidMount` to attach the event handlers.
	 */
	var ReactDOMIframe = ReactClass.createClass({
	  displayName: 'ReactDOMIframe',
	  tagName: 'IFRAME',

	  mixins: [ReactBrowserComponentMixin, LocalEventTrapMixin],

	  render: function render() {
	    return iframe(this.props);
	  },

	  componentDidMount: function componentDidMount() {
	    this.trapBubbledEvent(EventConstants.topLevelTypes.topLoad, 'load');
	  }
	});

	module.exports = ReactDOMIframe;

/***/ },
/* 136 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMInput
	 */

	'use strict';

	var AutoFocusMixin = __webpack_require__(130);
	var DOMPropertyOperations = __webpack_require__(59);
	var LinkedValueUtils = __webpack_require__(137);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);
	var ReactMount = __webpack_require__(83);
	var ReactUpdates = __webpack_require__(42);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);

	var input = ReactElement.createFactory('input');

	var instancesByReactID = {};

	function forceUpdateIfMounted() {
	  /*jshint validthis:true */
	  if (this.isMounted()) {
	    this.forceUpdate();
	  }
	}

	/**
	 * Implements an <input> native component that allows setting these optional
	 * props: `checked`, `value`, `defaultChecked`, and `defaultValue`.
	 *
	 * If `checked` or `value` are not supplied (or null/undefined), user actions
	 * that affect the checked state or value will trigger updates to the element.
	 *
	 * If they are supplied (and not null/undefined), the rendered element will not
	 * trigger updates to the element. Instead, the props must change in order for
	 * the rendered element to be updated.
	 *
	 * The rendered element will be initialized as unchecked (or `defaultChecked`)
	 * with an empty value (or `defaultValue`).
	 *
	 * @see http://www.w3.org/TR/2012/WD-html5-20121025/the-input-element.html
	 */
	var ReactDOMInput = ReactClass.createClass({
	  displayName: 'ReactDOMInput',
	  tagName: 'INPUT',

	  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],

	  getInitialState: function getInitialState() {
	    var defaultValue = this.props.defaultValue;
	    return {
	      initialChecked: this.props.defaultChecked || false,
	      initialValue: defaultValue != null ? defaultValue : null
	    };
	  },

	  render: function render() {
	    // Clone `this.props` so we don't mutate the input.
	    var props = assign({}, this.props);

	    props.defaultChecked = null;
	    props.defaultValue = null;

	    var value = LinkedValueUtils.getValue(this);
	    props.value = value != null ? value : this.state.initialValue;

	    var checked = LinkedValueUtils.getChecked(this);
	    props.checked = checked != null ? checked : this.state.initialChecked;

	    props.onChange = this._handleChange;

	    return input(props, this.props.children);
	  },

	  componentDidMount: function componentDidMount() {
	    var id = ReactMount.getID(this.getDOMNode());
	    instancesByReactID[id] = this;
	  },

	  componentWillUnmount: function componentWillUnmount() {
	    var rootNode = this.getDOMNode();
	    var id = ReactMount.getID(rootNode);
	    delete instancesByReactID[id];
	  },

	  componentDidUpdate: function componentDidUpdate(prevProps, prevState, prevContext) {
	    var rootNode = this.getDOMNode();
	    if (this.props.checked != null) {
	      DOMPropertyOperations.setValueForProperty(rootNode, 'checked', this.props.checked || false);
	    }

	    var value = LinkedValueUtils.getValue(this);
	    if (value != null) {
	      // Cast `value` to a string to ensure the value is set correctly. While
	      // browsers typically do this as necessary, jsdom doesn't.
	      DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);
	    }
	  },

	  _handleChange: function _handleChange(event) {
	    var returnValue;
	    var onChange = LinkedValueUtils.getOnChange(this);
	    if (onChange) {
	      returnValue = onChange.call(this, event);
	    }
	    // Here we use asap to wait until all updates have propagated, which
	    // is important when using controlled components within layers:
	    // https://github.com/facebook/react/issues/1698
	    ReactUpdates.asap(forceUpdateIfMounted, this);

	    var name = this.props.name;
	    if (this.props.type === 'radio' && name != null) {
	      var rootNode = this.getDOMNode();
	      var queryRoot = rootNode;

	      while (queryRoot.parentNode) {
	        queryRoot = queryRoot.parentNode;
	      }

	      // If `rootNode.form` was non-null, then we could try `form.elements`,
	      // but that sometimes behaves strangely in IE8. We could also try using
	      // `form.getElementsByName`, but that will only return direct children
	      // and won't include inputs that use the HTML5 `form=` attribute. Since
	      // the input might not even be in a form, let's just use the global
	      // `querySelectorAll` to ensure we don't miss anything.
	      var group = queryRoot.querySelectorAll('input[name=' + JSON.stringify('' + name) + '][type="radio"]');

	      for (var i = 0, groupLen = group.length; i < groupLen; i++) {
	        var otherNode = group[i];
	        if (otherNode === rootNode || otherNode.form !== rootNode.form) {
	          continue;
	        }
	        var otherID = ReactMount.getID(otherNode);
	        "production" !== process.env.NODE_ENV ? invariant(otherID, 'ReactDOMInput: Mixing React and non-React radio inputs with the ' + 'same `name` is not supported.') : invariant(otherID);
	        var otherInstance = instancesByReactID[otherID];
	        "production" !== process.env.NODE_ENV ? invariant(otherInstance, 'ReactDOMInput: Unknown radio button ID %s.', otherID) : invariant(otherInstance);
	        // If this is a controlled radio button group, forcing the input that
	        // was previously checked to update will cause it to be come re-checked
	        // as appropriate.
	        ReactUpdates.asap(forceUpdateIfMounted, otherInstance);
	      }
	    }

	    return returnValue;
	  }

	});

	module.exports = ReactDOMInput;

/***/ },
/* 137 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule LinkedValueUtils
	 * @typechecks static-only
	 */

	'use strict';

	var ReactPropTypes = __webpack_require__(138);

	var invariant = __webpack_require__(23);

	var hasReadOnlyValue = {
	  'button': true,
	  'checkbox': true,
	  'image': true,
	  'hidden': true,
	  'radio': true,
	  'reset': true,
	  'submit': true
	};

	function _assertSingleLink(input) {
	  "production" !== process.env.NODE_ENV ? invariant(input.props.checkedLink == null || input.props.valueLink == null, 'Cannot provide a checkedLink and a valueLink. If you want to use ' + 'checkedLink, you probably don\'t want to use valueLink and vice versa.') : invariant(input.props.checkedLink == null || input.props.valueLink == null);
	}
	function _assertValueLink(input) {
	  _assertSingleLink(input);
	  "production" !== process.env.NODE_ENV ? invariant(input.props.value == null && input.props.onChange == null, 'Cannot provide a valueLink and a value or onChange event. If you want ' + 'to use value or onChange, you probably don\'t want to use valueLink.') : invariant(input.props.value == null && input.props.onChange == null);
	}

	function _assertCheckedLink(input) {
	  _assertSingleLink(input);
	  "production" !== process.env.NODE_ENV ? invariant(input.props.checked == null && input.props.onChange == null, 'Cannot provide a checkedLink and a checked property or onChange event. ' + 'If you want to use checked or onChange, you probably don\'t want to ' + 'use checkedLink') : invariant(input.props.checked == null && input.props.onChange == null);
	}

	/**
	 * @param {SyntheticEvent} e change event to handle
	 */
	function _handleLinkedValueChange(e) {
	  /*jshint validthis:true */
	  this.props.valueLink.requestChange(e.target.value);
	}

	/**
	  * @param {SyntheticEvent} e change event to handle
	  */
	function _handleLinkedCheckChange(e) {
	  /*jshint validthis:true */
	  this.props.checkedLink.requestChange(e.target.checked);
	}

	/**
	 * Provide a linked `value` attribute for controlled forms. You should not use
	 * this outside of the ReactDOM controlled form components.
	 */
	var LinkedValueUtils = {
	  Mixin: {
	    propTypes: {
	      value: function value(props, propName, componentName) {
	        if (!props[propName] || hasReadOnlyValue[props.type] || props.onChange || props.readOnly || props.disabled) {
	          return null;
	        }
	        return new Error('You provided a `value` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultValue`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
	      },
	      checked: function checked(props, propName, componentName) {
	        if (!props[propName] || props.onChange || props.readOnly || props.disabled) {
	          return null;
	        }
	        return new Error('You provided a `checked` prop to a form field without an ' + '`onChange` handler. This will render a read-only field. If ' + 'the field should be mutable use `defaultChecked`. Otherwise, ' + 'set either `onChange` or `readOnly`.');
	      },
	      onChange: ReactPropTypes.func
	    }
	  },

	  /**
	   * @param {ReactComponent} input Form component
	   * @return {*} current value of the input either from value prop or link.
	   */
	  getValue: function getValue(input) {
	    if (input.props.valueLink) {
	      _assertValueLink(input);
	      return input.props.valueLink.value;
	    }
	    return input.props.value;
	  },

	  /**
	   * @param {ReactComponent} input Form component
	   * @return {*} current checked status of the input either from checked prop
	   *             or link.
	   */
	  getChecked: function getChecked(input) {
	    if (input.props.checkedLink) {
	      _assertCheckedLink(input);
	      return input.props.checkedLink.value;
	    }
	    return input.props.checked;
	  },

	  /**
	   * @param {ReactComponent} input Form component
	   * @return {function} change callback either from onChange prop or link.
	   */
	  getOnChange: function getOnChange(input) {
	    if (input.props.valueLink) {
	      _assertValueLink(input);
	      return _handleLinkedValueChange;
	    } else if (input.props.checkedLink) {
	      _assertCheckedLink(input);
	      return _handleLinkedCheckChange;
	    }
	    return input.props.onChange;
	  }
	};

	module.exports = LinkedValueUtils;

/***/ },
/* 138 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactPropTypes
	 */

	'use strict';

	var ReactElement = __webpack_require__(27);
	var ReactFragment = __webpack_require__(26);
	var ReactPropTypeLocationNames = __webpack_require__(50);

	var emptyFunction = __webpack_require__(32);

	/**
	 * Collection of methods that allow declaration and validation of props that are
	 * supplied to React components. Example usage:
	 *
	 *   var Props = require('ReactPropTypes');
	 *   var MyArticle = React.createClass({
	 *     propTypes: {
	 *       // An optional string prop named "description".
	 *       description: Props.string,
	 *
	 *       // A required enum prop named "category".
	 *       category: Props.oneOf(['News','Photos']).isRequired,
	 *
	 *       // A prop named "dialog" that requires an instance of Dialog.
	 *       dialog: Props.instanceOf(Dialog).isRequired
	 *     },
	 *     render: function() { ... }
	 *   });
	 *
	 * A more formal specification of how these methods are used:
	 *
	 *   type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...)
	 *   decl := ReactPropTypes.{type}(.isRequired)?
	 *
	 * Each and every declaration produces a function with the same signature. This
	 * allows the creation of custom validation functions. For example:
	 *
	 *  var MyLink = React.createClass({
	 *    propTypes: {
	 *      // An optional string or URI prop named "href".
	 *      href: function(props, propName, componentName) {
	 *        var propValue = props[propName];
	 *        if (propValue != null && typeof propValue !== 'string' &&
	 *            !(propValue instanceof URI)) {
	 *          return new Error(
	 *            'Expected a string or an URI for ' + propName + ' in ' +
	 *            componentName
	 *          );
	 *        }
	 *      }
	 *    },
	 *    render: function() {...}
	 *  });
	 *
	 * @internal
	 */

	var ANONYMOUS = '<<anonymous>>';

	var elementTypeChecker = createElementTypeChecker();
	var nodeTypeChecker = createNodeChecker();

	var ReactPropTypes = {
	  array: createPrimitiveTypeChecker('array'),
	  bool: createPrimitiveTypeChecker('boolean'),
	  func: createPrimitiveTypeChecker('function'),
	  number: createPrimitiveTypeChecker('number'),
	  object: createPrimitiveTypeChecker('object'),
	  string: createPrimitiveTypeChecker('string'),

	  any: createAnyTypeChecker(),
	  arrayOf: createArrayOfTypeChecker,
	  element: elementTypeChecker,
	  instanceOf: createInstanceTypeChecker,
	  node: nodeTypeChecker,
	  objectOf: createObjectOfTypeChecker,
	  oneOf: createEnumTypeChecker,
	  oneOfType: createUnionTypeChecker,
	  shape: createShapeTypeChecker
	};

	function createChainableTypeChecker(validate) {
	  function checkType(isRequired, props, propName, componentName, location) {
	    componentName = componentName || ANONYMOUS;
	    if (props[propName] == null) {
	      var locationName = ReactPropTypeLocationNames[location];
	      if (isRequired) {
	        return new Error("Required " + locationName + " `" + propName + "` was not specified in " + ("`" + componentName + "`."));
	      }
	      return null;
	    } else {
	      return validate(props, propName, componentName, location);
	    }
	  }

	  var chainedCheckType = checkType.bind(null, false);
	  chainedCheckType.isRequired = checkType.bind(null, true);

	  return chainedCheckType;
	}

	function createPrimitiveTypeChecker(expectedType) {
	  function validate(props, propName, componentName, location) {
	    var propValue = props[propName];
	    var propType = getPropType(propValue);
	    if (propType !== expectedType) {
	      var locationName = ReactPropTypeLocationNames[location];
	      // `propValue` being instance of, say, date/regexp, pass the 'object'
	      // check, but we can offer a more precise error message here rather than
	      // 'of type `object`'.
	      var preciseType = getPreciseType(propValue);

	      return new Error("Invalid " + locationName + " `" + propName + "` of type `" + preciseType + "` " + ("supplied to `" + componentName + "`, expected `" + expectedType + "`."));
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function createAnyTypeChecker() {
	  return createChainableTypeChecker(emptyFunction.thatReturns(null));
	}

	function createArrayOfTypeChecker(typeChecker) {
	  function validate(props, propName, componentName, location) {
	    var propValue = props[propName];
	    if (!Array.isArray(propValue)) {
	      var locationName = ReactPropTypeLocationNames[location];
	      var propType = getPropType(propValue);
	      return new Error("Invalid " + locationName + " `" + propName + "` of type " + ("`" + propType + "` supplied to `" + componentName + "`, expected an array."));
	    }
	    for (var i = 0; i < propValue.length; i++) {
	      var error = typeChecker(propValue, i, componentName, location);
	      if (error instanceof Error) {
	        return error;
	      }
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function createElementTypeChecker() {
	  function validate(props, propName, componentName, location) {
	    if (!ReactElement.isValidElement(props[propName])) {
	      var locationName = ReactPropTypeLocationNames[location];
	      return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`, expected a ReactElement."));
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function createInstanceTypeChecker(expectedClass) {
	  function validate(props, propName, componentName, location) {
	    if (!(props[propName] instanceof expectedClass)) {
	      var locationName = ReactPropTypeLocationNames[location];
	      var expectedClassName = expectedClass.name || ANONYMOUS;
	      return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`, expected instance of `" + expectedClassName + "`."));
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function createEnumTypeChecker(expectedValues) {
	  function validate(props, propName, componentName, location) {
	    var propValue = props[propName];
	    for (var i = 0; i < expectedValues.length; i++) {
	      if (propValue === expectedValues[i]) {
	        return null;
	      }
	    }

	    var locationName = ReactPropTypeLocationNames[location];
	    var valuesString = JSON.stringify(expectedValues);
	    return new Error("Invalid " + locationName + " `" + propName + "` of value `" + propValue + "` " + ("supplied to `" + componentName + "`, expected one of " + valuesString + "."));
	  }
	  return createChainableTypeChecker(validate);
	}

	function createObjectOfTypeChecker(typeChecker) {
	  function validate(props, propName, componentName, location) {
	    var propValue = props[propName];
	    var propType = getPropType(propValue);
	    if (propType !== 'object') {
	      var locationName = ReactPropTypeLocationNames[location];
	      return new Error("Invalid " + locationName + " `" + propName + "` of type " + ("`" + propType + "` supplied to `" + componentName + "`, expected an object."));
	    }
	    for (var key in propValue) {
	      if (propValue.hasOwnProperty(key)) {
	        var error = typeChecker(propValue, key, componentName, location);
	        if (error instanceof Error) {
	          return error;
	        }
	      }
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function createUnionTypeChecker(arrayOfTypeCheckers) {
	  function validate(props, propName, componentName, location) {
	    for (var i = 0; i < arrayOfTypeCheckers.length; i++) {
	      var checker = arrayOfTypeCheckers[i];
	      if (checker(props, propName, componentName, location) == null) {
	        return null;
	      }
	    }

	    var locationName = ReactPropTypeLocationNames[location];
	    return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`."));
	  }
	  return createChainableTypeChecker(validate);
	}

	function createNodeChecker() {
	  function validate(props, propName, componentName, location) {
	    if (!isNode(props[propName])) {
	      var locationName = ReactPropTypeLocationNames[location];
	      return new Error("Invalid " + locationName + " `" + propName + "` supplied to " + ("`" + componentName + "`, expected a ReactNode."));
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function createShapeTypeChecker(shapeTypes) {
	  function validate(props, propName, componentName, location) {
	    var propValue = props[propName];
	    var propType = getPropType(propValue);
	    if (propType !== 'object') {
	      var locationName = ReactPropTypeLocationNames[location];
	      return new Error("Invalid " + locationName + " `" + propName + "` of type `" + propType + "` " + ("supplied to `" + componentName + "`, expected `object`."));
	    }
	    for (var key in shapeTypes) {
	      var checker = shapeTypes[key];
	      if (!checker) {
	        continue;
	      }
	      var error = checker(propValue, key, componentName, location);
	      if (error) {
	        return error;
	      }
	    }
	    return null;
	  }
	  return createChainableTypeChecker(validate);
	}

	function isNode(propValue) {
	  switch (typeof propValue) {
	    case 'number':
	    case 'string':
	    case 'undefined':
	      return true;
	    case 'boolean':
	      return !propValue;
	    case 'object':
	      if (Array.isArray(propValue)) {
	        return propValue.every(isNode);
	      }
	      if (propValue === null || ReactElement.isValidElement(propValue)) {
	        return true;
	      }
	      propValue = ReactFragment.extractIfFragment(propValue);
	      for (var k in propValue) {
	        if (!isNode(propValue[k])) {
	          return false;
	        }
	      }
	      return true;
	    default:
	      return false;
	  }
	}

	// Equivalent of `typeof` but with special handling for array and regexp.
	function getPropType(propValue) {
	  var propType = typeof propValue;
	  if (Array.isArray(propValue)) {
	    return 'array';
	  }
	  if (propValue instanceof RegExp) {
	    // Old webkits (at least until Android 4.0) return 'function' rather than
	    // 'object' for typeof a RegExp. We'll normalize this here so that /bla/
	    // passes PropTypes.object.
	    return 'object';
	  }
	  return propType;
	}

	// This handles more types than `getPropType`. Only used for error messages.
	// See `createPrimitiveTypeChecker`.
	function getPreciseType(propValue) {
	  var propType = getPropType(propValue);
	  if (propType === 'object') {
	    if (propValue instanceof Date) {
	      return 'date';
	    } else if (propValue instanceof RegExp) {
	      return 'regexp';
	    }
	  }
	  return propType;
	}

	module.exports = ReactPropTypes;

/***/ },
/* 139 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMOption
	 */

	'use strict';

	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);

	var warning = __webpack_require__(31);

	var option = ReactElement.createFactory('option');

	/**
	 * Implements an <option> native component that warns when `selected` is set.
	 */
	var ReactDOMOption = ReactClass.createClass({
	  displayName: 'ReactDOMOption',
	  tagName: 'OPTION',

	  mixins: [ReactBrowserComponentMixin],

	  componentWillMount: function componentWillMount() {
	    // TODO (yungsters): Remove support for `selected` in <option>.
	    if ("production" !== process.env.NODE_ENV) {
	      "production" !== process.env.NODE_ENV ? warning(this.props.selected == null, 'Use the `defaultValue` or `value` props on <select> instead of ' + 'setting `selected` on <option>.') : null;
	    }
	  },

	  render: function render() {
	    return option(this.props, this.props.children);
	  }

	});

	module.exports = ReactDOMOption;

/***/ },
/* 140 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMSelect
	 */

	'use strict';

	var AutoFocusMixin = __webpack_require__(130);
	var LinkedValueUtils = __webpack_require__(137);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);
	var ReactUpdates = __webpack_require__(42);

	var assign = __webpack_require__(29);

	var select = ReactElement.createFactory('select');

	function updateOptionsIfPendingUpdateAndMounted() {
	  /*jshint validthis:true */
	  if (this._pendingUpdate) {
	    this._pendingUpdate = false;
	    var value = LinkedValueUtils.getValue(this);
	    if (value != null && this.isMounted()) {
	      updateOptions(this, value);
	    }
	  }
	}

	/**
	 * Validation function for `value` and `defaultValue`.
	 * @private
	 */
	function selectValueType(props, propName, componentName) {
	  if (props[propName] == null) {
	    return null;
	  }
	  if (props.multiple) {
	    if (!Array.isArray(props[propName])) {
	      return new Error("The `" + propName + "` prop supplied to <select> must be an array if " + "`multiple` is true.");
	    }
	  } else {
	    if (Array.isArray(props[propName])) {
	      return new Error("The `" + propName + "` prop supplied to <select> must be a scalar " + "value if `multiple` is false.");
	    }
	  }
	}

	/**
	 * @param {ReactComponent} component Instance of ReactDOMSelect
	 * @param {*} propValue A stringable (with `multiple`, a list of stringables).
	 * @private
	 */
	function updateOptions(component, propValue) {
	  var selectedValue, i, l;
	  var options = component.getDOMNode().options;

	  if (component.props.multiple) {
	    selectedValue = {};
	    for (i = 0, l = propValue.length; i < l; i++) {
	      selectedValue['' + propValue[i]] = true;
	    }
	    for (i = 0, l = options.length; i < l; i++) {
	      var selected = selectedValue.hasOwnProperty(options[i].value);
	      if (options[i].selected !== selected) {
	        options[i].selected = selected;
	      }
	    }
	  } else {
	    // Do not set `select.value` as exact behavior isn't consistent across all
	    // browsers for all cases.
	    selectedValue = '' + propValue;
	    for (i = 0, l = options.length; i < l; i++) {
	      if (options[i].value === selectedValue) {
	        options[i].selected = true;
	        return;
	      }
	    }
	    if (options.length) {
	      options[0].selected = true;
	    }
	  }
	}

	/**
	 * Implements a <select> native component that allows optionally setting the
	 * props `value` and `defaultValue`. If `multiple` is false, the prop must be a
	 * stringable. If `multiple` is true, the prop must be an array of stringables.
	 *
	 * If `value` is not supplied (or null/undefined), user actions that change the
	 * selected option will trigger updates to the rendered options.
	 *
	 * If it is supplied (and not null/undefined), the rendered options will not
	 * update in response to user actions. Instead, the `value` prop must change in
	 * order for the rendered options to update.
	 *
	 * If `defaultValue` is provided, any options with the supplied values will be
	 * selected.
	 */
	var ReactDOMSelect = ReactClass.createClass({
	  displayName: 'ReactDOMSelect',
	  tagName: 'SELECT',

	  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],

	  propTypes: {
	    defaultValue: selectValueType,
	    value: selectValueType
	  },

	  render: function render() {
	    // Clone `this.props` so we don't mutate the input.
	    var props = assign({}, this.props);

	    props.onChange = this._handleChange;
	    props.value = null;

	    return select(props, this.props.children);
	  },

	  componentWillMount: function componentWillMount() {
	    this._pendingUpdate = false;
	  },

	  componentDidMount: function componentDidMount() {
	    var value = LinkedValueUtils.getValue(this);
	    if (value != null) {
	      updateOptions(this, value);
	    } else if (this.props.defaultValue != null) {
	      updateOptions(this, this.props.defaultValue);
	    }
	  },

	  componentDidUpdate: function componentDidUpdate(prevProps) {
	    var value = LinkedValueUtils.getValue(this);
	    if (value != null) {
	      this._pendingUpdate = false;
	      updateOptions(this, value);
	    } else if (!prevProps.multiple !== !this.props.multiple) {
	      // For simplicity, reapply `defaultValue` if `multiple` is toggled.
	      if (this.props.defaultValue != null) {
	        updateOptions(this, this.props.defaultValue);
	      } else {
	        // Revert the select back to its default unselected state.
	        updateOptions(this, this.props.multiple ? [] : '');
	      }
	    }
	  },

	  _handleChange: function _handleChange(event) {
	    var returnValue;
	    var onChange = LinkedValueUtils.getOnChange(this);
	    if (onChange) {
	      returnValue = onChange.call(this, event);
	    }

	    this._pendingUpdate = true;
	    ReactUpdates.asap(updateOptionsIfPendingUpdateAndMounted, this);
	    return returnValue;
	  }

	});

	module.exports = ReactDOMSelect;

/***/ },
/* 141 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMTextarea
	 */

	'use strict';

	var AutoFocusMixin = __webpack_require__(130);
	var DOMPropertyOperations = __webpack_require__(59);
	var LinkedValueUtils = __webpack_require__(137);
	var ReactBrowserComponentMixin = __webpack_require__(126);
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);
	var ReactUpdates = __webpack_require__(42);

	var assign = __webpack_require__(29);
	var invariant = __webpack_require__(23);

	var warning = __webpack_require__(31);

	var textarea = ReactElement.createFactory('textarea');

	function forceUpdateIfMounted() {
	  /*jshint validthis:true */
	  if (this.isMounted()) {
	    this.forceUpdate();
	  }
	}

	/**
	 * Implements a <textarea> native component that allows setting `value`, and
	 * `defaultValue`. This differs from the traditional DOM API because value is
	 * usually set as PCDATA children.
	 *
	 * If `value` is not supplied (or null/undefined), user actions that affect the
	 * value will trigger updates to the element.
	 *
	 * If `value` is supplied (and not null/undefined), the rendered element will
	 * not trigger updates to the element. Instead, the `value` prop must change in
	 * order for the rendered element to be updated.
	 *
	 * The rendered element will be initialized with an empty value, the prop
	 * `defaultValue` if specified, or the children content (deprecated).
	 */
	var ReactDOMTextarea = ReactClass.createClass({
	  displayName: 'ReactDOMTextarea',
	  tagName: 'TEXTAREA',

	  mixins: [AutoFocusMixin, LinkedValueUtils.Mixin, ReactBrowserComponentMixin],

	  getInitialState: function getInitialState() {
	    var defaultValue = this.props.defaultValue;
	    // TODO (yungsters): Remove support for children content in <textarea>.
	    var children = this.props.children;
	    if (children != null) {
	      if ("production" !== process.env.NODE_ENV) {
	        "production" !== process.env.NODE_ENV ? warning(false, 'Use the `defaultValue` or `value` props instead of setting ' + 'children on <textarea>.') : null;
	      }
	      "production" !== process.env.NODE_ENV ? invariant(defaultValue == null, 'If you supply `defaultValue` on a <textarea>, do not pass children.') : invariant(defaultValue == null);
	      if (Array.isArray(children)) {
	        "production" !== process.env.NODE_ENV ? invariant(children.length <= 1, '<textarea> can only have at most one child.') : invariant(children.length <= 1);
	        children = children[0];
	      }

	      defaultValue = '' + children;
	    }
	    if (defaultValue == null) {
	      defaultValue = '';
	    }
	    var value = LinkedValueUtils.getValue(this);
	    return {
	      // We save the initial value so that `ReactDOMComponent` doesn't update
	      // `textContent` (unnecessary since we update value).
	      // The initial value can be a boolean or object so that's why it's
	      // forced to be a string.
	      initialValue: '' + (value != null ? value : defaultValue)
	    };
	  },

	  render: function render() {
	    // Clone `this.props` so we don't mutate the input.
	    var props = assign({}, this.props);

	    "production" !== process.env.NODE_ENV ? invariant(props.dangerouslySetInnerHTML == null, '`dangerouslySetInnerHTML` does not make sense on <textarea>.') : invariant(props.dangerouslySetInnerHTML == null);

	    props.defaultValue = null;
	    props.value = null;
	    props.onChange = this._handleChange;

	    // Always set children to the same thing. In IE9, the selection range will
	    // get reset if `textContent` is mutated.
	    return textarea(props, this.state.initialValue);
	  },

	  componentDidUpdate: function componentDidUpdate(prevProps, prevState, prevContext) {
	    var value = LinkedValueUtils.getValue(this);
	    if (value != null) {
	      var rootNode = this.getDOMNode();
	      // Cast `value` to a string to ensure the value is set correctly. While
	      // browsers typically do this as necessary, jsdom doesn't.
	      DOMPropertyOperations.setValueForProperty(rootNode, 'value', '' + value);
	    }
	  },

	  _handleChange: function _handleChange(event) {
	    var returnValue;
	    var onChange = LinkedValueUtils.getOnChange(this);
	    if (onChange) {
	      returnValue = onChange.call(this, event);
	    }
	    ReactUpdates.asap(forceUpdateIfMounted, this);
	    return returnValue;
	  }

	});

	module.exports = ReactDOMTextarea;

/***/ },
/* 142 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactEventListener
	 * @typechecks static-only
	 */

	'use strict';

	var EventListener = __webpack_require__(143);
	var ExecutionEnvironment = __webpack_require__(67);
	var PooledClass = __webpack_require__(25);
	var ReactInstanceHandles = __webpack_require__(35);
	var ReactMount = __webpack_require__(83);
	var ReactUpdates = __webpack_require__(42);

	var assign = __webpack_require__(29);
	var getEventTarget = __webpack_require__(114);
	var getUnboundedScrollPosition = __webpack_require__(144);

	/**
	 * Finds the parent React component of `node`.
	 *
	 * @param {*} node
	 * @return {?DOMEventTarget} Parent container, or `null` if the specified node
	 *                           is not nested.
	 */
	function findParent(node) {
	  // TODO: It may be a good idea to cache this to prevent unnecessary DOM
	  // traversal, but caching is difficult to do correctly without using a
	  // mutation observer to listen for all DOM changes.
	  var nodeID = ReactMount.getID(node);
	  var rootID = ReactInstanceHandles.getReactRootIDFromNodeID(nodeID);
	  var container = ReactMount.findReactContainerForID(rootID);
	  var parent = ReactMount.getFirstReactDOM(container);
	  return parent;
	}

	// Used to store ancestor hierarchy in top level callback
	function TopLevelCallbackBookKeeping(topLevelType, nativeEvent) {
	  this.topLevelType = topLevelType;
	  this.nativeEvent = nativeEvent;
	  this.ancestors = [];
	}
	assign(TopLevelCallbackBookKeeping.prototype, {
	  destructor: function destructor() {
	    this.topLevelType = null;
	    this.nativeEvent = null;
	    this.ancestors.length = 0;
	  }
	});
	PooledClass.addPoolingTo(TopLevelCallbackBookKeeping, PooledClass.twoArgumentPooler);

	function handleTopLevelImpl(bookKeeping) {
	  var topLevelTarget = ReactMount.getFirstReactDOM(getEventTarget(bookKeeping.nativeEvent)) || window;

	  // Loop through the hierarchy, in case there's any nested components.
	  // It's important that we build the array of ancestors before calling any
	  // event handlers, because event handlers can modify the DOM, leading to
	  // inconsistencies with ReactMount's node cache. See #1105.
	  var ancestor = topLevelTarget;
	  while (ancestor) {
	    bookKeeping.ancestors.push(ancestor);
	    ancestor = findParent(ancestor);
	  }

	  for (var i = 0, l = bookKeeping.ancestors.length; i < l; i++) {
	    topLevelTarget = bookKeeping.ancestors[i];
	    var topLevelTargetID = ReactMount.getID(topLevelTarget) || '';
	    ReactEventListener._handleTopLevel(bookKeeping.topLevelType, topLevelTarget, topLevelTargetID, bookKeeping.nativeEvent);
	  }
	}

	function scrollValueMonitor(cb) {
	  var scrollPosition = getUnboundedScrollPosition(window);
	  cb(scrollPosition);
	}

	var ReactEventListener = {
	  _enabled: true,
	  _handleTopLevel: null,

	  WINDOW_HANDLE: ExecutionEnvironment.canUseDOM ? window : null,

	  setHandleTopLevel: function setHandleTopLevel(handleTopLevel) {
	    ReactEventListener._handleTopLevel = handleTopLevel;
	  },

	  setEnabled: function setEnabled(enabled) {
	    ReactEventListener._enabled = !!enabled;
	  },

	  isEnabled: function isEnabled() {
	    return ReactEventListener._enabled;
	  },

	  /**
	   * Traps top-level events by using event bubbling.
	   *
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {string} handlerBaseName Event name (e.g. "click").
	   * @param {object} handle Element on which to attach listener.
	   * @return {object} An object with a remove function which will forcefully
	   *                  remove the listener.
	   * @internal
	   */
	  trapBubbledEvent: function trapBubbledEvent(topLevelType, handlerBaseName, handle) {
	    var element = handle;
	    if (!element) {
	      return null;
	    }
	    return EventListener.listen(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
	  },

	  /**
	   * Traps a top-level event by using event capturing.
	   *
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {string} handlerBaseName Event name (e.g. "click").
	   * @param {object} handle Element on which to attach listener.
	   * @return {object} An object with a remove function which will forcefully
	   *                  remove the listener.
	   * @internal
	   */
	  trapCapturedEvent: function trapCapturedEvent(topLevelType, handlerBaseName, handle) {
	    var element = handle;
	    if (!element) {
	      return null;
	    }
	    return EventListener.capture(element, handlerBaseName, ReactEventListener.dispatchEvent.bind(null, topLevelType));
	  },

	  monitorScrollValue: function monitorScrollValue(refresh) {
	    var callback = scrollValueMonitor.bind(null, refresh);
	    EventListener.listen(window, 'scroll', callback);
	  },

	  dispatchEvent: function dispatchEvent(topLevelType, nativeEvent) {
	    if (!ReactEventListener._enabled) {
	      return;
	    }

	    var bookKeeping = TopLevelCallbackBookKeeping.getPooled(topLevelType, nativeEvent);
	    try {
	      // Event queue being processed in the same cycle allows
	      // `preventDefault`.
	      ReactUpdates.batchedUpdates(handleTopLevelImpl, bookKeeping);
	    } finally {
	      TopLevelCallbackBookKeeping.release(bookKeeping);
	    }
	  }
	};

	module.exports = ReactEventListener;

/***/ },
/* 143 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 *
	 * Licensed under the Apache License, Version 2.0 (the "License");
	 * you may not use this file except in compliance with the License.
	 * You may obtain a copy of the License at
	 *
	 * http://www.apache.org/licenses/LICENSE-2.0
	 *
	 * Unless required by applicable law or agreed to in writing, software
	 * distributed under the License is distributed on an "AS IS" BASIS,
	 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
	 * See the License for the specific language governing permissions and
	 * limitations under the License.
	 *
	 * @providesModule EventListener
	 * @typechecks
	 */

	'use strict';

	var emptyFunction = __webpack_require__(32);

	/**
	 * Upstream version of event listener. Does not take into account specific
	 * nature of platform.
	 */
	var EventListener = {
	  /**
	   * Listen to DOM events during the bubble phase.
	   *
	   * @param {DOMEventTarget} target DOM element to register listener on.
	   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
	   * @param {function} callback Callback function.
	   * @return {object} Object with a `remove` method.
	   */
	  listen: function listen(target, eventType, callback) {
	    if (target.addEventListener) {
	      target.addEventListener(eventType, callback, false);
	      return {
	        remove: function remove() {
	          target.removeEventListener(eventType, callback, false);
	        }
	      };
	    } else if (target.attachEvent) {
	      target.attachEvent('on' + eventType, callback);
	      return {
	        remove: function remove() {
	          target.detachEvent('on' + eventType, callback);
	        }
	      };
	    }
	  },

	  /**
	   * Listen to DOM events during the capture phase.
	   *
	   * @param {DOMEventTarget} target DOM element to register listener on.
	   * @param {string} eventType Event type, e.g. 'click' or 'mouseover'.
	   * @param {function} callback Callback function.
	   * @return {object} Object with a `remove` method.
	   */
	  capture: function capture(target, eventType, callback) {
	    if (!target.addEventListener) {
	      if ("production" !== process.env.NODE_ENV) {
	        console.error('Attempted to listen to events during the capture phase on a ' + 'browser that does not support the capture phase. Your application ' + 'will not receive some events.');
	      }
	      return {
	        remove: emptyFunction
	      };
	    } else {
	      target.addEventListener(eventType, callback, true);
	      return {
	        remove: function remove() {
	          target.removeEventListener(eventType, callback, true);
	        }
	      };
	    }
	  },

	  registerDefault: function registerDefault() {}
	};

	module.exports = EventListener;

/***/ },
/* 144 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getUnboundedScrollPosition
	 * @typechecks
	 */

	"use strict";

	/**
	 * Gets the scroll position of the supplied element or window.
	 *
	 * The return values are unbounded, unlike `getScrollPosition`. This means they
	 * may be negative or exceed the element boundaries (which is possible using
	 * inertial scrolling).
	 *
	 * @param {DOMWindow|DOMElement} scrollable
	 * @return {object} Map with `x` and `y` keys.
	 */
	function getUnboundedScrollPosition(scrollable) {
	  if (scrollable === window) {
	    return {
	      x: window.pageXOffset || document.documentElement.scrollLeft,
	      y: window.pageYOffset || document.documentElement.scrollTop
	    };
	  }
	  return {
	    x: scrollable.scrollLeft,
	    y: scrollable.scrollTop
	  };
	}

	module.exports = getUnboundedScrollPosition;

/***/ },
/* 145 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactInjection
	 */

	'use strict';

	var DOMProperty = __webpack_require__(60);
	var EventPluginHub = __webpack_require__(85);
	var ReactComponentEnvironment = __webpack_require__(101);
	var ReactClass = __webpack_require__(53);
	var ReactEmptyComponent = __webpack_require__(92);
	var ReactBrowserEventEmitter = __webpack_require__(84);
	var ReactNativeComponent = __webpack_require__(51);
	var ReactDOMComponent = __webpack_require__(103);
	var ReactPerf = __webpack_require__(44);
	var ReactRootIndex = __webpack_require__(36);
	var ReactUpdates = __webpack_require__(42);

	var ReactInjection = {
	  Component: ReactComponentEnvironment.injection,
	  Class: ReactClass.injection,
	  DOMComponent: ReactDOMComponent.injection,
	  DOMProperty: DOMProperty.injection,
	  EmptyComponent: ReactEmptyComponent.injection,
	  EventPluginHub: EventPluginHub.injection,
	  EventEmitter: ReactBrowserEventEmitter.injection,
	  NativeComponent: ReactNativeComponent.injection,
	  Perf: ReactPerf.injection,
	  RootIndex: ReactRootIndex.injection,
	  Updates: ReactUpdates.injection
	};

	module.exports = ReactInjection;

/***/ },
/* 146 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactReconcileTransaction
	 * @typechecks static-only
	 */

	'use strict';

	var CallbackQueue = __webpack_require__(43);
	var PooledClass = __webpack_require__(25);
	var ReactBrowserEventEmitter = __webpack_require__(84);
	var ReactInputSelection = __webpack_require__(147);
	var ReactPutListenerQueue = __webpack_require__(151);
	var Transaction = __webpack_require__(52);

	var assign = __webpack_require__(29);

	/**
	 * Ensures that, when possible, the selection range (currently selected text
	 * input) is not disturbed by performing the transaction.
	 */
	var SELECTION_RESTORATION = {
	  /**
	   * @return {Selection} Selection information.
	   */
	  initialize: ReactInputSelection.getSelectionInformation,
	  /**
	   * @param {Selection} sel Selection information returned from `initialize`.
	   */
	  close: ReactInputSelection.restoreSelection
	};

	/**
	 * Suppresses events (blur/focus) that could be inadvertently dispatched due to
	 * high level DOM manipulations (like temporarily removing a text input from the
	 * DOM).
	 */
	var EVENT_SUPPRESSION = {
	  /**
	   * @return {boolean} The enabled status of `ReactBrowserEventEmitter` before
	   * the reconciliation.
	   */
	  initialize: function initialize() {
	    var currentlyEnabled = ReactBrowserEventEmitter.isEnabled();
	    ReactBrowserEventEmitter.setEnabled(false);
	    return currentlyEnabled;
	  },

	  /**
	   * @param {boolean} previouslyEnabled Enabled status of
	   *   `ReactBrowserEventEmitter` before the reconciliation occured. `close`
	   *   restores the previous value.
	   */
	  close: function close(previouslyEnabled) {
	    ReactBrowserEventEmitter.setEnabled(previouslyEnabled);
	  }
	};

	/**
	 * Provides a queue for collecting `componentDidMount` and
	 * `componentDidUpdate` callbacks during the the transaction.
	 */
	var ON_DOM_READY_QUEUEING = {
	  /**
	   * Initializes the internal `onDOMReady` queue.
	   */
	  initialize: function initialize() {
	    this.reactMountReady.reset();
	  },

	  /**
	   * After DOM is flushed, invoke all registered `onDOMReady` callbacks.
	   */
	  close: function close() {
	    this.reactMountReady.notifyAll();
	  }
	};

	var PUT_LISTENER_QUEUEING = {
	  initialize: function initialize() {
	    this.putListenerQueue.reset();
	  },

	  close: function close() {
	    this.putListenerQueue.putListeners();
	  }
	};

	/**
	 * Executed within the scope of the `Transaction` instance. Consider these as
	 * being member methods, but with an implied ordering while being isolated from
	 * each other.
	 */
	var TRANSACTION_WRAPPERS = [PUT_LISTENER_QUEUEING, SELECTION_RESTORATION, EVENT_SUPPRESSION, ON_DOM_READY_QUEUEING];

	/**
	 * Currently:
	 * - The order that these are listed in the transaction is critical:
	 * - Suppresses events.
	 * - Restores selection range.
	 *
	 * Future:
	 * - Restore document/overflow scroll positions that were unintentionally
	 *   modified via DOM insertions above the top viewport boundary.
	 * - Implement/integrate with customized constraint based layout system and keep
	 *   track of which dimensions must be remeasured.
	 *
	 * @class ReactReconcileTransaction
	 */
	function ReactReconcileTransaction() {
	  this.reinitializeTransaction();
	  // Only server-side rendering really needs this option (see
	  // `ReactServerRendering`), but server-side uses
	  // `ReactServerRenderingTransaction` instead. This option is here so that it's
	  // accessible and defaults to false when `ReactDOMComponent` and
	  // `ReactTextComponent` checks it in `mountComponent`.`
	  this.renderToStaticMarkup = false;
	  this.reactMountReady = CallbackQueue.getPooled(null);
	  this.putListenerQueue = ReactPutListenerQueue.getPooled();
	}

	var Mixin = {
	  /**
	   * @see Transaction
	   * @abstract
	   * @final
	   * @return {array<object>} List of operation wrap proceedures.
	   *   TODO: convert to array<TransactionWrapper>
	   */
	  getTransactionWrappers: function getTransactionWrappers() {
	    return TRANSACTION_WRAPPERS;
	  },

	  /**
	   * @return {object} The queue to collect `onDOMReady` callbacks with.
	   */
	  getReactMountReady: function getReactMountReady() {
	    return this.reactMountReady;
	  },

	  getPutListenerQueue: function getPutListenerQueue() {
	    return this.putListenerQueue;
	  },

	  /**
	   * `PooledClass` looks for this, and will invoke this before allowing this
	   * instance to be resused.
	   */
	  destructor: function destructor() {
	    CallbackQueue.release(this.reactMountReady);
	    this.reactMountReady = null;

	    ReactPutListenerQueue.release(this.putListenerQueue);
	    this.putListenerQueue = null;
	  }
	};

	assign(ReactReconcileTransaction.prototype, Transaction.Mixin, Mixin);

	PooledClass.addPoolingTo(ReactReconcileTransaction);

	module.exports = ReactReconcileTransaction;

/***/ },
/* 147 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactInputSelection
	 */

	'use strict';

	var ReactDOMSelection = __webpack_require__(148);

	var containsNode = __webpack_require__(95);
	var focusNode = __webpack_require__(131);
	var getActiveElement = __webpack_require__(150);

	function isInDocument(node) {
	  return containsNode(document.documentElement, node);
	}

	/**
	 * @ReactInputSelection: React input selection module. Based on Selection.js,
	 * but modified to be suitable for react and has a couple of bug fixes (doesn't
	 * assume buttons have range selections allowed).
	 * Input selection module for React.
	 */
	var ReactInputSelection = {

	  hasSelectionCapabilities: function hasSelectionCapabilities(elem) {
	    return elem && (elem.nodeName === 'INPUT' && elem.type === 'text' || elem.nodeName === 'TEXTAREA' || elem.contentEditable === 'true');
	  },

	  getSelectionInformation: function getSelectionInformation() {
	    var focusedElem = getActiveElement();
	    return {
	      focusedElem: focusedElem,
	      selectionRange: ReactInputSelection.hasSelectionCapabilities(focusedElem) ? ReactInputSelection.getSelection(focusedElem) : null
	    };
	  },

	  /**
	   * @restoreSelection: If any selection information was potentially lost,
	   * restore it. This is useful when performing operations that could remove dom
	   * nodes and place them back in, resulting in focus being lost.
	   */
	  restoreSelection: function restoreSelection(priorSelectionInformation) {
	    var curFocusedElem = getActiveElement();
	    var priorFocusedElem = priorSelectionInformation.focusedElem;
	    var priorSelectionRange = priorSelectionInformation.selectionRange;
	    if (curFocusedElem !== priorFocusedElem && isInDocument(priorFocusedElem)) {
	      if (ReactInputSelection.hasSelectionCapabilities(priorFocusedElem)) {
	        ReactInputSelection.setSelection(priorFocusedElem, priorSelectionRange);
	      }
	      focusNode(priorFocusedElem);
	    }
	  },

	  /**
	   * @getSelection: Gets the selection bounds of a focused textarea, input or
	   * contentEditable node.
	   * -@input: Look up selection bounds of this input
	   * -@return {start: selectionStart, end: selectionEnd}
	   */
	  getSelection: function getSelection(input) {
	    var selection;

	    if ('selectionStart' in input) {
	      // Modern browser with input or textarea.
	      selection = {
	        start: input.selectionStart,
	        end: input.selectionEnd
	      };
	    } else if (document.selection && input.nodeName === 'INPUT') {
	      // IE8 input.
	      var range = document.selection.createRange();
	      // There can only be one selection per document in IE, so it must
	      // be in our element.
	      if (range.parentElement() === input) {
	        selection = {
	          start: -range.moveStart('character', -input.value.length),
	          end: -range.moveEnd('character', -input.value.length)
	        };
	      }
	    } else {
	      // Content editable or old IE textarea.
	      selection = ReactDOMSelection.getOffsets(input);
	    }

	    return selection || { start: 0, end: 0 };
	  },

	  /**
	   * @setSelection: Sets the selection bounds of a textarea or input and focuses
	   * the input.
	   * -@input     Set selection bounds of this input or textarea
	   * -@offsets   Object of same form that is returned from get*
	   */
	  setSelection: function setSelection(input, offsets) {
	    var start = offsets.start;
	    var end = offsets.end;
	    if (typeof end === 'undefined') {
	      end = start;
	    }

	    if ('selectionStart' in input) {
	      input.selectionStart = start;
	      input.selectionEnd = Math.min(end, input.value.length);
	    } else if (document.selection && input.nodeName === 'INPUT') {
	      var range = input.createTextRange();
	      range.collapse(true);
	      range.moveStart('character', start);
	      range.moveEnd('character', end - start);
	      range.select();
	    } else {
	      ReactDOMSelection.setOffsets(input, offsets);
	    }
	  }
	};

	module.exports = ReactInputSelection;

/***/ },
/* 148 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDOMSelection
	 */

	'use strict';

	var ExecutionEnvironment = __webpack_require__(67);

	var getNodeForCharacterOffset = __webpack_require__(149);
	var getTextContentAccessor = __webpack_require__(111);

	/**
	 * While `isCollapsed` is available on the Selection object and `collapsed`
	 * is available on the Range object, IE11 sometimes gets them wrong.
	 * If the anchor/focus nodes and offsets are the same, the range is collapsed.
	 */
	function isCollapsed(anchorNode, anchorOffset, focusNode, focusOffset) {
	  return anchorNode === focusNode && anchorOffset === focusOffset;
	}

	/**
	 * Get the appropriate anchor and focus node/offset pairs for IE.
	 *
	 * The catch here is that IE's selection API doesn't provide information
	 * about whether the selection is forward or backward, so we have to
	 * behave as though it's always forward.
	 *
	 * IE text differs from modern selection in that it behaves as though
	 * block elements end with a new line. This means character offsets will
	 * differ between the two APIs.
	 *
	 * @param {DOMElement} node
	 * @return {object}
	 */
	function getIEOffsets(node) {
	  var selection = document.selection;
	  var selectedRange = selection.createRange();
	  var selectedLength = selectedRange.text.length;

	  // Duplicate selection so we can move range without breaking user selection.
	  var fromStart = selectedRange.duplicate();
	  fromStart.moveToElementText(node);
	  fromStart.setEndPoint('EndToStart', selectedRange);

	  var startOffset = fromStart.text.length;
	  var endOffset = startOffset + selectedLength;

	  return {
	    start: startOffset,
	    end: endOffset
	  };
	}

	/**
	 * @param {DOMElement} node
	 * @return {?object}
	 */
	function getModernOffsets(node) {
	  var selection = window.getSelection && window.getSelection();

	  if (!selection || selection.rangeCount === 0) {
	    return null;
	  }

	  var anchorNode = selection.anchorNode;
	  var anchorOffset = selection.anchorOffset;
	  var focusNode = selection.focusNode;
	  var focusOffset = selection.focusOffset;

	  var currentRange = selection.getRangeAt(0);

	  // If the node and offset values are the same, the selection is collapsed.
	  // `Selection.isCollapsed` is available natively, but IE sometimes gets
	  // this value wrong.
	  var isSelectionCollapsed = isCollapsed(selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset);

	  var rangeLength = isSelectionCollapsed ? 0 : currentRange.toString().length;

	  var tempRange = currentRange.cloneRange();
	  tempRange.selectNodeContents(node);
	  tempRange.setEnd(currentRange.startContainer, currentRange.startOffset);

	  var isTempRangeCollapsed = isCollapsed(tempRange.startContainer, tempRange.startOffset, tempRange.endContainer, tempRange.endOffset);

	  var start = isTempRangeCollapsed ? 0 : tempRange.toString().length;
	  var end = start + rangeLength;

	  // Detect whether the selection is backward.
	  var detectionRange = document.createRange();
	  detectionRange.setStart(anchorNode, anchorOffset);
	  detectionRange.setEnd(focusNode, focusOffset);
	  var isBackward = detectionRange.collapsed;

	  return {
	    start: isBackward ? end : start,
	    end: isBackward ? start : end
	  };
	}

	/**
	 * @param {DOMElement|DOMTextNode} node
	 * @param {object} offsets
	 */
	function setIEOffsets(node, offsets) {
	  var range = document.selection.createRange().duplicate();
	  var start, end;

	  if (typeof offsets.end === 'undefined') {
	    start = offsets.start;
	    end = start;
	  } else if (offsets.start > offsets.end) {
	    start = offsets.end;
	    end = offsets.start;
	  } else {
	    start = offsets.start;
	    end = offsets.end;
	  }

	  range.moveToElementText(node);
	  range.moveStart('character', start);
	  range.setEndPoint('EndToStart', range);
	  range.moveEnd('character', end - start);
	  range.select();
	}

	/**
	 * In modern non-IE browsers, we can support both forward and backward
	 * selections.
	 *
	 * Note: IE10+ supports the Selection object, but it does not support
	 * the `extend` method, which means that even in modern IE, it's not possible
	 * to programatically create a backward selection. Thus, for all IE
	 * versions, we use the old IE API to create our selections.
	 *
	 * @param {DOMElement|DOMTextNode} node
	 * @param {object} offsets
	 */
	function setModernOffsets(node, offsets) {
	  if (!window.getSelection) {
	    return;
	  }

	  var selection = window.getSelection();
	  var length = node[getTextContentAccessor()].length;
	  var start = Math.min(offsets.start, length);
	  var end = typeof offsets.end === 'undefined' ? start : Math.min(offsets.end, length);

	  // IE 11 uses modern selection, but doesn't support the extend method.
	  // Flip backward selections, so we can set with a single range.
	  if (!selection.extend && start > end) {
	    var temp = end;
	    end = start;
	    start = temp;
	  }

	  var startMarker = getNodeForCharacterOffset(node, start);
	  var endMarker = getNodeForCharacterOffset(node, end);

	  if (startMarker && endMarker) {
	    var range = document.createRange();
	    range.setStart(startMarker.node, startMarker.offset);
	    selection.removeAllRanges();

	    if (start > end) {
	      selection.addRange(range);
	      selection.extend(endMarker.node, endMarker.offset);
	    } else {
	      range.setEnd(endMarker.node, endMarker.offset);
	      selection.addRange(range);
	    }
	  }
	}

	var useIEOffsets = ExecutionEnvironment.canUseDOM && 'selection' in document && !('getSelection' in window);

	var ReactDOMSelection = {
	  /**
	   * @param {DOMElement} node
	   */
	  getOffsets: useIEOffsets ? getIEOffsets : getModernOffsets,

	  /**
	   * @param {DOMElement|DOMTextNode} node
	   * @param {object} offsets
	   */
	  setOffsets: useIEOffsets ? setIEOffsets : setModernOffsets
	};

	module.exports = ReactDOMSelection;

/***/ },
/* 149 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getNodeForCharacterOffset
	 */

	'use strict';

	/**
	 * Given any node return the first leaf node without children.
	 *
	 * @param {DOMElement|DOMTextNode} node
	 * @return {DOMElement|DOMTextNode}
	 */
	function getLeafNode(node) {
	  while (node && node.firstChild) {
	    node = node.firstChild;
	  }
	  return node;
	}

	/**
	 * Get the next sibling within a container. This will walk up the
	 * DOM if a node's siblings have been exhausted.
	 *
	 * @param {DOMElement|DOMTextNode} node
	 * @return {?DOMElement|DOMTextNode}
	 */
	function getSiblingNode(node) {
	  while (node) {
	    if (node.nextSibling) {
	      return node.nextSibling;
	    }
	    node = node.parentNode;
	  }
	}

	/**
	 * Get object describing the nodes which contain characters at offset.
	 *
	 * @param {DOMElement|DOMTextNode} root
	 * @param {number} offset
	 * @return {?object}
	 */
	function getNodeForCharacterOffset(root, offset) {
	  var node = getLeafNode(root);
	  var nodeStart = 0;
	  var nodeEnd = 0;

	  while (node) {
	    if (node.nodeType === 3) {
	      nodeEnd = nodeStart + node.textContent.length;

	      if (nodeStart <= offset && nodeEnd >= offset) {
	        return {
	          node: node,
	          offset: offset - nodeStart
	        };
	      }

	      nodeStart = nodeEnd;
	    }

	    node = getLeafNode(getSiblingNode(node));
	  }
	}

	module.exports = getNodeForCharacterOffset;

/***/ },
/* 150 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getActiveElement
	 * @typechecks
	 */

	/**
	 * Same as document.activeElement but wraps in a try-catch block. In IE it is
	 * not safe to call document.activeElement if there is nothing focused.
	 *
	 * The activeElement will be null only if the document body is not yet defined.
	 */
	"use strict";

	function getActiveElement() /*?DOMElement*/{
	  try {
	    return document.activeElement || document.body;
	  } catch (e) {
	    return document.body;
	  }
	}

	module.exports = getActiveElement;

/***/ },
/* 151 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactPutListenerQueue
	 */

	'use strict';

	var PooledClass = __webpack_require__(25);
	var ReactBrowserEventEmitter = __webpack_require__(84);

	var assign = __webpack_require__(29);

	function ReactPutListenerQueue() {
	  this.listenersToPut = [];
	}

	assign(ReactPutListenerQueue.prototype, {
	  enqueuePutListener: function enqueuePutListener(rootNodeID, propKey, propValue) {
	    this.listenersToPut.push({
	      rootNodeID: rootNodeID,
	      propKey: propKey,
	      propValue: propValue
	    });
	  },

	  putListeners: function putListeners() {
	    for (var i = 0; i < this.listenersToPut.length; i++) {
	      var listenerToPut = this.listenersToPut[i];
	      ReactBrowserEventEmitter.putListener(listenerToPut.rootNodeID, listenerToPut.propKey, listenerToPut.propValue);
	    }
	  },

	  reset: function reset() {
	    this.listenersToPut.length = 0;
	  },

	  destructor: function destructor() {
	    this.reset();
	  }
	});

	PooledClass.addPoolingTo(ReactPutListenerQueue);

	module.exports = ReactPutListenerQueue;

/***/ },
/* 152 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SelectEventPlugin
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPropagators = __webpack_require__(109);
	var ReactInputSelection = __webpack_require__(147);
	var SyntheticEvent = __webpack_require__(113);

	var getActiveElement = __webpack_require__(150);
	var isTextInputElement = __webpack_require__(117);
	var keyOf = __webpack_require__(55);
	var shallowEqual = __webpack_require__(153);

	var topLevelTypes = EventConstants.topLevelTypes;

	var eventTypes = {
	  select: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onSelect: null }),
	      captured: keyOf({ onSelectCapture: null })
	    },
	    dependencies: [topLevelTypes.topBlur, topLevelTypes.topContextMenu, topLevelTypes.topFocus, topLevelTypes.topKeyDown, topLevelTypes.topMouseDown, topLevelTypes.topMouseUp, topLevelTypes.topSelectionChange]
	  }
	};

	var activeElement = null;
	var activeElementID = null;
	var lastSelection = null;
	var mouseDown = false;

	/**
	 * Get an object which is a unique representation of the current selection.
	 *
	 * The return value will not be consistent across nodes or browsers, but
	 * two identical selections on the same node will return identical objects.
	 *
	 * @param {DOMElement} node
	 * @param {object}
	 */
	function getSelection(node) {
	  if ('selectionStart' in node && ReactInputSelection.hasSelectionCapabilities(node)) {
	    return {
	      start: node.selectionStart,
	      end: node.selectionEnd
	    };
	  } else if (window.getSelection) {
	    var selection = window.getSelection();
	    return {
	      anchorNode: selection.anchorNode,
	      anchorOffset: selection.anchorOffset,
	      focusNode: selection.focusNode,
	      focusOffset: selection.focusOffset
	    };
	  } else if (document.selection) {
	    var range = document.selection.createRange();
	    return {
	      parentElement: range.parentElement(),
	      text: range.text,
	      top: range.boundingTop,
	      left: range.boundingLeft
	    };
	  }
	}

	/**
	 * Poll selection to see whether it's changed.
	 *
	 * @param {object} nativeEvent
	 * @return {?SyntheticEvent}
	 */
	function constructSelectEvent(nativeEvent) {
	  // Ensure we have the right element, and that the user is not dragging a
	  // selection (this matches native `select` event behavior). In HTML5, select
	  // fires only on input and textarea thus if there's no focused element we
	  // won't dispatch.
	  if (mouseDown || activeElement == null || activeElement !== getActiveElement()) {
	    return null;
	  }

	  // Only fire when selection has actually changed.
	  var currentSelection = getSelection(activeElement);
	  if (!lastSelection || !shallowEqual(lastSelection, currentSelection)) {
	    lastSelection = currentSelection;

	    var syntheticEvent = SyntheticEvent.getPooled(eventTypes.select, activeElementID, nativeEvent);

	    syntheticEvent.type = 'select';
	    syntheticEvent.target = activeElement;

	    EventPropagators.accumulateTwoPhaseDispatches(syntheticEvent);

	    return syntheticEvent;
	  }
	}

	/**
	 * This plugin creates an `onSelect` event that normalizes select events
	 * across form elements.
	 *
	 * Supported elements are:
	 * - input (see `isTextInputElement`)
	 * - textarea
	 * - contentEditable
	 *
	 * This differs from native browser implementations in the following ways:
	 * - Fires on contentEditable fields as well as inputs.
	 * - Fires for collapsed selection.
	 * - Fires after user input.
	 */
	var SelectEventPlugin = {

	  eventTypes: eventTypes,

	  /**
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @see {EventPluginHub.extractEvents}
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {

	    switch (topLevelType) {
	      // Track the input node that has focus.
	      case topLevelTypes.topFocus:
	        if (isTextInputElement(topLevelTarget) || topLevelTarget.contentEditable === 'true') {
	          activeElement = topLevelTarget;
	          activeElementID = topLevelTargetID;
	          lastSelection = null;
	        }
	        break;
	      case topLevelTypes.topBlur:
	        activeElement = null;
	        activeElementID = null;
	        lastSelection = null;
	        break;

	      // Don't fire the event while the user is dragging. This matches the
	      // semantics of the native select event.
	      case topLevelTypes.topMouseDown:
	        mouseDown = true;
	        break;
	      case topLevelTypes.topContextMenu:
	      case topLevelTypes.topMouseUp:
	        mouseDown = false;
	        return constructSelectEvent(nativeEvent);

	      // Chrome and IE fire non-standard event when selection is changed (and
	      // sometimes when it hasn't).
	      // Firefox doesn't support selectionchange, so check selection status
	      // after each key entry. The selection changes after keydown and before
	      // keyup, but we check on keydown as well in the case of holding down a
	      // key, when multiple keydown events are fired but only one keyup is.
	      case topLevelTypes.topSelectionChange:
	      case topLevelTypes.topKeyDown:
	      case topLevelTypes.topKeyUp:
	        return constructSelectEvent(nativeEvent);
	    }
	  }
	};

	module.exports = SelectEventPlugin;

/***/ },
/* 153 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule shallowEqual
	 */

	'use strict';

	/**
	 * Performs equality by iterating through keys on an object and returning
	 * false when any key has values which are not strictly equal between
	 * objA and objB. Returns true when the values of all keys are strictly equal.
	 *
	 * @return {boolean}
	 */
	function shallowEqual(objA, objB) {
	  if (objA === objB) {
	    return true;
	  }
	  var key;
	  // Test for A's keys different from B.
	  for (key in objA) {
	    if (objA.hasOwnProperty(key) && (!objB.hasOwnProperty(key) || objA[key] !== objB[key])) {
	      return false;
	    }
	  }
	  // Test for B's keys missing from A.
	  for (key in objB) {
	    if (objB.hasOwnProperty(key) && !objA.hasOwnProperty(key)) {
	      return false;
	    }
	  }
	  return true;
	}

	module.exports = shallowEqual;

/***/ },
/* 154 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ServerReactRootIndex
	 * @typechecks
	 */

	'use strict';

	/**
	 * Size of the reactRoot ID space. We generate random numbers for React root
	 * IDs and if there's a collision the events and DOM update system will
	 * get confused. In the future we need a way to generate GUIDs but for
	 * now this will work on a smaller scale.
	 */
	var GLOBAL_MOUNT_POINT_MAX = Math.pow(2, 53);

	var ServerReactRootIndex = {
	  createReactRootIndex: function createReactRootIndex() {
	    return Math.ceil(Math.random() * GLOBAL_MOUNT_POINT_MAX);
	  }
	};

	module.exports = ServerReactRootIndex;

/***/ },
/* 155 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SimpleEventPlugin
	 */

	'use strict';

	var EventConstants = __webpack_require__(21);
	var EventPluginUtils = __webpack_require__(20);
	var EventPropagators = __webpack_require__(109);
	var SyntheticClipboardEvent = __webpack_require__(156);
	var SyntheticEvent = __webpack_require__(113);
	var SyntheticFocusEvent = __webpack_require__(157);
	var SyntheticKeyboardEvent = __webpack_require__(158);
	var SyntheticMouseEvent = __webpack_require__(121);
	var SyntheticDragEvent = __webpack_require__(161);
	var SyntheticTouchEvent = __webpack_require__(162);
	var SyntheticUIEvent = __webpack_require__(122);
	var SyntheticWheelEvent = __webpack_require__(163);

	var getEventCharCode = __webpack_require__(159);

	var invariant = __webpack_require__(23);
	var keyOf = __webpack_require__(55);
	var warning = __webpack_require__(31);

	var topLevelTypes = EventConstants.topLevelTypes;

	var eventTypes = {
	  blur: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onBlur: true }),
	      captured: keyOf({ onBlurCapture: true })
	    }
	  },
	  click: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onClick: true }),
	      captured: keyOf({ onClickCapture: true })
	    }
	  },
	  contextMenu: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onContextMenu: true }),
	      captured: keyOf({ onContextMenuCapture: true })
	    }
	  },
	  copy: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onCopy: true }),
	      captured: keyOf({ onCopyCapture: true })
	    }
	  },
	  cut: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onCut: true }),
	      captured: keyOf({ onCutCapture: true })
	    }
	  },
	  doubleClick: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDoubleClick: true }),
	      captured: keyOf({ onDoubleClickCapture: true })
	    }
	  },
	  drag: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDrag: true }),
	      captured: keyOf({ onDragCapture: true })
	    }
	  },
	  dragEnd: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDragEnd: true }),
	      captured: keyOf({ onDragEndCapture: true })
	    }
	  },
	  dragEnter: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDragEnter: true }),
	      captured: keyOf({ onDragEnterCapture: true })
	    }
	  },
	  dragExit: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDragExit: true }),
	      captured: keyOf({ onDragExitCapture: true })
	    }
	  },
	  dragLeave: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDragLeave: true }),
	      captured: keyOf({ onDragLeaveCapture: true })
	    }
	  },
	  dragOver: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDragOver: true }),
	      captured: keyOf({ onDragOverCapture: true })
	    }
	  },
	  dragStart: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDragStart: true }),
	      captured: keyOf({ onDragStartCapture: true })
	    }
	  },
	  drop: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onDrop: true }),
	      captured: keyOf({ onDropCapture: true })
	    }
	  },
	  focus: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onFocus: true }),
	      captured: keyOf({ onFocusCapture: true })
	    }
	  },
	  input: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onInput: true }),
	      captured: keyOf({ onInputCapture: true })
	    }
	  },
	  keyDown: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onKeyDown: true }),
	      captured: keyOf({ onKeyDownCapture: true })
	    }
	  },
	  keyPress: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onKeyPress: true }),
	      captured: keyOf({ onKeyPressCapture: true })
	    }
	  },
	  keyUp: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onKeyUp: true }),
	      captured: keyOf({ onKeyUpCapture: true })
	    }
	  },
	  load: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onLoad: true }),
	      captured: keyOf({ onLoadCapture: true })
	    }
	  },
	  error: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onError: true }),
	      captured: keyOf({ onErrorCapture: true })
	    }
	  },
	  // Note: We do not allow listening to mouseOver events. Instead, use the
	  // onMouseEnter/onMouseLeave created by `EnterLeaveEventPlugin`.
	  mouseDown: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onMouseDown: true }),
	      captured: keyOf({ onMouseDownCapture: true })
	    }
	  },
	  mouseMove: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onMouseMove: true }),
	      captured: keyOf({ onMouseMoveCapture: true })
	    }
	  },
	  mouseOut: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onMouseOut: true }),
	      captured: keyOf({ onMouseOutCapture: true })
	    }
	  },
	  mouseOver: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onMouseOver: true }),
	      captured: keyOf({ onMouseOverCapture: true })
	    }
	  },
	  mouseUp: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onMouseUp: true }),
	      captured: keyOf({ onMouseUpCapture: true })
	    }
	  },
	  paste: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onPaste: true }),
	      captured: keyOf({ onPasteCapture: true })
	    }
	  },
	  reset: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onReset: true }),
	      captured: keyOf({ onResetCapture: true })
	    }
	  },
	  scroll: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onScroll: true }),
	      captured: keyOf({ onScrollCapture: true })
	    }
	  },
	  submit: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onSubmit: true }),
	      captured: keyOf({ onSubmitCapture: true })
	    }
	  },
	  touchCancel: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onTouchCancel: true }),
	      captured: keyOf({ onTouchCancelCapture: true })
	    }
	  },
	  touchEnd: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onTouchEnd: true }),
	      captured: keyOf({ onTouchEndCapture: true })
	    }
	  },
	  touchMove: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onTouchMove: true }),
	      captured: keyOf({ onTouchMoveCapture: true })
	    }
	  },
	  touchStart: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onTouchStart: true }),
	      captured: keyOf({ onTouchStartCapture: true })
	    }
	  },
	  wheel: {
	    phasedRegistrationNames: {
	      bubbled: keyOf({ onWheel: true }),
	      captured: keyOf({ onWheelCapture: true })
	    }
	  }
	};

	var topLevelEventsToDispatchConfig = {
	  topBlur: eventTypes.blur,
	  topClick: eventTypes.click,
	  topContextMenu: eventTypes.contextMenu,
	  topCopy: eventTypes.copy,
	  topCut: eventTypes.cut,
	  topDoubleClick: eventTypes.doubleClick,
	  topDrag: eventTypes.drag,
	  topDragEnd: eventTypes.dragEnd,
	  topDragEnter: eventTypes.dragEnter,
	  topDragExit: eventTypes.dragExit,
	  topDragLeave: eventTypes.dragLeave,
	  topDragOver: eventTypes.dragOver,
	  topDragStart: eventTypes.dragStart,
	  topDrop: eventTypes.drop,
	  topError: eventTypes.error,
	  topFocus: eventTypes.focus,
	  topInput: eventTypes.input,
	  topKeyDown: eventTypes.keyDown,
	  topKeyPress: eventTypes.keyPress,
	  topKeyUp: eventTypes.keyUp,
	  topLoad: eventTypes.load,
	  topMouseDown: eventTypes.mouseDown,
	  topMouseMove: eventTypes.mouseMove,
	  topMouseOut: eventTypes.mouseOut,
	  topMouseOver: eventTypes.mouseOver,
	  topMouseUp: eventTypes.mouseUp,
	  topPaste: eventTypes.paste,
	  topReset: eventTypes.reset,
	  topScroll: eventTypes.scroll,
	  topSubmit: eventTypes.submit,
	  topTouchCancel: eventTypes.touchCancel,
	  topTouchEnd: eventTypes.touchEnd,
	  topTouchMove: eventTypes.touchMove,
	  topTouchStart: eventTypes.touchStart,
	  topWheel: eventTypes.wheel
	};

	for (var type in topLevelEventsToDispatchConfig) {
	  topLevelEventsToDispatchConfig[type].dependencies = [type];
	}

	var SimpleEventPlugin = {

	  eventTypes: eventTypes,

	  /**
	   * Same as the default implementation, except cancels the event when return
	   * value is false. This behavior will be disabled in a future release.
	   *
	   * @param {object} Event to be dispatched.
	   * @param {function} Application-level callback.
	   * @param {string} domID DOM ID to pass to the callback.
	   */
	  executeDispatch: function executeDispatch(event, listener, domID) {
	    var returnValue = EventPluginUtils.executeDispatch(event, listener, domID);

	    "production" !== process.env.NODE_ENV ? warning(typeof returnValue !== 'boolean', 'Returning `false` from an event handler is deprecated and will be ' + 'ignored in a future release. Instead, manually call ' + 'e.stopPropagation() or e.preventDefault(), as appropriate.') : null;

	    if (returnValue === false) {
	      event.stopPropagation();
	      event.preventDefault();
	    }
	  },

	  /**
	   * @param {string} topLevelType Record from `EventConstants`.
	   * @param {DOMEventTarget} topLevelTarget The listening component root node.
	   * @param {string} topLevelTargetID ID of `topLevelTarget`.
	   * @param {object} nativeEvent Native browser event.
	   * @return {*} An accumulation of synthetic events.
	   * @see {EventPluginHub.extractEvents}
	   */
	  extractEvents: function extractEvents(topLevelType, topLevelTarget, topLevelTargetID, nativeEvent) {
	    var dispatchConfig = topLevelEventsToDispatchConfig[topLevelType];
	    if (!dispatchConfig) {
	      return null;
	    }
	    var EventConstructor;
	    switch (topLevelType) {
	      case topLevelTypes.topInput:
	      case topLevelTypes.topLoad:
	      case topLevelTypes.topError:
	      case topLevelTypes.topReset:
	      case topLevelTypes.topSubmit:
	        // HTML Events
	        // @see http://www.w3.org/TR/html5/index.html#events-0
	        EventConstructor = SyntheticEvent;
	        break;
	      case topLevelTypes.topKeyPress:
	        // FireFox creates a keypress event for function keys too. This removes
	        // the unwanted keypress events. Enter is however both printable and
	        // non-printable. One would expect Tab to be as well (but it isn't).
	        if (getEventCharCode(nativeEvent) === 0) {
	          return null;
	        }
	      /* falls through */
	      case topLevelTypes.topKeyDown:
	      case topLevelTypes.topKeyUp:
	        EventConstructor = SyntheticKeyboardEvent;
	        break;
	      case topLevelTypes.topBlur:
	      case topLevelTypes.topFocus:
	        EventConstructor = SyntheticFocusEvent;
	        break;
	      case topLevelTypes.topClick:
	        // Firefox creates a click event on right mouse clicks. This removes the
	        // unwanted click events.
	        if (nativeEvent.button === 2) {
	          return null;
	        }
	      /* falls through */
	      case topLevelTypes.topContextMenu:
	      case topLevelTypes.topDoubleClick:
	      case topLevelTypes.topMouseDown:
	      case topLevelTypes.topMouseMove:
	      case topLevelTypes.topMouseOut:
	      case topLevelTypes.topMouseOver:
	      case topLevelTypes.topMouseUp:
	        EventConstructor = SyntheticMouseEvent;
	        break;
	      case topLevelTypes.topDrag:
	      case topLevelTypes.topDragEnd:
	      case topLevelTypes.topDragEnter:
	      case topLevelTypes.topDragExit:
	      case topLevelTypes.topDragLeave:
	      case topLevelTypes.topDragOver:
	      case topLevelTypes.topDragStart:
	      case topLevelTypes.topDrop:
	        EventConstructor = SyntheticDragEvent;
	        break;
	      case topLevelTypes.topTouchCancel:
	      case topLevelTypes.topTouchEnd:
	      case topLevelTypes.topTouchMove:
	      case topLevelTypes.topTouchStart:
	        EventConstructor = SyntheticTouchEvent;
	        break;
	      case topLevelTypes.topScroll:
	        EventConstructor = SyntheticUIEvent;
	        break;
	      case topLevelTypes.topWheel:
	        EventConstructor = SyntheticWheelEvent;
	        break;
	      case topLevelTypes.topCopy:
	      case topLevelTypes.topCut:
	      case topLevelTypes.topPaste:
	        EventConstructor = SyntheticClipboardEvent;
	        break;
	    }
	    "production" !== process.env.NODE_ENV ? invariant(EventConstructor, 'SimpleEventPlugin: Unhandled event type, `%s`.', topLevelType) : invariant(EventConstructor);
	    var event = EventConstructor.getPooled(dispatchConfig, topLevelTargetID, nativeEvent);
	    EventPropagators.accumulateTwoPhaseDispatches(event);
	    return event;
	  }

	};

	module.exports = SimpleEventPlugin;

/***/ },
/* 156 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticClipboardEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticEvent = __webpack_require__(113);

	/**
	 * @interface Event
	 * @see http://www.w3.org/TR/clipboard-apis/
	 */
	var ClipboardEventInterface = {
	  clipboardData: function clipboardData(event) {
	    return 'clipboardData' in event ? event.clipboardData : window.clipboardData;
	  }
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticClipboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticEvent.augmentClass(SyntheticClipboardEvent, ClipboardEventInterface);

	module.exports = SyntheticClipboardEvent;

/***/ },
/* 157 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticFocusEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticUIEvent = __webpack_require__(122);

	/**
	 * @interface FocusEvent
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var FocusEventInterface = {
	  relatedTarget: null
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticFocusEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticUIEvent.augmentClass(SyntheticFocusEvent, FocusEventInterface);

	module.exports = SyntheticFocusEvent;

/***/ },
/* 158 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticKeyboardEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticUIEvent = __webpack_require__(122);

	var getEventCharCode = __webpack_require__(159);
	var getEventKey = __webpack_require__(160);
	var getEventModifierState = __webpack_require__(123);

	/**
	 * @interface KeyboardEvent
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var KeyboardEventInterface = {
	  key: getEventKey,
	  location: null,
	  ctrlKey: null,
	  shiftKey: null,
	  altKey: null,
	  metaKey: null,
	  repeat: null,
	  locale: null,
	  getModifierState: getEventModifierState,
	  // Legacy Interface
	  charCode: function charCode(event) {
	    // `charCode` is the result of a KeyPress event and represents the value of
	    // the actual printable character.

	    // KeyPress is deprecated, but its replacement is not yet final and not
	    // implemented in any major browser. Only KeyPress has charCode.
	    if (event.type === 'keypress') {
	      return getEventCharCode(event);
	    }
	    return 0;
	  },
	  keyCode: function keyCode(event) {
	    // `keyCode` is the result of a KeyDown/Up event and represents the value of
	    // physical keyboard key.

	    // The actual meaning of the value depends on the users' keyboard layout
	    // which cannot be detected. Assuming that it is a US keyboard layout
	    // provides a surprisingly accurate mapping for US and European users.
	    // Due to this, it is left to the user to implement at this time.
	    if (event.type === 'keydown' || event.type === 'keyup') {
	      return event.keyCode;
	    }
	    return 0;
	  },
	  which: function which(event) {
	    // `which` is an alias for either `keyCode` or `charCode` depending on the
	    // type of the event.
	    if (event.type === 'keypress') {
	      return getEventCharCode(event);
	    }
	    if (event.type === 'keydown' || event.type === 'keyup') {
	      return event.keyCode;
	    }
	    return 0;
	  }
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticKeyboardEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticUIEvent.augmentClass(SyntheticKeyboardEvent, KeyboardEventInterface);

	module.exports = SyntheticKeyboardEvent;

/***/ },
/* 159 */
/***/ function(module, exports) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getEventCharCode
	 * @typechecks static-only
	 */

	'use strict';

	/**
	 * `charCode` represents the actual "character code" and is safe to use with
	 * `String.fromCharCode`. As such, only keys that correspond to printable
	 * characters produce a valid `charCode`, the only exception to this is Enter.
	 * The Tab-key is considered non-printable and does not have a `charCode`,
	 * presumably because it does not produce a tab-character in browsers.
	 *
	 * @param {object} nativeEvent Native browser event.
	 * @return {string} Normalized `charCode` property.
	 */
	function getEventCharCode(nativeEvent) {
	  var charCode;
	  var keyCode = nativeEvent.keyCode;

	  if ('charCode' in nativeEvent) {
	    charCode = nativeEvent.charCode;

	    // FF does not set `charCode` for the Enter-key, check against `keyCode`.
	    if (charCode === 0 && keyCode === 13) {
	      charCode = 13;
	    }
	  } else {
	    // IE8 does not implement `charCode`, but `keyCode` has the correct value.
	    charCode = keyCode;
	  }

	  // Some non-printable keys are reported in `charCode`/`keyCode`, discard them.
	  // Must not discard the (non-)printable Enter-key.
	  if (charCode >= 32 || charCode === 13) {
	    return charCode;
	  }

	  return 0;
	}

	module.exports = getEventCharCode;

/***/ },
/* 160 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule getEventKey
	 * @typechecks static-only
	 */

	'use strict';

	var getEventCharCode = __webpack_require__(159);

	/**
	 * Normalization of deprecated HTML5 `key` values
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
	 */
	var normalizeKey = {
	  'Esc': 'Escape',
	  'Spacebar': ' ',
	  'Left': 'ArrowLeft',
	  'Up': 'ArrowUp',
	  'Right': 'ArrowRight',
	  'Down': 'ArrowDown',
	  'Del': 'Delete',
	  'Win': 'OS',
	  'Menu': 'ContextMenu',
	  'Apps': 'ContextMenu',
	  'Scroll': 'ScrollLock',
	  'MozPrintableKey': 'Unidentified'
	};

	/**
	 * Translation from legacy `keyCode` to HTML5 `key`
	 * Only special keys supported, all others depend on keyboard layout or browser
	 * @see https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent#Key_names
	 */
	var translateToKey = {
	  8: 'Backspace',
	  9: 'Tab',
	  12: 'Clear',
	  13: 'Enter',
	  16: 'Shift',
	  17: 'Control',
	  18: 'Alt',
	  19: 'Pause',
	  20: 'CapsLock',
	  27: 'Escape',
	  32: ' ',
	  33: 'PageUp',
	  34: 'PageDown',
	  35: 'End',
	  36: 'Home',
	  37: 'ArrowLeft',
	  38: 'ArrowUp',
	  39: 'ArrowRight',
	  40: 'ArrowDown',
	  45: 'Insert',
	  46: 'Delete',
	  112: 'F1', 113: 'F2', 114: 'F3', 115: 'F4', 116: 'F5', 117: 'F6',
	  118: 'F7', 119: 'F8', 120: 'F9', 121: 'F10', 122: 'F11', 123: 'F12',
	  144: 'NumLock',
	  145: 'ScrollLock',
	  224: 'Meta'
	};

	/**
	 * @param {object} nativeEvent Native browser event.
	 * @return {string} Normalized `key` property.
	 */
	function getEventKey(nativeEvent) {
	  if (nativeEvent.key) {
	    // Normalize inconsistent values reported by browsers due to
	    // implementations of a working draft specification.

	    // FireFox implements `key` but returns `MozPrintableKey` for all
	    // printable characters (normalized to `Unidentified`), ignore it.
	    var key = normalizeKey[nativeEvent.key] || nativeEvent.key;
	    if (key !== 'Unidentified') {
	      return key;
	    }
	  }

	  // Browser does not implement `key`, polyfill as much of it as we can.
	  if (nativeEvent.type === 'keypress') {
	    var charCode = getEventCharCode(nativeEvent);

	    // The enter-key is technically both printable and non-printable and can
	    // thus be captured by `keypress`, no other non-printable key should.
	    return charCode === 13 ? 'Enter' : String.fromCharCode(charCode);
	  }
	  if (nativeEvent.type === 'keydown' || nativeEvent.type === 'keyup') {
	    // While user keyboard layout determines the actual meaning of each
	    // `keyCode` value, almost all function keys have a universal value.
	    return translateToKey[nativeEvent.keyCode] || 'Unidentified';
	  }
	  return '';
	}

	module.exports = getEventKey;

/***/ },
/* 161 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticDragEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticMouseEvent = __webpack_require__(121);

	/**
	 * @interface DragEvent
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var DragEventInterface = {
	  dataTransfer: null
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticDragEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticMouseEvent.augmentClass(SyntheticDragEvent, DragEventInterface);

	module.exports = SyntheticDragEvent;

/***/ },
/* 162 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticTouchEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticUIEvent = __webpack_require__(122);

	var getEventModifierState = __webpack_require__(123);

	/**
	 * @interface TouchEvent
	 * @see http://www.w3.org/TR/touch-events/
	 */
	var TouchEventInterface = {
	  touches: null,
	  targetTouches: null,
	  changedTouches: null,
	  altKey: null,
	  metaKey: null,
	  ctrlKey: null,
	  shiftKey: null,
	  getModifierState: getEventModifierState
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticUIEvent}
	 */
	function SyntheticTouchEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticUIEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticUIEvent.augmentClass(SyntheticTouchEvent, TouchEventInterface);

	module.exports = SyntheticTouchEvent;

/***/ },
/* 163 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SyntheticWheelEvent
	 * @typechecks static-only
	 */

	'use strict';

	var SyntheticMouseEvent = __webpack_require__(121);

	/**
	 * @interface WheelEvent
	 * @see http://www.w3.org/TR/DOM-Level-3-Events/
	 */
	var WheelEventInterface = {
	  deltaX: function deltaX(event) {
	    return 'deltaX' in event ? event.deltaX :
	    // Fallback to `wheelDeltaX` for Webkit and normalize (right is positive).
	    'wheelDeltaX' in event ? -event.wheelDeltaX : 0;
	  },
	  deltaY: function deltaY(event) {
	    return 'deltaY' in event ? event.deltaY :
	    // Fallback to `wheelDeltaY` for Webkit and normalize (down is positive).
	    'wheelDeltaY' in event ? -event.wheelDeltaY :
	    // Fallback to `wheelDelta` for IE<9 and normalize (down is positive).
	    'wheelDelta' in event ? -event.wheelDelta : 0;
	  },
	  deltaZ: null,

	  // Browsers without "deltaMode" is reporting in raw wheel delta where one
	  // notch on the scroll is always +/- 120, roughly equivalent to pixels.
	  // A good approximation of DOM_DELTA_LINE (1) is 5% of viewport size or
	  // ~40 pixels, for DOM_DELTA_SCREEN (2) it is 87.5% of viewport size.
	  deltaMode: null
	};

	/**
	 * @param {object} dispatchConfig Configuration used to dispatch this event.
	 * @param {string} dispatchMarker Marker identifying the event target.
	 * @param {object} nativeEvent Native browser event.
	 * @extends {SyntheticMouseEvent}
	 */
	function SyntheticWheelEvent(dispatchConfig, dispatchMarker, nativeEvent) {
	  SyntheticMouseEvent.call(this, dispatchConfig, dispatchMarker, nativeEvent);
	}

	SyntheticMouseEvent.augmentClass(SyntheticWheelEvent, WheelEventInterface);

	module.exports = SyntheticWheelEvent;

/***/ },
/* 164 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule SVGDOMPropertyConfig
	 */

	/*jslint bitwise: true*/

	'use strict';

	var DOMProperty = __webpack_require__(60);

	var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;

	var SVGDOMPropertyConfig = {
	  Properties: {
	    clipPath: MUST_USE_ATTRIBUTE,
	    cx: MUST_USE_ATTRIBUTE,
	    cy: MUST_USE_ATTRIBUTE,
	    d: MUST_USE_ATTRIBUTE,
	    dx: MUST_USE_ATTRIBUTE,
	    dy: MUST_USE_ATTRIBUTE,
	    fill: MUST_USE_ATTRIBUTE,
	    fillOpacity: MUST_USE_ATTRIBUTE,
	    fontFamily: MUST_USE_ATTRIBUTE,
	    fontSize: MUST_USE_ATTRIBUTE,
	    fx: MUST_USE_ATTRIBUTE,
	    fy: MUST_USE_ATTRIBUTE,
	    gradientTransform: MUST_USE_ATTRIBUTE,
	    gradientUnits: MUST_USE_ATTRIBUTE,
	    markerEnd: MUST_USE_ATTRIBUTE,
	    markerMid: MUST_USE_ATTRIBUTE,
	    markerStart: MUST_USE_ATTRIBUTE,
	    offset: MUST_USE_ATTRIBUTE,
	    opacity: MUST_USE_ATTRIBUTE,
	    patternContentUnits: MUST_USE_ATTRIBUTE,
	    patternUnits: MUST_USE_ATTRIBUTE,
	    points: MUST_USE_ATTRIBUTE,
	    preserveAspectRatio: MUST_USE_ATTRIBUTE,
	    r: MUST_USE_ATTRIBUTE,
	    rx: MUST_USE_ATTRIBUTE,
	    ry: MUST_USE_ATTRIBUTE,
	    spreadMethod: MUST_USE_ATTRIBUTE,
	    stopColor: MUST_USE_ATTRIBUTE,
	    stopOpacity: MUST_USE_ATTRIBUTE,
	    stroke: MUST_USE_ATTRIBUTE,
	    strokeDasharray: MUST_USE_ATTRIBUTE,
	    strokeLinecap: MUST_USE_ATTRIBUTE,
	    strokeOpacity: MUST_USE_ATTRIBUTE,
	    strokeWidth: MUST_USE_ATTRIBUTE,
	    textAnchor: MUST_USE_ATTRIBUTE,
	    transform: MUST_USE_ATTRIBUTE,
	    version: MUST_USE_ATTRIBUTE,
	    viewBox: MUST_USE_ATTRIBUTE,
	    x1: MUST_USE_ATTRIBUTE,
	    x2: MUST_USE_ATTRIBUTE,
	    x: MUST_USE_ATTRIBUTE,
	    y1: MUST_USE_ATTRIBUTE,
	    y2: MUST_USE_ATTRIBUTE,
	    y: MUST_USE_ATTRIBUTE
	  },
	  DOMAttributeNames: {
	    clipPath: 'clip-path',
	    fillOpacity: 'fill-opacity',
	    fontFamily: 'font-family',
	    fontSize: 'font-size',
	    gradientTransform: 'gradientTransform',
	    gradientUnits: 'gradientUnits',
	    markerEnd: 'marker-end',
	    markerMid: 'marker-mid',
	    markerStart: 'marker-start',
	    patternContentUnits: 'patternContentUnits',
	    patternUnits: 'patternUnits',
	    preserveAspectRatio: 'preserveAspectRatio',
	    spreadMethod: 'spreadMethod',
	    stopColor: 'stop-color',
	    stopOpacity: 'stop-opacity',
	    strokeDasharray: 'stroke-dasharray',
	    strokeLinecap: 'stroke-linecap',
	    strokeOpacity: 'stroke-opacity',
	    strokeWidth: 'stroke-width',
	    textAnchor: 'text-anchor',
	    viewBox: 'viewBox'
	  }
	};

	module.exports = SVGDOMPropertyConfig;

/***/ },
/* 165 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule createFullPageComponent
	 * @typechecks
	 */

	'use strict';

	// Defeat circular references by requiring this directly.
	var ReactClass = __webpack_require__(53);
	var ReactElement = __webpack_require__(27);

	var invariant = __webpack_require__(23);

	/**
	 * Create a component that will throw an exception when unmounted.
	 *
	 * Components like <html> <head> and <body> can't be removed or added
	 * easily in a cross-browser way, however it's valuable to be able to
	 * take advantage of React's reconciliation for styling and <title>
	 * management. So we just document it and throw in dangerous cases.
	 *
	 * @param {string} tag The tag to wrap
	 * @return {function} convenience constructor of new component
	 */
	function createFullPageComponent(tag) {
	  var elementFactory = ReactElement.createFactory(tag);

	  var FullPageComponent = ReactClass.createClass({
	    tagName: tag.toUpperCase(),
	    displayName: 'ReactFullPageComponent' + tag,

	    componentWillUnmount: function componentWillUnmount() {
	      "production" !== process.env.NODE_ENV ? invariant(false, '%s tried to unmount. Because of cross-browser quirks it is ' + 'impossible to unmount some top-level components (eg <html>, <head>, ' + 'and <body>) reliably and efficiently. To fix this, have a single ' + 'top-level component that never unmounts render these elements.', this.constructor.displayName) : invariant(false);
	    },

	    render: function render() {
	      return elementFactory(this.props);
	    }
	  });

	  return FullPageComponent;
	}

	module.exports = createFullPageComponent;

/***/ },
/* 166 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDefaultPerf
	 * @typechecks static-only
	 */

	'use strict';

	var DOMProperty = __webpack_require__(60);
	var ReactDefaultPerfAnalysis = __webpack_require__(167);
	var ReactMount = __webpack_require__(83);
	var ReactPerf = __webpack_require__(44);

	var performanceNow = __webpack_require__(168);

	function roundFloat(val) {
	  return Math.floor(val * 100) / 100;
	}

	function addValue(obj, key, val) {
	  obj[key] = (obj[key] || 0) + val;
	}

	var ReactDefaultPerf = {
	  _allMeasurements: [], // last item in the list is the current one
	  _mountStack: [0],
	  _injected: false,

	  start: function start() {
	    if (!ReactDefaultPerf._injected) {
	      ReactPerf.injection.injectMeasure(ReactDefaultPerf.measure);
	    }

	    ReactDefaultPerf._allMeasurements.length = 0;
	    ReactPerf.enableMeasure = true;
	  },

	  stop: function stop() {
	    ReactPerf.enableMeasure = false;
	  },

	  getLastMeasurements: function getLastMeasurements() {
	    return ReactDefaultPerf._allMeasurements;
	  },

	  printExclusive: function printExclusive(measurements) {
	    measurements = measurements || ReactDefaultPerf._allMeasurements;
	    var summary = ReactDefaultPerfAnalysis.getExclusiveSummary(measurements);
	    console.table(summary.map(function (item) {
	      return {
	        'Component class name': item.componentName,
	        'Total inclusive time (ms)': roundFloat(item.inclusive),
	        'Exclusive mount time (ms)': roundFloat(item.exclusive),
	        'Exclusive render time (ms)': roundFloat(item.render),
	        'Mount time per instance (ms)': roundFloat(item.exclusive / item.count),
	        'Render time per instance (ms)': roundFloat(item.render / item.count),
	        'Instances': item.count
	      };
	    }));
	    // TODO: ReactDefaultPerfAnalysis.getTotalTime() does not return the correct
	    // number.
	  },

	  printInclusive: function printInclusive(measurements) {
	    measurements = measurements || ReactDefaultPerf._allMeasurements;
	    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements);
	    console.table(summary.map(function (item) {
	      return {
	        'Owner > component': item.componentName,
	        'Inclusive time (ms)': roundFloat(item.time),
	        'Instances': item.count
	      };
	    }));
	    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
	  },

	  getMeasurementsSummaryMap: function getMeasurementsSummaryMap(measurements) {
	    var summary = ReactDefaultPerfAnalysis.getInclusiveSummary(measurements, true);
	    return summary.map(function (item) {
	      return {
	        'Owner > component': item.componentName,
	        'Wasted time (ms)': item.time,
	        'Instances': item.count
	      };
	    });
	  },

	  printWasted: function printWasted(measurements) {
	    measurements = measurements || ReactDefaultPerf._allMeasurements;
	    console.table(ReactDefaultPerf.getMeasurementsSummaryMap(measurements));
	    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
	  },

	  printDOM: function printDOM(measurements) {
	    measurements = measurements || ReactDefaultPerf._allMeasurements;
	    var summary = ReactDefaultPerfAnalysis.getDOMSummary(measurements);
	    console.table(summary.map(function (item) {
	      var result = {};
	      result[DOMProperty.ID_ATTRIBUTE_NAME] = item.id;
	      result['type'] = item.type;
	      result['args'] = JSON.stringify(item.args);
	      return result;
	    }));
	    console.log('Total time:', ReactDefaultPerfAnalysis.getTotalTime(measurements).toFixed(2) + ' ms');
	  },

	  _recordWrite: function _recordWrite(id, fnName, totalTime, args) {
	    // TODO: totalTime isn't that useful since it doesn't count paints/reflows
	    var writes = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].writes;
	    writes[id] = writes[id] || [];
	    writes[id].push({
	      type: fnName,
	      time: totalTime,
	      args: args
	    });
	  },

	  measure: function measure(moduleName, fnName, func) {
	    return function () {
	      for (var args = [], $__0 = 0, $__1 = arguments.length; $__0 < $__1; $__0++) args.push(arguments[$__0]);
	      var totalTime;
	      var rv;
	      var start;

	      if (fnName === '_renderNewRootComponent' || fnName === 'flushBatchedUpdates') {
	        // A "measurement" is a set of metrics recorded for each flush. We want
	        // to group the metrics for a given flush together so we can look at the
	        // components that rendered and the DOM operations that actually
	        // happened to determine the amount of "wasted work" performed.
	        ReactDefaultPerf._allMeasurements.push({
	          exclusive: {},
	          inclusive: {},
	          render: {},
	          counts: {},
	          writes: {},
	          displayNames: {},
	          totalTime: 0
	        });
	        start = performanceNow();
	        rv = func.apply(this, args);
	        ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1].totalTime = performanceNow() - start;
	        return rv;
	      } else if (fnName === '_mountImageIntoNode' || moduleName === 'ReactDOMIDOperations') {
	        start = performanceNow();
	        rv = func.apply(this, args);
	        totalTime = performanceNow() - start;

	        if (fnName === '_mountImageIntoNode') {
	          var mountID = ReactMount.getID(args[1]);
	          ReactDefaultPerf._recordWrite(mountID, fnName, totalTime, args[0]);
	        } else if (fnName === 'dangerouslyProcessChildrenUpdates') {
	          // special format
	          args[0].forEach(function (update) {
	            var writeArgs = {};
	            if (update.fromIndex !== null) {
	              writeArgs.fromIndex = update.fromIndex;
	            }
	            if (update.toIndex !== null) {
	              writeArgs.toIndex = update.toIndex;
	            }
	            if (update.textContent !== null) {
	              writeArgs.textContent = update.textContent;
	            }
	            if (update.markupIndex !== null) {
	              writeArgs.markup = args[1][update.markupIndex];
	            }
	            ReactDefaultPerf._recordWrite(update.parentID, update.type, totalTime, writeArgs);
	          });
	        } else {
	          // basic format
	          ReactDefaultPerf._recordWrite(args[0], fnName, totalTime, Array.prototype.slice.call(args, 1));
	        }
	        return rv;
	      } else if (moduleName === 'ReactCompositeComponent' && ( // TODO: receiveComponent()?
	      fnName === 'mountComponent' || fnName === 'updateComponent' || fnName === '_renderValidatedComponent')) {

	        if (typeof this._currentElement.type === 'string') {
	          return func.apply(this, args);
	        }

	        var rootNodeID = fnName === 'mountComponent' ? args[0] : this._rootNodeID;
	        var isRender = fnName === '_renderValidatedComponent';
	        var isMount = fnName === 'mountComponent';

	        var mountStack = ReactDefaultPerf._mountStack;
	        var entry = ReactDefaultPerf._allMeasurements[ReactDefaultPerf._allMeasurements.length - 1];

	        if (isRender) {
	          addValue(entry.counts, rootNodeID, 1);
	        } else if (isMount) {
	          mountStack.push(0);
	        }

	        start = performanceNow();
	        rv = func.apply(this, args);
	        totalTime = performanceNow() - start;

	        if (isRender) {
	          addValue(entry.render, rootNodeID, totalTime);
	        } else if (isMount) {
	          var subMountTime = mountStack.pop();
	          mountStack[mountStack.length - 1] += totalTime;
	          addValue(entry.exclusive, rootNodeID, totalTime - subMountTime);
	          addValue(entry.inclusive, rootNodeID, totalTime);
	        } else {
	          addValue(entry.inclusive, rootNodeID, totalTime);
	        }

	        entry.displayNames[rootNodeID] = {
	          current: this.getName(),
	          owner: this._currentElement._owner ? this._currentElement._owner.getName() : '<root>'
	        };

	        return rv;
	      } else {
	        return func.apply(this, args);
	      }
	    };
	  }
	};

	module.exports = ReactDefaultPerf;

/***/ },
/* 167 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactDefaultPerfAnalysis
	 */

	'use strict';

	var assign = __webpack_require__(29);

	// Don't try to save users less than 1.2ms (a number I made up)
	var DONT_CARE_THRESHOLD = 1.2;
	var DOM_OPERATION_TYPES = {
	  '_mountImageIntoNode': 'set innerHTML',
	  INSERT_MARKUP: 'set innerHTML',
	  MOVE_EXISTING: 'move',
	  REMOVE_NODE: 'remove',
	  TEXT_CONTENT: 'set textContent',
	  'updatePropertyByID': 'update attribute',
	  'deletePropertyByID': 'delete attribute',
	  'updateStylesByID': 'update styles',
	  'updateInnerHTMLByID': 'set innerHTML',
	  'dangerouslyReplaceNodeWithMarkupByID': 'replace'
	};

	function getTotalTime(measurements) {
	  // TODO: return number of DOM ops? could be misleading.
	  // TODO: measure dropped frames after reconcile?
	  // TODO: log total time of each reconcile and the top-level component
	  // class that triggered it.
	  var totalTime = 0;
	  for (var i = 0; i < measurements.length; i++) {
	    var measurement = measurements[i];
	    totalTime += measurement.totalTime;
	  }
	  return totalTime;
	}

	function getDOMSummary(measurements) {
	  var items = [];
	  for (var i = 0; i < measurements.length; i++) {
	    var measurement = measurements[i];
	    var id;

	    for (id in measurement.writes) {
	      measurement.writes[id].forEach(function (write) {
	        items.push({
	          id: id,
	          type: DOM_OPERATION_TYPES[write.type] || write.type,
	          args: write.args
	        });
	      });
	    }
	  }
	  return items;
	}

	function getExclusiveSummary(measurements) {
	  var candidates = {};
	  var displayName;

	  for (var i = 0; i < measurements.length; i++) {
	    var measurement = measurements[i];
	    var allIDs = assign({}, measurement.exclusive, measurement.inclusive);

	    for (var id in allIDs) {
	      displayName = measurement.displayNames[id].current;

	      candidates[displayName] = candidates[displayName] || {
	        componentName: displayName,
	        inclusive: 0,
	        exclusive: 0,
	        render: 0,
	        count: 0
	      };
	      if (measurement.render[id]) {
	        candidates[displayName].render += measurement.render[id];
	      }
	      if (measurement.exclusive[id]) {
	        candidates[displayName].exclusive += measurement.exclusive[id];
	      }
	      if (measurement.inclusive[id]) {
	        candidates[displayName].inclusive += measurement.inclusive[id];
	      }
	      if (measurement.counts[id]) {
	        candidates[displayName].count += measurement.counts[id];
	      }
	    }
	  }

	  // Now make a sorted array with the results.
	  var arr = [];
	  for (displayName in candidates) {
	    if (candidates[displayName].exclusive >= DONT_CARE_THRESHOLD) {
	      arr.push(candidates[displayName]);
	    }
	  }

	  arr.sort(function (a, b) {
	    return b.exclusive - a.exclusive;
	  });

	  return arr;
	}

	function getInclusiveSummary(measurements, onlyClean) {
	  var candidates = {};
	  var inclusiveKey;

	  for (var i = 0; i < measurements.length; i++) {
	    var measurement = measurements[i];
	    var allIDs = assign({}, measurement.exclusive, measurement.inclusive);
	    var cleanComponents;

	    if (onlyClean) {
	      cleanComponents = getUnchangedComponents(measurement);
	    }

	    for (var id in allIDs) {
	      if (onlyClean && !cleanComponents[id]) {
	        continue;
	      }

	      var displayName = measurement.displayNames[id];

	      // Inclusive time is not useful for many components without knowing where
	      // they are instantiated. So we aggregate inclusive time with both the
	      // owner and current displayName as the key.
	      inclusiveKey = displayName.owner + ' > ' + displayName.current;

	      candidates[inclusiveKey] = candidates[inclusiveKey] || {
	        componentName: inclusiveKey,
	        time: 0,
	        count: 0
	      };

	      if (measurement.inclusive[id]) {
	        candidates[inclusiveKey].time += measurement.inclusive[id];
	      }
	      if (measurement.counts[id]) {
	        candidates[inclusiveKey].count += measurement.counts[id];
	      }
	    }
	  }

	  // Now make a sorted array with the results.
	  var arr = [];
	  for (inclusiveKey in candidates) {
	    if (candidates[inclusiveKey].time >= DONT_CARE_THRESHOLD) {
	      arr.push(candidates[inclusiveKey]);
	    }
	  }

	  arr.sort(function (a, b) {
	    return b.time - a.time;
	  });

	  return arr;
	}

	function getUnchangedComponents(measurement) {
	  // For a given reconcile, look at which components did not actually
	  // render anything to the DOM and return a mapping of their ID to
	  // the amount of time it took to render the entire subtree.
	  var cleanComponents = {};
	  var dirtyLeafIDs = Object.keys(measurement.writes);
	  var allIDs = assign({}, measurement.exclusive, measurement.inclusive);

	  for (var id in allIDs) {
	    var isDirty = false;
	    // For each component that rendered, see if a component that triggered
	    // a DOM op is in its subtree.
	    for (var i = 0; i < dirtyLeafIDs.length; i++) {
	      if (dirtyLeafIDs[i].indexOf(id) === 0) {
	        isDirty = true;
	        break;
	      }
	    }
	    if (!isDirty && measurement.counts[id] > 0) {
	      cleanComponents[id] = true;
	    }
	  }
	  return cleanComponents;
	}

	var ReactDefaultPerfAnalysis = {
	  getExclusiveSummary: getExclusiveSummary,
	  getInclusiveSummary: getInclusiveSummary,
	  getDOMSummary: getDOMSummary,
	  getTotalTime: getTotalTime
	};

	module.exports = ReactDefaultPerfAnalysis;

/***/ },
/* 168 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule performanceNow
	 * @typechecks
	 */

	"use strict";

	var performance = __webpack_require__(169);

	/**
	 * Detect if we can use `window.performance.now()` and gracefully fallback to
	 * `Date.now()` if it doesn't exist. We need to support Firefox < 15 for now
	 * because of Facebook's testing infrastructure.
	 */
	if (!performance || !performance.now) {
	  performance = Date;
	}

	var performanceNow = performance.now.bind(performance);

	module.exports = performanceNow;

/***/ },
/* 169 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule performance
	 * @typechecks
	 */

	"use strict";

	var ExecutionEnvironment = __webpack_require__(67);

	var performance;

	if (ExecutionEnvironment.canUseDOM) {
	  performance = window.performance || window.msPerformance || window.webkitPerformance;
	}

	module.exports = performance || {};

/***/ },
/* 170 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @typechecks static-only
	 * @providesModule ReactServerRendering
	 */
	'use strict';

	var ReactElement = __webpack_require__(27);
	var ReactInstanceHandles = __webpack_require__(35);
	var ReactMarkupChecksum = __webpack_require__(93);
	var ReactServerRenderingTransaction = __webpack_require__(171);

	var emptyObject = __webpack_require__(30);
	var instantiateReactComponent = __webpack_require__(99);
	var invariant = __webpack_require__(23);

	/**
	 * @param {ReactElement} element
	 * @return {string} the HTML markup
	 */
	function renderToString(element) {
	  "production" !== process.env.NODE_ENV ? invariant(ReactElement.isValidElement(element), 'renderToString(): You must pass a valid ReactElement.') : invariant(ReactElement.isValidElement(element));

	  var transaction;
	  try {
	    var id = ReactInstanceHandles.createReactRootID();
	    transaction = ReactServerRenderingTransaction.getPooled(false);

	    return transaction.perform(function () {
	      var componentInstance = instantiateReactComponent(element, null);
	      var markup = componentInstance.mountComponent(id, transaction, emptyObject);
	      return ReactMarkupChecksum.addChecksumToMarkup(markup);
	    }, null);
	  } finally {
	    ReactServerRenderingTransaction.release(transaction);
	  }
	}

	/**
	 * @param {ReactElement} element
	 * @return {string} the HTML markup, without the extra React ID and checksum
	 * (for generating static pages)
	 */
	function renderToStaticMarkup(element) {
	  "production" !== process.env.NODE_ENV ? invariant(ReactElement.isValidElement(element), 'renderToStaticMarkup(): You must pass a valid ReactElement.') : invariant(ReactElement.isValidElement(element));

	  var transaction;
	  try {
	    var id = ReactInstanceHandles.createReactRootID();
	    transaction = ReactServerRenderingTransaction.getPooled(true);

	    return transaction.perform(function () {
	      var componentInstance = instantiateReactComponent(element, null);
	      return componentInstance.mountComponent(id, transaction, emptyObject);
	    }, null);
	  } finally {
	    ReactServerRenderingTransaction.release(transaction);
	  }
	}

	module.exports = {
	  renderToString: renderToString,
	  renderToStaticMarkup: renderToStaticMarkup
	};

/***/ },
/* 171 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2014-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule ReactServerRenderingTransaction
	 * @typechecks
	 */

	'use strict';

	var PooledClass = __webpack_require__(25);
	var CallbackQueue = __webpack_require__(43);
	var ReactPutListenerQueue = __webpack_require__(151);
	var Transaction = __webpack_require__(52);

	var assign = __webpack_require__(29);
	var emptyFunction = __webpack_require__(32);

	/**
	 * Provides a `CallbackQueue` queue for collecting `onDOMReady` callbacks
	 * during the performing of the transaction.
	 */
	var ON_DOM_READY_QUEUEING = {
	  /**
	   * Initializes the internal `onDOMReady` queue.
	   */
	  initialize: function initialize() {
	    this.reactMountReady.reset();
	  },

	  close: emptyFunction
	};

	var PUT_LISTENER_QUEUEING = {
	  initialize: function initialize() {
	    this.putListenerQueue.reset();
	  },

	  close: emptyFunction
	};

	/**
	 * Executed within the scope of the `Transaction` instance. Consider these as
	 * being member methods, but with an implied ordering while being isolated from
	 * each other.
	 */
	var TRANSACTION_WRAPPERS = [PUT_LISTENER_QUEUEING, ON_DOM_READY_QUEUEING];

	/**
	 * @class ReactServerRenderingTransaction
	 * @param {boolean} renderToStaticMarkup
	 */
	function ReactServerRenderingTransaction(renderToStaticMarkup) {
	  this.reinitializeTransaction();
	  this.renderToStaticMarkup = renderToStaticMarkup;
	  this.reactMountReady = CallbackQueue.getPooled(null);
	  this.putListenerQueue = ReactPutListenerQueue.getPooled();
	}

	var Mixin = {
	  /**
	   * @see Transaction
	   * @abstract
	   * @final
	   * @return {array} Empty list of operation wrap proceedures.
	   */
	  getTransactionWrappers: function getTransactionWrappers() {
	    return TRANSACTION_WRAPPERS;
	  },

	  /**
	   * @return {object} The queue to collect `onDOMReady` callbacks with.
	   */
	  getReactMountReady: function getReactMountReady() {
	    return this.reactMountReady;
	  },

	  getPutListenerQueue: function getPutListenerQueue() {
	    return this.putListenerQueue;
	  },

	  /**
	   * `PooledClass` looks for this, and will invoke this before allowing this
	   * instance to be resused.
	   */
	  destructor: function destructor() {
	    CallbackQueue.release(this.reactMountReady);
	    this.reactMountReady = null;

	    ReactPutListenerQueue.release(this.putListenerQueue);
	    this.putListenerQueue = null;
	  }
	};

	assign(ReactServerRenderingTransaction.prototype, Transaction.Mixin, Mixin);

	PooledClass.addPoolingTo(ReactServerRenderingTransaction);

	module.exports = ReactServerRenderingTransaction;

/***/ },
/* 172 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Copyright 2013-2015, Facebook, Inc.
	 * All rights reserved.
	 *
	 * This source code is licensed under the BSD-style license found in the
	 * LICENSE file in the root directory of this source tree. An additional grant
	 * of patent rights can be found in the PATENTS file in the same directory.
	 *
	 * @providesModule onlyChild
	 */
	'use strict';

	var ReactElement = __webpack_require__(27);

	var invariant = __webpack_require__(23);

	/**
	 * Returns the first child in a collection of children and verifies that there
	 * is only one child in the collection. The current implementation of this
	 * function assumes that a single child gets passed without a wrapper, but the
	 * purpose of this helper function is to abstract away the particular structure
	 * of children.
	 *
	 * @param {?object} children Child collection structure.
	 * @return {ReactComponent} The first and only `ReactComponent` contained in the
	 * structure.
	 */
	function onlyChild(children) {
	  "production" !== process.env.NODE_ENV ? invariant(ReactElement.isValidElement(children), 'onlyChild must be passed a children with exactly one child.') : invariant(ReactElement.isValidElement(children));
	  return children;
	}

	module.exports = onlyChild;

/***/ },
/* 173 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _objectDestructuringEmpty(obj) { if (obj == null) throw new TypeError('Cannot destructure undefined'); }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _react = __webpack_require__(18);

	var _react2 = _interopRequireDefault(_react);

	var _SearchComponent = __webpack_require__(174);

	var _SearchComponent2 = _interopRequireDefault(_SearchComponent);

	var _MarkdownComponent = __webpack_require__(179);

	var _MarkdownComponent2 = _interopRequireDefault(_MarkdownComponent);

	var _RailComponent = __webpack_require__(334);

	var _RailComponent2 = _interopRequireDefault(_RailComponent);

	var _SearchStore = __webpack_require__(175);

	var _SearchStore2 = _interopRequireDefault(_SearchStore);

	var _Dispatcher = __webpack_require__(177);

	var _Dispatcher2 = _interopRequireDefault(_Dispatcher);

	var RootComponent = (function (_React$Component) {
	  _inherits(RootComponent, _React$Component);

	  function RootComponent(props) {
	    _classCallCheck(this, RootComponent);

	    _get(Object.getPrototypeOf(RootComponent.prototype), 'constructor', this).call(this, props);

	    this.action = new ActionCreator();

	    this.searchStore = _SearchStore2['default'];
	    this.searchStore.on('indicating', this.onIndicating.bind(this));
	  }

	  _createClass(RootComponent, [{
	    key: 'onIndicating',
	    value: function onIndicating(_ref, _ref2, mark) {
	      _objectDestructuringEmpty(_ref);

	      _objectDestructuringEmpty(_ref2);

	      if (!mark) return;
	      var rect = mark.getBoundingClientRect();
	      var root = _react2['default'].findDOMNode(this.refs.root);
	      root.scrollTop += rect.top - window.innerHeight / 2;
	    }
	  }, {
	    key: 'onScroll',
	    value: function onScroll(e) {
	      var root = _react2['default'].findDOMNode(this.refs.root);
	      this.action.scrolled(root.scrollTop);
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      return _react2['default'].createElement(
	        'div',
	        { className: 'root', ref: 'root', onScroll: this.onScroll.bind(this) },
	        _react2['default'].createElement(
	          'div',
	          { className: 'body' },
	          _react2['default'].createElement(_MarkdownComponent2['default'], null),
	          _react2['default'].createElement(_RailComponent2['default'], null)
	        ),
	        _react2['default'].createElement(_SearchComponent2['default'], null)
	      );
	    }
	  }]);

	  return RootComponent;
	})(_react2['default'].Component);

	exports['default'] = RootComponent;

	var ActionCreator = (function () {
	  function ActionCreator() {
	    _classCallCheck(this, ActionCreator);
	  }

	  _createClass(ActionCreator, [{
	    key: 'scrolled',
	    value: function scrolled(scrollTop) {
	      _Dispatcher2['default'].emit('scrolled', scrollTop);
	    }
	  }]);

	  return ActionCreator;
	})();

	module.exports = exports['default'];

/***/ },
/* 174 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _react = __webpack_require__(18);

	var _react2 = _interopRequireDefault(_react);

	var _SearchStore = __webpack_require__(175);

	var _SearchStore2 = _interopRequireDefault(_SearchStore);

	var _Dispatcher = __webpack_require__(177);

	var _Dispatcher2 = _interopRequireDefault(_Dispatcher);

	var _classnames = __webpack_require__(178);

	var _classnames2 = _interopRequireDefault(_classnames);

	var SearchComponent = (function (_React$Component) {
	  _inherits(SearchComponent, _React$Component);

	  function SearchComponent(props) {
	    _classCallCheck(this, SearchComponent);

	    _get(Object.getPrototypeOf(SearchComponent.prototype), 'constructor', this).call(this, props);
	    this.state = {
	      current: 0,
	      total: 0,
	      isShown: false,
	      disabled: false
	    };

	    this.action = new ActionCreator();
	    this.store = _SearchStore2['default'];
	    this.store.on('openFind', this.show.bind(this));
	    this.store.on('closeFind', this.hide.bind(this));
	    this.store.on('disabling', this.onDisabling.bind(this));
	    this.store.on('enabling', this.onEnabling.bind(this));
	    this.store.on('indicating', this.onIndicating.bind(this));
	  }

	  _createClass(SearchComponent, [{
	    key: 'show',
	    value: function show() {
	      this.setState({ isShown: true });
	      var input = _react2['default'].findDOMNode(this.refs.search);
	      input.focus();
	      input.select();
	    }
	  }, {
	    key: 'hide',
	    value: function hide() {
	      this.setState({ isShown: false });
	    }
	  }, {
	    key: 'onDisabling',
	    value: function onDisabling() {
	      this.setState({ disabled: true });
	    }
	  }, {
	    key: 'onEnabling',
	    value: function onEnabling() {
	      this.setState({ disabled: false });
	    }
	  }, {
	    key: 'onIndicating',
	    value: function onIndicating(current, total) {
	      this.setState({ current: current, total: total });
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      return _react2['default'].createElement(
	        'div',
	        { className: (0, _classnames2['default'])('search-box', { 'is-shown': this.state.isShown }) },
	        _react2['default'].createElement(
	          'div',
	          { className: 'search' },
	          _react2['default'].createElement('input', { type: 'text', ref: 'search', onInput: this.action.input, onKeyDown: this.action.keydown }),
	          _react2['default'].createElement(
	            'span',
	            { className: 'indication' },
	            this.state.total === 0 ? '' : this.state.current + 1 + ' / ' + this.state.total
	          )
	        ),
	        _react2['default'].createElement('button', { className: 'fa fa-chevron-up button-up', disabled: this.state.disabled, onClick: this.action.backward }),
	        _react2['default'].createElement('button', { className: 'fa fa-chevron-down button-down', disabled: this.state.disabled, onClick: this.action.forward }),
	        _react2['default'].createElement('button', { className: 'fa fa-times button-close', onClick: this.action.close })
	      );
	    }
	  }, {
	    key: 'onPrevClick',
	    value: function onPrevClick() {}
	  }, {
	    key: 'onNextClick',
	    value: function onNextClick() {}
	  }, {
	    key: 'onCloseClick',
	    value: function onCloseClick() {
	      this.action.close();
	    }
	  }]);

	  return SearchComponent;
	})(_react2['default'].Component);

	exports['default'] = SearchComponent;

	var ActionCreator = (function () {
	  function ActionCreator() {
	    _classCallCheck(this, ActionCreator);
	  }

	  _createClass(ActionCreator, [{
	    key: 'close',
	    value: function close() {
	      _Dispatcher2['default'].emit('closeFind');
	    }
	  }, {
	    key: 'input',
	    value: function input(e) {
	      _Dispatcher2['default'].emit('searching', e.currentTarget.value);
	    }
	  }, {
	    key: 'keydown',
	    value: function keydown(e) {
	      if (e.key != 'Enter') return;
	      _Dispatcher2['default'].emit('forwarding');
	    }
	  }, {
	    key: 'forward',
	    value: function forward() {
	      _Dispatcher2['default'].emit('forwarding');
	    }
	  }, {
	    key: 'backward',
	    value: function backward() {
	      _Dispatcher2['default'].emit('backwarding');
	    }
	  }]);

	  return ActionCreator;
	})();

	module.exports = exports['default'];

/***/ },
/* 175 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _events = __webpack_require__(8);

	var _events2 = _interopRequireDefault(_events);

	var _ipc = __webpack_require__(176);

	var _ipc2 = _interopRequireDefault(_ipc);

	var _Dispatcher = __webpack_require__(177);

	var _Dispatcher2 = _interopRequireDefault(_Dispatcher);

	exports['default'] = new ((function (_EventEmitter) {
	  _inherits(SearchStore, _EventEmitter);

	  function SearchStore() {
	    _classCallCheck(this, SearchStore);

	    _get(Object.getPrototypeOf(SearchStore.prototype), 'constructor', this).call(this);

	    this.focusedIndex = 0;
	    this.marks = [];

	    _ipc2['default'].on('openFind', this.onOpenFind.bind(this));
	    _Dispatcher2['default'].on('closeFind', this.onCloseFind.bind(this));
	    _Dispatcher2['default'].on('searched', this.onSearched.bind(this));
	    _Dispatcher2['default'].on('forwarding', this.onForwarding.bind(this));
	    _Dispatcher2['default'].on('backwarding', this.onBackwarding.bind(this));
	  }

	  _createClass(SearchStore, [{
	    key: 'onOpenFind',
	    value: function onOpenFind() {
	      this.emit('openFind');
	    }
	  }, {
	    key: 'onCloseFind',
	    value: function onCloseFind() {
	      this.emit('closeFind');
	    }
	  }, {
	    key: 'onSearched',
	    value: function onSearched(marks) {
	      this.focusedIndex = 0;
	      this.marks = marks;

	      if (this.marks.length === 0) {
	        this.emit('disabling');
	      } else {
	        this.emit('enabling');
	      }

	      this.onForwarding();
	    }
	  }, {
	    key: 'onForwarding',
	    value: function onForwarding() {
	      this.moveIndication(1);
	    }
	  }, {
	    key: 'onBackwarding',
	    value: function onBackwarding() {
	      this.moveIndication(-1);
	    }
	  }, {
	    key: 'moveIndication',
	    value: function moveIndication(delta) {
	      var len = this.marks.length;
	      var mark = this.marks[this.focusedIndex];
	      this.emit('indicating', this.focusedIndex, len, mark);

	      if (len === 0) {
	        return;
	      }

	      this.focusedIndex += delta;
	      if (this.focusedIndex >= len) {
	        this.focusedIndex = 0;
	      }
	      if (this.focusedIndex < 0) {
	        this.focusedIndex = len - 1;
	      }
	    }
	  }]);

	  return SearchStore;
	})(_events2['default']))();
	module.exports = exports['default'];

/***/ },
/* 176 */
/***/ function(module, exports) {

	module.exports = require('ipc');

/***/ },
/* 177 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	var _events = __webpack_require__(8);

	var _events2 = _interopRequireDefault(_events);

	exports['default'] = new _events2['default']();
	module.exports = exports['default'];

/***/ },
/* 178 */
/***/ function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;/*!
	  Copyright (c) 2015 Jed Watson.
	  Licensed under the MIT License (MIT), see
	  http://jedwatson.github.io/classnames
	*/

	'use strict';

	(function () {
		'use strict';

		function classNames() {

			var classes = '';

			for (var i = 0; i < arguments.length; i++) {
				var arg = arguments[i];
				if (!arg) continue;

				var argType = typeof arg;

				if ('string' === argType || 'number' === argType) {
					classes += ' ' + arg;
				} else if (Array.isArray(arg)) {
					classes += ' ' + classNames.apply(null, arg);
				} else if ('object' === argType) {
					for (var key in arg) {
						if (arg.hasOwnProperty(key) && arg[key]) {
							classes += ' ' + key;
						}
					}
				}
			}

			return classes.substr(1);
		}

		if (typeof module !== 'undefined' && module.exports) {
			module.exports = classNames;
		} else if (true) {
			// AMD. Register as an anonymous module.
			!(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
				return classNames;
			}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else {
			window.classNames = classNames;
		}
	})();

/***/ },
/* 179 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _react = __webpack_require__(18);

	var _react2 = _interopRequireDefault(_react);

	var _MyCompiler = __webpack_require__(180);

	var _MyCompiler2 = _interopRequireDefault(_MyCompiler);

	var _MarkdownStore = __webpack_require__(333);

	var _MarkdownStore2 = _interopRequireDefault(_MarkdownStore);

	var _SearchStore = __webpack_require__(175);

	var _SearchStore2 = _interopRequireDefault(_SearchStore);

	var _Dispatcher = __webpack_require__(177);

	var _Dispatcher2 = _interopRequireDefault(_Dispatcher);

	var MarkdownComponent = (function (_React$Component) {
	  _inherits(MarkdownComponent, _React$Component);

	  function MarkdownComponent(props) {
	    _classCallCheck(this, MarkdownComponent);

	    _get(Object.getPrototypeOf(MarkdownComponent.prototype), 'constructor', this).call(this, props);
	    this.state = {
	      md: '',
	      dirname: '',
	      search: '',
	      indication: -1
	    };

	    this.compiler = new _MyCompiler2['default']({
	      gfm: true,
	      breaks: true,
	      tables: true,
	      commonmark: true,
	      footnotes: true
	    });

	    _MarkdownStore2['default'].on('updating', this.onUpdating.bind(this));
	    _MarkdownStore2['default'].on('searching', this.onSearching.bind(this));
	    _SearchStore2['default'].on('indicating', this.onIndicating.bind(this));

	    this.action = new ActionCreator();
	  }

	  _createClass(MarkdownComponent, [{
	    key: 'onUpdating',
	    value: function onUpdating(md, dirname) {
	      this.isUpdating = true;
	      this.setState({ md: md, dirname: dirname });
	    }
	  }, {
	    key: 'onSearching',
	    value: function onSearching(search) {
	      this.isSearching = true;
	      this.setState({ search: search });
	    }
	  }, {
	    key: 'onIndicating',
	    value: function onIndicating(indication) {
	      this.setState({ indication: indication });
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      return this.compiler.compile(this.state);
	    }
	  }, {
	    key: 'componentDidUpdate',
	    value: function componentDidUpdate() {
	      if (this.isUpdating) {
	        this.isUpdating = false;
	        this.action.updated();
	      }
	      if (this.isSearching) {
	        this.isSearching = false;
	        var marks = [];
	        for (var i = 0; i < this.compiler.marksCount; i++) {
	          var mark = _react2['default'].findDOMNode(this.refs['mark' + i]);
	          marks.push(mark);
	        }
	        this.action.searched(marks);
	      }
	    }
	  }]);

	  return MarkdownComponent;
	})(_react2['default'].Component);

	exports['default'] = MarkdownComponent;

	var ActionCreator = (function () {
	  function ActionCreator() {
	    _classCallCheck(this, ActionCreator);
	  }

	  _createClass(ActionCreator, [{
	    key: 'updated',
	    value: function updated(marks) {
	      _Dispatcher2['default'].emit('updated');
	    }
	  }, {
	    key: 'searched',
	    value: function searched(marks) {
	      _Dispatcher2['default'].emit('searched', marks);
	    }
	  }]);

	  return ActionCreator;
	})();

	module.exports = exports['default'];

/***/ },
/* 180 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _react = __webpack_require__(18);

	var _react2 = _interopRequireDefault(_react);

	// import Compiler from 'imports?React=react!md2react'

	var _importsReactReactNode_modulesMd2reactSrcIndex = __webpack_require__(181);

	var _importsReactReactNode_modulesMd2reactSrcIndex2 = _interopRequireDefault(_importsReactReactNode_modulesMd2reactSrcIndex);

	var _path = __webpack_require__(2);

	var _path2 = _interopRequireDefault(_path);

	var _classnames = __webpack_require__(178);

	var _classnames2 = _interopRequireDefault(_classnames);

	var _reactHighlight = __webpack_require__(197);

	var _reactHighlight2 = _interopRequireDefault(_reactHighlight);

	var _node_modulesEmojioneEmojiJson = __webpack_require__(331);

	var _node_modulesEmojioneEmojiJson2 = _interopRequireDefault(_node_modulesEmojioneEmojiJson);

	var _emojione = __webpack_require__(332);

	var _emojione2 = _interopRequireDefault(_emojione);

	var emo = {};

	var _loop = function (key) {
	  var val = _node_modulesEmojioneEmojiJson2['default'][key];
	  emo[val.shortname] = val;
	  val.aliases.forEach(function (alias) {
	    emo[alias] = val;
	  });
	};

	for (var key in _node_modulesEmojioneEmojiJson2['default']) {
	  _loop(key);
	}

	var $ = _react2['default'].createElement;

	function emoji() {
	  if (typeof shortname === 'undefined' || shortname === '' || !(shortname in ns.emojioneList)) {
	    // if the shortname doesnt exist just return the entire match
	    return shortname;
	  } else {
	    unicode = ns.emojioneList[shortname][ns.emojioneList[shortname].length - 1].toUpperCase();

	    // depending on the settings, we'll either add the native unicode as the alt tag, otherwise the shortname
	    // alt = (ns.unicodeAlt) ? ns.convert(unicode) : shortname;

	    // if(ns.imageType === 'png') {
	    //   if(ns.sprites) {
	    //     replaceWith = '<span class="emojione-'+unicode+'" title="'+shortname+'">'+alt+'</span>';
	    //   } else {
	    //     replaceWith = '<img class="emojione" alt="'+alt+'" src="'+ns.imagePathPNG+unicode+'.png'+ns.cacheBustParam+'"/>';
	    //   }
	    // } else {
	    // svg
	    // if(ns.sprites) {
	    //   replaceWith = '<svg class="emojione"><description>'+alt+'</description><use xlink:href="'+ns.imagePathSVGSprites+'#emoji-'+unicode+'"></use></svg>';
	    // } else {
	    //   replaceWith = '<object class="emojione" data="'+ns.imagePathSVG+unicode+'.svg'+ns.cacheBustParam+'" type="image/svg+xml" standby="'+alt+'">'+alt+'</object>';
	    // }
	    // }

	    // return replaceWith;
	  }
	}

	function highlight(code, lang, key) {
	  return _react2['default'].createElement(
	    _reactHighlight2['default'],
	    { className: lang },
	    code
	  );
	}

	var MyCompiler = (function (_Compiler) {
	  _inherits(MyCompiler, _Compiler);

	  function MyCompiler(opts) {
	    _classCallCheck(this, MyCompiler);

	    opts.highlight = highlight;
	    _get(Object.getPrototypeOf(MyCompiler.prototype), 'constructor', this).call(this, opts);
	  }

	  _createClass(MyCompiler, [{
	    key: 'compile',
	    value: function compile(_ref) {
	      var md = _ref.md;
	      var dirname = _ref.dirname;
	      var search = _ref.search;
	      var indication = _ref.indication;

	      this.dirname = dirname;
	      if (search === '') {
	        this.search = null;
	      } else {
	        this.search = {
	          text: search,
	          regExp: new RegExp('(' + search + ')', 'ig')
	        };
	      }
	      this.indication = indication;

	      this.ids = {};
	      this.marksCount = 0;
	      return _get(Object.getPrototypeOf(MyCompiler.prototype), 'compile', this).call(this, md);
	    }
	  }, {
	    key: 'root',
	    value: function root(node, defs, key, tableAlign) {
	      return $('div', {
	        key: key,
	        className: 'markdown-body'
	      }, this.toChildren(node, defs, key));
	    }
	  }, {
	    key: 'text',
	    value: function text(node, defs, key, tableAlign) {
	      var _this = this;

	      if (node.value.indexOf(':') !== -1) {
	        var chunks = node.value.split(/:([0-9a-z_+-]+):/g).map(function (type, i) {
	          if (i % 2 === 0) {
	            return _react2['default'].createElement(
	              'span',
	              null,
	              type
	            );
	          }
	          if (type.charAt(0) === '+') {
	            type = type.substr(1);
	          }
	          return _react2['default'].createElement('i', { className: (0, _classnames2['default'])('emoji', 'emoji-' + type) });
	        });
	        return $('span', {}, chunks);
	      }

	      if (!this.search || node.value.indexOf(this.search.text) === -1) {
	        return node.value;
	      }
	      var children = [];
	      var words = node.value.split(this.search.regExp);
	      words = words.map(function (word, i) {
	        if (i % 2 === 0) {
	          return word;
	        }
	        return $('mark', {
	          className: _this.marksCount === _this.indication ? 'indicated' : '',
	          ref: 'mark' + _this.marksCount++
	        }, word);
	      });
	      return $('span', {}, words);
	    }
	  }, {
	    key: 'image',
	    value: function image(_ref2, defs, key, tableAlign) {
	      var src = _ref2.src;
	      var title = _ref2.title;
	      var alt = _ref2.alt;

	      if (!/^https?:\/\//.test(src)) {
	        src = _path2['default'].resolve(this.dirname, src);
	      }
	      return $('img', {
	        key: key,
	        src: src,
	        title: title,
	        alt: alt
	      });
	    }
	  }, {
	    key: 'link',
	    value: function link(node, defs, key, tableAlign) {
	      if (!/^https?:\/\//.test(node.href)) {
	        node.href = _path2['default'].resolve(this.dirname, node.href);
	      }
	      return $('a', {
	        key: key,
	        href: node.href,
	        title: node.title
	      }, this.toChildren(node, defs, key));
	    }
	  }, {
	    key: 'heading',
	    value: function heading(node, defs, key, tableAlign) {
	      var text = node.children.filter(function (child) {
	        return child.type == 'text';
	      }).map(function (child) {
	        return child.value;
	      }).join('');
	      var id = text.toLowerCase().replace(/\s/g, '-').replace(/[!<>#%@&='"`:;,\.\*\+\(\)\{\}\[\]\\\/\|\?\^\$]+/g, '');
	      if (this.ids[id] == null) {
	        this.ids[id] = 0;
	      } else {
	        this.ids[id]++;
	        id = id + '-' + this.ids[id];
	      }
	      return $('h' + node.depth.toString(), { key: key }, [$('a', { key: key + '-a', id: id, className: 'anchor', href: '#' + id }, [$('span', { key: key + '-a-span', className: 'icon icon-link' })]), this.toChildren(node, defs, key)]);
	    }
	  }]);

	  return MyCompiler;
	})(_importsReactReactNode_modulesMd2reactSrcIndex2['default']);

	exports['default'] = MyCompiler;
	module.exports = exports['default'];

/***/ },
/* 181 */
/***/ function(module, exports, __webpack_require__) {

	/*** IMPORTS FROM imports-loader ***/
	var React = __webpack_require__(18);

	var $, Compiler, defaultHTMLWrapperComponent, mdast, preprocess,
	  indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

	mdast = __webpack_require__(182);

	preprocess = __webpack_require__(196);

	$ = React.createElement;

	defaultHTMLWrapperComponent = React.createClass({
	  _update: function() {
	    var current, node;
	    current = this.props.html;
	    if (this._lastHtml !== current) {
	      this._lastHtml = current;
	      node = this.refs.htmlWrapper.getDOMNode();
	      node.contentDocument.body.innerHTML = this.props.html;
	      node.style.height = node.contentWindow.document.body.scrollHeight + 'px';
	      return node.style.width = node.contentWindow.document.body.scrollWidth + 'px';
	    }
	  },
	  componentDidUpdate: function() {
	    return this._update();
	  },
	  componentDidMount: function() {
	    return this._update();
	  },
	  render: function() {
	    return $('iframe', {
	      ref: 'htmlWrapper',
	      html: this.props.html,
	      style: {
	        border: 'none'
	      }
	    });
	  }
	});

	module.exports = Compiler = (function() {
	  Compiler.ATTR_WHITELIST = ['href', 'src', 'target'];

	  Compiler.getPropsFromHTMLNode = function(node, attrWhitelist) {
	    var attr, attrs, doc, i, j, parser, props, ref, ref1, string;
	    string = node.subtype === 'folded' ? node.startTag.value + node.endTag.value : node.subtype === 'void' ? node.value : null;
	    if (string == null) {
	      return null;
	    }
	    parser = new DOMParser();
	    doc = parser.parseFromString(string, 'text/html');
	    if (!this.isValidDocument(doc)) {
	      return null;
	    }
	    attrs = doc.body.firstElementChild.attributes;
	    props = {};
	    for (i = j = 0, ref = attrs.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
	      attr = attrs.item(i);
	      if ((attrWhitelist == null) || (ref1 = attr.name, indexOf.call(attrWhitelist, ref1) >= 0)) {
	        props[attr.name] = attr.value;
	      }
	    }
	    return props;
	  };

	  Compiler.isValidDocument = function(doc) {
	    var parsererrorNS;
	    parsererrorNS = (new DOMParser()).parseFromString('INVALID', 'text/xml').getElementsByTagName("parsererror")[0].namespaceURI;
	    return doc.getElementsByTagNameNS(parsererrorNS, 'parsererror').length === 0;
	  };

	  function Compiler(options) {
	    var ref, ref1, ref2, ref3;
	    this.options = options != null ? options : {};
	    this.sanitize = (ref = this.options.sanitize) != null ? ref : true;
	    this.htmlWrapperComponent = (ref1 = this.options.htmlWrapperComponent) != null ? ref1 : defaultHTMLWrapperComponent;
	    this.rawValueWrapper = (ref2 = this.options.rawValueWrapper) != null ? ref2 : function(text) {
	      return text;
	    };
	    this.highlight = (ref3 = this.options.highlight) != null ? ref3 : function(code, lang, key) {
	      return $('pre', {
	        key: key,
	        className: 'code'
	      }, [
	        $('code', {
	          key: key + '-_inner-code'
	        }, code)
	      ]);
	    };
	  }

	  Compiler.prototype.compile = function(raw) {
	    var ast, base, defs, ref, ref1;
	    ast = mdast.parse(raw, this.options);
	    ref = preprocess(ast, raw, this.options), ast = ref[0], defs = ref[1];
	    ast = (ref1 = typeof (base = this.options).preprocessAST === "function" ? base.preprocessAST(ast) : void 0) != null ? ref1 : ast;
	    return this._compile(ast, defs);
	  };

	  Compiler.prototype._compile = function(node, defs, parentKey, tableAlign) {
	    var fn, key;
	    if (parentKey == null) {
	      parentKey = '_start';
	    }
	    if (tableAlign == null) {
	      tableAlign = null;
	    }
	    key = parentKey + '_' + node.type;
	    fn = this[node.type];
	    if (fn == null) {
	      throw node.type + ' is unsuppoted node type. report to https://github.com/mizchi/md2react/issues';
	    }
	    return fn.call(this, node, defs, key, tableAlign);
	  };

	  Compiler.prototype.toChildren = function(node, defs, parentKey, tableAlign) {
	    var child, i;
	    if (tableAlign == null) {
	      tableAlign = [];
	    }
	    return (function() {
	      var j, len, ref, results;
	      ref = node.children;
	      results = [];
	      for (i = j = 0, len = ref.length; j < len; i = ++j) {
	        child = ref[i];
	        results.push(this._compile(child, defs, parentKey + '_' + i, tableAlign));
	      }
	      return results;
	    }).call(this);
	  };

	  Compiler.prototype.text = function(node, defs, key, tableAlign) {
	    return this.rawValueWrapper(node.value);
	  };

	  Compiler.prototype.escape = function(node, defs, key, tableAlign) {
	    return '\\';
	  };

	  Compiler.prototype["break"] = function(node, defs, key, tableAlign) {
	    return $('br', {
	      key: key
	    });
	  };

	  Compiler.prototype.horizontalRule = function(node, defs, key, tableAlign) {
	    return $('hr', {
	      key: key
	    });
	  };

	  Compiler.prototype.image = function(node, defs, key, tableAlign) {
	    return $('img', {
	      key: key,
	      src: node.src,
	      title: node.title,
	      alt: node.alt
	    });
	  };

	  Compiler.prototype.inlineCode = function(node, defs, key, tableAlign) {
	    return $('code', {
	      key: key,
	      className: 'inlineCode'
	    }, node.value);
	  };

	  Compiler.prototype.code = function(node, defs, key, tableAlign) {
	    return this.highlight(node.value, node.lang, key);
	  };

	  Compiler.prototype.root = function(node, defs, key, tableAlign) {
	    return $('div', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.strong = function(node, defs, key, tableAlign) {
	    return $('strong', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.emphasis = function(node, defs, key, tableAlign) {
	    return $('em', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype["delete"] = function(node, defs, key, tableAlign) {
	    return $('s', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.paragraph = function(node, defs, key, tableAlign) {
	    return $('p', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.link = function(node, defs, key, tableAlign) {
	    return $('a', {
	      key: key,
	      href: node.href,
	      title: node.title
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.heading = function(node, defs, key, tableAlign) {
	    return $('h' + node.depth.toString(), {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.list = function(node, defs, key, tableAlign) {
	    return $((node.ordered ? 'ol' : 'ul'), {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.listItem = function(node, defs, key, tableAlign) {
	    var className;
	    className = node.checked === true ? 'checked' : node.checked === false ? 'unchecked' : '';
	    return $('li', {
	      key: key,
	      className: className
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.blockquote = function(node, defs, key, tableAlign) {
	    return $('blockquote', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.linkReference = function(node, defs, key, tableAlign) {
	    var def, j, len;
	    for (j = 0, len = defs.length; j < len; j++) {
	      def = defs[j];
	      if (def.type === 'definition' && def.identifier === node.identifier) {
	        return $('a', {
	          key: key,
	          href: def.link,
	          title: def.title
	        }, this.toChildren(node, defs, key));
	      }
	    }
	    if (node.referenceType === 'full') {
	      return $('span', {
	        key: key
	      }, ['[', this.toChildren(node, defs, key), ']', "[" + node.identifier + "]"]);
	    } else {
	      return $('span', {
	        key: key
	      }, ['[', this.toChildren(node, defs, key), ']']);
	    }
	  };

	  Compiler.prototype.footnoteReference = function(node, defs, key, tableAlign) {
	    var def, j, len, ref, title;
	    title = '';
	    for (j = 0, len = defs.length; j < len; j++) {
	      def = defs[j];
	      if (def.footnoteNumber === node.footnoteNumber) {
	        title = (ref = def.link) != null ? ref : "...";
	        return $('sup', {
	          key: key,
	          id: "fnref" + node.footnoteNumber
	        }, [
	          $('a', {
	            key: key + '-a',
	            href: "#fn" + node.footnoteNumber,
	            title: title
	          }, "" + node.footnoteNumber)
	        ]);
	      }
	    }
	    return $('span', {
	      key: key
	    }, "[^" + node.identifier + "]");
	  };

	  Compiler.prototype.footnoteDefinitionCollection = function(node, defs, key, tableAlign) {
	    var items;
	    items = node.children.map((function(_this) {
	      return function(def, i) {
	        var defBody, k, para;
	        k = key + '-ol-li' + i;
	        defBody = null;
	        if (def.children != null) {
	          if ((para = def.children[def.children.length - 1]).type === 'paragraph') {
	            para.children.push({
	              type: 'text',
	              value: ' '
	            });
	            para.children.push({
	              type: 'link',
	              href: "#fnref" + def.footnoteNumber,
	              children: [
	                {
	                  type: 'text',
	                  value: '↩'
	                }
	              ]
	            });
	          }
	          defBody = _this.toChildren(def, defs, key);
	        } else {
	          defBody = $('p', {
	            key: k + '-p'
	          }, [
	            def.link, ' ', $('a', {
	              key: k + '-p-a',
	              href: "#fnref" + def.footnoteNumber
	            }, '↩')
	          ]);
	        }
	        return $('li', {
	          key: k,
	          id: "fn" + def.footnoteNumber
	        }, defBody);
	      };
	    })(this));
	    return $('div', {
	      key: key,
	      className: 'footnotes'
	    }, [
	      $('hr', {
	        key: key + '-hr'
	      }), $('ol', {
	        key: key + '-ol'
	      }, items)
	    ]);
	  };

	  Compiler.prototype.table = function(node, defs, key, tableAlign) {
	    return $('table', {
	      key: key
	    }, this.toChildren(node, defs, key, node.align));
	  };

	  Compiler.prototype.tableHeader = function(node, defs, key, tableAlign) {
	    return $('thead', {
	      key: key
	    }, [
	      $('tr', {
	        key: key + '-_inner-tr'
	      }, node.children.map((function(_this) {
	        return function(cell, i) {
	          var k, ref;
	          k = key + '-th' + i;
	          return $('th', {
	            key: k,
	            style: {
	              textAlign: (ref = tableAlign[i]) != null ? ref : 'left'
	            }
	          }, _this.toChildren(cell, defs, k));
	        };
	      })(this)))
	    ]);
	  };

	  Compiler.prototype.tableRow = function(node, defs, key, tableAlign) {
	    return $('tbody', {
	      key: key
	    }, [
	      $('tr', {
	        key: key + '-_inner-td'
	      }, node.children.map((function(_this) {
	        return function(cell, i) {
	          var k, ref;
	          k = key + '-td' + i;
	          return $('td', {
	            key: k,
	            style: {
	              textAlign: (ref = tableAlign[i]) != null ? ref : 'left'
	            }
	          }, _this.toChildren(cell, defs, k));
	        };
	      })(this)))
	    ]);
	  };

	  Compiler.prototype.tableCell = function(node, defs, key, tableAlign) {
	    return $('span', {
	      key: key
	    }, this.toChildren(node, defs, key));
	  };

	  Compiler.prototype.html = function(node, defs, key, tableAlign) {
	    var k, name, props, ref, ref1, ref2, ref3, value;
	    if (node.subtype === 'raw') {
	      return $(this.htmlWrapperComponent, {
	        key: key,
	        html: node.value
	      });
	    } else if (node.subtype === 'computed') {
	      k = key + '_' + node.tagName;
	      props = {};
	      ref1 = (ref = node.attrs) != null ? ref : {};
	      for (name in ref1) {
	        value = ref1[name];
	        props[name] = value;
	      }
	      props.key = k;
	      if (node.children != null) {
	        return $(node.tagName, props, this.toChildren(node, defs, k));
	      } else {
	        return $(node.tagName, props);
	      }
	    } else if (node.subtype === 'folded') {
	      k = key + '_' + node.tagName;
	      props = (ref2 = this.constructor.getPropsFromHTMLNode(node, this.constructor.ATTR_WHITELIST)) != null ? ref2 : {};
	      props.key = k;
	      return $(node.startTag.tagName, props, this.toChildren(node, defs, k));
	    } else if (node.subtype === 'void') {
	      k = key + '_' + node.tagName;
	      props = (ref3 = this.constructor.getPropsFromHTMLNode(node, this.constructor.ATTR_WHITELIST)) != null ? ref3 : {};
	      props.key = k;
	      return $(node.tagName, props);
	    } else if (node.subtype === 'special') {
	      return $('span', {
	        key: key + ':special',
	        style: {
	          color: 'gray'
	        }
	      }, node.value);
	    } else {
	      return $('span', {
	        key: key + ':parse-error',
	        style: {
	          backgroundColor: 'red',
	          color: 'white'
	        }
	      }, node.value);
	    }
	  };

	  return Compiler;

	})();


/***/ },
/* 182 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	/*
	 * Dependencies.
	 */

	var Ware = __webpack_require__(183);
	var parser = __webpack_require__(186);
	var stringifier = __webpack_require__(193);
	var File = __webpack_require__(195);
	var utilities = __webpack_require__(190);

	/*
	 * Methods.
	 */

	var clone = utilities.clone;
	var Parser = parser.Parser;
	var parseProto = Parser.prototype;
	var Compiler = stringifier.Compiler;
	var compileProto = Compiler.prototype;

	/**
	 * Throws if passed an exception.
	 *
	 * Here until the following PR is merged into
	 * segmentio/ware:
	 *
	 *   https://github.com/segmentio/ware/pull/21
	 *
	 * @param {Error?} exception
	 */
	function fail(exception) {
	    if (exception) {
	        throw exception;
	    }
	}

	/**
	 * Create a custom, cloned, Parser.
	 *
	 * @return {Function}
	 */
	function constructParser() {
	    var customProto;
	    var expressions;
	    var key;

	    /**
	     * Extensible prototype.
	     */
	    function CustomProto() {}

	    CustomProto.prototype = parseProto;

	    customProto = new CustomProto();

	    /**
	     * Extensible constructor.
	     */
	    function CustomParser() {
	        Parser.apply(this, arguments);
	    }

	    CustomParser.prototype = customProto;

	    /*
	     * Construct new objects for things that plugin's
	     * might modify.
	     */

	    customProto.blockTokenizers = clone(parseProto.blockTokenizers);
	    customProto.blockMethods = clone(parseProto.blockMethods);
	    customProto.inlineTokenizers = clone(parseProto.inlineTokenizers);
	    customProto.inlineMethods = clone(parseProto.inlineMethods);

	    expressions = parseProto.expressions;
	    customProto.expressions = {};

	    for (key in expressions) {
	        customProto.expressions[key] = clone(expressions[key]);
	    }

	    return CustomParser;
	}

	/**
	 * Create a custom, cloned, Compiler.
	 *
	 * @return {Function}
	 */
	function constructCompiler() {
	    var customProto;

	    /**
	     * Extensible prototype.
	     */
	    function CustomProto() {}

	    CustomProto.prototype = compileProto;

	    customProto = new CustomProto();

	    /**
	     * Extensible constructor.
	     */
	    function CustomCompiler() {
	        Compiler.apply(this, arguments);
	    }

	    CustomCompiler.prototype = customProto;

	    return CustomCompiler;
	}

	/**
	 * Construct an MDAST instance.
	 *
	 * @constructor {MDAST}
	 */
	function MDAST() {
	    var self = this;

	    if (!(self instanceof MDAST)) {
	        return new MDAST();
	    }

	    self.ware = new Ware();
	    self.attachers = [];

	    self.Parser = constructParser();
	    self.Compiler = constructCompiler();
	}

	/**
	 * Attach a plugin.
	 *
	 * @param {Function|Array.<Function>} attach
	 * @param {Object?} options
	 * @return {MDAST}
	 */
	function use(attach, options) {
	    var self = this;
	    var index;
	    var transformer;

	    if (!(self instanceof MDAST)) {
	        self = new MDAST();
	    }

	    /*
	     * Multiple attachers.
	     */

	    if ('length' in attach && typeof attach !== 'function') {
	        index = attach.length;

	        while (attach[--index]) {
	            self.use(attach[index]);
	        }

	        return self;
	    }

	    /*
	     * Single plugin.
	     */

	    if (self.attachers.indexOf(attach) === -1) {
	        transformer = attach(self, options);

	        self.attachers.push(attach);

	        if (transformer) {
	            self.ware.use(transformer);
	        }
	    }

	    return self;
	}

	/**
	 * Apply transformers to `node`.
	 *
	 * @param {Node} ast
	 * @param {File?} [file]
	 * @param {Function?} [done]
	 * @return {Node} - `ast`.
	 */
	function run(ast, file, done) {
	    var self = this;

	    if (typeof file === 'function') {
	        done = file;
	        file = null;
	    }

	    file = new File(file);

	    done = typeof done === 'function' ? done : fail;

	    if (typeof ast !== 'object' && typeof ast.type !== 'string') {
	        utilities.raise(ast, 'ast');
	    }

	    /*
	     * Only run when this is an instance of MDAST.
	     */

	    if (self.ware) {
	        self.ware.run(ast, file, done);
	    } else {
	        done(null, ast, file);
	    }

	    return ast;
	}

	/**
	 * Wrapper to pass a file to `parser`.
	 */
	function parse(value, options) {
	    return parser.call(this, new File(value), options);
	}

	/**
	 * Wrapper to pass a file to `stringifier`.
	 */
	function stringify(ast, file, options) {
	    if (options === null || options === undefined) {
	        options = file;
	        file = null;
	    }

	    return stringifier.call(this, ast, new File(file), options);
	}

	/**
	 * Parse a value and apply transformers.
	 *
	 * @param {string|File} value
	 * @param {Object?} [options]
	 * @param {Function?} [done]
	 * @return {string?}
	 */
	function process(value, options, done) {
	    var file = new File(value);
	    var self = this instanceof MDAST ? this : new MDAST();
	    var result = null;
	    var ast;

	    if (typeof options === 'function') {
	        done = options;
	        options = null;
	    }

	    if (!options) {
	        options = {};
	    }

	    /**
	     * Invoked when `run` completes. Hoists `result` into
	     * the upper scope to return something for sync
	     * operations.
	     */
	    function callback(exception) {
	        if (exception) {
	            (done || fail)(exception);
	        } else {
	            result = self.stringify(ast, file, options);

	            if (done) {
	                done(null, result, file);
	            }
	        }
	    }

	    ast = self.parse(file, options);
	    self.run(ast, file, callback);

	    return result;
	}

	/*
	 * Methods.
	 */

	var proto = MDAST.prototype;

	proto.use = use;
	proto.parse = parse;
	proto.run = run;
	proto.stringify = stringify;
	proto.process = process;

	/*
	 * Functions.
	 */

	MDAST.use = use;
	MDAST.parse = parse;
	MDAST.run = run;
	MDAST.stringify = stringify;
	MDAST.process = process;

	/*
	 * Expose `mdast`.
	 */

	module.exports = MDAST;

/***/ },
/* 183 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Module Dependencies
	 */

	'use strict';

	var slice = [].slice;
	var wrap = __webpack_require__(184);

	/**
	 * Expose `Ware`.
	 */

	module.exports = Ware;

	/**
	 * Throw an error.
	 *
	 * @param {Error} error
	 */

	function fail(err) {
	  throw err;
	}

	/**
	 * Initialize a new `Ware` manager, with optional `fns`.
	 *
	 * @param {Function or Array or Ware} fn (optional)
	 */

	function Ware(fn) {
	  if (!(this instanceof Ware)) return new Ware(fn);
	  this.fns = [];
	  if (fn) this.use(fn);
	}

	/**
	 * Use a middleware `fn`.
	 *
	 * @param {Function or Array or Ware} fn
	 * @return {Ware}
	 */

	Ware.prototype.use = function (fn) {
	  if (fn instanceof Ware) {
	    return this.use(fn.fns);
	  }

	  if (fn instanceof Array) {
	    for (var i = 0, f; f = fn[i++];) this.use(f);
	    return this;
	  }

	  this.fns.push(fn);
	  return this;
	};

	/**
	 * Run through the middleware with the given `args` and optional `callback`.
	 *
	 * @param {Mixed} args...
	 * @param {Function} callback (optional)
	 * @return {Ware}
	 */

	Ware.prototype.run = function () {
	  var fns = this.fns;
	  var ctx = this;
	  var i = 0;
	  var last = arguments[arguments.length - 1];
	  var done = 'function' == typeof last && last;
	  var args = done ? slice.call(arguments, 0, arguments.length - 1) : slice.call(arguments);

	  // next step
	  function next(err) {
	    if (err) return (done || fail)(err);
	    var fn = fns[i++];
	    var arr = slice.call(args);

	    if (!fn) {
	      return done && done.apply(null, [null].concat(args));
	    }

	    wrap(fn, next).apply(ctx, arr);
	  }

	  next();

	  return this;
	};

/***/ },
/* 184 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * Module Dependencies
	 */

	'use strict';

	var noop = function noop() {};
	var co = __webpack_require__(185);

	/**
	 * Export `wrap-fn`
	 */

	module.exports = wrap;

	/**
	 * Wrap a function to support
	 * sync, async, and gen functions.
	 *
	 * @param {Function} fn
	 * @param {Function} done
	 * @return {Function}
	 * @api public
	 */

	function wrap(fn, done) {
	  done = once(done || noop);

	  return function () {
	    // prevents arguments leakage
	    // see https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#3-managing-arguments
	    var i = arguments.length;
	    var args = new Array(i);
	    while (i--) args[i] = arguments[i];

	    var ctx = this;

	    // done
	    if (!fn) {
	      return done.apply(ctx, [null].concat(args));
	    }

	    // async
	    if (fn.length > args.length) {
	      // NOTE: this only handles uncaught synchronous errors
	      try {
	        return fn.apply(ctx, args.concat(done));
	      } catch (e) {
	        return done(e);
	      }
	    }

	    // generator
	    if (generator(fn)) {
	      return co(fn).apply(ctx, args.concat(done));
	    }

	    // sync
	    return sync(fn, done).apply(ctx, args);
	  };
	}

	/**
	 * Wrap a synchronous function execution.
	 *
	 * @param {Function} fn
	 * @param {Function} done
	 * @return {Function}
	 * @api private
	 */

	function sync(fn, done) {
	  return function () {
	    var ret;

	    try {
	      ret = fn.apply(this, arguments);
	    } catch (err) {
	      return done(err);
	    }

	    if (promise(ret)) {
	      ret.then(function (value) {
	        done(null, value);
	      }, done);
	    } else {
	      ret instanceof Error ? done(ret) : done(null, ret);
	    }
	  };
	}

	/**
	 * Is `value` a generator?
	 *
	 * @param {Mixed} value
	 * @return {Boolean}
	 * @api private
	 */

	function generator(value) {
	  return value && value.constructor && 'GeneratorFunction' == value.constructor.name;
	}

	/**
	 * Is `value` a promise?
	 *
	 * @param {Mixed} value
	 * @return {Boolean}
	 * @api private
	 */

	function promise(value) {
	  return value && 'function' == typeof value.then;
	}

	/**
	 * Once
	 */

	function once(fn) {
	  return function () {
	    var ret = fn.apply(this, arguments);
	    fn = noop;
	    return ret;
	  };
	}

/***/ },
/* 185 */
/***/ function(module, exports) {

	
	/**
	 * slice() reference.
	 */

	'use strict';

	var slice = Array.prototype.slice;

	/**
	 * Expose `co`.
	 */

	module.exports = co;

	/**
	 * Wrap the given generator `fn` and
	 * return a thunk.
	 *
	 * @param {Function} fn
	 * @return {Function}
	 * @api public
	 */

	function co(fn) {
	  var isGenFun = isGeneratorFunction(fn);

	  return function (done) {
	    var ctx = this;

	    // in toThunk() below we invoke co()
	    // with a generator, so optimize for
	    // this case
	    var gen = fn;

	    // we only need to parse the arguments
	    // if gen is a generator function.
	    if (isGenFun) {
	      var args = slice.call(arguments),
	          len = args.length;
	      var hasCallback = len && 'function' == typeof args[len - 1];
	      done = hasCallback ? args.pop() : error;
	      gen = fn.apply(this, args);
	    } else {
	      done = done || error;
	    }

	    next();

	    // #92
	    // wrap the callback in a setImmediate
	    // so that any of its errors aren't caught by `co`
	    function exit(err, res) {
	      setImmediate(function () {
	        done.call(ctx, err, res);
	      });
	    }

	    function next(err, res) {
	      var ret;

	      // multiple args
	      if (arguments.length > 2) res = slice.call(arguments, 1);

	      // error
	      if (err) {
	        try {
	          ret = gen['throw'](err);
	        } catch (e) {
	          return exit(e);
	        }
	      }

	      // ok
	      if (!err) {
	        try {
	          ret = gen.next(res);
	        } catch (e) {
	          return exit(e);
	        }
	      }

	      // done
	      if (ret.done) return exit(null, ret.value);

	      // normalize
	      ret.value = toThunk(ret.value, ctx);

	      // run
	      if ('function' == typeof ret.value) {
	        var called = false;
	        try {
	          ret.value.call(ctx, function () {
	            if (called) return;
	            called = true;
	            next.apply(ctx, arguments);
	          });
	        } catch (e) {
	          setImmediate(function () {
	            if (called) return;
	            called = true;
	            next(e);
	          });
	        }
	        return;
	      }

	      // invalid
	      next(new TypeError('You may only yield a function, promise, generator, array, or object, ' + 'but the following was passed: "' + String(ret.value) + '"'));
	    }
	  };
	}

	/**
	 * Convert `obj` into a normalized thunk.
	 *
	 * @param {Mixed} obj
	 * @param {Mixed} ctx
	 * @return {Function}
	 * @api private
	 */

	function toThunk(obj, ctx) {

	  if (isGeneratorFunction(obj)) {
	    return co(obj.call(ctx));
	  }

	  if (isGenerator(obj)) {
	    return co(obj);
	  }

	  if (isPromise(obj)) {
	    return promiseToThunk(obj);
	  }

	  if ('function' == typeof obj) {
	    return obj;
	  }

	  if (isObject(obj) || Array.isArray(obj)) {
	    return objectToThunk.call(ctx, obj);
	  }

	  return obj;
	}

	/**
	 * Convert an object of yieldables to a thunk.
	 *
	 * @param {Object} obj
	 * @return {Function}
	 * @api private
	 */

	function objectToThunk(obj) {
	  var ctx = this;
	  var isArray = Array.isArray(obj);

	  return function (done) {
	    var keys = Object.keys(obj);
	    var pending = keys.length;
	    var results = isArray ? new Array(pending) // predefine the array length
	    : new obj.constructor();
	    var finished;

	    if (!pending) {
	      setImmediate(function () {
	        done(null, results);
	      });
	      return;
	    }

	    // prepopulate object keys to preserve key ordering
	    if (!isArray) {
	      for (var i = 0; i < pending; i++) {
	        results[keys[i]] = undefined;
	      }
	    }

	    for (var i = 0; i < keys.length; i++) {
	      run(obj[keys[i]], keys[i]);
	    }

	    function run(fn, key) {
	      if (finished) return;
	      try {
	        fn = toThunk(fn, ctx);

	        if ('function' != typeof fn) {
	          results[key] = fn;
	          return --pending || done(null, results);
	        }

	        fn.call(ctx, function (err, res) {
	          if (finished) return;

	          if (err) {
	            finished = true;
	            return done(err);
	          }

	          results[key] = res;
	          --pending || done(null, results);
	        });
	      } catch (err) {
	        finished = true;
	        done(err);
	      }
	    }
	  };
	}

	/**
	 * Convert `promise` to a thunk.
	 *
	 * @param {Object} promise
	 * @return {Function}
	 * @api private
	 */

	function promiseToThunk(promise) {
	  return function (fn) {
	    promise.then(function (res) {
	      fn(null, res);
	    }, fn);
	  };
	}

	/**
	 * Check if `obj` is a promise.
	 *
	 * @param {Object} obj
	 * @return {Boolean}
	 * @api private
	 */

	function isPromise(obj) {
	  return obj && 'function' == typeof obj.then;
	}

	/**
	 * Check if `obj` is a generator.
	 *
	 * @param {Mixed} obj
	 * @return {Boolean}
	 * @api private
	 */

	function isGenerator(obj) {
	  return obj && 'function' == typeof obj.next && 'function' == typeof obj['throw'];
	}

	/**
	 * Check if `obj` is a generator function.
	 *
	 * @param {Mixed} obj
	 * @return {Boolean}
	 * @api private
	 */

	function isGeneratorFunction(obj) {
	  return obj && obj.constructor && 'GeneratorFunction' == obj.constructor.name;
	}

	/**
	 * Check for plain object.
	 *
	 * @param {Mixed} val
	 * @return {Boolean}
	 * @api private
	 */

	function isObject(val) {
	  return val && Object == val.constructor;
	}

	/**
	 * Throw `err` in a new stack.
	 *
	 * This is used when co() is invoked
	 * without supplying a callback, which
	 * should only be for demonstrational
	 * purposes.
	 *
	 * @param {Error} err
	 * @api private
	 */

	function error(err) {
	  if (!err) return;
	  setImmediate(function () {
	    throw err;
	  });
	}

/***/ },
/* 186 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * @author Titus Wormer
	 * @copyright 2015 Titus Wormer. All rights reserved.
	 * @module Parse
	 * @fileoverview Parse a markdown document into an
	 *   abstract syntax tree.
	 */

	'use strict';

	/*
	 * Dependencies.
	 */

	var he = __webpack_require__(187);
	var repeat = __webpack_require__(189);
	var utilities = __webpack_require__(190);
	var defaultExpressions = __webpack_require__(191);
	var defaultOptions = __webpack_require__(192).parse;

	/*
	 * Methods.
	 */

	var clone = utilities.clone;
	var copy = utilities.copy;
	var raise = utilities.raise;
	var trim = utilities.trim;
	var trimRightLines = utilities.trimRightLines;
	var clean = utilities.clean;
	var validate = utilities.validate;
	var normalize = utilities.normalizeIdentifier;
	var objectCreate = utilities.create;
	var arrayPush = [].push;

	/*
	 * Characters.
	 */

	var AT_SIGN = '@';
	var CARET = '^';
	var EQUALS = '=';
	var EXCLAMATION_MARK = '!';
	var MAILTO_PROTOCOL = 'mailto:';
	var NEW_LINE = '\n';
	var SPACE = ' ';
	var TAB = '\t';
	var EMPTY = '';
	var LT = '<';
	var GT = '>';
	var BRACKET_OPEN = '[';

	/*
	 * Types.
	 */

	var BLOCK = 'block';
	var INLINE = 'inline';
	var HORIZONTAL_RULE = 'horizontalRule';
	var HTML = 'html';
	var YAML = 'yaml';
	var TABLE = 'table';
	var TABLE_CELL = 'tableCell';
	var TABLE_HEADER = 'tableHeader';
	var TABLE_ROW = 'tableRow';
	var PARAGRAPH = 'paragraph';
	var TEXT = 'text';
	var CODE = 'code';
	var LIST = 'list';
	var LIST_ITEM = 'listItem';
	var FOOTNOTE_DEFINITION = 'footnoteDefinition';
	var HEADING = 'heading';
	var BLOCKQUOTE = 'blockquote';
	var LINK = 'link';
	var IMAGE = 'image';
	var FOOTNOTE = 'footnote';
	var ESCAPE = 'escape';
	var STRONG = 'strong';
	var EMPHASIS = 'emphasis';
	var DELETE = 'delete';
	var INLINE_CODE = 'inlineCode';
	var BREAK = 'break';
	var ROOT = 'root';

	/**
	 * Wrapper around he's `decode` function.
	 *
	 * @example
	 *   decode('&amp;'); // '&'
	 *   decode('&amp'); // '&'
	 *
	 * @param {string} value
	 * @param {function(string)} eat
	 * @return {string}
	 * @throws {Error} - When `eat.file.quiet` is not `true`.
	 *   However, by default `he` does not throw on incorrect
	 *   encoded entities, but when
	 *   `he.decode.options.strict: true`, they occur on
	 *   entities with a missing closing semi-colon.
	 */
	function decode(value, eat) {
	    try {
	        return he.decode(value);
	    } catch (exception) {
	        eat.file.fail(exception, eat.now());
	    }
	}

	/**
	 * Factory to de-escape a value, based on an expression
	 * at `key` in `scope`.
	 *
	 * @example
	 *   var expressions = {escape: /\\(a)/}
	 *   var descape = descapeFactory(expressions, 'escape');
	 *
	 * @param {Object} scope - Map of expressions.
	 * @param {string} key - Key in `map` at which the
	 *   non-global expression exists.
	 * @return {function(string): string} - Function which
	 *   takes a value and returns its unescaped version.
	 */
	function descapeFactory(scope, key) {
	    var globalExpression;
	    var expression;

	    /**
	     * Private method to get a global expression
	     * from the expression at `key` in `scope`.
	     * This method is smart about not recreating
	     * the expressions every time.
	     *
	     * @private
	     * @return {RegExp}
	     */
	    function generate() {
	        if (scope[key] !== globalExpression) {
	            globalExpression = scope[key];
	            expression = new RegExp(scope[key].source.replace(CARET, EMPTY), 'g');
	        }

	        return expression;
	    }

	    /**
	     * De-escape a string using the expression at `key`
	     * in `scope`.
	     *
	     * @example
	     *   var expressions = {escape: /\\(a)/}
	     *   var descape = descapeFactory(expressions, 'escape');
	     *   descape('\a'); // 'a'
	     *
	     * @param {string} value - Escaped string.
	     * @return {string} - Unescaped string.
	     */
	    function descape(value) {
	        return value.replace(generate(), '$1');
	    }

	    return descape;
	}

	/*
	 * Tab size.
	 */

	var TAB_SIZE = 4;

	/*
	 * Expressions.
	 */

	var EXPRESSION_RIGHT_ALIGNMENT = /^[ \t]*-+:[ \t]*$/;
	var EXPRESSION_CENTER_ALIGNMENT = /^[ \t]*:-+:[ \t]*$/;
	var EXPRESSION_LEFT_ALIGNMENT = /^[ \t]*:-+[ \t]*$/;
	var EXPRESSION_TABLE_FENCE = /^[ \t]*|\|[ \t]*$/g;
	var EXPRESSION_TABLE_INITIAL = /^[ \t]*\|/g;
	var EXPRESSION_TABLE_CONTENT = /[ \t]*?((?:\\[\s\S]|[^\|])+?)([ \t]?\|[ \t]?\n?|\n?$)/g;
	var EXPRESSION_TABLE_BORDER = /[ \t]*\|[ \t]*/;
	var EXPRESSION_BLOCK_QUOTE = /^[ \t]*>[ \t]?/gm;
	var EXPRESSION_BULLET = /^([ \t]*)([*+-]|\d+[.)])( {1,4}(?! )| |\t)([^\n]*)/;
	var EXPRESSION_PEDANTIC_BULLET = /^([ \t]*)([*+-]|\d+[.)])([ \t]+)/;
	var EXPRESSION_INITIAL_INDENT = /^( {1,4}|\t)?/gm;
	var EXPRESSION_INITIAL_TAB = /^( {4}|\t)?/gm;
	var EXPRESSION_HTML_LINK_OPEN = /^<a /i;
	var EXPRESSION_HTML_LINK_CLOSE = /^<\/a>/i;
	var EXPRESSION_LOOSE_LIST_ITEM = /\n\n(?!\s*$)/;
	var EXPRESSION_TASK_ITEM = /^\[([\ \t]|x|X)\][\ \t]/;

	/*
	 * A map of characters, and their column length,
	 * which can be used as indentation.
	 */

	var INDENTATION_CHARACTERS = objectCreate();

	INDENTATION_CHARACTERS[SPACE] = SPACE.length;
	INDENTATION_CHARACTERS[TAB] = TAB_SIZE;

	/**
	 * Gets indentation information for a line.
	 *
	 * @example
	 *   getIndent('  foo');
	 *   // {indent: 2, stops: {1: 0, 2: 1}}
	 *
	 *   getIndent('\tfoo');
	 *   // {indent: 4, stops: {4: 0}}
	 *
	 *   getIndent('  \tfoo');
	 *   // {indent: 4, stops: {1: 0, 2: 1, 4: 2}}
	 *
	 *   getIndent('\t  foo')
	 *   // {indent: 6, stops: {4: 0, 5: 1, 6: 2}}
	 *
	 * @param {string} value - Indented line.
	 * @return {Object}
	 */
	function getIndent(value) {
	    var index = 0;
	    var indent = 0;
	    var character = value.charAt(index);
	    var stops = {};
	    var size;

	    while (character in INDENTATION_CHARACTERS) {
	        size = INDENTATION_CHARACTERS[character];

	        indent += size;

	        if (size > 1) {
	            indent = Math.floor(indent / size) * size;
	        }

	        stops[indent] = index;

	        character = value.charAt(++index);
	    }

	    return {
	        'indent': indent,
	        'stops': stops
	    };
	}

	/**
	 * Remove the minimum indent from every line in `value`.
	 * Supports both tab, spaced, and mixed indentation (as
	 * well as possible).
	 *
	 * @example
	 *   removeIndentation('  foo'); // 'foo'
	 *   removeIndentation('    foo', 2); // '  foo'
	 *   removeIndentation('\tfoo', 2); // '  foo'
	 *   removeIndentation('  foo\n bar'); // ' foo\n bar'
	 *
	 * @param {string} value
	 * @param {number?} [maximum] - Maximum indentation
	 *   to remove.
	 * @return {string} - Unindented `value`.
	 */
	function removeIndentation(value, maximum) {
	    var values = value.split(NEW_LINE);
	    var position = values.length + 1;
	    var minIndent = Infinity;
	    var matrix = [];
	    var index;
	    var indentation;
	    var stops;
	    var padding;

	    values.unshift(repeat(SPACE, maximum) + EXCLAMATION_MARK);

	    while (position--) {
	        indentation = getIndent(values[position]);

	        matrix[position] = indentation.stops;

	        if (trim(values[position]).length === 0) {
	            continue;
	        }

	        if (indentation.indent) {
	            if (indentation.indent > 0 && indentation.indent < minIndent) {
	                minIndent = indentation.indent;
	            }
	        } else {
	            minIndent = Infinity;

	            break;
	        }
	    }

	    if (minIndent !== Infinity) {
	        position = values.length;

	        while (position--) {
	            stops = matrix[position];
	            index = minIndent;

	            while (index && !(index in stops)) {
	                index--;
	            }

	            if (trim(values[position]).length !== 0 && minIndent && index !== minIndent) {
	                padding = TAB;
	            } else {
	                padding = EMPTY;
	            }

	            values[position] = padding + values[position].slice(index in stops ? stops[index] + 1 : 0);
	        }
	    }

	    values.shift();

	    return values.join(NEW_LINE);
	}

	/**
	 * Ensure that `value` is at least indented with
	 * `indent` spaces.  Does not support tabs. Does support
	 * multiple lines.
	 *
	 * @example
	 *   ensureIndentation('foo', 2); // '  foo'
	 *   ensureIndentation('  foo', 4); // '    foo'
	 *
	 * @param {string} value
	 * @param {number} indent - The maximum amount of
	 *   spacing to insert.
	 * @return {string} - indented `value`.
	 */
	function ensureIndentation(value, indent) {
	    var values = value.split(NEW_LINE);
	    var length = values.length;
	    var index = -1;
	    var line;
	    var position;

	    while (++index < length) {
	        line = values[index];

	        position = -1;

	        while (++position < indent) {
	            if (line.charAt(position) !== SPACE) {
	                values[index] = repeat(SPACE, indent - position) + line;
	                break;
	            }
	        }
	    }

	    return values.join(NEW_LINE);
	}

	/**
	 * Get the alignment from a table rule.
	 *
	 * @example
	 *   getAlignment([':-', ':-:', '-:', '--']);
	 *   // ['left', 'center', 'right', null];
	 *
	 * @param {Array.<string>} cells
	 * @return {Array.<string?>}
	 */
	function getAlignment(cells) {
	    var results = [];
	    var index = -1;
	    var length = cells.length;
	    var alignment;

	    while (++index < length) {
	        alignment = cells[index];

	        if (EXPRESSION_RIGHT_ALIGNMENT.test(alignment)) {
	            results[index] = 'right';
	        } else if (EXPRESSION_CENTER_ALIGNMENT.test(alignment)) {
	            results[index] = 'center';
	        } else if (EXPRESSION_LEFT_ALIGNMENT.test(alignment)) {
	            results[index] = 'left';
	        } else {
	            results[index] = null;
	        }
	    }

	    return results;
	}

	/**
	 * Construct a state `toggler`: a function which inverses
	 * `property` in context based on its current value.
	 * The by `toggler` returned function restores that value.
	 *
	 * @example
	 *   var context = {};
	 *   var key = 'foo';
	 *   var val = true;
	 *   context[key] = val;
	 *   context.enter = stateToggler(key, val);
	 *   context[key]; // true
	 *   var exit = context.enter();
	 *   context[key]; // false
	 *   var nested = context.enter();
	 *   context[key]; // false
	 *   nested();
	 *   context[key]; // false
	 *   exit();
	 *   context[key]; // true
	 *
	 * @param {string} key - Property to toggle.
	 * @param {boolean} state - It's default state.
	 * @return {function(): function()} - Enter.
	 */
	function stateToggler(key, state) {
	    /**
	     * Construct a toggler for the bound `key`.
	     *
	     * @return {Function} - Exit state.
	     */
	    function enter() {
	        var self = this;
	        var current = self[key];

	        self[key] = !state;

	        /**
	         * State canceler, cancels the state, if allowed.
	         */
	        function exit() {
	            self[key] = current;
	        }

	        return exit;
	    }

	    return enter;
	}

	/**
	 * Construct a state toggler which doesn't toggle.
	 *
	 * @example
	 *   var context = {};
	 *   var key = 'foo';
	 *   var val = true;
	 *   context[key] = val;
	 *   context.enter = noopToggler();
	 *   context[key]; // true
	 *   var exit = context.enter();
	 *   context[key]; // true
	 *   exit();
	 *   context[key]; // true
	 *
	 * @return {function(): function()} - Enter.
	 */
	function noopToggler() {
	    /**
	     * No-operation.
	     */
	    function exit() {}

	    /**
	     * @return {Function}
	     */
	    function enter() {
	        return exit;
	    }

	    return enter;
	}

	/*
	 * Define nodes of a type which can be merged.
	 */

	var MERGEABLE_NODES = objectCreate();

	/**
	 * Merge two text nodes: `token` into `prev`.
	 *
	 * @param {Object} prev - Preceding sibling.
	 * @param {Object} token - Following sibling.
	 * @return {Object} - `prev`.
	 */
	MERGEABLE_NODES.text = function (prev, token) {
	    prev.value += token.value;

	    return prev;
	};

	/**
	 * Merge two blockquotes: `token` into `prev`, unless in
	 * CommonMark mode.
	 *
	 * @param {Object} prev - Preceding sibling.
	 * @param {Object} token - Following sibling.
	 * @return {Object} - `prev`, or `token` in CommonMark mode.
	 */
	MERGEABLE_NODES.blockquote = function (prev, token) {
	    if (this.options.commonmark) {
	        return token;
	    }

	    prev.children = prev.children.concat(token.children);

	    return prev;
	};

	/**
	 * Merge two lists: `token` into `prev`. Knows, about
	 * which bullets were used.
	 *
	 * @param {Object} prev - Preceding sibling.
	 * @param {Object} token - Following sibling.
	 * @return {Object} - `prev`, or `token` when the lists are
	 *   of different types (a different bullet is used).
	 */
	MERGEABLE_NODES.list = function (prev, token) {
	    if (!this.currentBullet || this.currentBullet !== this.previousBullet || this.currentBullet.length !== 1) {
	        return token;
	    }

	    prev.children = prev.children.concat(token.children);

	    return prev;
	};

	/**
	 * Tokenise a line.  Unsets `currentBullet` and
	 * `previousBullet` if more than one lines are found, thus
	 * preventing lists from merging when they use different
	 * bullets.
	 *
	 * @example
	 *   tokenizeNewline(eat, '\n\n');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Lines.
	 */
	function tokenizeNewline(eat, $0) {
	    if ($0.length > 1) {
	        this.currentBullet = null;
	        this.previousBullet = null;
	    }

	    eat($0);
	}

	/**
	 * Tokenise an indented code block.
	 *
	 * @example
	 *   tokenizeCode(eat, '\tfoo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole code.
	 * @return {Node} - `code` node.
	 */
	function tokenizeCode(eat, $0) {
	    $0 = trimRightLines($0);

	    return eat($0)(this.renderCodeBlock(removeIndentation($0, TAB_SIZE), null, eat));
	}

	/**
	 * Tokenise a fenced code block.
	 *
	 * @example
	 *   var $0 = '```js\nfoo()\n```';
	 *   tokenizeFences(eat, $0, '', '```', '`', 'js', 'foo()\n');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole code.
	 * @param {string} $1 - Initial spacing.
	 * @param {string} $2 - Initial fence.
	 * @param {string} $3 - Fence marker.
	 * @param {string} $4 - Programming language flag.
	 * @param {string} $5 - Content.
	 * @return {Node} - `code` node.
	 */
	function tokenizeFences(eat, $0, $1, $2, $3, $4, $5) {
	    $0 = trimRightLines($0);

	    /*
	     * If the initial fence was preceded by spaces,
	     * exdent that amount of white space from the code
	     * block.  Because it's possible that the code block
	     * is exdented, we first have to ensure at least
	     * those spaces are available.
	     */

	    if ($1) {
	        $5 = removeIndentation(ensureIndentation($5, $1.length), $1.length);
	    }

	    return eat($0)(this.renderCodeBlock($5, $4, eat));
	}

	/**
	 * Tokenise an ATX-style heading.
	 *
	 * @example
	 *   tokenizeHeading(eat, ' # foo', ' ', '#', ' ', 'foo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole heading.
	 * @param {string} $1 - Initial spacing.
	 * @param {string} $2 - Hashes.
	 * @param {string} $3 - Internal spacing.
	 * @param {string} $4 - Content.
	 * @return {Node} - `heading` node.
	 */
	function tokenizeHeading(eat, $0, $1, $2, $3, $4) {
	    var now = eat.now();

	    now.column += ($1 + $2 + ($3 || '')).length;

	    return eat($0)(this.renderHeading($4, $2.length, now));
	}

	/**
	 * Tokenise a Setext-style heading.
	 *
	 * @example
	 *   tokenizeLineHeading(eat, 'foo\n===', '', 'foo', '=');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole heading.
	 * @param {string} $1 - Initial spacing.
	 * @param {string} $2 - Content.
	 * @param {string} $3 - Underline marker.
	 * @return {Node} - `heading` node.
	 */
	function tokenizeLineHeading(eat, $0, $1, $2, $3) {
	    var now = eat.now();

	    now.column += $1.length;

	    return eat($0)(this.renderHeading($2, $3 === EQUALS ? 1 : 2, now));
	}

	/**
	 * Tokenise a horizontal rule.
	 *
	 * @example
	 *   tokenizeHorizontalRule(eat, '***');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole rule.
	 * @return {Node} - `horizontalRule` node.
	 */
	function tokenizeHorizontalRule(eat, $0) {
	    return eat($0)(this.renderVoid(HORIZONTAL_RULE));
	}

	/**
	 * Tokenise a blockquote.
	 *
	 * @example
	 *   tokenizeBlockquote(eat, '> Foo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole blockquote.
	 * @return {Node} - `blockquote` node.
	 */
	function tokenizeBlockquote(eat, $0) {
	    var now = eat.now();
	    var indent = this.indent(now.line);
	    var value = trimRightLines($0);
	    var add = eat(value);

	    value = value.replace(EXPRESSION_BLOCK_QUOTE, function (prefix) {
	        indent(prefix.length);

	        return '';
	    });

	    return add(this.renderBlockquote(value, now));
	}

	/**
	 * Tokenise a list.
	 *
	 * @example
	 *   tokenizeList(eat, '- Foo', '', '-');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole list.
	 * @param {string} $1 - Indent.
	 * @param {string} $2 - Bullet.
	 * @return {Node} - `list` node.
	 */
	function tokenizeList(eat, $0, $1, $2) {
	    var self = this;
	    var firstBullet = $2;
	    var value = trimRightLines($0);
	    var matches = value.match(self.rules.item);
	    var length = matches.length;
	    var index = 0;
	    var isLoose = false;
	    var now;
	    var bullet;
	    var item;
	    var enterTop;
	    var exitBlockquote;
	    var node;
	    var indent;
	    var size;
	    var position;
	    var end;

	    /*
	     * Determine if all list-items belong to the
	     * same list.
	     */

	    if (!self.options.pedantic) {
	        while (++index < length) {
	            bullet = self.rules.bullet.exec(matches[index])[0];

	            if (firstBullet !== bullet && (firstBullet.length === 1 && bullet.length === 1 || bullet.charAt(bullet.length - 1) !== firstBullet.charAt(firstBullet.length - 1))) {
	                matches = matches.slice(0, index);
	                matches[index - 1] = trimRightLines(matches[index - 1]);

	                length = matches.length;

	                break;
	            }
	        }
	    }

	    if (self.options.commonmark) {
	        index = -1;

	        while (++index < length) {
	            item = matches[index];
	            indent = self.rules.indent.exec(item);
	            indent = indent[1] + repeat(SPACE, indent[2].length) + indent[3];
	            size = getIndent(indent).indent;
	            position = indent.length;
	            end = item.length;

	            while (++position < end) {
	                if (item.charAt(position) === NEW_LINE && item.charAt(position - 1) === NEW_LINE && getIndent(item.slice(position + 1)).indent < size) {
	                    matches[index] = item.slice(0, position - 1);

	                    matches = matches.slice(0, index + 1);
	                    length = matches.length;

	                    break;
	                }
	            }
	        }
	    }

	    self.previousBullet = self.currentBullet;
	    self.currentBullet = firstBullet;

	    index = -1;

	    node = eat(matches.join(NEW_LINE)).reset(self.renderList([], firstBullet));

	    enterTop = self.exitTop();
	    exitBlockquote = self.enterBlockquote();

	    while (++index < length) {
	        item = matches[index];
	        now = eat.now();

	        item = eat(item)(self.renderListItem(item, now), node);

	        if (item.loose) {
	            isLoose = true;
	        }

	        if (index !== length - 1) {
	            eat(NEW_LINE);
	        }
	    }

	    node.loose = isLoose;

	    enterTop();
	    exitBlockquote();

	    return node;
	}

	/**
	 * Tokenise HTML.
	 *
	 * @example
	 *   tokenizeHtml(eat, '<span>foo</span>');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole HTML.
	 * @return {Node} - `html` node.
	 */
	function tokenizeHtml(eat, $0) {
	    $0 = trimRightLines($0);

	    return eat($0)(this.renderRaw(HTML, $0));
	}

	/**
	 * Tokenise a definition.
	 *
	 * @example
	 *   var $0 = '[foo]: http://example.com "Example Domain"';
	 *   var $1 = 'foo';
	 *   var $2 = 'http://example.com';
	 *   var $3 = 'Example Domain';
	 *   tokenizeDefinition(eat, $0, $1, $2, $3);
	 *
	 * @property {boolean} onlyAtTop
	 * @property {boolean} notInBlockquote
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole definition.
	 * @param {string} $1 - Key.
	 * @param {string} $2 - URL.
	 * @param {string} $3 - Title.
	 * @return {Node} - `definition` node.
	 */
	function tokenizeDefinition(eat, $0, $1, $2, $3) {
	    var link = $2;

	    /*
	     * Remove angle-brackets from `link`.
	     */

	    if (link.charAt(0) === LT && link.charAt(link.length - 1) === GT) {
	        link = link.slice(1, -1);
	    }

	    return eat($0)({
	        'type': 'definition',
	        'identifier': normalize($1),
	        'title': $3 ? decode(this.descape($3), eat) : null,
	        'link': decode(this.descape(link), eat)
	    });
	}

	tokenizeDefinition.onlyAtTop = true;
	tokenizeDefinition.notInBlockquote = true;

	/**
	 * Tokenise YAML front matter.
	 *
	 * @example
	 *   var $0 = '---\nfoo: bar\n---';
	 *   var $1 = 'foo: bar';
	 *   tokenizeYAMLFrontMatter(eat, $0, $1);
	 *
	 * @property {boolean} onlyAtStart
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole front matter.
	 * @param {string} $1 - Content.
	 * @return {Node} - `yaml` node.
	 */
	function tokenizeYAMLFrontMatter(eat, $0, $1) {
	    return eat($0)(this.renderRaw(YAML, $1 ? trimRightLines($1) : EMPTY));
	}

	tokenizeYAMLFrontMatter.onlyAtStart = true;

	/**
	 * Tokenise a footnote definition.
	 *
	 * @example
	 *   var $0 = '[foo]: Bar.';
	 *   var $1 = '[foo]';
	 *   var $2 = 'foo';
	 *   var $3 = 'Bar.';
	 *   tokenizeFootnoteDefinition(eat, $0, $1, $2, $3);
	 *
	 * @property {boolean} onlyAtTop
	 * @property {boolean} notInBlockquote
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole definition.
	 * @param {string} $1 - Whole key.
	 * @param {string} $2 - Key.
	 * @param {string} $3 - Whole value.
	 * @return {Node} - `footnoteDefinition` node.
	 */
	function tokenizeFootnoteDefinition(eat, $0, $1, $2, $3) {
	    var self = this;
	    var now = eat.now();
	    var indent = self.indent(now.line);

	    $3 = $3.replace(EXPRESSION_INITIAL_TAB, function (value) {
	        indent(value.length);

	        return EMPTY;
	    });

	    now.column += $1.length;

	    return eat($0)(self.renderFootnoteDefinition(normalize($2), $3, now));
	}

	tokenizeFootnoteDefinition.onlyAtTop = true;
	tokenizeFootnoteDefinition.notInBlockquote = true;

	/**
	 * Tokenise a table.
	 *
	 * @example
	 *   var $0 = ' | foo |\n | --- |\n | bar |';
	 *   var $1 = ' | foo |';
	 *   var $2 = '| foo |';
	 *   var $3 = ' | --- |';
	 *   var $4 = '| --- |';
	 *   var $5 = ' | bar |';
	 *   tokenizeTable(eat, $0, $1, $2, $3, $4, $5);
	 *
	 * @property {boolean} onlyAtTop
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole table.
	 * @param {string} $1 - Whole heading.
	 * @param {string} $2 - Trimmed heading.
	 * @param {string} $3 - Whole alignment.
	 * @param {string} $4 - Trimmed alignment.
	 * @param {string} $5 - Rows.
	 * @return {Node} - `table` node.
	 */
	function tokenizeTable(eat, $0, $1, $2, $3, $4, $5) {
	    var self = this;
	    var node;
	    var index;
	    var length;

	    $0 = trimRightLines($0);

	    node = eat($0).reset({
	        'type': TABLE,
	        'align': [],
	        'children': []
	    });

	    /**
	     * Eat a fence.  Returns an empty string so it can be
	     * passed to `String#replace()`.
	     *
	     * @param {string} value - Fence.
	     * @return {string} - Empty string.
	     */
	    function eatFence(value) {
	        eat(value);

	        return EMPTY;
	    }

	    /**
	     * Factory to eat a cell to a bound `row`.
	     *
	     * @param {Object} row - Parent to add cells to.
	     * @return {Function} - `eatCell` bound to `row`.
	     */
	    function eatCellFactory(row) {
	        /**
	         * Eat a cell.  Returns an empty string so it can be
	         * passed to `String#replace()`.
	         *
	         * @param {string} value - Complete match.
	         * @param {string} content - Cell content.
	         * @param {string} pipe - Fence.
	         * @return {string} - Empty string.
	         */
	        function eatCell(value, content, pipe) {
	            var cell = utilities.trimLeft(content);
	            var diff = content.length - cell.length;
	            var now;

	            eat(content.slice(0, diff));

	            now = eat.now();

	            eat(cell)(self.renderInline(TABLE_CELL, utilities.trimRight(cell), now), row);

	            eat(pipe);

	            return EMPTY;
	        }

	        return eatCell;
	    }

	    /**
	     * Eat a row of type `type`.
	     *
	     * @param {string} type - Type of the returned node,
	     *   such as `tableHeader` or `tableRow`.
	     * @param {string} value - Row, including initial and
	     *   final fences.
	     */
	    function renderRow(type, value) {
	        var row = eat(value).reset(self.renderParent(type, []), node);

	        value.replace(EXPRESSION_TABLE_INITIAL, eatFence).replace(EXPRESSION_TABLE_CONTENT, eatCellFactory(row));
	    }

	    /*
	     * Add the table's header.
	     */

	    renderRow(TABLE_HEADER, $1);

	    eat(NEW_LINE);

	    /*
	     * Add the table's alignment.
	     */

	    eat($3);

	    $4 = $4.replace(EXPRESSION_TABLE_FENCE, EMPTY).split(EXPRESSION_TABLE_BORDER);

	    node.align = getAlignment($4);

	    /*
	     * Add the table rows to table's children.
	     */

	    $5 = trimRightLines($5).split(NEW_LINE);

	    index = -1;
	    length = $5.length;

	    while (++index < length) {
	        renderRow(TABLE_ROW, $5[index]);

	        if (index !== length - 1) {
	            eat(NEW_LINE);
	        }
	    }

	    return node;
	}

	tokenizeTable.onlyAtTop = true;

	/**
	 * Tokenise a paragraph token.
	 *
	 * @example
	 *   tokenizeParagraph(eat, 'Foo.');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole paragraph.
	 * @return {Node?} - `paragraph` node, when the node does
	 *   not just contain white space.
	 */
	function tokenizeParagraph(eat, $0) {
	    var now = eat.now();

	    if (trim($0) === EMPTY) {
	        eat($0);

	        return null;
	    }

	    $0 = trimRightLines($0);

	    return eat($0)(this.renderInline(PARAGRAPH, $0, now));
	}

	/**
	 * Tokenise a text token.
	 *
	 * @example
	 *   tokenizeText(eat, 'foo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole text.
	 * @return {Node} - `text` node.
	 */
	function tokenizeText(eat, $0) {
	    return eat($0)(this.renderRaw(TEXT, $0));
	}

	/**
	 * Create a code-block token.
	 *
	 * @example
	 *   renderCodeBlock('foo()', 'js', now());
	 *
	 * @param {string?} [value] - Code.
	 * @param {string?} [language] - Optional language flag.
	 * @param {Function} eat
	 * @return {Object} - `code` node.
	 */
	function renderCodeBlock(value, language, eat) {
	    return {
	        'type': CODE,
	        'lang': language ? decode(this.descape(language), eat) : null,
	        'value': trimRightLines(value || EMPTY)
	    };
	}

	/**
	 * Create a list token.
	 *
	 * @example
	 *   var children = [renderListItem('- foo')];
	 *   renderList(children, '-');
	 *
	 * @param {string} children - Children.
	 * @param {string} bullet - First bullet.
	 * @return {Object} - `list` node.
	 */
	function renderList(children, bullet) {
	    var start = parseInt(bullet, 10);

	    if (start !== start) {
	        start = null;
	    }

	    /*
	     * `loose` should be added later.
	     */

	    return {
	        'type': LIST,
	        'ordered': bullet.length > 1,
	        'start': start,
	        'loose': null,
	        'children': children
	    };
	}

	/**
	 * Create a list-item using overly simple mechanics.
	 *
	 * @example
	 *   renderPedanticListItem('- _foo_', now());
	 *
	 * @param {string} value - List-item.
	 * @param {Object} position - List-item location.
	 * @return {string} - Cleaned `value`.
	 */
	function renderPedanticListItem(value, position) {
	    var self = this;
	    var indent = self.indent(position.line);

	    /**
	     * A simple replacer which removed all matches,
	     * and adds their length to `offset`.
	     *
	     * @param {string} $0
	     * @return {string}
	     */
	    function replacer($0) {
	        indent($0.length);

	        return EMPTY;
	    }

	    /*
	     * Remove the list-item's bullet.
	     */

	    value = value.replace(EXPRESSION_PEDANTIC_BULLET, replacer);

	    /*
	     * The initial line was also matched by the below, so
	     * we reset the `line`.
	     */

	    indent = self.indent(position.line);

	    return value.replace(EXPRESSION_INITIAL_INDENT, replacer);
	}

	/**
	 * Create a list-item using sane mechanics.
	 *
	 * @example
	 *   renderNormalListItem('- _foo_', now());
	 *
	 * @param {string} value - List-item.
	 * @param {Object} position - List-item location.
	 * @return {string} - Cleaned `value`.
	 */
	function renderNormalListItem(value, position) {
	    var self = this;
	    var indent = self.indent(position.line);
	    var bullet;
	    var rest;
	    var lines;
	    var trimmedLines;
	    var index;
	    var length;
	    var max;

	    /*
	     * Remove the list-item's bullet.
	     */

	    value = value.replace(EXPRESSION_BULLET, function ($0, $1, $2, $3, $4) {
	        bullet = $1 + $2 + $3;
	        rest = $4;

	        /*
	         * Make sure that the first nine numbered list items
	         * can indent with an extra space.  That is, when
	         * the bullet did not receive an extra final space.
	         */

	        if (Number($2) < 10 && bullet.length % 2 === 1) {
	            $2 = SPACE + $2;
	        }

	        max = $1 + repeat(SPACE, $2.length) + $3;

	        return max + rest;
	    });

	    lines = value.split(NEW_LINE);

	    trimmedLines = removeIndentation(value, getIndent(max).indent).split(NEW_LINE);

	    /*
	     * We replaced the initial bullet with something
	     * else above, which was used to trick
	     * `removeIndentation` into removing some more
	     * characters when possible. However, that could
	     * result in the initial line to be stripped more
	     * than it should be.
	     */

	    trimmedLines[0] = rest;

	    indent(bullet.length);

	    index = 0;
	    length = lines.length;

	    while (++index < length) {
	        indent(lines[index].length - trimmedLines[index].length);
	    }

	    return trimmedLines.join(NEW_LINE);
	}

	/*
	 * A map of two functions which can create list items.
	 */

	var LIST_ITEM_MAP = objectCreate();

	LIST_ITEM_MAP['true'] = renderPedanticListItem;
	LIST_ITEM_MAP['false'] = renderNormalListItem;

	/**
	 * Create a list-item token.
	 *
	 * @example
	 *   renderListItem('- _foo_', now());
	 *
	 * @param {Object} value - List-item.
	 * @param {Object} position - List-item location.
	 * @return {Object} - `listItem` node.
	 */
	function renderListItem(value, position) {
	    var self = this;
	    var checked = null;
	    var node;
	    var task;
	    var indent;

	    value = LIST_ITEM_MAP[self.options.pedantic].apply(self, arguments);

	    if (self.options.gfm) {
	        task = value.match(EXPRESSION_TASK_ITEM);

	        if (task) {
	            indent = task[0].length;
	            checked = task[1].toLowerCase() === 'x';

	            self.indent(position.line)(indent);
	            value = value.slice(indent);
	        }
	    }

	    node = {
	        'type': LIST_ITEM,
	        'loose': EXPRESSION_LOOSE_LIST_ITEM.test(value) || value.charAt(value.length - 1) === NEW_LINE
	    };

	    if (self.options.gfm) {
	        node.checked = checked;
	    }

	    node.children = self.tokenizeBlock(value, position);

	    return node;
	}

	/**
	 * Create a footnote-definition token.
	 *
	 * @example
	 *   renderFootnoteDefinition('1', '_foo_', now());
	 *
	 * @param {string} identifier - Unique reference.
	 * @param {string} value - Contents
	 * @param {Object} position - Definition location.
	 * @return {Object} - `footnoteDefinition` node.
	 */
	function renderFootnoteDefinition(identifier, value, position) {
	    var self = this;
	    var exitBlockquote = self.enterBlockquote();
	    var token;

	    token = {
	        'type': FOOTNOTE_DEFINITION,
	        'identifier': identifier,
	        'children': self.tokenizeBlock(value, position)
	    };

	    exitBlockquote();

	    return token;
	}

	/**
	 * Create a heading token.
	 *
	 * @example
	 *   renderHeading('_foo_', 1, now());
	 *
	 * @param {string} value - Content.
	 * @param {number} depth - Heading depth.
	 * @param {Object} position - Heading content location.
	 * @return {Object} - `heading` node
	 */
	function renderHeading(value, depth, position) {
	    return {
	        'type': HEADING,
	        'depth': depth,
	        'children': this.tokenizeInline(value, position)
	    };
	}

	/**
	 * Create a blockquote token.
	 *
	 * @example
	 *   renderBlockquote('_foo_', eat);
	 *
	 * @param {string} value - Content.
	 * @param {Object} now - Position.
	 * @return {Object} - `blockquote` node.
	 */
	function renderBlockquote(value, now) {
	    var self = this;
	    var exitBlockquote = self.enterBlockquote();
	    var token = {
	        'type': BLOCKQUOTE,
	        'children': this.tokenizeBlock(value, now)
	    };

	    exitBlockquote();

	    return token;
	}

	/**
	 * Create a void token.
	 *
	 * @example
	 *   renderVoid('horizontalRule');
	 *
	 * @param {string} type - Node type.
	 * @return {Object} - Node of type `type`.
	 */
	function renderVoid(type) {
	    return {
	        'type': type
	    };
	}

	/**
	 * Create a parent.
	 *
	 * @example
	 *   renderParent('paragraph', '_foo_');
	 *
	 * @param {string} type - Node type.
	 * @param {Array.<Object>} children - Child nodes.
	 * @return {Object} - Node of type `type`.
	 */
	function renderParent(type, children) {
	    return {
	        'type': type,
	        'children': children
	    };
	}

	/**
	 * Create a raw token.
	 *
	 * @example
	 *   renderRaw('inlineCode', 'foo()');
	 *
	 * @param {string} type - Node type.
	 * @param {string} value - Contents.
	 * @return {Object} - Node of type `type`.
	 */
	function renderRaw(type, value) {
	    return {
	        'type': type,
	        'value': value
	    };
	}

	/**
	 * Create a link token.
	 *
	 * @example
	 *   renderLink(true, 'example.com', 'example', 'Example Domain', now(), eat);
	 *   renderLink(false, 'fav.ico', 'example', 'Example Domain', now(), eat);
	 *
	 * @param {boolean} isLink - Whether linking to a document
	 *   or an image.
	 * @param {string} href - URI reference.
	 * @param {string} text - Content.
	 * @param {string?} title - Title.
	 * @param {Object} position - Location of link.
	 * @param {function(string)} eat
	 * @return {Object} - `link` or `image` node.
	 */
	function renderLink(isLink, href, text, title, position, eat) {
	    var self = this;
	    var exitLink = self.enterLink();
	    var token;

	    token = {
	        'type': isLink ? LINK : IMAGE,
	        'title': title ? decode(self.descape(title), eat) : null
	    };

	    href = decode(href, eat);

	    if (isLink) {
	        token.href = href;
	        token.children = self.tokenizeInline(text, position);
	    } else {
	        token.src = href;
	        token.alt = text ? decode(self.descape(text), eat) : null;
	    }

	    exitLink();

	    return token;
	}

	/**
	 * Create a footnote token.
	 *
	 * @example
	 *   renderFootnote('_foo_', now());
	 *
	 * @param {string} value - Contents.
	 * @param {Object} position - Location of footnote.
	 * @return {Object} - `footnote` node.
	 */
	function renderFootnote(value, position) {
	    return this.renderInline(FOOTNOTE, value, position);
	}

	/**
	 * Add a token with inline content.
	 *
	 * @example
	 *   renderInline('strong', '_foo_', now());
	 *
	 * @param {string} type - Node type.
	 * @param {string} value - Contents.
	 * @param {Object} position - Location of node.
	 * @return {Object} - Node of type `type`.
	 */
	function renderInline(type, value, position) {
	    return this.renderParent(type, this.tokenizeInline(value, position));
	}

	/**
	 * Add a token with block content.
	 *
	 * @example
	 *   renderBlock('blockquote', 'Foo.', now());
	 *
	 * @param {string} type - Node type.
	 * @param {string} value - Contents.
	 * @param {Object} position - Location of node.
	 * @return {Object} - Node of type `type`.
	 */
	function renderBlock(type, value, position) {
	    return this.renderParent(type, this.tokenizeBlock(value, position));
	}

	/**
	 * Tokenise an escape sequence.
	 *
	 * @example
	 *   tokenizeEscape(eat, '\\a', 'a');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole escape.
	 * @param {string} $1 - Escaped character.
	 * @return {Node} - `escape` node.
	 */
	function tokenizeEscape(eat, $0, $1) {
	    return eat($0)(this.renderRaw(ESCAPE, $1));
	}

	/**
	 * Tokenise a URL in carets.
	 *
	 * @example
	 *   tokenizeAutoLink(eat, '<http://foo.bar>', 'http://foo.bar', '');
	 *
	 * @property {boolean} notInLink
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole link.
	 * @param {string} $1 - URL.
	 * @param {string?} [$2] - Protocol or at.
	 * @return {Node} - `link` node.
	 */
	function tokenizeAutoLink(eat, $0, $1, $2) {
	    var self = this;
	    var href = $1;
	    var text = $1;
	    var now = eat.now();
	    var offset = 1;
	    var tokenize;
	    var node;

	    if ($2 === AT_SIGN) {
	        if (text.substr(0, MAILTO_PROTOCOL.length).toLowerCase() !== MAILTO_PROTOCOL) {
	            href = MAILTO_PROTOCOL + text;
	        } else {
	            text = text.substr(MAILTO_PROTOCOL.length);
	            offset += MAILTO_PROTOCOL.length;
	        }
	    }

	    now.column += offset;

	    /*
	     * Temporarily remove support for escapes in autolinks.
	     */

	    tokenize = self.inlineTokenizers.escape;
	    self.inlineTokenizers.escape = null;

	    node = eat($0)(self.renderLink(true, href, text, null, now, eat));

	    self.inlineTokenizers.escape = tokenize;

	    return node;
	}

	tokenizeAutoLink.notInLink = true;

	/**
	 * Tokenise a URL in text.
	 *
	 * @example
	 *   tokenizeURL(eat, 'http://foo.bar');
	 *
	 * @property {boolean} notInLink
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole link.
	 * @return {Node} - `link` node.
	 */
	function tokenizeURL(eat, $0) {
	    var now = eat.now();

	    return eat($0)(this.renderLink(true, $0, $0, null, now, eat));
	}

	tokenizeURL.notInLink = true;

	/**
	 * Tokenise an HTML tag.
	 *
	 * @example
	 *   tokenizeTag(eat, '<span foo="bar">');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Content.
	 * @return {Node} - `html` node.
	 */
	function tokenizeTag(eat, $0) {
	    var self = this;

	    if (!self.inLink && EXPRESSION_HTML_LINK_OPEN.test($0)) {
	        self.inLink = true;
	    } else if (self.inLink && EXPRESSION_HTML_LINK_CLOSE.test($0)) {
	        self.inLink = false;
	    }

	    return eat($0)(self.renderRaw(HTML, $0));
	}

	/**
	 * Tokenise a link.
	 *
	 * @example
	 *   tokenizeLink(
	 *     eat, '![foo](fav.ico "Favicon")', '![', 'foo', null,
	 *     'fav.ico', 'Foo Domain'
	 *   );
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole link.
	 * @param {string} $1 - Prefix.
	 * @param {string} $2 - Text.
	 * @param {string?} $3 - URL wrapped in angle braces.
	 * @param {string?} $4 - Literal URL.
	 * @param {string?} $5 - Title wrapped in single or double
	 *   quotes.
	 * @param {string?} [$6] - Title wrapped in double quotes.
	 * @param {string?} [$7] - Title wrapped in parentheses.
	 * @return {Node?} - `link` node, `image` node, or `null`.
	 */
	function tokenizeLink(eat, $0, $1, $2, $3, $4, $5, $6, $7) {
	    var isLink = $1 === BRACKET_OPEN;
	    var href = $4 || $3 || '';
	    var title = $7 || $6 || $5;
	    var now;

	    if (!isLink || !this.inLink) {
	        now = eat.now();

	        now.column += $1.length;

	        return eat($0)(this.renderLink(isLink, this.descape(href), $2, title, now, eat));
	    }

	    return null;
	}

	/**
	 * Tokenise a reference link, image, or footnote;
	 * shortcut reference link, or footnote.
	 *
	 * @example
	 *   tokenizeReference(eat, '[foo]', '[', 'foo');
	 *   tokenizeReference(eat, '[foo][]', '[', 'foo', '');
	 *   tokenizeReference(eat, '[foo][bar]', '[', 'foo', 'bar');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole link.
	 * @param {string} $1 - Prefix.
	 * @param {string} $2 - identifier.
	 * @param {string} $3 - Content.
	 * @return {Node?} - `linkReference`, `imageReference`, or
	 *   `footnoteReference`.  Returns null when this is a link
	 *   reference, but we're already in a link.
	 */
	function tokenizeReference(eat, $0, $1, $2, $3) {
	    var self = this;
	    var text = $2;
	    var identifier = $3 || $2;
	    var type = $1 === BRACKET_OPEN ? 'link' : 'image';
	    var isFootnote = self.options.footnotes && identifier.charAt(0) === CARET;
	    var now = eat.now();
	    var referenceType;
	    var node;
	    var exitLink;

	    if ($3 === undefined) {
	        referenceType = 'shortcut';
	    } else if ($3 === '') {
	        referenceType = 'collapsed';
	    } else {
	        referenceType = 'full';
	    }

	    if (referenceType !== 'shortcut') {
	        isFootnote = false;
	    }

	    if (isFootnote) {
	        identifier = identifier.substr(1);
	    }

	    if (isFootnote) {
	        if (identifier.indexOf(SPACE) !== -1) {
	            return eat($0)(self.renderFootnote(identifier, eat.now()));
	        } else {
	            type = 'footnote';
	        }
	    }

	    if (self.inLink && type === 'link') {
	        return null;
	    }

	    now.column += $1.length;

	    node = {
	        'type': type + 'Reference',
	        'identifier': normalize(identifier)
	    };

	    if (type === 'link' || type === 'image') {
	        node.referenceType = referenceType;
	    }

	    if (type === 'link') {
	        exitLink = self.enterLink();
	        node.children = self.tokenizeInline(text, now);
	        exitLink();
	    } else if (type === 'image') {
	        node.alt = decode(self.descape(text), eat);
	    }

	    return eat($0)(node);
	}

	/**
	 * Tokenise strong emphasis.
	 *
	 * @example
	 *   tokenizeStrong(eat, '**foo**', '**', 'foo');
	 *   tokenizeStrong(eat, '__foo__', null, null, '__', 'foo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole emphasis.
	 * @param {string?} $1 - Marker.
	 * @param {string?} $2 - Content.
	 * @param {string?} [$3] - Marker.
	 * @param {string?} [$4] - Content.
	 * @return {Node?} - `strong` node, when not empty.
	 */
	function tokenizeStrong(eat, $0, $1, $2, $3, $4) {
	    var now = eat.now();
	    var value = $2 || $4;

	    if (trim(value) === EMPTY) {
	        return null;
	    }

	    now.column += 2;

	    return eat($0)(this.renderInline(STRONG, value, now));
	}

	/**
	 * Tokenise slight emphasis.
	 *
	 * @example
	 *   tokenizeEmphasis(eat, '*foo*', '*', 'foo');
	 *   tokenizeEmphasis(eat, '_foo_', null, null, '_', 'foo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole emphasis.
	 * @param {string?} $1 - Marker.
	 * @param {string?} $2 - Content.
	 * @param {string?} [$3] - Marker.
	 * @param {string?} [$4] - Content.
	 * @return {Node?} - `emphasis` node, when not empty.
	 */
	function tokenizeEmphasis(eat, $0, $1, $2, $3, $4) {
	    var now = eat.now();
	    var marker = $1 || $3;
	    var value = $2 || $4;

	    if (trim(value) === EMPTY || value.charAt(0) === marker || value.charAt(value.length - 1) === marker) {
	        return null;
	    }

	    now.column += 1;

	    return eat($0)(this.renderInline(EMPHASIS, value, now));
	}

	/**
	 * Tokenise a deletion.
	 *
	 * @example
	 *   tokenizeDeletion(eat, '~~foo~~', '~~', 'foo');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole deletion.
	 * @param {string} $1 - Content.
	 * @return {Node} - `delete` node.
	 */
	function tokenizeDeletion(eat, $0, $1) {
	    var now = eat.now();

	    now.column += 2;

	    return eat($0)(this.renderInline(DELETE, $1, now));
	}

	/**
	 * Tokenise inline code.
	 *
	 * @example
	 *   tokenizeInlineCode(eat, '`foo()`', '`', 'foo()');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0 - Whole code.
	 * @param {string} $1 - Initial markers.
	 * @param {string} $2 - Content.
	 * @return {Node} - `inlineCode` node.
	 */
	function tokenizeInlineCode(eat, $0, $1, $2) {
	    return eat($0)(this.renderRaw(INLINE_CODE, trim($2 || '')));
	}

	/**
	 * Tokenise a break.
	 *
	 * @example
	 *   tokenizeBreak(eat, '  \n');
	 *
	 * @param {function(string)} eat
	 * @param {string} $0
	 * @return {Node} - `break` node.
	 */
	function tokenizeBreak(eat, $0) {
	    return eat($0)(this.renderVoid(BREAK));
	}

	/**
	 * Construct a new parser.
	 *
	 * @example
	 *   var parser = new Parser();
	 *
	 * @constructor
	 * @class {Parser}
	 * @param {Object?} [options] - Passed to
	 *   `Parser#setOptions()`.
	 */
	function Parser(options) {
	    var self = this;
	    var rules = copy({}, self.expressions.rules);

	    self.inLink = false;
	    self.atTop = true;
	    self.atStart = true;
	    self.inBlockquote = false;

	    self.rules = rules;
	    self.descape = descapeFactory(rules, 'escape');

	    self.options = clone(self.options);

	    self.setOptions(options);
	}

	/**
	 * Set options.  Does not overwrite previously set
	 * options.
	 *
	 * @example
	 *   var parser = new Parser();
	 *   parser.setOptions({gfm: true});
	 *
	 * @this {Parser}
	 * @throws {Error} - When an option is invalid.
	 * @param {Object?} [options] - Parse settings.
	 * @return {Parser} - `self`.
	 */
	Parser.prototype.setOptions = function (options) {
	    var self = this;
	    var expressions = self.expressions;
	    var rules = self.rules;
	    var current = self.options;
	    var key;

	    if (options === null || options === undefined) {
	        options = {};
	    } else if (typeof options === 'object') {
	        options = clone(options);
	    } else {
	        raise(options, 'options');
	    }

	    self.options = options;

	    for (key in defaultOptions) {
	        validate.boolean(options, key, current[key]);

	        if (options[key]) {
	            copy(rules, expressions[key]);
	        }
	    }

	    if (options.gfm && options.breaks) {
	        copy(rules, expressions.breaksGFM);
	    }

	    if (options.gfm && options.commonmark) {
	        copy(rules, expressions.commonmarkGFM);
	    }

	    if (options.commonmark) {
	        self.enterBlockquote = noopToggler();
	    }

	    return self;
	};

	/*
	 * Expose `defaults`.
	 */

	Parser.prototype.options = defaultOptions;

	/*
	 * Expose `expressions`.
	 */

	Parser.prototype.expressions = defaultExpressions;

	/**
	 * Factory to track indentation for each line corresponding
	 * to the given `start` and the number of invocations.
	 *
	 * @param {number} start - Starting line.
	 * @return {function(offset)} - Indenter.
	 */
	Parser.prototype.indent = function (start) {
	    var self = this;
	    var line = start;

	    /**
	     * Intender which increments the global offset,
	     * starting at the bound line, and further incrementing
	     * each line for each invocation.
	     *
	     * @example
	     *   indenter(2)
	     *
	     * @param {number} offset - Number to increment the
	     *   offset.
	     */
	    function indenter(offset) {
	        self.offset[line] = (self.offset[line] || 0) + offset;

	        line++;
	    }

	    return indenter;
	};

	/**
	 * Parse `value` into an AST.
	 *
	 * @example
	 *   var parser = new Parser();
	 *   parser.parse(new File('_Foo_.'));
	 *
	 * @this {Parser}
	 * @param {Object} file
	 * @return {Object} - `root` node.
	 */
	Parser.prototype.parse = function (file) {
	    var self = this;
	    var value = clean(String(file));
	    var token;

	    self.file = file;

	    /*
	     * Add an `offset` matrix, used to keep track of
	     * syntax and white space indentation per line.
	     */

	    self.offset = {};

	    token = self.renderBlock(ROOT, value);

	    if (self.options.position) {
	        token.position = {
	            'start': {
	                'line': 1,
	                'column': 1
	            }
	        };

	        token.position.end = self.eof || token.position.start;
	    }

	    return token;
	};

	/*
	 * Enter and exit helpers.
	 */

	Parser.prototype.enterLink = stateToggler('inLink', false);
	Parser.prototype.exitTop = stateToggler('atTop', true);
	Parser.prototype.exitStart = stateToggler('atStart', true);
	Parser.prototype.enterBlockquote = stateToggler('inBlockquote', false);

	/*
	 * Expose helpers
	 */

	Parser.prototype.renderRaw = renderRaw;
	Parser.prototype.renderVoid = renderVoid;
	Parser.prototype.renderParent = renderParent;
	Parser.prototype.renderInline = renderInline;
	Parser.prototype.renderBlock = renderBlock;

	Parser.prototype.renderLink = renderLink;
	Parser.prototype.renderCodeBlock = renderCodeBlock;
	Parser.prototype.renderBlockquote = renderBlockquote;
	Parser.prototype.renderList = renderList;
	Parser.prototype.renderListItem = renderListItem;
	Parser.prototype.renderFootnoteDefinition = renderFootnoteDefinition;
	Parser.prototype.renderHeading = renderHeading;
	Parser.prototype.renderFootnote = renderFootnote;

	/**
	 * Construct a tokenizer.  This creates both
	 * `tokenizeInline` and `tokenizeBlock`.
	 *
	 * @example
	 *   Parser.prototype.tokenizeInline = tokenizeFactory('inline');
	 *
	 * @param {string} type - Name of parser, used to find
	 *   its expressions (`%sMethods`) and tokenizers
	 *   (`%Tokenizers`).
	 * @return {function(string, Object?): Array.<Object>}
	 */
	function tokenizeFactory(type) {
	    /**
	     * Tokenizer for a bound `type`
	     *
	     * @example
	     *   parser = new Parser();
	     *   parser.tokenizeInline('_foo_');
	     *
	     * @param {string} value - Content.
	     * @param {Object?} [location] - Offset at which `value`
	     *   starts.
	     * @return {Array.<Object>} - Nodes.
	     */
	    function tokenize(value, location) {
	        var self = this;
	        var offset = self.offset;
	        var tokens = [];
	        var rules = self.rules;
	        var methods = self[type + 'Methods'];
	        var tokenizers = self[type + 'Tokenizers'];
	        var line = location ? location.line : 1;
	        var column = location ? location.column : 1;
	        var patchPosition = self.options.position;
	        var add;
	        var index;
	        var length;
	        var method;
	        var name;
	        var match;
	        var matched;
	        var valueLength;
	        var eater;

	        /*
	         * Trim white space only lines.
	         */

	        if (!value) {
	            return tokens;
	        }

	        /**
	         * Update line and column based on `value`.
	         *
	         * @example
	         *   updatePosition('foo');
	         *
	         * @param {string} subvalue
	         */
	        function updatePosition(subvalue) {
	            var character = -1;
	            var subvalueLength = subvalue.length;
	            var lastIndex = -1;

	            while (++character < subvalueLength) {
	                if (subvalue.charAt(character) === NEW_LINE) {
	                    lastIndex = character;
	                    line++;
	                }
	            }

	            if (lastIndex === -1) {
	                column = column + subvalue.length;
	            } else {
	                column = subvalue.length - lastIndex;
	            }

	            if (line in offset) {
	                if (lastIndex !== -1) {
	                    column += offset[line];
	                } else if (column <= offset[line]) {
	                    column = offset[line] + 1;
	                }
	            }
	        }

	        /**
	         * Get offset. Called before the fisrt character is
	         * eaten to retrieve the range's offsets.
	         *
	         * @return {Function} - `done`, to be called when
	         *   the last character is eaten.
	         */
	        function getOffset() {
	            var indentation = [];
	            var pos = line + 1;

	            /**
	             * Done. Called when the last character is
	             * eaten to retrieve the range's offsets.
	             *
	             * @return {Array.<number>} - Offset.
	             */
	            function done() {
	                var last = line + 1;

	                while (pos < last) {
	                    indentation.push((offset[pos] || 0) + 1);

	                    pos++;
	                }

	                return indentation;
	            }

	            return done;
	        }

	        /**
	         * Get the current position.
	         *
	         * @example
	         *   position = now(); // {line: 1, column: 1}
	         *
	         * @return {Object}
	         */
	        function now() {
	            return {
	                'line': line,
	                'column': column
	            };
	        }

	        /**
	         * Store position information for a node.
	         *
	         * @example
	         *   start = now();
	         *   updatePosition('foo');
	         *   location = new Position(start);
	         *   // {start: {line: 1, column: 1}, end: {line: 1, column: 3}}
	         *
	         * @param {Object} start
	         */
	        function Position(start) {
	            this.start = start;
	            this.end = now();
	        }

	        /**
	         * Throw when a value is incorrectly eaten.
	         * This shouldn’t happen but will throw on new,
	         * incorrect rules.
	         *
	         * @example
	         *   // When the current value is set to `foo bar`.
	         *   validateEat('foo');
	         *   eat('foo');
	         *
	         *   validateEat('bar');
	         *   // throws, because the space is not eaten.
	         *
	         * @param {string} subvalue - Value to be eaten.
	         * @throws {Error} - When `subvalue` cannot be eaten.
	         */
	        function validateEat(subvalue) {
	            /* istanbul ignore if */
	            if (value.substring(0, subvalue.length) !== subvalue) {
	                self.file.fail('Incorrectly eaten value: please report this ' + 'warning on http://git.io/vUYWz', now());
	            }
	        }

	        /**
	         * Mark position and patch `node.position`.
	         *
	         * @example
	         *   var update = position();
	         *   updatePosition('foo');
	         *   update({});
	         *   // {
	         *   //   position: {
	         *   //     start: {line: 1, column: 1}
	         *   //     end: {line: 1, column: 3}
	         *   //   }
	         *   // }
	         *
	         * @returns {function(Node): Node}
	         */
	        function position() {
	            var before = now();

	            /**
	             * Add the position to a node.
	             *
	             * @example
	             *   update({type: 'text', value: 'foo'});
	             *
	             * @param {Node} node - Node to attach position
	             *   on.
	             * @return {Node} - `node`.
	             */
	            function update(node, indent) {
	                var prev = node.position;
	                var start = prev ? prev.start : before;
	                var combined = [];
	                var n = prev && prev.end.line;
	                var l = before.line;

	                node.position = new Position(start);

	                /*
	                 * If there was already a `position`, this
	                 * node was merged.  Fixing `start` wasn't
	                 * hard, but the indent is different.
	                 * Especially because some information, the
	                 * indent between `n` and `l` wasn't
	                 * tracked.  Luckily, that space is
	                 * (should be?) empty, so we can safely
	                 * check for it now.
	                 */

	                if (prev) {
	                    combined = prev.indent;

	                    if (n < l) {
	                        while (++n < l) {
	                            combined.push((offset[n] || 0) + 1);
	                        }

	                        combined.push(before.column);
	                    }

	                    indent = combined.concat(indent);
	                }

	                node.position.indent = indent;

	                return node;
	            }

	            return update;
	        }

	        /**
	         * Add `token` to `parent`s children or to `tokens`.
	         * Performs merges where possible.
	         *
	         * @example
	         *   add({});
	         *
	         *   add({}, {children: []});
	         *
	         * @param {Object} token - Node to add.
	         * @param {Object} [parent] - Parent to insert into.
	         * @return {Object} - Added or merged into token.
	         */
	        add = function (token, parent) {
	            var isMultiple = ('length' in token);
	            var prev;
	            var children;

	            if (!parent) {
	                children = tokens;
	            } else {
	                children = parent.children;
	            }

	            if (isMultiple) {
	                arrayPush.apply(children, token);
	            } else {
	                if (type === INLINE && token.type === TEXT) {
	                    token.value = decode(token.value, eater);
	                }

	                prev = children[children.length - 1];

	                if (prev && token.type === prev.type && token.type in MERGEABLE_NODES) {
	                    token = MERGEABLE_NODES[token.type].call(self, prev, token);
	                }

	                if (token !== prev) {
	                    children.push(token);
	                }

	                if (self.atStart && tokens.length) {
	                    self.exitStart();
	                }
	            }

	            return token;
	        };

	        /**
	         * Remove `subvalue` from `value`.
	         * Expects `subvalue` to be at the start from
	         * `value`, and applies no validation.
	         *
	         * @example
	         *   eat('foo')({type: 'text', value: 'foo'});
	         *
	         * @param {string} subvalue - Removed from `value`,
	         *   and passed to `updatePosition`.
	         * @return {Function} - Wrapper around `add`, which
	         *   also adds `position` to node.
	         */
	        function eat(subvalue) {
	            var indent = getOffset();
	            var pos = position();
	            var current = now();

	            validateEat(subvalue);

	            /**
	             * Add the given arguments, add `position` to
	             * the returned node, and return the node.
	             *
	             * @return {Node}
	             */
	            function apply() {
	                return pos(add.apply(null, arguments), indent);
	            }

	            /**
	             * Functions just like apply, but resets the
	             * content:  the line and column are reversed,
	             * and the eaten value is re-added.
	             *
	             * This is useful for nodes with a single
	             * type of content, such as lists and tables.
	             *
	             * See `apply` above for what parameters are
	             * expected.
	             *
	             * @return {Node}
	             */
	            function reset() {
	                var node = apply.apply(null, arguments);

	                line = current.line;
	                column = current.column;
	                value = subvalue + value;

	                return node;
	            }

	            apply.reset = reset;

	            value = value.substring(subvalue.length);

	            updatePosition(subvalue);

	            indent = indent();

	            return apply;
	        }

	        /**
	         * Same as `eat` above, but will not add positional
	         * information to nodes.
	         *
	         * @example
	         *   noEat('foo')({type: 'text', value: 'foo'});
	         *
	         * @param {string} subvalue - Removed from `value`.
	         * @return {Function} - Wrapper around `add`.
	         */
	        function noEat(subvalue) {
	            validateEat(subvalue);

	            /**
	             * Add the given arguments, and return the
	             * node.
	             *
	             * @return {Node}
	             */
	            function apply() {
	                return add.apply(null, arguments);
	            }

	            /**
	             * Functions just like apply, but resets the
	             * content: the eaten value is re-added.
	             *
	             * @return {Node}
	             */
	            function reset() {
	                var node = apply.apply(null, arguments);

	                value = subvalue + value;

	                return node;
	            }

	            apply.reset = reset;

	            value = value.substring(subvalue.length);

	            return apply;
	        }

	        /*
	         * Expose the eater, depending on if `position`s
	         * should be patched on nodes.
	         */

	        eater = patchPosition ? eat : noEat;

	        /*
	         * Expose `now` on `eater`.
	         */

	        eater.now = now;

	        /*
	         * Expose `file` on `eater`.
	         */

	        eater.file = self.file;

	        /*
	         * Sync initial offset.
	         */

	        updatePosition(EMPTY);

	        /*
	         * Iterate over `value`, and iterate over all
	         * block-expressions.  When one matches, invoke
	         * its companion function.  If no expression
	         * matches, something failed (should not happen)
	         * and an exception is thrown.
	         */

	        while (value) {
	            index = -1;
	            length = methods.length;
	            matched = false;

	            while (++index < length) {
	                name = methods[index];

	                method = tokenizers[name];

	                match = rules[name] && method && (!method.onlyAtStart || self.atStart) && (!method.onlyAtTop || self.atTop) && (!method.notInBlockquote || !self.inBlockquote) && (!method.notInLink || !self.inLink) && rules[name].exec(value);

	                if (match) {
	                    valueLength = value.length;

	                    method.apply(self, [eater].concat(match));

	                    matched = valueLength !== value.length;

	                    if (matched) {
	                        break;
	                    }
	                }
	            }

	            /* istanbul ignore if */
	            if (!matched) {
	                self.file.fail('Infinite loop', eater.now());

	                /*
	                 * Errors are not thrown on `File#fail`
	                 * when `quiet: true`.
	                 */

	                break;
	            }
	        }

	        self.eof = now();

	        return tokens;
	    }

	    return tokenize;
	}

	/*
	 * Expose tokenizers for block-level nodes.
	 */

	Parser.prototype.blockTokenizers = {
	    'yamlFrontMatter': tokenizeYAMLFrontMatter,
	    'newline': tokenizeNewline,
	    'code': tokenizeCode,
	    'fences': tokenizeFences,
	    'heading': tokenizeHeading,
	    'lineHeading': tokenizeLineHeading,
	    'horizontalRule': tokenizeHorizontalRule,
	    'blockquote': tokenizeBlockquote,
	    'list': tokenizeList,
	    'html': tokenizeHtml,
	    'definition': tokenizeDefinition,
	    'footnoteDefinition': tokenizeFootnoteDefinition,
	    'looseTable': tokenizeTable,
	    'table': tokenizeTable,
	    'paragraph': tokenizeParagraph
	};

	/*
	 * Expose order in which to parse block-level nodes.
	 */

	Parser.prototype.blockMethods = ['yamlFrontMatter', 'newline', 'code', 'fences', 'blockquote', 'heading', 'horizontalRule', 'list', 'lineHeading', 'html', 'definition', 'footnoteDefinition', 'looseTable', 'table', 'paragraph', 'blockText'];

	/**
	 * Block tokenizer.
	 *
	 * @example
	 *   var parser = new Parser();
	 *   parser.tokenizeBlock('> foo.');
	 *
	 * @param {string} value - Content.
	 * @return {Array.<Object>} - Nodes.
	 */

	Parser.prototype.tokenizeBlock = tokenizeFactory(BLOCK);

	/*
	 * Expose tokenizers for inline-level nodes.
	 */

	Parser.prototype.inlineTokenizers = {
	    'escape': tokenizeEscape,
	    'autoLink': tokenizeAutoLink,
	    'url': tokenizeURL,
	    'tag': tokenizeTag,
	    'link': tokenizeLink,
	    'reference': tokenizeReference,
	    'shortcutReference': tokenizeReference,
	    'strong': tokenizeStrong,
	    'emphasis': tokenizeEmphasis,
	    'deletion': tokenizeDeletion,
	    'inlineCode': tokenizeInlineCode,
	    'break': tokenizeBreak,
	    'inlineText': tokenizeText
	};

	/*
	 * Expose order in which to parse inline-level nodes.
	 */

	Parser.prototype.inlineMethods = ['escape', 'autoLink', 'url', 'tag', 'link', 'reference', 'shortcutReference', 'strong', 'emphasis', 'deletion', 'inlineCode', 'break', 'inlineText'];

	/**
	 * Inline tokenizer.
	 *
	 * @example
	 *   var parser = new Parser();
	 *   parser.tokenizeInline('_foo_');
	 *
	 * @param {string} value - Content.
	 * @return {Array.<Object>} - Nodes.
	 */

	Parser.prototype.tokenizeInline = tokenizeFactory(INLINE);

	/**
	 * Transform a markdown document into an AST.
	 *
	 * @example
	 *   parse(new File('> foo.'), {gfm: true});
	 *
	 * @this {Object?} - When this function is places on an
	 *   object which also houses a `Parser` property, that
	 *   class is used.
	 * @param {File} file - Virtual file.
	 * @param {Object?} [options] - Settings for the parser.
	 * @return {Object} - Abstract syntax tree.
	 */
	function parse(file, options) {
	    var CustomParser = this.Parser || Parser;

	    return new CustomParser(options).parse(file);
	}

	/*
	 * Expose `Parser` on `parse`.
	 */

	parse.Parser = Parser;

	/*
	 * Expose `tokenizeFactory` so dependencies could create
	 * their own tokenizers.
	 */

	Parser.prototype.tokenizeFactory = tokenizeFactory;

	/*
	 * Expose `parse` on `module.exports`.
	 */

	module.exports = parse;

/***/ },
/* 187 */
/***/ function(module, exports, __webpack_require__) {

	var __WEBPACK_AMD_DEFINE_RESULT__;/* WEBPACK VAR INJECTION */(function(module) {/*! http://mths.be/he v0.5.0 by @mathias | MIT license */
	'use strict';

	;(function (root) {

		// Detect free variables `exports`.
		var freeExports = typeof exports == 'object' && exports;

		// Detect free variable `module`.
		var freeModule = typeof module == 'object' && module && module.exports == freeExports && module;

		// Detect free variable `global`, from Node.js or Browserified code,
		// and use it as `root`.
		var freeGlobal = typeof global == 'object' && global;
		if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
			root = freeGlobal;
		}

		/*--------------------------------------------------------------------------*/

		// All astral symbols.
		var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
		// All ASCII symbols (not just printable ASCII) except those listed in the
		// first column of the overrides table.
		// http://whatwg.org/html/tokenization.html#table-charref-overrides
		var regexAsciiWhitelist = /[\x01-\x7F]/g;
		// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
		// code points listed in the first column of the overrides table on
		// http://whatwg.org/html/tokenization.html#table-charref-overrides.
		var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;

		var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
		var encodeMap = { '\xC1': 'Aacute', '\xE1': 'aacute', 'Ă': 'Abreve', 'ă': 'abreve', '∾': 'ac', '∿': 'acd', '∾̳': 'acE', '\xC2': 'Acirc', '\xE2': 'acirc', '\xB4': 'acute', 'А': 'Acy', 'а': 'acy', '\xC6': 'AElig', '\xE6': 'aelig', '⁡': 'af', '𝔄': 'Afr', '𝔞': 'afr', '\xC0': 'Agrave', '\xE0': 'agrave', 'ℵ': 'aleph', 'Α': 'Alpha', 'α': 'alpha', 'Ā': 'Amacr', 'ā': 'amacr', '⨿': 'amalg', '&': 'amp', '⩕': 'andand', '⩓': 'And', '∧': 'and', '⩜': 'andd', '⩘': 'andslope', '⩚': 'andv', '∠': 'ang', '⦤': 'ange', '⦨': 'angmsdaa', '⦩': 'angmsdab', '⦪': 'angmsdac', '⦫': 'angmsdad', '⦬': 'angmsdae', '⦭': 'angmsdaf', '⦮': 'angmsdag', '⦯': 'angmsdah', '∡': 'angmsd', '∟': 'angrt', '⊾': 'angrtvb', '⦝': 'angrtvbd', '∢': 'angsph', '\xC5': 'angst', '⍼': 'angzarr', 'Ą': 'Aogon', 'ą': 'aogon', '𝔸': 'Aopf', '𝕒': 'aopf', '⩯': 'apacir', '≈': 'ap', '⩰': 'apE', '≊': 'ape', '≋': 'apid', '\'': 'apos', '\xE5': 'aring', '𝒜': 'Ascr', '𝒶': 'ascr', '≔': 'colone', '*': 'ast', '≍': 'CupCap', '\xC3': 'Atilde', '\xE3': 'atilde', '\xC4': 'Auml', '\xE4': 'auml', '∳': 'awconint', '⨑': 'awint', '≌': 'bcong', '϶': 'bepsi', '‵': 'bprime', '∽': 'bsim', '⋍': 'bsime', '∖': 'setmn', '⫧': 'Barv', '⊽': 'barvee', '⌅': 'barwed', '⌆': 'Barwed', '⎵': 'bbrk', '⎶': 'bbrktbrk', 'Б': 'Bcy', 'б': 'bcy', '„': 'bdquo', '∵': 'becaus', '⦰': 'bemptyv', 'ℬ': 'Bscr', 'Β': 'Beta', 'β': 'beta', 'ℶ': 'beth', '≬': 'twixt', '𝔅': 'Bfr', '𝔟': 'bfr', '⋂': 'xcap', '◯': 'xcirc', '⋃': 'xcup', '⨀': 'xodot', '⨁': 'xoplus', '⨂': 'xotime', '⨆': 'xsqcup', '★': 'starf', '▽': 'xdtri', '△': 'xutri', '⨄': 'xuplus', '⋁': 'Vee', '⋀': 'Wedge', '⤍': 'rbarr', '⧫': 'lozf', '▪': 'squf', '▴': 'utrif', '▾': 'dtrif', '◂': 'ltrif', '▸': 'rtrif', '␣': 'blank', '▒': 'blk12', '░': 'blk14', '▓': 'blk34', '█': 'block', '=⃥': 'bne', '≡⃥': 'bnequiv', '⫭': 'bNot', '⌐': 'bnot', '𝔹': 'Bopf', '𝕓': 'bopf', '⊥': 'bot', '⋈': 'bowtie', '⧉': 'boxbox', '┐': 'boxdl', '╕': 'boxdL', '╖': 'boxDl', '╗': 'boxDL', '┌': 'boxdr', '╒': 'boxdR', '╓': 'boxDr', '╔': 'boxDR', '─': 'boxh', '═': 'boxH', '┬': 'boxhd', '╤': 'boxHd', '╥': 'boxhD', '╦': 'boxHD', '┴': 'boxhu', '╧': 'boxHu', '╨': 'boxhU', '╩': 'boxHU', '⊟': 'minusb', '⊞': 'plusb', '⊠': 'timesb', '┘': 'boxul', '╛': 'boxuL', '╜': 'boxUl', '╝': 'boxUL', '└': 'boxur', '╘': 'boxuR', '╙': 'boxUr', '╚': 'boxUR', '│': 'boxv', '║': 'boxV', '┼': 'boxvh', '╪': 'boxvH', '╫': 'boxVh', '╬': 'boxVH', '┤': 'boxvl', '╡': 'boxvL', '╢': 'boxVl', '╣': 'boxVL', '├': 'boxvr', '╞': 'boxvR', '╟': 'boxVr', '╠': 'boxVR', '˘': 'breve', '\xA6': 'brvbar', '𝒷': 'bscr', '⁏': 'bsemi', '⧅': 'bsolb', '\\': 'bsol', '⟈': 'bsolhsub', '•': 'bull', '≎': 'bump', '⪮': 'bumpE', '≏': 'bumpe', 'Ć': 'Cacute', 'ć': 'cacute', '⩄': 'capand', '⩉': 'capbrcup', '⩋': 'capcap', '∩': 'cap', '⋒': 'Cap', '⩇': 'capcup', '⩀': 'capdot', 'ⅅ': 'DD', '∩︀': 'caps', '⁁': 'caret', 'ˇ': 'caron', 'ℭ': 'Cfr', '⩍': 'ccaps', 'Č': 'Ccaron', 'č': 'ccaron', '\xC7': 'Ccedil', '\xE7': 'ccedil', 'Ĉ': 'Ccirc', 'ĉ': 'ccirc', '∰': 'Cconint', '⩌': 'ccups', '⩐': 'ccupssm', 'Ċ': 'Cdot', 'ċ': 'cdot', '\xB8': 'cedil', '⦲': 'cemptyv', '\xA2': 'cent', '\xB7': 'middot', '𝔠': 'cfr', 'Ч': 'CHcy', 'ч': 'chcy', '✓': 'check', 'Χ': 'Chi', 'χ': 'chi', 'ˆ': 'circ', '≗': 'cire', '↺': 'olarr', '↻': 'orarr', '⊛': 'oast', '⊚': 'ocir', '⊝': 'odash', '⊙': 'odot', '\xAE': 'reg', 'Ⓢ': 'oS', '⊖': 'ominus', '⊕': 'oplus', '⊗': 'otimes', '○': 'cir', '⧃': 'cirE', '⨐': 'cirfnint', '⫯': 'cirmid', '⧂': 'cirscir', '∲': 'cwconint', '”': 'rdquo', '’': 'rsquo', '♣': 'clubs', ':': 'colon', '∷': 'Colon', '⩴': 'Colone', ',': 'comma', '@': 'commat', '∁': 'comp', '∘': 'compfn', 'ℂ': 'Copf', '≅': 'cong', '⩭': 'congdot', '≡': 'equiv', '∮': 'oint', '∯': 'Conint', '𝕔': 'copf', '∐': 'coprod', '\xA9': 'copy', '℗': 'copysr', '↵': 'crarr', '✗': 'cross', '⨯': 'Cross', '𝒞': 'Cscr', '𝒸': 'cscr', '⫏': 'csub', '⫑': 'csube', '⫐': 'csup', '⫒': 'csupe', '⋯': 'ctdot', '⤸': 'cudarrl', '⤵': 'cudarrr', '⋞': 'cuepr', '⋟': 'cuesc', '↶': 'cularr', '⤽': 'cularrp', '⩈': 'cupbrcap', '⩆': 'cupcap', '∪': 'cup', '⋓': 'Cup', '⩊': 'cupcup', '⊍': 'cupdot', '⩅': 'cupor', '∪︀': 'cups', '↷': 'curarr', '⤼': 'curarrm', '⋎': 'cuvee', '⋏': 'cuwed', '\xA4': 'curren', '∱': 'cwint', '⌭': 'cylcty', '†': 'dagger', '‡': 'Dagger', 'ℸ': 'daleth', '↓': 'darr', '↡': 'Darr', '⇓': 'dArr', '‐': 'dash', '⫤': 'Dashv', '⊣': 'dashv', '⤏': 'rBarr', '˝': 'dblac', 'Ď': 'Dcaron', 'ď': 'dcaron', 'Д': 'Dcy', 'д': 'dcy', '⇊': 'ddarr', 'ⅆ': 'dd', '⤑': 'DDotrahd', '⩷': 'eDDot', '\xB0': 'deg', '∇': 'Del', 'Δ': 'Delta', 'δ': 'delta', '⦱': 'demptyv', '⥿': 'dfisht', '𝔇': 'Dfr', '𝔡': 'dfr', '⥥': 'dHar', '⇃': 'dharl', '⇂': 'dharr', '˙': 'dot', '`': 'grave', '˜': 'tilde', '⋄': 'diam', '♦': 'diams', '\xA8': 'die', 'ϝ': 'gammad', '⋲': 'disin', '\xF7': 'div', '⋇': 'divonx', 'Ђ': 'DJcy', 'ђ': 'djcy', '⌞': 'dlcorn', '⌍': 'dlcrop', '$': 'dollar', '𝔻': 'Dopf', '𝕕': 'dopf', '⃜': 'DotDot', '≐': 'doteq', '≑': 'eDot', '∸': 'minusd', '∔': 'plusdo', '⊡': 'sdotb', '⇐': 'lArr', '⇔': 'iff', '⟸': 'xlArr', '⟺': 'xhArr', '⟹': 'xrArr', '⇒': 'rArr', '⊨': 'vDash', '⇑': 'uArr', '⇕': 'vArr', '∥': 'par', '⤓': 'DownArrowBar', '⇵': 'duarr', '̑': 'DownBreve', '⥐': 'DownLeftRightVector', '⥞': 'DownLeftTeeVector', '⥖': 'DownLeftVectorBar', '↽': 'lhard', '⥟': 'DownRightTeeVector', '⥗': 'DownRightVectorBar', '⇁': 'rhard', '↧': 'mapstodown', '⊤': 'top', '⤐': 'RBarr', '⌟': 'drcorn', '⌌': 'drcrop', '𝒟': 'Dscr', '𝒹': 'dscr', 'Ѕ': 'DScy', 'ѕ': 'dscy', '⧶': 'dsol', 'Đ': 'Dstrok', 'đ': 'dstrok', '⋱': 'dtdot', '▿': 'dtri', '⥯': 'duhar', '⦦': 'dwangle', 'Џ': 'DZcy', 'џ': 'dzcy', '⟿': 'dzigrarr', '\xC9': 'Eacute', '\xE9': 'eacute', '⩮': 'easter', 'Ě': 'Ecaron', 'ě': 'ecaron', '\xCA': 'Ecirc', '\xEA': 'ecirc', '≖': 'ecir', '≕': 'ecolon', 'Э': 'Ecy', 'э': 'ecy', 'Ė': 'Edot', 'ė': 'edot', 'ⅇ': 'ee', '≒': 'efDot', '𝔈': 'Efr', '𝔢': 'efr', '⪚': 'eg', '\xC8': 'Egrave', '\xE8': 'egrave', '⪖': 'egs', '⪘': 'egsdot', '⪙': 'el', '∈': 'in', '⏧': 'elinters', 'ℓ': 'ell', '⪕': 'els', '⪗': 'elsdot', 'Ē': 'Emacr', 'ē': 'emacr', '∅': 'empty', '◻': 'EmptySmallSquare', '▫': 'EmptyVerySmallSquare', ' ': 'emsp13', ' ': 'emsp14', ' ': 'emsp', 'Ŋ': 'ENG', 'ŋ': 'eng', ' ': 'ensp', 'Ę': 'Eogon', 'ę': 'eogon', '𝔼': 'Eopf', '𝕖': 'eopf', '⋕': 'epar', '⧣': 'eparsl', '⩱': 'eplus', 'ε': 'epsi', 'Ε': 'Epsilon', 'ϵ': 'epsiv', '≂': 'esim', '⩵': 'Equal', '=': 'equals', '≟': 'equest', '⇌': 'rlhar', '⩸': 'equivDD', '⧥': 'eqvparsl', '⥱': 'erarr', '≓': 'erDot', 'ℯ': 'escr', 'ℰ': 'Escr', '⩳': 'Esim', 'Η': 'Eta', 'η': 'eta', '\xD0': 'ETH', '\xF0': 'eth', '\xCB': 'Euml', '\xEB': 'euml', '€': 'euro', '!': 'excl', '∃': 'exist', 'Ф': 'Fcy', 'ф': 'fcy', '♀': 'female', 'ﬃ': 'ffilig', 'ﬀ': 'fflig', 'ﬄ': 'ffllig', '𝔉': 'Ffr', '𝔣': 'ffr', 'ﬁ': 'filig', '◼': 'FilledSmallSquare', 'fj': 'fjlig', '♭': 'flat', 'ﬂ': 'fllig', '▱': 'fltns', 'ƒ': 'fnof', '𝔽': 'Fopf', '𝕗': 'fopf', '∀': 'forall', '⋔': 'fork', '⫙': 'forkv', 'ℱ': 'Fscr', '⨍': 'fpartint', '\xBD': 'half', '⅓': 'frac13', '\xBC': 'frac14', '⅕': 'frac15', '⅙': 'frac16', '⅛': 'frac18', '⅔': 'frac23', '⅖': 'frac25', '\xBE': 'frac34', '⅗': 'frac35', '⅜': 'frac38', '⅘': 'frac45', '⅚': 'frac56', '⅝': 'frac58', '⅞': 'frac78', '⁄': 'frasl', '⌢': 'frown', '𝒻': 'fscr', 'ǵ': 'gacute', 'Γ': 'Gamma', 'γ': 'gamma', 'Ϝ': 'Gammad', '⪆': 'gap', 'Ğ': 'Gbreve', 'ğ': 'gbreve', 'Ģ': 'Gcedil', 'Ĝ': 'Gcirc', 'ĝ': 'gcirc', 'Г': 'Gcy', 'г': 'gcy', 'Ġ': 'Gdot', 'ġ': 'gdot', '≥': 'ge', '≧': 'gE', '⪌': 'gEl', '⋛': 'gel', '⩾': 'ges', '⪩': 'gescc', '⪀': 'gesdot', '⪂': 'gesdoto', '⪄': 'gesdotol', '⋛︀': 'gesl', '⪔': 'gesles', '𝔊': 'Gfr', '𝔤': 'gfr', '≫': 'gg', '⋙': 'Gg', 'ℷ': 'gimel', 'Ѓ': 'GJcy', 'ѓ': 'gjcy', '⪥': 'gla', '≷': 'gl', '⪒': 'glE', '⪤': 'glj', '⪊': 'gnap', '⪈': 'gne', '≩': 'gnE', '⋧': 'gnsim', '𝔾': 'Gopf', '𝕘': 'gopf', '⪢': 'GreaterGreater', '≳': 'gsim', '𝒢': 'Gscr', 'ℊ': 'gscr', '⪎': 'gsime', '⪐': 'gsiml', '⪧': 'gtcc', '⩺': 'gtcir', '>': 'gt', '⋗': 'gtdot', '⦕': 'gtlPar', '⩼': 'gtquest', '⥸': 'gtrarr', '≩︀': 'gvnE', ' ': 'hairsp', 'ℋ': 'Hscr', 'Ъ': 'HARDcy', 'ъ': 'hardcy', '⥈': 'harrcir', '↔': 'harr', '↭': 'harrw', '^': 'Hat', 'ℏ': 'hbar', 'Ĥ': 'Hcirc', 'ĥ': 'hcirc', '♥': 'hearts', '…': 'mldr', '⊹': 'hercon', '𝔥': 'hfr', 'ℌ': 'Hfr', '⤥': 'searhk', '⤦': 'swarhk', '⇿': 'hoarr', '∻': 'homtht', '↩': 'larrhk', '↪': 'rarrhk', '𝕙': 'hopf', 'ℍ': 'Hopf', '―': 'horbar', '𝒽': 'hscr', 'Ħ': 'Hstrok', 'ħ': 'hstrok', '⁃': 'hybull', '\xCD': 'Iacute', '\xED': 'iacute', '⁣': 'ic', '\xCE': 'Icirc', '\xEE': 'icirc', 'И': 'Icy', 'и': 'icy', 'İ': 'Idot', 'Е': 'IEcy', 'е': 'iecy', '\xA1': 'iexcl', '𝔦': 'ifr', 'ℑ': 'Im', '\xCC': 'Igrave', '\xEC': 'igrave', 'ⅈ': 'ii', '⨌': 'qint', '∭': 'tint', '⧜': 'iinfin', '℩': 'iiota', 'Ĳ': 'IJlig', 'ĳ': 'ijlig', 'Ī': 'Imacr', 'ī': 'imacr', 'ℐ': 'Iscr', 'ı': 'imath', '⊷': 'imof', 'Ƶ': 'imped', '℅': 'incare', '∞': 'infin', '⧝': 'infintie', '⊺': 'intcal', '∫': 'int', '∬': 'Int', 'ℤ': 'Zopf', '⨗': 'intlarhk', '⨼': 'iprod', '⁢': 'it', 'Ё': 'IOcy', 'ё': 'iocy', 'Į': 'Iogon', 'į': 'iogon', '𝕀': 'Iopf', '𝕚': 'iopf', 'Ι': 'Iota', 'ι': 'iota', '\xBF': 'iquest', '𝒾': 'iscr', '⋵': 'isindot', '⋹': 'isinE', '⋴': 'isins', '⋳': 'isinsv', 'Ĩ': 'Itilde', 'ĩ': 'itilde', 'І': 'Iukcy', 'і': 'iukcy', '\xCF': 'Iuml', '\xEF': 'iuml', 'Ĵ': 'Jcirc', 'ĵ': 'jcirc', 'Й': 'Jcy', 'й': 'jcy', '𝔍': 'Jfr', '𝔧': 'jfr', 'ȷ': 'jmath', '𝕁': 'Jopf', '𝕛': 'jopf', '𝒥': 'Jscr', '𝒿': 'jscr', 'Ј': 'Jsercy', 'ј': 'jsercy', 'Є': 'Jukcy', 'є': 'jukcy', 'Κ': 'Kappa', 'κ': 'kappa', 'ϰ': 'kappav', 'Ķ': 'Kcedil', 'ķ': 'kcedil', 'К': 'Kcy', 'к': 'kcy', '𝔎': 'Kfr', '𝔨': 'kfr', 'ĸ': 'kgreen', 'Х': 'KHcy', 'х': 'khcy', 'Ќ': 'KJcy', 'ќ': 'kjcy', '𝕂': 'Kopf', '𝕜': 'kopf', '𝒦': 'Kscr', '𝓀': 'kscr', '⇚': 'lAarr', 'Ĺ': 'Lacute', 'ĺ': 'lacute', '⦴': 'laemptyv', 'ℒ': 'Lscr', 'Λ': 'Lambda', 'λ': 'lambda', '⟨': 'lang', '⟪': 'Lang', '⦑': 'langd', '⪅': 'lap', '\xAB': 'laquo', '⇤': 'larrb', '⤟': 'larrbfs', '←': 'larr', '↞': 'Larr', '⤝': 'larrfs', '↫': 'larrlp', '⤹': 'larrpl', '⥳': 'larrsim', '↢': 'larrtl', '⤙': 'latail', '⤛': 'lAtail', '⪫': 'lat', '⪭': 'late', '⪭︀': 'lates', '⤌': 'lbarr', '⤎': 'lBarr', '❲': 'lbbrk', '{': 'lcub', '[': 'lsqb', '⦋': 'lbrke', '⦏': 'lbrksld', '⦍': 'lbrkslu', 'Ľ': 'Lcaron', 'ľ': 'lcaron', 'Ļ': 'Lcedil', 'ļ': 'lcedil', '⌈': 'lceil', 'Л': 'Lcy', 'л': 'lcy', '⤶': 'ldca', '“': 'ldquo', '⥧': 'ldrdhar', '⥋': 'ldrushar', '↲': 'ldsh', '≤': 'le', '≦': 'lE', '⇆': 'lrarr', '⟦': 'lobrk', '⥡': 'LeftDownTeeVector', '⥙': 'LeftDownVectorBar', '⌊': 'lfloor', '↼': 'lharu', '⇇': 'llarr', '⇋': 'lrhar', '⥎': 'LeftRightVector', '↤': 'mapstoleft', '⥚': 'LeftTeeVector', '⋋': 'lthree', '⧏': 'LeftTriangleBar', '⊲': 'vltri', '⊴': 'ltrie', '⥑': 'LeftUpDownVector', '⥠': 'LeftUpTeeVector', '⥘': 'LeftUpVectorBar', '↿': 'uharl', '⥒': 'LeftVectorBar', '⪋': 'lEg', '⋚': 'leg', '⩽': 'les', '⪨': 'lescc', '⩿': 'lesdot', '⪁': 'lesdoto', '⪃': 'lesdotor', '⋚︀': 'lesg', '⪓': 'lesges', '⋖': 'ltdot', '≶': 'lg', '⪡': 'LessLess', '≲': 'lsim', '⥼': 'lfisht', '𝔏': 'Lfr', '𝔩': 'lfr', '⪑': 'lgE', '⥢': 'lHar', '⥪': 'lharul', '▄': 'lhblk', 'Љ': 'LJcy', 'љ': 'ljcy', '≪': 'll', '⋘': 'Ll', '⥫': 'llhard', '◺': 'lltri', 'Ŀ': 'Lmidot', 'ŀ': 'lmidot', '⎰': 'lmoust', '⪉': 'lnap', '⪇': 'lne', '≨': 'lnE', '⋦': 'lnsim', '⟬': 'loang', '⇽': 'loarr', '⟵': 'xlarr', '⟷': 'xharr', '⟼': 'xmap', '⟶': 'xrarr', '↬': 'rarrlp', '⦅': 'lopar', '𝕃': 'Lopf', '𝕝': 'lopf', '⨭': 'loplus', '⨴': 'lotimes', '∗': 'lowast', '_': 'lowbar', '↙': 'swarr', '↘': 'searr', '◊': 'loz', '(': 'lpar', '⦓': 'lparlt', '⥭': 'lrhard', '‎': 'lrm', '⊿': 'lrtri', '‹': 'lsaquo', '𝓁': 'lscr', '↰': 'lsh', '⪍': 'lsime', '⪏': 'lsimg', '‘': 'lsquo', '‚': 'sbquo', 'Ł': 'Lstrok', 'ł': 'lstrok', '⪦': 'ltcc', '⩹': 'ltcir', '<': 'lt', '⋉': 'ltimes', '⥶': 'ltlarr', '⩻': 'ltquest', '◃': 'ltri', '⦖': 'ltrPar', '⥊': 'lurdshar', '⥦': 'luruhar', '≨︀': 'lvnE', '\xAF': 'macr', '♂': 'male', '✠': 'malt', '⤅': 'Map', '↦': 'map', '↥': 'mapstoup', '▮': 'marker', '⨩': 'mcomma', 'М': 'Mcy', 'м': 'mcy', '—': 'mdash', '∺': 'mDDot', ' ': 'MediumSpace', 'ℳ': 'Mscr', '𝔐': 'Mfr', '𝔪': 'mfr', '℧': 'mho', '\xB5': 'micro', '⫰': 'midcir', '∣': 'mid', '−': 'minus', '⨪': 'minusdu', '∓': 'mp', '⫛': 'mlcp', '⊧': 'models', '𝕄': 'Mopf', '𝕞': 'mopf', '𝓂': 'mscr', 'Μ': 'Mu', 'μ': 'mu', '⊸': 'mumap', 'Ń': 'Nacute', 'ń': 'nacute', '∠⃒': 'nang', '≉': 'nap', '⩰̸': 'napE', '≋̸': 'napid', 'ŉ': 'napos', '♮': 'natur', 'ℕ': 'Nopf', '\xA0': 'nbsp', '≎̸': 'nbump', '≏̸': 'nbumpe', '⩃': 'ncap', 'Ň': 'Ncaron', 'ň': 'ncaron', 'Ņ': 'Ncedil', 'ņ': 'ncedil', '≇': 'ncong', '⩭̸': 'ncongdot', '⩂': 'ncup', 'Н': 'Ncy', 'н': 'ncy', '–': 'ndash', '⤤': 'nearhk', '↗': 'nearr', '⇗': 'neArr', '≠': 'ne', '≐̸': 'nedot', '​': 'ZeroWidthSpace', '≢': 'nequiv', '⤨': 'toea', '≂̸': 'nesim', '\n': 'NewLine', '∄': 'nexist', '𝔑': 'Nfr', '𝔫': 'nfr', '≧̸': 'ngE', '≱': 'nge', '⩾̸': 'nges', '⋙̸': 'nGg', '≵': 'ngsim', '≫⃒': 'nGt', '≯': 'ngt', '≫̸': 'nGtv', '↮': 'nharr', '⇎': 'nhArr', '⫲': 'nhpar', '∋': 'ni', '⋼': 'nis', '⋺': 'nisd', 'Њ': 'NJcy', 'њ': 'njcy', '↚': 'nlarr', '⇍': 'nlArr', '‥': 'nldr', '≦̸': 'nlE', '≰': 'nle', '⩽̸': 'nles', '≮': 'nlt', '⋘̸': 'nLl', '≴': 'nlsim', '≪⃒': 'nLt', '⋪': 'nltri', '⋬': 'nltrie', '≪̸': 'nLtv', '∤': 'nmid', '⁠': 'NoBreak', '𝕟': 'nopf', '⫬': 'Not', '\xAC': 'not', '≭': 'NotCupCap', '∦': 'npar', '∉': 'notin', '≹': 'ntgl', '⋵̸': 'notindot', '⋹̸': 'notinE', '⋷': 'notinvb', '⋶': 'notinvc', '⧏̸': 'NotLeftTriangleBar', '≸': 'ntlg', '⪢̸': 'NotNestedGreaterGreater', '⪡̸': 'NotNestedLessLess', '∌': 'notni', '⋾': 'notnivb', '⋽': 'notnivc', '⊀': 'npr', '⪯̸': 'npre', '⋠': 'nprcue', '⧐̸': 'NotRightTriangleBar', '⋫': 'nrtri', '⋭': 'nrtrie', '⊏̸': 'NotSquareSubset', '⋢': 'nsqsube', '⊐̸': 'NotSquareSuperset', '⋣': 'nsqsupe', '⊂⃒': 'vnsub', '⊈': 'nsube', '⊁': 'nsc', '⪰̸': 'nsce', '⋡': 'nsccue', '≿̸': 'NotSucceedsTilde', '⊃⃒': 'vnsup', '⊉': 'nsupe', '≁': 'nsim', '≄': 'nsime', '⫽⃥': 'nparsl', '∂̸': 'npart', '⨔': 'npolint', '⤳̸': 'nrarrc', '↛': 'nrarr', '⇏': 'nrArr', '↝̸': 'nrarrw', '𝒩': 'Nscr', '𝓃': 'nscr', '⊄': 'nsub', '⫅̸': 'nsubE', '⊅': 'nsup', '⫆̸': 'nsupE', '\xD1': 'Ntilde', '\xF1': 'ntilde', 'Ν': 'Nu', 'ν': 'nu', '#': 'num', '№': 'numero', ' ': 'numsp', '≍⃒': 'nvap', '⊬': 'nvdash', '⊭': 'nvDash', '⊮': 'nVdash', '⊯': 'nVDash', '≥⃒': 'nvge', '>⃒': 'nvgt', '⤄': 'nvHarr', '⧞': 'nvinfin', '⤂': 'nvlArr', '≤⃒': 'nvle', '<⃒': 'nvlt', '⊴⃒': 'nvltrie', '⤃': 'nvrArr', '⊵⃒': 'nvrtrie', '∼⃒': 'nvsim', '⤣': 'nwarhk', '↖': 'nwarr', '⇖': 'nwArr', '⤧': 'nwnear', '\xD3': 'Oacute', '\xF3': 'oacute', '\xD4': 'Ocirc', '\xF4': 'ocirc', 'О': 'Ocy', 'о': 'ocy', 'Ő': 'Odblac', 'ő': 'odblac', '⨸': 'odiv', '⦼': 'odsold', 'Œ': 'OElig', 'œ': 'oelig', '⦿': 'ofcir', '𝔒': 'Ofr', '𝔬': 'ofr', '˛': 'ogon', '\xD2': 'Ograve', '\xF2': 'ograve', '⧁': 'ogt', '⦵': 'ohbar', 'Ω': 'ohm', '⦾': 'olcir', '⦻': 'olcross', '‾': 'oline', '⧀': 'olt', 'Ō': 'Omacr', 'ō': 'omacr', 'ω': 'omega', 'Ο': 'Omicron', 'ο': 'omicron', '⦶': 'omid', '𝕆': 'Oopf', '𝕠': 'oopf', '⦷': 'opar', '⦹': 'operp', '⩔': 'Or', '∨': 'or', '⩝': 'ord', 'ℴ': 'oscr', '\xAA': 'ordf', '\xBA': 'ordm', '⊶': 'origof', '⩖': 'oror', '⩗': 'orslope', '⩛': 'orv', '𝒪': 'Oscr', '\xD8': 'Oslash', '\xF8': 'oslash', '⊘': 'osol', '\xD5': 'Otilde', '\xF5': 'otilde', '⨶': 'otimesas', '⨷': 'Otimes', '\xD6': 'Ouml', '\xF6': 'ouml', '⌽': 'ovbar', '⏞': 'OverBrace', '⎴': 'tbrk', '⏜': 'OverParenthesis', '\xB6': 'para', '⫳': 'parsim', '⫽': 'parsl', '∂': 'part', 'П': 'Pcy', 'п': 'pcy', '%': 'percnt', '.': 'period', '‰': 'permil', '‱': 'pertenk', '𝔓': 'Pfr', '𝔭': 'pfr', 'Φ': 'Phi', 'φ': 'phi', 'ϕ': 'phiv', '☎': 'phone', 'Π': 'Pi', 'π': 'pi', 'ϖ': 'piv', 'ℎ': 'planckh', '⨣': 'plusacir', '⨢': 'pluscir', '+': 'plus', '⨥': 'plusdu', '⩲': 'pluse', '\xB1': 'pm', '⨦': 'plussim', '⨧': 'plustwo', '⨕': 'pointint', '𝕡': 'popf', 'ℙ': 'Popf', '\xA3': 'pound', '⪷': 'prap', '⪻': 'Pr', '≺': 'pr', '≼': 'prcue', '⪯': 'pre', '≾': 'prsim', '⪹': 'prnap', '⪵': 'prnE', '⋨': 'prnsim', '⪳': 'prE', '′': 'prime', '″': 'Prime', '∏': 'prod', '⌮': 'profalar', '⌒': 'profline', '⌓': 'profsurf', '∝': 'prop', '⊰': 'prurel', '𝒫': 'Pscr', '𝓅': 'pscr', 'Ψ': 'Psi', 'ψ': 'psi', ' ': 'puncsp', '𝔔': 'Qfr', '𝔮': 'qfr', '𝕢': 'qopf', 'ℚ': 'Qopf', '⁗': 'qprime', '𝒬': 'Qscr', '𝓆': 'qscr', '⨖': 'quatint', '?': 'quest', '"': 'quot', '⇛': 'rAarr', '∽̱': 'race', 'Ŕ': 'Racute', 'ŕ': 'racute', '√': 'Sqrt', '⦳': 'raemptyv', '⟩': 'rang', '⟫': 'Rang', '⦒': 'rangd', '⦥': 'range', '\xBB': 'raquo', '⥵': 'rarrap', '⇥': 'rarrb', '⤠': 'rarrbfs', '⤳': 'rarrc', '→': 'rarr', '↠': 'Rarr', '⤞': 'rarrfs', '⥅': 'rarrpl', '⥴': 'rarrsim', '⤖': 'Rarrtl', '↣': 'rarrtl', '↝': 'rarrw', '⤚': 'ratail', '⤜': 'rAtail', '∶': 'ratio', '❳': 'rbbrk', '}': 'rcub', ']': 'rsqb', '⦌': 'rbrke', '⦎': 'rbrksld', '⦐': 'rbrkslu', 'Ř': 'Rcaron', 'ř': 'rcaron', 'Ŗ': 'Rcedil', 'ŗ': 'rcedil', '⌉': 'rceil', 'Р': 'Rcy', 'р': 'rcy', '⤷': 'rdca', '⥩': 'rdldhar', '↳': 'rdsh', 'ℜ': 'Re', 'ℛ': 'Rscr', 'ℝ': 'Ropf', '▭': 'rect', '⥽': 'rfisht', '⌋': 'rfloor', '𝔯': 'rfr', '⥤': 'rHar', '⇀': 'rharu', '⥬': 'rharul', 'Ρ': 'Rho', 'ρ': 'rho', 'ϱ': 'rhov', '⇄': 'rlarr', '⟧': 'robrk', '⥝': 'RightDownTeeVector', '⥕': 'RightDownVectorBar', '⇉': 'rrarr', '⊢': 'vdash', '⥛': 'RightTeeVector', '⋌': 'rthree', '⧐': 'RightTriangleBar', '⊳': 'vrtri', '⊵': 'rtrie', '⥏': 'RightUpDownVector', '⥜': 'RightUpTeeVector', '⥔': 'RightUpVectorBar', '↾': 'uharr', '⥓': 'RightVectorBar', '˚': 'ring', '‏': 'rlm', '⎱': 'rmoust', '⫮': 'rnmid', '⟭': 'roang', '⇾': 'roarr', '⦆': 'ropar', '𝕣': 'ropf', '⨮': 'roplus', '⨵': 'rotimes', '⥰': 'RoundImplies', ')': 'rpar', '⦔': 'rpargt', '⨒': 'rppolint', '›': 'rsaquo', '𝓇': 'rscr', '↱': 'rsh', '⋊': 'rtimes', '▹': 'rtri', '⧎': 'rtriltri', '⧴': 'RuleDelayed', '⥨': 'ruluhar', '℞': 'rx', 'Ś': 'Sacute', 'ś': 'sacute', '⪸': 'scap', 'Š': 'Scaron', 'š': 'scaron', '⪼': 'Sc', '≻': 'sc', '≽': 'sccue', '⪰': 'sce', '⪴': 'scE', 'Ş': 'Scedil', 'ş': 'scedil', 'Ŝ': 'Scirc', 'ŝ': 'scirc', '⪺': 'scnap', '⪶': 'scnE', '⋩': 'scnsim', '⨓': 'scpolint', '≿': 'scsim', 'С': 'Scy', 'с': 'scy', '⋅': 'sdot', '⩦': 'sdote', '⇘': 'seArr', '\xA7': 'sect', ';': 'semi', '⤩': 'tosa', '✶': 'sext', '𝔖': 'Sfr', '𝔰': 'sfr', '♯': 'sharp', 'Щ': 'SHCHcy', 'щ': 'shchcy', 'Ш': 'SHcy', 'ш': 'shcy', '↑': 'uarr', '\xAD': 'shy', 'Σ': 'Sigma', 'σ': 'sigma', 'ς': 'sigmaf', '∼': 'sim', '⩪': 'simdot', '≃': 'sime', '⪞': 'simg', '⪠': 'simgE', '⪝': 'siml', '⪟': 'simlE', '≆': 'simne', '⨤': 'simplus', '⥲': 'simrarr', '⨳': 'smashp', '⧤': 'smeparsl', '⌣': 'smile', '⪪': 'smt', '⪬': 'smte', '⪬︀': 'smtes', 'Ь': 'SOFTcy', 'ь': 'softcy', '⌿': 'solbar', '⧄': 'solb', '/': 'sol', '𝕊': 'Sopf', '𝕤': 'sopf', '♠': 'spades', '⊓': 'sqcap', '⊓︀': 'sqcaps', '⊔': 'sqcup', '⊔︀': 'sqcups', '⊏': 'sqsub', '⊑': 'sqsube', '⊐': 'sqsup', '⊒': 'sqsupe', '□': 'squ', '𝒮': 'Sscr', '𝓈': 'sscr', '⋆': 'Star', '☆': 'star', '⊂': 'sub', '⋐': 'Sub', '⪽': 'subdot', '⫅': 'subE', '⊆': 'sube', '⫃': 'subedot', '⫁': 'submult', '⫋': 'subnE', '⊊': 'subne', '⪿': 'subplus', '⥹': 'subrarr', '⫇': 'subsim', '⫕': 'subsub', '⫓': 'subsup', '∑': 'sum', '♪': 'sung', '\xB9': 'sup1', '\xB2': 'sup2', '\xB3': 'sup3', '⊃': 'sup', '⋑': 'Sup', '⪾': 'supdot', '⫘': 'supdsub', '⫆': 'supE', '⊇': 'supe', '⫄': 'supedot', '⟉': 'suphsol', '⫗': 'suphsub', '⥻': 'suplarr', '⫂': 'supmult', '⫌': 'supnE', '⊋': 'supne', '⫀': 'supplus', '⫈': 'supsim', '⫔': 'supsub', '⫖': 'supsup', '⇙': 'swArr', '⤪': 'swnwar', '\xDF': 'szlig', '\t': 'Tab', '⌖': 'target', 'Τ': 'Tau', 'τ': 'tau', 'Ť': 'Tcaron', 'ť': 'tcaron', 'Ţ': 'Tcedil', 'ţ': 'tcedil', 'Т': 'Tcy', 'т': 'tcy', '⃛': 'tdot', '⌕': 'telrec', '𝔗': 'Tfr', '𝔱': 'tfr', '∴': 'there4', 'Θ': 'Theta', 'θ': 'theta', 'ϑ': 'thetav', '  ': 'ThickSpace', ' ': 'thinsp', '\xDE': 'THORN', '\xFE': 'thorn', '⨱': 'timesbar', '\xD7': 'times', '⨰': 'timesd', '⌶': 'topbot', '⫱': 'topcir', '𝕋': 'Topf', '𝕥': 'topf', '⫚': 'topfork', '‴': 'tprime', '™': 'trade', '▵': 'utri', '≜': 'trie', '◬': 'tridot', '⨺': 'triminus', '⨹': 'triplus', '⧍': 'trisb', '⨻': 'tritime', '⏢': 'trpezium', '𝒯': 'Tscr', '𝓉': 'tscr', 'Ц': 'TScy', 'ц': 'tscy', 'Ћ': 'TSHcy', 'ћ': 'tshcy', 'Ŧ': 'Tstrok', 'ŧ': 'tstrok', '\xDA': 'Uacute', '\xFA': 'uacute', '↟': 'Uarr', '⥉': 'Uarrocir', 'Ў': 'Ubrcy', 'ў': 'ubrcy', 'Ŭ': 'Ubreve', 'ŭ': 'ubreve', '\xDB': 'Ucirc', '\xFB': 'ucirc', 'У': 'Ucy', 'у': 'ucy', '⇅': 'udarr', 'Ű': 'Udblac', 'ű': 'udblac', '⥮': 'udhar', '⥾': 'ufisht', '𝔘': 'Ufr', '𝔲': 'ufr', '\xD9': 'Ugrave', '\xF9': 'ugrave', '⥣': 'uHar', '▀': 'uhblk', '⌜': 'ulcorn', '⌏': 'ulcrop', '◸': 'ultri', 'Ū': 'Umacr', 'ū': 'umacr', '⏟': 'UnderBrace', '⏝': 'UnderParenthesis', '⊎': 'uplus', 'Ų': 'Uogon', 'ų': 'uogon', '𝕌': 'Uopf', '𝕦': 'uopf', '⤒': 'UpArrowBar', '↕': 'varr', 'υ': 'upsi', 'ϒ': 'Upsi', 'Υ': 'Upsilon', '⇈': 'uuarr', '⌝': 'urcorn', '⌎': 'urcrop', 'Ů': 'Uring', 'ů': 'uring', '◹': 'urtri', '𝒰': 'Uscr', '𝓊': 'uscr', '⋰': 'utdot', 'Ũ': 'Utilde', 'ũ': 'utilde', '\xDC': 'Uuml', '\xFC': 'uuml', '⦧': 'uwangle', '⦜': 'vangrt', '⊊︀': 'vsubne', '⫋︀': 'vsubnE', '⊋︀': 'vsupne', '⫌︀': 'vsupnE', '⫨': 'vBar', '⫫': 'Vbar', '⫩': 'vBarv', 'В': 'Vcy', 'в': 'vcy', '⊩': 'Vdash', '⊫': 'VDash', '⫦': 'Vdashl', '⊻': 'veebar', '≚': 'veeeq', '⋮': 'vellip', '|': 'vert', '‖': 'Vert', '❘': 'VerticalSeparator', '≀': 'wr', '𝔙': 'Vfr', '𝔳': 'vfr', '𝕍': 'Vopf', '𝕧': 'vopf', '𝒱': 'Vscr', '𝓋': 'vscr', '⊪': 'Vvdash', '⦚': 'vzigzag', 'Ŵ': 'Wcirc', 'ŵ': 'wcirc', '⩟': 'wedbar', '≙': 'wedgeq', '℘': 'wp', '𝔚': 'Wfr', '𝔴': 'wfr', '𝕎': 'Wopf', '𝕨': 'wopf', '𝒲': 'Wscr', '𝓌': 'wscr', '𝔛': 'Xfr', '𝔵': 'xfr', 'Ξ': 'Xi', 'ξ': 'xi', '⋻': 'xnis', '𝕏': 'Xopf', '𝕩': 'xopf', '𝒳': 'Xscr', '𝓍': 'xscr', '\xDD': 'Yacute', '\xFD': 'yacute', 'Я': 'YAcy', 'я': 'yacy', 'Ŷ': 'Ycirc', 'ŷ': 'ycirc', 'Ы': 'Ycy', 'ы': 'ycy', '\xA5': 'yen', '𝔜': 'Yfr', '𝔶': 'yfr', 'Ї': 'YIcy', 'ї': 'yicy', '𝕐': 'Yopf', '𝕪': 'yopf', '𝒴': 'Yscr', '𝓎': 'yscr', 'Ю': 'YUcy', 'ю': 'yucy', '\xFF': 'yuml', 'Ÿ': 'Yuml', 'Ź': 'Zacute', 'ź': 'zacute', 'Ž': 'Zcaron', 'ž': 'zcaron', 'З': 'Zcy', 'з': 'zcy', 'Ż': 'Zdot', 'ż': 'zdot', 'ℨ': 'Zfr', 'Ζ': 'Zeta', 'ζ': 'zeta', '𝔷': 'zfr', 'Ж': 'ZHcy', 'ж': 'zhcy', '⇝': 'zigrarr', '𝕫': 'zopf', '𝒵': 'Zscr', '𝓏': 'zscr', '‍': 'zwj', '‌': 'zwnj' };

		var regexEscape = /["&'<>`]/g;
		var escapeMap = {
			'"': '&quot;',
			'&': '&amp;',
			'\'': '&#x27;',
			'<': '&lt;',
			// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
			// following is not strictly necessary unless it’s part of a tag or an
			// unquoted attribute value. We’re only escaping it to support those
			// situations, and for XML support.
			'>': '&gt;',
			// In Internet Explorer ≤ 8, the backtick character can be used
			// to break out of (un)quoted attribute values or HTML comments.
			// See http://html5sec.org/#102, http://html5sec.org/#108, and
			// http://html5sec.org/#133.
			'`': '&#x60;'
		};

		var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
		var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
		var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g;
		var decodeMap = { 'Aacute': '\xC1', 'aacute': '\xE1', 'Abreve': 'Ă', 'abreve': 'ă', 'ac': '∾', 'acd': '∿', 'acE': '∾̳', 'Acirc': '\xC2', 'acirc': '\xE2', 'acute': '\xB4', 'Acy': 'А', 'acy': 'а', 'AElig': '\xC6', 'aelig': '\xE6', 'af': '⁡', 'Afr': '𝔄', 'afr': '𝔞', 'Agrave': '\xC0', 'agrave': '\xE0', 'alefsym': 'ℵ', 'aleph': 'ℵ', 'Alpha': 'Α', 'alpha': 'α', 'Amacr': 'Ā', 'amacr': 'ā', 'amalg': '⨿', 'amp': '&', 'AMP': '&', 'andand': '⩕', 'And': '⩓', 'and': '∧', 'andd': '⩜', 'andslope': '⩘', 'andv': '⩚', 'ang': '∠', 'ange': '⦤', 'angle': '∠', 'angmsdaa': '⦨', 'angmsdab': '⦩', 'angmsdac': '⦪', 'angmsdad': '⦫', 'angmsdae': '⦬', 'angmsdaf': '⦭', 'angmsdag': '⦮', 'angmsdah': '⦯', 'angmsd': '∡', 'angrt': '∟', 'angrtvb': '⊾', 'angrtvbd': '⦝', 'angsph': '∢', 'angst': '\xC5', 'angzarr': '⍼', 'Aogon': 'Ą', 'aogon': 'ą', 'Aopf': '𝔸', 'aopf': '𝕒', 'apacir': '⩯', 'ap': '≈', 'apE': '⩰', 'ape': '≊', 'apid': '≋', 'apos': '\'', 'ApplyFunction': '⁡', 'approx': '≈', 'approxeq': '≊', 'Aring': '\xC5', 'aring': '\xE5', 'Ascr': '𝒜', 'ascr': '𝒶', 'Assign': '≔', 'ast': '*', 'asymp': '≈', 'asympeq': '≍', 'Atilde': '\xC3', 'atilde': '\xE3', 'Auml': '\xC4', 'auml': '\xE4', 'awconint': '∳', 'awint': '⨑', 'backcong': '≌', 'backepsilon': '϶', 'backprime': '‵', 'backsim': '∽', 'backsimeq': '⋍', 'Backslash': '∖', 'Barv': '⫧', 'barvee': '⊽', 'barwed': '⌅', 'Barwed': '⌆', 'barwedge': '⌅', 'bbrk': '⎵', 'bbrktbrk': '⎶', 'bcong': '≌', 'Bcy': 'Б', 'bcy': 'б', 'bdquo': '„', 'becaus': '∵', 'because': '∵', 'Because': '∵', 'bemptyv': '⦰', 'bepsi': '϶', 'bernou': 'ℬ', 'Bernoullis': 'ℬ', 'Beta': 'Β', 'beta': 'β', 'beth': 'ℶ', 'between': '≬', 'Bfr': '𝔅', 'bfr': '𝔟', 'bigcap': '⋂', 'bigcirc': '◯', 'bigcup': '⋃', 'bigodot': '⨀', 'bigoplus': '⨁', 'bigotimes': '⨂', 'bigsqcup': '⨆', 'bigstar': '★', 'bigtriangledown': '▽', 'bigtriangleup': '△', 'biguplus': '⨄', 'bigvee': '⋁', 'bigwedge': '⋀', 'bkarow': '⤍', 'blacklozenge': '⧫', 'blacksquare': '▪', 'blacktriangle': '▴', 'blacktriangledown': '▾', 'blacktriangleleft': '◂', 'blacktriangleright': '▸', 'blank': '␣', 'blk12': '▒', 'blk14': '░', 'blk34': '▓', 'block': '█', 'bne': '=⃥', 'bnequiv': '≡⃥', 'bNot': '⫭', 'bnot': '⌐', 'Bopf': '𝔹', 'bopf': '𝕓', 'bot': '⊥', 'bottom': '⊥', 'bowtie': '⋈', 'boxbox': '⧉', 'boxdl': '┐', 'boxdL': '╕', 'boxDl': '╖', 'boxDL': '╗', 'boxdr': '┌', 'boxdR': '╒', 'boxDr': '╓', 'boxDR': '╔', 'boxh': '─', 'boxH': '═', 'boxhd': '┬', 'boxHd': '╤', 'boxhD': '╥', 'boxHD': '╦', 'boxhu': '┴', 'boxHu': '╧', 'boxhU': '╨', 'boxHU': '╩', 'boxminus': '⊟', 'boxplus': '⊞', 'boxtimes': '⊠', 'boxul': '┘', 'boxuL': '╛', 'boxUl': '╜', 'boxUL': '╝', 'boxur': '└', 'boxuR': '╘', 'boxUr': '╙', 'boxUR': '╚', 'boxv': '│', 'boxV': '║', 'boxvh': '┼', 'boxvH': '╪', 'boxVh': '╫', 'boxVH': '╬', 'boxvl': '┤', 'boxvL': '╡', 'boxVl': '╢', 'boxVL': '╣', 'boxvr': '├', 'boxvR': '╞', 'boxVr': '╟', 'boxVR': '╠', 'bprime': '‵', 'breve': '˘', 'Breve': '˘', 'brvbar': '\xA6', 'bscr': '𝒷', 'Bscr': 'ℬ', 'bsemi': '⁏', 'bsim': '∽', 'bsime': '⋍', 'bsolb': '⧅', 'bsol': '\\', 'bsolhsub': '⟈', 'bull': '•', 'bullet': '•', 'bump': '≎', 'bumpE': '⪮', 'bumpe': '≏', 'Bumpeq': '≎', 'bumpeq': '≏', 'Cacute': 'Ć', 'cacute': 'ć', 'capand': '⩄', 'capbrcup': '⩉', 'capcap': '⩋', 'cap': '∩', 'Cap': '⋒', 'capcup': '⩇', 'capdot': '⩀', 'CapitalDifferentialD': 'ⅅ', 'caps': '∩︀', 'caret': '⁁', 'caron': 'ˇ', 'Cayleys': 'ℭ', 'ccaps': '⩍', 'Ccaron': 'Č', 'ccaron': 'č', 'Ccedil': '\xC7', 'ccedil': '\xE7', 'Ccirc': 'Ĉ', 'ccirc': 'ĉ', 'Cconint': '∰', 'ccups': '⩌', 'ccupssm': '⩐', 'Cdot': 'Ċ', 'cdot': 'ċ', 'cedil': '\xB8', 'Cedilla': '\xB8', 'cemptyv': '⦲', 'cent': '\xA2', 'centerdot': '\xB7', 'CenterDot': '\xB7', 'cfr': '𝔠', 'Cfr': 'ℭ', 'CHcy': 'Ч', 'chcy': 'ч', 'check': '✓', 'checkmark': '✓', 'Chi': 'Χ', 'chi': 'χ', 'circ': 'ˆ', 'circeq': '≗', 'circlearrowleft': '↺', 'circlearrowright': '↻', 'circledast': '⊛', 'circledcirc': '⊚', 'circleddash': '⊝', 'CircleDot': '⊙', 'circledR': '\xAE', 'circledS': 'Ⓢ', 'CircleMinus': '⊖', 'CirclePlus': '⊕', 'CircleTimes': '⊗', 'cir': '○', 'cirE': '⧃', 'cire': '≗', 'cirfnint': '⨐', 'cirmid': '⫯', 'cirscir': '⧂', 'ClockwiseContourIntegral': '∲', 'CloseCurlyDoubleQuote': '”', 'CloseCurlyQuote': '’', 'clubs': '♣', 'clubsuit': '♣', 'colon': ':', 'Colon': '∷', 'Colone': '⩴', 'colone': '≔', 'coloneq': '≔', 'comma': ',', 'commat': '@', 'comp': '∁', 'compfn': '∘', 'complement': '∁', 'complexes': 'ℂ', 'cong': '≅', 'congdot': '⩭', 'Congruent': '≡', 'conint': '∮', 'Conint': '∯', 'ContourIntegral': '∮', 'copf': '𝕔', 'Copf': 'ℂ', 'coprod': '∐', 'Coproduct': '∐', 'copy': '\xA9', 'COPY': '\xA9', 'copysr': '℗', 'CounterClockwiseContourIntegral': '∳', 'crarr': '↵', 'cross': '✗', 'Cross': '⨯', 'Cscr': '𝒞', 'cscr': '𝒸', 'csub': '⫏', 'csube': '⫑', 'csup': '⫐', 'csupe': '⫒', 'ctdot': '⋯', 'cudarrl': '⤸', 'cudarrr': '⤵', 'cuepr': '⋞', 'cuesc': '⋟', 'cularr': '↶', 'cularrp': '⤽', 'cupbrcap': '⩈', 'cupcap': '⩆', 'CupCap': '≍', 'cup': '∪', 'Cup': '⋓', 'cupcup': '⩊', 'cupdot': '⊍', 'cupor': '⩅', 'cups': '∪︀', 'curarr': '↷', 'curarrm': '⤼', 'curlyeqprec': '⋞', 'curlyeqsucc': '⋟', 'curlyvee': '⋎', 'curlywedge': '⋏', 'curren': '\xA4', 'curvearrowleft': '↶', 'curvearrowright': '↷', 'cuvee': '⋎', 'cuwed': '⋏', 'cwconint': '∲', 'cwint': '∱', 'cylcty': '⌭', 'dagger': '†', 'Dagger': '‡', 'daleth': 'ℸ', 'darr': '↓', 'Darr': '↡', 'dArr': '⇓', 'dash': '‐', 'Dashv': '⫤', 'dashv': '⊣', 'dbkarow': '⤏', 'dblac': '˝', 'Dcaron': 'Ď', 'dcaron': 'ď', 'Dcy': 'Д', 'dcy': 'д', 'ddagger': '‡', 'ddarr': '⇊', 'DD': 'ⅅ', 'dd': 'ⅆ', 'DDotrahd': '⤑', 'ddotseq': '⩷', 'deg': '\xB0', 'Del': '∇', 'Delta': 'Δ', 'delta': 'δ', 'demptyv': '⦱', 'dfisht': '⥿', 'Dfr': '𝔇', 'dfr': '𝔡', 'dHar': '⥥', 'dharl': '⇃', 'dharr': '⇂', 'DiacriticalAcute': '\xB4', 'DiacriticalDot': '˙', 'DiacriticalDoubleAcute': '˝', 'DiacriticalGrave': '`', 'DiacriticalTilde': '˜', 'diam': '⋄', 'diamond': '⋄', 'Diamond': '⋄', 'diamondsuit': '♦', 'diams': '♦', 'die': '\xA8', 'DifferentialD': 'ⅆ', 'digamma': 'ϝ', 'disin': '⋲', 'div': '\xF7', 'divide': '\xF7', 'divideontimes': '⋇', 'divonx': '⋇', 'DJcy': 'Ђ', 'djcy': 'ђ', 'dlcorn': '⌞', 'dlcrop': '⌍', 'dollar': '$', 'Dopf': '𝔻', 'dopf': '𝕕', 'Dot': '\xA8', 'dot': '˙', 'DotDot': '⃜', 'doteq': '≐', 'doteqdot': '≑', 'DotEqual': '≐', 'dotminus': '∸', 'dotplus': '∔', 'dotsquare': '⊡', 'doublebarwedge': '⌆', 'DoubleContourIntegral': '∯', 'DoubleDot': '\xA8', 'DoubleDownArrow': '⇓', 'DoubleLeftArrow': '⇐', 'DoubleLeftRightArrow': '⇔', 'DoubleLeftTee': '⫤', 'DoubleLongLeftArrow': '⟸', 'DoubleLongLeftRightArrow': '⟺', 'DoubleLongRightArrow': '⟹', 'DoubleRightArrow': '⇒', 'DoubleRightTee': '⊨', 'DoubleUpArrow': '⇑', 'DoubleUpDownArrow': '⇕', 'DoubleVerticalBar': '∥', 'DownArrowBar': '⤓', 'downarrow': '↓', 'DownArrow': '↓', 'Downarrow': '⇓', 'DownArrowUpArrow': '⇵', 'DownBreve': '̑', 'downdownarrows': '⇊', 'downharpoonleft': '⇃', 'downharpoonright': '⇂', 'DownLeftRightVector': '⥐', 'DownLeftTeeVector': '⥞', 'DownLeftVectorBar': '⥖', 'DownLeftVector': '↽', 'DownRightTeeVector': '⥟', 'DownRightVectorBar': '⥗', 'DownRightVector': '⇁', 'DownTeeArrow': '↧', 'DownTee': '⊤', 'drbkarow': '⤐', 'drcorn': '⌟', 'drcrop': '⌌', 'Dscr': '𝒟', 'dscr': '𝒹', 'DScy': 'Ѕ', 'dscy': 'ѕ', 'dsol': '⧶', 'Dstrok': 'Đ', 'dstrok': 'đ', 'dtdot': '⋱', 'dtri': '▿', 'dtrif': '▾', 'duarr': '⇵', 'duhar': '⥯', 'dwangle': '⦦', 'DZcy': 'Џ', 'dzcy': 'џ', 'dzigrarr': '⟿', 'Eacute': '\xC9', 'eacute': '\xE9', 'easter': '⩮', 'Ecaron': 'Ě', 'ecaron': 'ě', 'Ecirc': '\xCA', 'ecirc': '\xEA', 'ecir': '≖', 'ecolon': '≕', 'Ecy': 'Э', 'ecy': 'э', 'eDDot': '⩷', 'Edot': 'Ė', 'edot': 'ė', 'eDot': '≑', 'ee': 'ⅇ', 'efDot': '≒', 'Efr': '𝔈', 'efr': '𝔢', 'eg': '⪚', 'Egrave': '\xC8', 'egrave': '\xE8', 'egs': '⪖', 'egsdot': '⪘', 'el': '⪙', 'Element': '∈', 'elinters': '⏧', 'ell': 'ℓ', 'els': '⪕', 'elsdot': '⪗', 'Emacr': 'Ē', 'emacr': 'ē', 'empty': '∅', 'emptyset': '∅', 'EmptySmallSquare': '◻', 'emptyv': '∅', 'EmptyVerySmallSquare': '▫', 'emsp13': ' ', 'emsp14': ' ', 'emsp': ' ', 'ENG': 'Ŋ', 'eng': 'ŋ', 'ensp': ' ', 'Eogon': 'Ę', 'eogon': 'ę', 'Eopf': '𝔼', 'eopf': '𝕖', 'epar': '⋕', 'eparsl': '⧣', 'eplus': '⩱', 'epsi': 'ε', 'Epsilon': 'Ε', 'epsilon': 'ε', 'epsiv': 'ϵ', 'eqcirc': '≖', 'eqcolon': '≕', 'eqsim': '≂', 'eqslantgtr': '⪖', 'eqslantless': '⪕', 'Equal': '⩵', 'equals': '=', 'EqualTilde': '≂', 'equest': '≟', 'Equilibrium': '⇌', 'equiv': '≡', 'equivDD': '⩸', 'eqvparsl': '⧥', 'erarr': '⥱', 'erDot': '≓', 'escr': 'ℯ', 'Escr': 'ℰ', 'esdot': '≐', 'Esim': '⩳', 'esim': '≂', 'Eta': 'Η', 'eta': 'η', 'ETH': '\xD0', 'eth': '\xF0', 'Euml': '\xCB', 'euml': '\xEB', 'euro': '€', 'excl': '!', 'exist': '∃', 'Exists': '∃', 'expectation': 'ℰ', 'exponentiale': 'ⅇ', 'ExponentialE': 'ⅇ', 'fallingdotseq': '≒', 'Fcy': 'Ф', 'fcy': 'ф', 'female': '♀', 'ffilig': 'ﬃ', 'fflig': 'ﬀ', 'ffllig': 'ﬄ', 'Ffr': '𝔉', 'ffr': '𝔣', 'filig': 'ﬁ', 'FilledSmallSquare': '◼', 'FilledVerySmallSquare': '▪', 'fjlig': 'fj', 'flat': '♭', 'fllig': 'ﬂ', 'fltns': '▱', 'fnof': 'ƒ', 'Fopf': '𝔽', 'fopf': '𝕗', 'forall': '∀', 'ForAll': '∀', 'fork': '⋔', 'forkv': '⫙', 'Fouriertrf': 'ℱ', 'fpartint': '⨍', 'frac12': '\xBD', 'frac13': '⅓', 'frac14': '\xBC', 'frac15': '⅕', 'frac16': '⅙', 'frac18': '⅛', 'frac23': '⅔', 'frac25': '⅖', 'frac34': '\xBE', 'frac35': '⅗', 'frac38': '⅜', 'frac45': '⅘', 'frac56': '⅚', 'frac58': '⅝', 'frac78': '⅞', 'frasl': '⁄', 'frown': '⌢', 'fscr': '𝒻', 'Fscr': 'ℱ', 'gacute': 'ǵ', 'Gamma': 'Γ', 'gamma': 'γ', 'Gammad': 'Ϝ', 'gammad': 'ϝ', 'gap': '⪆', 'Gbreve': 'Ğ', 'gbreve': 'ğ', 'Gcedil': 'Ģ', 'Gcirc': 'Ĝ', 'gcirc': 'ĝ', 'Gcy': 'Г', 'gcy': 'г', 'Gdot': 'Ġ', 'gdot': 'ġ', 'ge': '≥', 'gE': '≧', 'gEl': '⪌', 'gel': '⋛', 'geq': '≥', 'geqq': '≧', 'geqslant': '⩾', 'gescc': '⪩', 'ges': '⩾', 'gesdot': '⪀', 'gesdoto': '⪂', 'gesdotol': '⪄', 'gesl': '⋛︀', 'gesles': '⪔', 'Gfr': '𝔊', 'gfr': '𝔤', 'gg': '≫', 'Gg': '⋙', 'ggg': '⋙', 'gimel': 'ℷ', 'GJcy': 'Ѓ', 'gjcy': 'ѓ', 'gla': '⪥', 'gl': '≷', 'glE': '⪒', 'glj': '⪤', 'gnap': '⪊', 'gnapprox': '⪊', 'gne': '⪈', 'gnE': '≩', 'gneq': '⪈', 'gneqq': '≩', 'gnsim': '⋧', 'Gopf': '𝔾', 'gopf': '𝕘', 'grave': '`', 'GreaterEqual': '≥', 'GreaterEqualLess': '⋛', 'GreaterFullEqual': '≧', 'GreaterGreater': '⪢', 'GreaterLess': '≷', 'GreaterSlantEqual': '⩾', 'GreaterTilde': '≳', 'Gscr': '𝒢', 'gscr': 'ℊ', 'gsim': '≳', 'gsime': '⪎', 'gsiml': '⪐', 'gtcc': '⪧', 'gtcir': '⩺', 'gt': '>', 'GT': '>', 'Gt': '≫', 'gtdot': '⋗', 'gtlPar': '⦕', 'gtquest': '⩼', 'gtrapprox': '⪆', 'gtrarr': '⥸', 'gtrdot': '⋗', 'gtreqless': '⋛', 'gtreqqless': '⪌', 'gtrless': '≷', 'gtrsim': '≳', 'gvertneqq': '≩︀', 'gvnE': '≩︀', 'Hacek': 'ˇ', 'hairsp': ' ', 'half': '\xBD', 'hamilt': 'ℋ', 'HARDcy': 'Ъ', 'hardcy': 'ъ', 'harrcir': '⥈', 'harr': '↔', 'hArr': '⇔', 'harrw': '↭', 'Hat': '^', 'hbar': 'ℏ', 'Hcirc': 'Ĥ', 'hcirc': 'ĥ', 'hearts': '♥', 'heartsuit': '♥', 'hellip': '…', 'hercon': '⊹', 'hfr': '𝔥', 'Hfr': 'ℌ', 'HilbertSpace': 'ℋ', 'hksearow': '⤥', 'hkswarow': '⤦', 'hoarr': '⇿', 'homtht': '∻', 'hookleftarrow': '↩', 'hookrightarrow': '↪', 'hopf': '𝕙', 'Hopf': 'ℍ', 'horbar': '―', 'HorizontalLine': '─', 'hscr': '𝒽', 'Hscr': 'ℋ', 'hslash': 'ℏ', 'Hstrok': 'Ħ', 'hstrok': 'ħ', 'HumpDownHump': '≎', 'HumpEqual': '≏', 'hybull': '⁃', 'hyphen': '‐', 'Iacute': '\xCD', 'iacute': '\xED', 'ic': '⁣', 'Icirc': '\xCE', 'icirc': '\xEE', 'Icy': 'И', 'icy': 'и', 'Idot': 'İ', 'IEcy': 'Е', 'iecy': 'е', 'iexcl': '\xA1', 'iff': '⇔', 'ifr': '𝔦', 'Ifr': 'ℑ', 'Igrave': '\xCC', 'igrave': '\xEC', 'ii': 'ⅈ', 'iiiint': '⨌', 'iiint': '∭', 'iinfin': '⧜', 'iiota': '℩', 'IJlig': 'Ĳ', 'ijlig': 'ĳ', 'Imacr': 'Ī', 'imacr': 'ī', 'image': 'ℑ', 'ImaginaryI': 'ⅈ', 'imagline': 'ℐ', 'imagpart': 'ℑ', 'imath': 'ı', 'Im': 'ℑ', 'imof': '⊷', 'imped': 'Ƶ', 'Implies': '⇒', 'incare': '℅', 'in': '∈', 'infin': '∞', 'infintie': '⧝', 'inodot': 'ı', 'intcal': '⊺', 'int': '∫', 'Int': '∬', 'integers': 'ℤ', 'Integral': '∫', 'intercal': '⊺', 'Intersection': '⋂', 'intlarhk': '⨗', 'intprod': '⨼', 'InvisibleComma': '⁣', 'InvisibleTimes': '⁢', 'IOcy': 'Ё', 'iocy': 'ё', 'Iogon': 'Į', 'iogon': 'į', 'Iopf': '𝕀', 'iopf': '𝕚', 'Iota': 'Ι', 'iota': 'ι', 'iprod': '⨼', 'iquest': '\xBF', 'iscr': '𝒾', 'Iscr': 'ℐ', 'isin': '∈', 'isindot': '⋵', 'isinE': '⋹', 'isins': '⋴', 'isinsv': '⋳', 'isinv': '∈', 'it': '⁢', 'Itilde': 'Ĩ', 'itilde': 'ĩ', 'Iukcy': 'І', 'iukcy': 'і', 'Iuml': '\xCF', 'iuml': '\xEF', 'Jcirc': 'Ĵ', 'jcirc': 'ĵ', 'Jcy': 'Й', 'jcy': 'й', 'Jfr': '𝔍', 'jfr': '𝔧', 'jmath': 'ȷ', 'Jopf': '𝕁', 'jopf': '𝕛', 'Jscr': '𝒥', 'jscr': '𝒿', 'Jsercy': 'Ј', 'jsercy': 'ј', 'Jukcy': 'Є', 'jukcy': 'є', 'Kappa': 'Κ', 'kappa': 'κ', 'kappav': 'ϰ', 'Kcedil': 'Ķ', 'kcedil': 'ķ', 'Kcy': 'К', 'kcy': 'к', 'Kfr': '𝔎', 'kfr': '𝔨', 'kgreen': 'ĸ', 'KHcy': 'Х', 'khcy': 'х', 'KJcy': 'Ќ', 'kjcy': 'ќ', 'Kopf': '𝕂', 'kopf': '𝕜', 'Kscr': '𝒦', 'kscr': '𝓀', 'lAarr': '⇚', 'Lacute': 'Ĺ', 'lacute': 'ĺ', 'laemptyv': '⦴', 'lagran': 'ℒ', 'Lambda': 'Λ', 'lambda': 'λ', 'lang': '⟨', 'Lang': '⟪', 'langd': '⦑', 'langle': '⟨', 'lap': '⪅', 'Laplacetrf': 'ℒ', 'laquo': '\xAB', 'larrb': '⇤', 'larrbfs': '⤟', 'larr': '←', 'Larr': '↞', 'lArr': '⇐', 'larrfs': '⤝', 'larrhk': '↩', 'larrlp': '↫', 'larrpl': '⤹', 'larrsim': '⥳', 'larrtl': '↢', 'latail': '⤙', 'lAtail': '⤛', 'lat': '⪫', 'late': '⪭', 'lates': '⪭︀', 'lbarr': '⤌', 'lBarr': '⤎', 'lbbrk': '❲', 'lbrace': '{', 'lbrack': '[', 'lbrke': '⦋', 'lbrksld': '⦏', 'lbrkslu': '⦍', 'Lcaron': 'Ľ', 'lcaron': 'ľ', 'Lcedil': 'Ļ', 'lcedil': 'ļ', 'lceil': '⌈', 'lcub': '{', 'Lcy': 'Л', 'lcy': 'л', 'ldca': '⤶', 'ldquo': '“', 'ldquor': '„', 'ldrdhar': '⥧', 'ldrushar': '⥋', 'ldsh': '↲', 'le': '≤', 'lE': '≦', 'LeftAngleBracket': '⟨', 'LeftArrowBar': '⇤', 'leftarrow': '←', 'LeftArrow': '←', 'Leftarrow': '⇐', 'LeftArrowRightArrow': '⇆', 'leftarrowtail': '↢', 'LeftCeiling': '⌈', 'LeftDoubleBracket': '⟦', 'LeftDownTeeVector': '⥡', 'LeftDownVectorBar': '⥙', 'LeftDownVector': '⇃', 'LeftFloor': '⌊', 'leftharpoondown': '↽', 'leftharpoonup': '↼', 'leftleftarrows': '⇇', 'leftrightarrow': '↔', 'LeftRightArrow': '↔', 'Leftrightarrow': '⇔', 'leftrightarrows': '⇆', 'leftrightharpoons': '⇋', 'leftrightsquigarrow': '↭', 'LeftRightVector': '⥎', 'LeftTeeArrow': '↤', 'LeftTee': '⊣', 'LeftTeeVector': '⥚', 'leftthreetimes': '⋋', 'LeftTriangleBar': '⧏', 'LeftTriangle': '⊲', 'LeftTriangleEqual': '⊴', 'LeftUpDownVector': '⥑', 'LeftUpTeeVector': '⥠', 'LeftUpVectorBar': '⥘', 'LeftUpVector': '↿', 'LeftVectorBar': '⥒', 'LeftVector': '↼', 'lEg': '⪋', 'leg': '⋚', 'leq': '≤', 'leqq': '≦', 'leqslant': '⩽', 'lescc': '⪨', 'les': '⩽', 'lesdot': '⩿', 'lesdoto': '⪁', 'lesdotor': '⪃', 'lesg': '⋚︀', 'lesges': '⪓', 'lessapprox': '⪅', 'lessdot': '⋖', 'lesseqgtr': '⋚', 'lesseqqgtr': '⪋', 'LessEqualGreater': '⋚', 'LessFullEqual': '≦', 'LessGreater': '≶', 'lessgtr': '≶', 'LessLess': '⪡', 'lesssim': '≲', 'LessSlantEqual': '⩽', 'LessTilde': '≲', 'lfisht': '⥼', 'lfloor': '⌊', 'Lfr': '𝔏', 'lfr': '𝔩', 'lg': '≶', 'lgE': '⪑', 'lHar': '⥢', 'lhard': '↽', 'lharu': '↼', 'lharul': '⥪', 'lhblk': '▄', 'LJcy': 'Љ', 'ljcy': 'љ', 'llarr': '⇇', 'll': '≪', 'Ll': '⋘', 'llcorner': '⌞', 'Lleftarrow': '⇚', 'llhard': '⥫', 'lltri': '◺', 'Lmidot': 'Ŀ', 'lmidot': 'ŀ', 'lmoustache': '⎰', 'lmoust': '⎰', 'lnap': '⪉', 'lnapprox': '⪉', 'lne': '⪇', 'lnE': '≨', 'lneq': '⪇', 'lneqq': '≨', 'lnsim': '⋦', 'loang': '⟬', 'loarr': '⇽', 'lobrk': '⟦', 'longleftarrow': '⟵', 'LongLeftArrow': '⟵', 'Longleftarrow': '⟸', 'longleftrightarrow': '⟷', 'LongLeftRightArrow': '⟷', 'Longleftrightarrow': '⟺', 'longmapsto': '⟼', 'longrightarrow': '⟶', 'LongRightArrow': '⟶', 'Longrightarrow': '⟹', 'looparrowleft': '↫', 'looparrowright': '↬', 'lopar': '⦅', 'Lopf': '𝕃', 'lopf': '𝕝', 'loplus': '⨭', 'lotimes': '⨴', 'lowast': '∗', 'lowbar': '_', 'LowerLeftArrow': '↙', 'LowerRightArrow': '↘', 'loz': '◊', 'lozenge': '◊', 'lozf': '⧫', 'lpar': '(', 'lparlt': '⦓', 'lrarr': '⇆', 'lrcorner': '⌟', 'lrhar': '⇋', 'lrhard': '⥭', 'lrm': '‎', 'lrtri': '⊿', 'lsaquo': '‹', 'lscr': '𝓁', 'Lscr': 'ℒ', 'lsh': '↰', 'Lsh': '↰', 'lsim': '≲', 'lsime': '⪍', 'lsimg': '⪏', 'lsqb': '[', 'lsquo': '‘', 'lsquor': '‚', 'Lstrok': 'Ł', 'lstrok': 'ł', 'ltcc': '⪦', 'ltcir': '⩹', 'lt': '<', 'LT': '<', 'Lt': '≪', 'ltdot': '⋖', 'lthree': '⋋', 'ltimes': '⋉', 'ltlarr': '⥶', 'ltquest': '⩻', 'ltri': '◃', 'ltrie': '⊴', 'ltrif': '◂', 'ltrPar': '⦖', 'lurdshar': '⥊', 'luruhar': '⥦', 'lvertneqq': '≨︀', 'lvnE': '≨︀', 'macr': '\xAF', 'male': '♂', 'malt': '✠', 'maltese': '✠', 'Map': '⤅', 'map': '↦', 'mapsto': '↦', 'mapstodown': '↧', 'mapstoleft': '↤', 'mapstoup': '↥', 'marker': '▮', 'mcomma': '⨩', 'Mcy': 'М', 'mcy': 'м', 'mdash': '—', 'mDDot': '∺', 'measuredangle': '∡', 'MediumSpace': ' ', 'Mellintrf': 'ℳ', 'Mfr': '𝔐', 'mfr': '𝔪', 'mho': '℧', 'micro': '\xB5', 'midast': '*', 'midcir': '⫰', 'mid': '∣', 'middot': '\xB7', 'minusb': '⊟', 'minus': '−', 'minusd': '∸', 'minusdu': '⨪', 'MinusPlus': '∓', 'mlcp': '⫛', 'mldr': '…', 'mnplus': '∓', 'models': '⊧', 'Mopf': '𝕄', 'mopf': '𝕞', 'mp': '∓', 'mscr': '𝓂', 'Mscr': 'ℳ', 'mstpos': '∾', 'Mu': 'Μ', 'mu': 'μ', 'multimap': '⊸', 'mumap': '⊸', 'nabla': '∇', 'Nacute': 'Ń', 'nacute': 'ń', 'nang': '∠⃒', 'nap': '≉', 'napE': '⩰̸', 'napid': '≋̸', 'napos': 'ŉ', 'napprox': '≉', 'natural': '♮', 'naturals': 'ℕ', 'natur': '♮', 'nbsp': '\xA0', 'nbump': '≎̸', 'nbumpe': '≏̸', 'ncap': '⩃', 'Ncaron': 'Ň', 'ncaron': 'ň', 'Ncedil': 'Ņ', 'ncedil': 'ņ', 'ncong': '≇', 'ncongdot': '⩭̸', 'ncup': '⩂', 'Ncy': 'Н', 'ncy': 'н', 'ndash': '–', 'nearhk': '⤤', 'nearr': '↗', 'neArr': '⇗', 'nearrow': '↗', 'ne': '≠', 'nedot': '≐̸', 'NegativeMediumSpace': '​', 'NegativeThickSpace': '​', 'NegativeThinSpace': '​', 'NegativeVeryThinSpace': '​', 'nequiv': '≢', 'nesear': '⤨', 'nesim': '≂̸', 'NestedGreaterGreater': '≫', 'NestedLessLess': '≪', 'NewLine': '\n', 'nexist': '∄', 'nexists': '∄', 'Nfr': '𝔑', 'nfr': '𝔫', 'ngE': '≧̸', 'nge': '≱', 'ngeq': '≱', 'ngeqq': '≧̸', 'ngeqslant': '⩾̸', 'nges': '⩾̸', 'nGg': '⋙̸', 'ngsim': '≵', 'nGt': '≫⃒', 'ngt': '≯', 'ngtr': '≯', 'nGtv': '≫̸', 'nharr': '↮', 'nhArr': '⇎', 'nhpar': '⫲', 'ni': '∋', 'nis': '⋼', 'nisd': '⋺', 'niv': '∋', 'NJcy': 'Њ', 'njcy': 'њ', 'nlarr': '↚', 'nlArr': '⇍', 'nldr': '‥', 'nlE': '≦̸', 'nle': '≰', 'nleftarrow': '↚', 'nLeftarrow': '⇍', 'nleftrightarrow': '↮', 'nLeftrightarrow': '⇎', 'nleq': '≰', 'nleqq': '≦̸', 'nleqslant': '⩽̸', 'nles': '⩽̸', 'nless': '≮', 'nLl': '⋘̸', 'nlsim': '≴', 'nLt': '≪⃒', 'nlt': '≮', 'nltri': '⋪', 'nltrie': '⋬', 'nLtv': '≪̸', 'nmid': '∤', 'NoBreak': '⁠', 'NonBreakingSpace': '\xA0', 'nopf': '𝕟', 'Nopf': 'ℕ', 'Not': '⫬', 'not': '\xAC', 'NotCongruent': '≢', 'NotCupCap': '≭', 'NotDoubleVerticalBar': '∦', 'NotElement': '∉', 'NotEqual': '≠', 'NotEqualTilde': '≂̸', 'NotExists': '∄', 'NotGreater': '≯', 'NotGreaterEqual': '≱', 'NotGreaterFullEqual': '≧̸', 'NotGreaterGreater': '≫̸', 'NotGreaterLess': '≹', 'NotGreaterSlantEqual': '⩾̸', 'NotGreaterTilde': '≵', 'NotHumpDownHump': '≎̸', 'NotHumpEqual': '≏̸', 'notin': '∉', 'notindot': '⋵̸', 'notinE': '⋹̸', 'notinva': '∉', 'notinvb': '⋷', 'notinvc': '⋶', 'NotLeftTriangleBar': '⧏̸', 'NotLeftTriangle': '⋪', 'NotLeftTriangleEqual': '⋬', 'NotLess': '≮', 'NotLessEqual': '≰', 'NotLessGreater': '≸', 'NotLessLess': '≪̸', 'NotLessSlantEqual': '⩽̸', 'NotLessTilde': '≴', 'NotNestedGreaterGreater': '⪢̸', 'NotNestedLessLess': '⪡̸', 'notni': '∌', 'notniva': '∌', 'notnivb': '⋾', 'notnivc': '⋽', 'NotPrecedes': '⊀', 'NotPrecedesEqual': '⪯̸', 'NotPrecedesSlantEqual': '⋠', 'NotReverseElement': '∌', 'NotRightTriangleBar': '⧐̸', 'NotRightTriangle': '⋫', 'NotRightTriangleEqual': '⋭', 'NotSquareSubset': '⊏̸', 'NotSquareSubsetEqual': '⋢', 'NotSquareSuperset': '⊐̸', 'NotSquareSupersetEqual': '⋣', 'NotSubset': '⊂⃒', 'NotSubsetEqual': '⊈', 'NotSucceeds': '⊁', 'NotSucceedsEqual': '⪰̸', 'NotSucceedsSlantEqual': '⋡', 'NotSucceedsTilde': '≿̸', 'NotSuperset': '⊃⃒', 'NotSupersetEqual': '⊉', 'NotTilde': '≁', 'NotTildeEqual': '≄', 'NotTildeFullEqual': '≇', 'NotTildeTilde': '≉', 'NotVerticalBar': '∤', 'nparallel': '∦', 'npar': '∦', 'nparsl': '⫽⃥', 'npart': '∂̸', 'npolint': '⨔', 'npr': '⊀', 'nprcue': '⋠', 'nprec': '⊀', 'npreceq': '⪯̸', 'npre': '⪯̸', 'nrarrc': '⤳̸', 'nrarr': '↛', 'nrArr': '⇏', 'nrarrw': '↝̸', 'nrightarrow': '↛', 'nRightarrow': '⇏', 'nrtri': '⋫', 'nrtrie': '⋭', 'nsc': '⊁', 'nsccue': '⋡', 'nsce': '⪰̸', 'Nscr': '𝒩', 'nscr': '𝓃', 'nshortmid': '∤', 'nshortparallel': '∦', 'nsim': '≁', 'nsime': '≄', 'nsimeq': '≄', 'nsmid': '∤', 'nspar': '∦', 'nsqsube': '⋢', 'nsqsupe': '⋣', 'nsub': '⊄', 'nsubE': '⫅̸', 'nsube': '⊈', 'nsubset': '⊂⃒', 'nsubseteq': '⊈', 'nsubseteqq': '⫅̸', 'nsucc': '⊁', 'nsucceq': '⪰̸', 'nsup': '⊅', 'nsupE': '⫆̸', 'nsupe': '⊉', 'nsupset': '⊃⃒', 'nsupseteq': '⊉', 'nsupseteqq': '⫆̸', 'ntgl': '≹', 'Ntilde': '\xD1', 'ntilde': '\xF1', 'ntlg': '≸', 'ntriangleleft': '⋪', 'ntrianglelefteq': '⋬', 'ntriangleright': '⋫', 'ntrianglerighteq': '⋭', 'Nu': 'Ν', 'nu': 'ν', 'num': '#', 'numero': '№', 'numsp': ' ', 'nvap': '≍⃒', 'nvdash': '⊬', 'nvDash': '⊭', 'nVdash': '⊮', 'nVDash': '⊯', 'nvge': '≥⃒', 'nvgt': '>⃒', 'nvHarr': '⤄', 'nvinfin': '⧞', 'nvlArr': '⤂', 'nvle': '≤⃒', 'nvlt': '<⃒', 'nvltrie': '⊴⃒', 'nvrArr': '⤃', 'nvrtrie': '⊵⃒', 'nvsim': '∼⃒', 'nwarhk': '⤣', 'nwarr': '↖', 'nwArr': '⇖', 'nwarrow': '↖', 'nwnear': '⤧', 'Oacute': '\xD3', 'oacute': '\xF3', 'oast': '⊛', 'Ocirc': '\xD4', 'ocirc': '\xF4', 'ocir': '⊚', 'Ocy': 'О', 'ocy': 'о', 'odash': '⊝', 'Odblac': 'Ő', 'odblac': 'ő', 'odiv': '⨸', 'odot': '⊙', 'odsold': '⦼', 'OElig': 'Œ', 'oelig': 'œ', 'ofcir': '⦿', 'Ofr': '𝔒', 'ofr': '𝔬', 'ogon': '˛', 'Ograve': '\xD2', 'ograve': '\xF2', 'ogt': '⧁', 'ohbar': '⦵', 'ohm': 'Ω', 'oint': '∮', 'olarr': '↺', 'olcir': '⦾', 'olcross': '⦻', 'oline': '‾', 'olt': '⧀', 'Omacr': 'Ō', 'omacr': 'ō', 'Omega': 'Ω', 'omega': 'ω', 'Omicron': 'Ο', 'omicron': 'ο', 'omid': '⦶', 'ominus': '⊖', 'Oopf': '𝕆', 'oopf': '𝕠', 'opar': '⦷', 'OpenCurlyDoubleQuote': '“', 'OpenCurlyQuote': '‘', 'operp': '⦹', 'oplus': '⊕', 'orarr': '↻', 'Or': '⩔', 'or': '∨', 'ord': '⩝', 'order': 'ℴ', 'orderof': 'ℴ', 'ordf': '\xAA', 'ordm': '\xBA', 'origof': '⊶', 'oror': '⩖', 'orslope': '⩗', 'orv': '⩛', 'oS': 'Ⓢ', 'Oscr': '𝒪', 'oscr': 'ℴ', 'Oslash': '\xD8', 'oslash': '\xF8', 'osol': '⊘', 'Otilde': '\xD5', 'otilde': '\xF5', 'otimesas': '⨶', 'Otimes': '⨷', 'otimes': '⊗', 'Ouml': '\xD6', 'ouml': '\xF6', 'ovbar': '⌽', 'OverBar': '‾', 'OverBrace': '⏞', 'OverBracket': '⎴', 'OverParenthesis': '⏜', 'para': '\xB6', 'parallel': '∥', 'par': '∥', 'parsim': '⫳', 'parsl': '⫽', 'part': '∂', 'PartialD': '∂', 'Pcy': 'П', 'pcy': 'п', 'percnt': '%', 'period': '.', 'permil': '‰', 'perp': '⊥', 'pertenk': '‱', 'Pfr': '𝔓', 'pfr': '𝔭', 'Phi': 'Φ', 'phi': 'φ', 'phiv': 'ϕ', 'phmmat': 'ℳ', 'phone': '☎', 'Pi': 'Π', 'pi': 'π', 'pitchfork': '⋔', 'piv': 'ϖ', 'planck': 'ℏ', 'planckh': 'ℎ', 'plankv': 'ℏ', 'plusacir': '⨣', 'plusb': '⊞', 'pluscir': '⨢', 'plus': '+', 'plusdo': '∔', 'plusdu': '⨥', 'pluse': '⩲', 'PlusMinus': '\xB1', 'plusmn': '\xB1', 'plussim': '⨦', 'plustwo': '⨧', 'pm': '\xB1', 'Poincareplane': 'ℌ', 'pointint': '⨕', 'popf': '𝕡', 'Popf': 'ℙ', 'pound': '\xA3', 'prap': '⪷', 'Pr': '⪻', 'pr': '≺', 'prcue': '≼', 'precapprox': '⪷', 'prec': '≺', 'preccurlyeq': '≼', 'Precedes': '≺', 'PrecedesEqual': '⪯', 'PrecedesSlantEqual': '≼', 'PrecedesTilde': '≾', 'preceq': '⪯', 'precnapprox': '⪹', 'precneqq': '⪵', 'precnsim': '⋨', 'pre': '⪯', 'prE': '⪳', 'precsim': '≾', 'prime': '′', 'Prime': '″', 'primes': 'ℙ', 'prnap': '⪹', 'prnE': '⪵', 'prnsim': '⋨', 'prod': '∏', 'Product': '∏', 'profalar': '⌮', 'profline': '⌒', 'profsurf': '⌓', 'prop': '∝', 'Proportional': '∝', 'Proportion': '∷', 'propto': '∝', 'prsim': '≾', 'prurel': '⊰', 'Pscr': '𝒫', 'pscr': '𝓅', 'Psi': 'Ψ', 'psi': 'ψ', 'puncsp': ' ', 'Qfr': '𝔔', 'qfr': '𝔮', 'qint': '⨌', 'qopf': '𝕢', 'Qopf': 'ℚ', 'qprime': '⁗', 'Qscr': '𝒬', 'qscr': '𝓆', 'quaternions': 'ℍ', 'quatint': '⨖', 'quest': '?', 'questeq': '≟', 'quot': '"', 'QUOT': '"', 'rAarr': '⇛', 'race': '∽̱', 'Racute': 'Ŕ', 'racute': 'ŕ', 'radic': '√', 'raemptyv': '⦳', 'rang': '⟩', 'Rang': '⟫', 'rangd': '⦒', 'range': '⦥', 'rangle': '⟩', 'raquo': '\xBB', 'rarrap': '⥵', 'rarrb': '⇥', 'rarrbfs': '⤠', 'rarrc': '⤳', 'rarr': '→', 'Rarr': '↠', 'rArr': '⇒', 'rarrfs': '⤞', 'rarrhk': '↪', 'rarrlp': '↬', 'rarrpl': '⥅', 'rarrsim': '⥴', 'Rarrtl': '⤖', 'rarrtl': '↣', 'rarrw': '↝', 'ratail': '⤚', 'rAtail': '⤜', 'ratio': '∶', 'rationals': 'ℚ', 'rbarr': '⤍', 'rBarr': '⤏', 'RBarr': '⤐', 'rbbrk': '❳', 'rbrace': '}', 'rbrack': ']', 'rbrke': '⦌', 'rbrksld': '⦎', 'rbrkslu': '⦐', 'Rcaron': 'Ř', 'rcaron': 'ř', 'Rcedil': 'Ŗ', 'rcedil': 'ŗ', 'rceil': '⌉', 'rcub': '}', 'Rcy': 'Р', 'rcy': 'р', 'rdca': '⤷', 'rdldhar': '⥩', 'rdquo': '”', 'rdquor': '”', 'rdsh': '↳', 'real': 'ℜ', 'realine': 'ℛ', 'realpart': 'ℜ', 'reals': 'ℝ', 'Re': 'ℜ', 'rect': '▭', 'reg': '\xAE', 'REG': '\xAE', 'ReverseElement': '∋', 'ReverseEquilibrium': '⇋', 'ReverseUpEquilibrium': '⥯', 'rfisht': '⥽', 'rfloor': '⌋', 'rfr': '𝔯', 'Rfr': 'ℜ', 'rHar': '⥤', 'rhard': '⇁', 'rharu': '⇀', 'rharul': '⥬', 'Rho': 'Ρ', 'rho': 'ρ', 'rhov': 'ϱ', 'RightAngleBracket': '⟩', 'RightArrowBar': '⇥', 'rightarrow': '→', 'RightArrow': '→', 'Rightarrow': '⇒', 'RightArrowLeftArrow': '⇄', 'rightarrowtail': '↣', 'RightCeiling': '⌉', 'RightDoubleBracket': '⟧', 'RightDownTeeVector': '⥝', 'RightDownVectorBar': '⥕', 'RightDownVector': '⇂', 'RightFloor': '⌋', 'rightharpoondown': '⇁', 'rightharpoonup': '⇀', 'rightleftarrows': '⇄', 'rightleftharpoons': '⇌', 'rightrightarrows': '⇉', 'rightsquigarrow': '↝', 'RightTeeArrow': '↦', 'RightTee': '⊢', 'RightTeeVector': '⥛', 'rightthreetimes': '⋌', 'RightTriangleBar': '⧐', 'RightTriangle': '⊳', 'RightTriangleEqual': '⊵', 'RightUpDownVector': '⥏', 'RightUpTeeVector': '⥜', 'RightUpVectorBar': '⥔', 'RightUpVector': '↾', 'RightVectorBar': '⥓', 'RightVector': '⇀', 'ring': '˚', 'risingdotseq': '≓', 'rlarr': '⇄', 'rlhar': '⇌', 'rlm': '‏', 'rmoustache': '⎱', 'rmoust': '⎱', 'rnmid': '⫮', 'roang': '⟭', 'roarr': '⇾', 'robrk': '⟧', 'ropar': '⦆', 'ropf': '𝕣', 'Ropf': 'ℝ', 'roplus': '⨮', 'rotimes': '⨵', 'RoundImplies': '⥰', 'rpar': ')', 'rpargt': '⦔', 'rppolint': '⨒', 'rrarr': '⇉', 'Rrightarrow': '⇛', 'rsaquo': '›', 'rscr': '𝓇', 'Rscr': 'ℛ', 'rsh': '↱', 'Rsh': '↱', 'rsqb': ']', 'rsquo': '’', 'rsquor': '’', 'rthree': '⋌', 'rtimes': '⋊', 'rtri': '▹', 'rtrie': '⊵', 'rtrif': '▸', 'rtriltri': '⧎', 'RuleDelayed': '⧴', 'ruluhar': '⥨', 'rx': '℞', 'Sacute': 'Ś', 'sacute': 'ś', 'sbquo': '‚', 'scap': '⪸', 'Scaron': 'Š', 'scaron': 'š', 'Sc': '⪼', 'sc': '≻', 'sccue': '≽', 'sce': '⪰', 'scE': '⪴', 'Scedil': 'Ş', 'scedil': 'ş', 'Scirc': 'Ŝ', 'scirc': 'ŝ', 'scnap': '⪺', 'scnE': '⪶', 'scnsim': '⋩', 'scpolint': '⨓', 'scsim': '≿', 'Scy': 'С', 'scy': 'с', 'sdotb': '⊡', 'sdot': '⋅', 'sdote': '⩦', 'searhk': '⤥', 'searr': '↘', 'seArr': '⇘', 'searrow': '↘', 'sect': '\xA7', 'semi': ';', 'seswar': '⤩', 'setminus': '∖', 'setmn': '∖', 'sext': '✶', 'Sfr': '𝔖', 'sfr': '𝔰', 'sfrown': '⌢', 'sharp': '♯', 'SHCHcy': 'Щ', 'shchcy': 'щ', 'SHcy': 'Ш', 'shcy': 'ш', 'ShortDownArrow': '↓', 'ShortLeftArrow': '←', 'shortmid': '∣', 'shortparallel': '∥', 'ShortRightArrow': '→', 'ShortUpArrow': '↑', 'shy': '\xAD', 'Sigma': 'Σ', 'sigma': 'σ', 'sigmaf': 'ς', 'sigmav': 'ς', 'sim': '∼', 'simdot': '⩪', 'sime': '≃', 'simeq': '≃', 'simg': '⪞', 'simgE': '⪠', 'siml': '⪝', 'simlE': '⪟', 'simne': '≆', 'simplus': '⨤', 'simrarr': '⥲', 'slarr': '←', 'SmallCircle': '∘', 'smallsetminus': '∖', 'smashp': '⨳', 'smeparsl': '⧤', 'smid': '∣', 'smile': '⌣', 'smt': '⪪', 'smte': '⪬', 'smtes': '⪬︀', 'SOFTcy': 'Ь', 'softcy': 'ь', 'solbar': '⌿', 'solb': '⧄', 'sol': '/', 'Sopf': '𝕊', 'sopf': '𝕤', 'spades': '♠', 'spadesuit': '♠', 'spar': '∥', 'sqcap': '⊓', 'sqcaps': '⊓︀', 'sqcup': '⊔', 'sqcups': '⊔︀', 'Sqrt': '√', 'sqsub': '⊏', 'sqsube': '⊑', 'sqsubset': '⊏', 'sqsubseteq': '⊑', 'sqsup': '⊐', 'sqsupe': '⊒', 'sqsupset': '⊐', 'sqsupseteq': '⊒', 'square': '□', 'Square': '□', 'SquareIntersection': '⊓', 'SquareSubset': '⊏', 'SquareSubsetEqual': '⊑', 'SquareSuperset': '⊐', 'SquareSupersetEqual': '⊒', 'SquareUnion': '⊔', 'squarf': '▪', 'squ': '□', 'squf': '▪', 'srarr': '→', 'Sscr': '𝒮', 'sscr': '𝓈', 'ssetmn': '∖', 'ssmile': '⌣', 'sstarf': '⋆', 'Star': '⋆', 'star': '☆', 'starf': '★', 'straightepsilon': 'ϵ', 'straightphi': 'ϕ', 'strns': '\xAF', 'sub': '⊂', 'Sub': '⋐', 'subdot': '⪽', 'subE': '⫅', 'sube': '⊆', 'subedot': '⫃', 'submult': '⫁', 'subnE': '⫋', 'subne': '⊊', 'subplus': '⪿', 'subrarr': '⥹', 'subset': '⊂', 'Subset': '⋐', 'subseteq': '⊆', 'subseteqq': '⫅', 'SubsetEqual': '⊆', 'subsetneq': '⊊', 'subsetneqq': '⫋', 'subsim': '⫇', 'subsub': '⫕', 'subsup': '⫓', 'succapprox': '⪸', 'succ': '≻', 'succcurlyeq': '≽', 'Succeeds': '≻', 'SucceedsEqual': '⪰', 'SucceedsSlantEqual': '≽', 'SucceedsTilde': '≿', 'succeq': '⪰', 'succnapprox': '⪺', 'succneqq': '⪶', 'succnsim': '⋩', 'succsim': '≿', 'SuchThat': '∋', 'sum': '∑', 'Sum': '∑', 'sung': '♪', 'sup1': '\xB9', 'sup2': '\xB2', 'sup3': '\xB3', 'sup': '⊃', 'Sup': '⋑', 'supdot': '⪾', 'supdsub': '⫘', 'supE': '⫆', 'supe': '⊇', 'supedot': '⫄', 'Superset': '⊃', 'SupersetEqual': '⊇', 'suphsol': '⟉', 'suphsub': '⫗', 'suplarr': '⥻', 'supmult': '⫂', 'supnE': '⫌', 'supne': '⊋', 'supplus': '⫀', 'supset': '⊃', 'Supset': '⋑', 'supseteq': '⊇', 'supseteqq': '⫆', 'supsetneq': '⊋', 'supsetneqq': '⫌', 'supsim': '⫈', 'supsub': '⫔', 'supsup': '⫖', 'swarhk': '⤦', 'swarr': '↙', 'swArr': '⇙', 'swarrow': '↙', 'swnwar': '⤪', 'szlig': '\xDF', 'Tab': '\t', 'target': '⌖', 'Tau': 'Τ', 'tau': 'τ', 'tbrk': '⎴', 'Tcaron': 'Ť', 'tcaron': 'ť', 'Tcedil': 'Ţ', 'tcedil': 'ţ', 'Tcy': 'Т', 'tcy': 'т', 'tdot': '⃛', 'telrec': '⌕', 'Tfr': '𝔗', 'tfr': '𝔱', 'there4': '∴', 'therefore': '∴', 'Therefore': '∴', 'Theta': 'Θ', 'theta': 'θ', 'thetasym': 'ϑ', 'thetav': 'ϑ', 'thickapprox': '≈', 'thicksim': '∼', 'ThickSpace': '  ', 'ThinSpace': ' ', 'thinsp': ' ', 'thkap': '≈', 'thksim': '∼', 'THORN': '\xDE', 'thorn': '\xFE', 'tilde': '˜', 'Tilde': '∼', 'TildeEqual': '≃', 'TildeFullEqual': '≅', 'TildeTilde': '≈', 'timesbar': '⨱', 'timesb': '⊠', 'times': '\xD7', 'timesd': '⨰', 'tint': '∭', 'toea': '⤨', 'topbot': '⌶', 'topcir': '⫱', 'top': '⊤', 'Topf': '𝕋', 'topf': '𝕥', 'topfork': '⫚', 'tosa': '⤩', 'tprime': '‴', 'trade': '™', 'TRADE': '™', 'triangle': '▵', 'triangledown': '▿', 'triangleleft': '◃', 'trianglelefteq': '⊴', 'triangleq': '≜', 'triangleright': '▹', 'trianglerighteq': '⊵', 'tridot': '◬', 'trie': '≜', 'triminus': '⨺', 'TripleDot': '⃛', 'triplus': '⨹', 'trisb': '⧍', 'tritime': '⨻', 'trpezium': '⏢', 'Tscr': '𝒯', 'tscr': '𝓉', 'TScy': 'Ц', 'tscy': 'ц', 'TSHcy': 'Ћ', 'tshcy': 'ћ', 'Tstrok': 'Ŧ', 'tstrok': 'ŧ', 'twixt': '≬', 'twoheadleftarrow': '↞', 'twoheadrightarrow': '↠', 'Uacute': '\xDA', 'uacute': '\xFA', 'uarr': '↑', 'Uarr': '↟', 'uArr': '⇑', 'Uarrocir': '⥉', 'Ubrcy': 'Ў', 'ubrcy': 'ў', 'Ubreve': 'Ŭ', 'ubreve': 'ŭ', 'Ucirc': '\xDB', 'ucirc': '\xFB', 'Ucy': 'У', 'ucy': 'у', 'udarr': '⇅', 'Udblac': 'Ű', 'udblac': 'ű', 'udhar': '⥮', 'ufisht': '⥾', 'Ufr': '𝔘', 'ufr': '𝔲', 'Ugrave': '\xD9', 'ugrave': '\xF9', 'uHar': '⥣', 'uharl': '↿', 'uharr': '↾', 'uhblk': '▀', 'ulcorn': '⌜', 'ulcorner': '⌜', 'ulcrop': '⌏', 'ultri': '◸', 'Umacr': 'Ū', 'umacr': 'ū', 'uml': '\xA8', 'UnderBar': '_', 'UnderBrace': '⏟', 'UnderBracket': '⎵', 'UnderParenthesis': '⏝', 'Union': '⋃', 'UnionPlus': '⊎', 'Uogon': 'Ų', 'uogon': 'ų', 'Uopf': '𝕌', 'uopf': '𝕦', 'UpArrowBar': '⤒', 'uparrow': '↑', 'UpArrow': '↑', 'Uparrow': '⇑', 'UpArrowDownArrow': '⇅', 'updownarrow': '↕', 'UpDownArrow': '↕', 'Updownarrow': '⇕', 'UpEquilibrium': '⥮', 'upharpoonleft': '↿', 'upharpoonright': '↾', 'uplus': '⊎', 'UpperLeftArrow': '↖', 'UpperRightArrow': '↗', 'upsi': 'υ', 'Upsi': 'ϒ', 'upsih': 'ϒ', 'Upsilon': 'Υ', 'upsilon': 'υ', 'UpTeeArrow': '↥', 'UpTee': '⊥', 'upuparrows': '⇈', 'urcorn': '⌝', 'urcorner': '⌝', 'urcrop': '⌎', 'Uring': 'Ů', 'uring': 'ů', 'urtri': '◹', 'Uscr': '𝒰', 'uscr': '𝓊', 'utdot': '⋰', 'Utilde': 'Ũ', 'utilde': 'ũ', 'utri': '▵', 'utrif': '▴', 'uuarr': '⇈', 'Uuml': '\xDC', 'uuml': '\xFC', 'uwangle': '⦧', 'vangrt': '⦜', 'varepsilon': 'ϵ', 'varkappa': 'ϰ', 'varnothing': '∅', 'varphi': 'ϕ', 'varpi': 'ϖ', 'varpropto': '∝', 'varr': '↕', 'vArr': '⇕', 'varrho': 'ϱ', 'varsigma': 'ς', 'varsubsetneq': '⊊︀', 'varsubsetneqq': '⫋︀', 'varsupsetneq': '⊋︀', 'varsupsetneqq': '⫌︀', 'vartheta': 'ϑ', 'vartriangleleft': '⊲', 'vartriangleright': '⊳', 'vBar': '⫨', 'Vbar': '⫫', 'vBarv': '⫩', 'Vcy': 'В', 'vcy': 'в', 'vdash': '⊢', 'vDash': '⊨', 'Vdash': '⊩', 'VDash': '⊫', 'Vdashl': '⫦', 'veebar': '⊻', 'vee': '∨', 'Vee': '⋁', 'veeeq': '≚', 'vellip': '⋮', 'verbar': '|', 'Verbar': '‖', 'vert': '|', 'Vert': '‖', 'VerticalBar': '∣', 'VerticalLine': '|', 'VerticalSeparator': '❘', 'VerticalTilde': '≀', 'VeryThinSpace': ' ', 'Vfr': '𝔙', 'vfr': '𝔳', 'vltri': '⊲', 'vnsub': '⊂⃒', 'vnsup': '⊃⃒', 'Vopf': '𝕍', 'vopf': '𝕧', 'vprop': '∝', 'vrtri': '⊳', 'Vscr': '𝒱', 'vscr': '𝓋', 'vsubnE': '⫋︀', 'vsubne': '⊊︀', 'vsupnE': '⫌︀', 'vsupne': '⊋︀', 'Vvdash': '⊪', 'vzigzag': '⦚', 'Wcirc': 'Ŵ', 'wcirc': 'ŵ', 'wedbar': '⩟', 'wedge': '∧', 'Wedge': '⋀', 'wedgeq': '≙', 'weierp': '℘', 'Wfr': '𝔚', 'wfr': '𝔴', 'Wopf': '𝕎', 'wopf': '𝕨', 'wp': '℘', 'wr': '≀', 'wreath': '≀', 'Wscr': '𝒲', 'wscr': '𝓌', 'xcap': '⋂', 'xcirc': '◯', 'xcup': '⋃', 'xdtri': '▽', 'Xfr': '𝔛', 'xfr': '𝔵', 'xharr': '⟷', 'xhArr': '⟺', 'Xi': 'Ξ', 'xi': 'ξ', 'xlarr': '⟵', 'xlArr': '⟸', 'xmap': '⟼', 'xnis': '⋻', 'xodot': '⨀', 'Xopf': '𝕏', 'xopf': '𝕩', 'xoplus': '⨁', 'xotime': '⨂', 'xrarr': '⟶', 'xrArr': '⟹', 'Xscr': '𝒳', 'xscr': '𝓍', 'xsqcup': '⨆', 'xuplus': '⨄', 'xutri': '△', 'xvee': '⋁', 'xwedge': '⋀', 'Yacute': '\xDD', 'yacute': '\xFD', 'YAcy': 'Я', 'yacy': 'я', 'Ycirc': 'Ŷ', 'ycirc': 'ŷ', 'Ycy': 'Ы', 'ycy': 'ы', 'yen': '\xA5', 'Yfr': '𝔜', 'yfr': '𝔶', 'YIcy': 'Ї', 'yicy': 'ї', 'Yopf': '𝕐', 'yopf': '𝕪', 'Yscr': '𝒴', 'yscr': '𝓎', 'YUcy': 'Ю', 'yucy': 'ю', 'yuml': '\xFF', 'Yuml': 'Ÿ', 'Zacute': 'Ź', 'zacute': 'ź', 'Zcaron': 'Ž', 'zcaron': 'ž', 'Zcy': 'З', 'zcy': 'з', 'Zdot': 'Ż', 'zdot': 'ż', 'zeetrf': 'ℨ', 'ZeroWidthSpace': '​', 'Zeta': 'Ζ', 'zeta': 'ζ', 'zfr': '𝔷', 'Zfr': 'ℨ', 'ZHcy': 'Ж', 'zhcy': 'ж', 'zigrarr': '⇝', 'zopf': '𝕫', 'Zopf': 'ℤ', 'Zscr': '𝒵', 'zscr': '𝓏', 'zwj': '‍', 'zwnj': '‌' };
		var decodeMapLegacy = { 'Aacute': '\xC1', 'aacute': '\xE1', 'Acirc': '\xC2', 'acirc': '\xE2', 'acute': '\xB4', 'AElig': '\xC6', 'aelig': '\xE6', 'Agrave': '\xC0', 'agrave': '\xE0', 'amp': '&', 'AMP': '&', 'Aring': '\xC5', 'aring': '\xE5', 'Atilde': '\xC3', 'atilde': '\xE3', 'Auml': '\xC4', 'auml': '\xE4', 'brvbar': '\xA6', 'Ccedil': '\xC7', 'ccedil': '\xE7', 'cedil': '\xB8', 'cent': '\xA2', 'copy': '\xA9', 'COPY': '\xA9', 'curren': '\xA4', 'deg': '\xB0', 'divide': '\xF7', 'Eacute': '\xC9', 'eacute': '\xE9', 'Ecirc': '\xCA', 'ecirc': '\xEA', 'Egrave': '\xC8', 'egrave': '\xE8', 'ETH': '\xD0', 'eth': '\xF0', 'Euml': '\xCB', 'euml': '\xEB', 'frac12': '\xBD', 'frac14': '\xBC', 'frac34': '\xBE', 'gt': '>', 'GT': '>', 'Iacute': '\xCD', 'iacute': '\xED', 'Icirc': '\xCE', 'icirc': '\xEE', 'iexcl': '\xA1', 'Igrave': '\xCC', 'igrave': '\xEC', 'iquest': '\xBF', 'Iuml': '\xCF', 'iuml': '\xEF', 'laquo': '\xAB', 'lt': '<', 'LT': '<', 'macr': '\xAF', 'micro': '\xB5', 'middot': '\xB7', 'nbsp': '\xA0', 'not': '\xAC', 'Ntilde': '\xD1', 'ntilde': '\xF1', 'Oacute': '\xD3', 'oacute': '\xF3', 'Ocirc': '\xD4', 'ocirc': '\xF4', 'Ograve': '\xD2', 'ograve': '\xF2', 'ordf': '\xAA', 'ordm': '\xBA', 'Oslash': '\xD8', 'oslash': '\xF8', 'Otilde': '\xD5', 'otilde': '\xF5', 'Ouml': '\xD6', 'ouml': '\xF6', 'para': '\xB6', 'plusmn': '\xB1', 'pound': '\xA3', 'quot': '"', 'QUOT': '"', 'raquo': '\xBB', 'reg': '\xAE', 'REG': '\xAE', 'sect': '\xA7', 'shy': '\xAD', 'sup1': '\xB9', 'sup2': '\xB2', 'sup3': '\xB3', 'szlig': '\xDF', 'THORN': '\xDE', 'thorn': '\xFE', 'times': '\xD7', 'Uacute': '\xDA', 'uacute': '\xFA', 'Ucirc': '\xDB', 'ucirc': '\xFB', 'Ugrave': '\xD9', 'ugrave': '\xF9', 'uml': '\xA8', 'Uuml': '\xDC', 'uuml': '\xFC', 'Yacute': '\xDD', 'yacute': '\xFD', 'yen': '\xA5', 'yuml': '\xFF' };
		var decodeMapNumeric = { '0': '�', '128': '€', '130': '‚', '131': 'ƒ', '132': '„', '133': '…', '134': '†', '135': '‡', '136': 'ˆ', '137': '‰', '138': 'Š', '139': '‹', '140': 'Œ', '142': 'Ž', '145': '‘', '146': '’', '147': '“', '148': '”', '149': '•', '150': '–', '151': '—', '152': '˜', '153': '™', '154': 'š', '155': '›', '156': 'œ', '158': 'ž', '159': 'Ÿ' };
		var invalidReferenceCodePoints = [1, 2, 3, 4, 5, 6, 7, 8, 11, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 64976, 64977, 64978, 64979, 64980, 64981, 64982, 64983, 64984, 64985, 64986, 64987, 64988, 64989, 64990, 64991, 64992, 64993, 64994, 64995, 64996, 64997, 64998, 64999, 65000, 65001, 65002, 65003, 65004, 65005, 65006, 65007, 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, 1048575, 1114110, 1114111];

		/*--------------------------------------------------------------------------*/

		var stringFromCharCode = String.fromCharCode;

		var object = {};
		var hasOwnProperty = object.hasOwnProperty;
		var has = function has(object, propertyName) {
			return hasOwnProperty.call(object, propertyName);
		};

		var contains = function contains(array, value) {
			var index = -1;
			var length = array.length;
			while (++index < length) {
				if (array[index] == value) {
					return true;
				}
			}
			return false;
		};

		var merge = function merge(options, defaults) {
			if (!options) {
				return defaults;
			}
			var result = {};
			var key;
			for (key in defaults) {
				// A `hasOwnProperty` check is not needed here, since only recognized
				// option names are used anyway. Any others are ignored.
				result[key] = has(options, key) ? options[key] : defaults[key];
			}
			return result;
		};

		// Modified version of `ucs2encode`; see http://mths.be/punycode.
		var codePointToSymbol = function codePointToSymbol(codePoint, strict) {
			var output = '';
			if (codePoint >= 0xD800 && codePoint <= 0xDFFF || codePoint > 0x10FFFF) {
				// See issue #4:
				// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
				// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
				// REPLACEMENT CHARACTER.”
				if (strict) {
					parseError('character reference outside the permissible Unicode range');
				}
				return '�';
			}
			if (has(decodeMapNumeric, codePoint)) {
				if (strict) {
					parseError('disallowed character reference');
				}
				return decodeMapNumeric[codePoint];
			}
			if (strict && contains(invalidReferenceCodePoints, codePoint)) {
				parseError('disallowed character reference');
			}
			if (codePoint > 0xFFFF) {
				codePoint -= 0x10000;
				output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
				codePoint = 0xDC00 | codePoint & 0x3FF;
			}
			output += stringFromCharCode(codePoint);
			return output;
		};

		var hexEscape = function hexEscape(symbol) {
			return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';';
		};

		var parseError = function parseError(message) {
			throw Error('Parse error: ' + message);
		};

		/*--------------------------------------------------------------------------*/

		var encode = function encode(string, options) {
			options = merge(options, encode.options);
			var strict = options.strict;
			if (strict && regexInvalidRawCodePoint.test(string)) {
				parseError('forbidden code point');
			}
			var encodeEverything = options.encodeEverything;
			var useNamedReferences = options.useNamedReferences;
			var allowUnsafeSymbols = options.allowUnsafeSymbols;
			if (encodeEverything) {
				// Encode ASCII symbols.
				string = string.replace(regexAsciiWhitelist, function (symbol) {
					// Use named references if requested & possible.
					if (useNamedReferences && has(encodeMap, symbol)) {
						return '&' + encodeMap[symbol] + ';';
					}
					return hexEscape(symbol);
				});
				// Shorten a few escapes that represent two symbols, of which at least one
				// is within the ASCII range.
				if (useNamedReferences) {
					string = string.replace(/&gt;\u20D2/g, '&nvgt;').replace(/&lt;\u20D2/g, '&nvlt;').replace(/&#x66;&#x6A;/g, '&fjlig;');
				}
				// Encode non-ASCII symbols.
				if (useNamedReferences) {
					// Encode non-ASCII symbols that can be replaced with a named reference.
					string = string.replace(regexEncodeNonAscii, function (string) {
						// Note: there is no need to check `has(encodeMap, string)` here.
						return '&' + encodeMap[string] + ';';
					});
				}
				// Note: any remaining non-ASCII symbols are handled outside of the `if`.
			} else if (useNamedReferences) {
					// Apply named character references.
					// Encode `<>"'&` using named character references.
					if (!allowUnsafeSymbols) {
						string = string.replace(regexEscape, function (string) {
							return '&' + encodeMap[string] + ';'; // no need to check `has()` here
						});
					}
					// Shorten escapes that represent two symbols, of which at least one is
					// `<>"'&`.
					string = string.replace(/&gt;\u20D2/g, '&nvgt;').replace(/&lt;\u20D2/g, '&nvlt;');
					// Encode non-ASCII symbols that can be replaced with a named reference.
					string = string.replace(regexEncodeNonAscii, function (string) {
						// Note: there is no need to check `has(encodeMap, string)` here.
						return '&' + encodeMap[string] + ';';
					});
				} else if (!allowUnsafeSymbols) {
					// Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
					// using named character references.
					string = string.replace(regexEscape, hexEscape);
				}
			return string
			// Encode astral symbols.
			.replace(regexAstralSymbols, function ($0) {
				// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
				var high = $0.charCodeAt(0);
				var low = $0.charCodeAt(1);
				var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
				return '&#x' + codePoint.toString(16).toUpperCase() + ';';
			})
			// Encode any remaining BMP symbols that are not printable ASCII symbols
			// using a hexadecimal escape.
			.replace(regexBmpWhitelist, hexEscape);
		};
		// Expose default options (so they can be overridden globally).
		encode.options = {
			'allowUnsafeSymbols': false,
			'encodeEverything': false,
			'strict': false,
			'useNamedReferences': false
		};

		var decode = function decode(html, options) {
			options = merge(options, decode.options);
			var strict = options.strict;
			if (strict && regexInvalidEntity.test(html)) {
				parseError('malformed character reference');
			}
			return html.replace(regexDecode, function ($0, $1, $2, $3, $4, $5, $6, $7) {
				var codePoint;
				var semicolon;
				var hexDigits;
				var reference;
				var next;
				if ($1) {
					// Decode decimal escapes, e.g. `&#119558;`.
					codePoint = $1;
					semicolon = $2;
					if (strict && !semicolon) {
						parseError('character reference was not terminated by a semicolon');
					}
					return codePointToSymbol(codePoint, strict);
				}
				if ($3) {
					// Decode hexadecimal escapes, e.g. `&#x1D306;`.
					hexDigits = $3;
					semicolon = $4;
					if (strict && !semicolon) {
						parseError('character reference was not terminated by a semicolon');
					}
					codePoint = parseInt(hexDigits, 16);
					return codePointToSymbol(codePoint, strict);
				}
				if ($5) {
					// Decode named character references with trailing `;`, e.g. `&copy;`.
					reference = $5;
					if (has(decodeMap, reference)) {
						return decodeMap[reference];
					} else {
						// Ambiguous ampersand; see http://mths.be/notes/ambiguous-ampersands.
						if (strict) {
							parseError('named character reference was not terminated by a semicolon');
						}
						return $0;
					}
				}
				// If we’re still here, it’s a legacy reference for sure. No need for an
				// extra `if` check.
				// Decode named character references without trailing `;`, e.g. `&amp`
				// This is only a parse error if it gets converted to `&`, or if it is
				// followed by `=` in an attribute context.
				reference = $6;
				next = $7;
				if (next && options.isAttributeValue) {
					if (strict && next == '=') {
						parseError('`&` did not start a character reference');
					}
					return $0;
				} else {
					if (strict) {
						parseError('named character reference was not terminated by a semicolon');
					}
					// Note: there is no need to check `has(decodeMapLegacy, reference)`.
					return decodeMapLegacy[reference] + (next || '');
				}
			});
		};
		// Expose default options (so they can be overridden globally).
		decode.options = {
			'isAttributeValue': false,
			'strict': false
		};

		var escape = function escape(string) {
			return string.replace(regexEscape, function ($0) {
				// Note: there is no need to check `has(escapeMap, $0)` here.
				return escapeMap[$0];
			});
		};

		/*--------------------------------------------------------------------------*/

		var he = {
			'version': '0.5.0',
			'encode': encode,
			'decode': decode,
			'escape': escape,
			'unescape': decode
		};

		// Some AMD build optimizers, like r.js, check for specific condition patterns
		// like the following:
		if (true) {
			!(__WEBPACK_AMD_DEFINE_RESULT__ = function () {
				return he;
			}.call(exports, __webpack_require__, exports, module), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
		} else if (freeExports && !freeExports.nodeType) {
			if (freeModule) {
				// in Node.js or RingoJS v0.8.0+
				freeModule.exports = he;
			} else {
				// in Narwhal or RingoJS v0.7.0-
				for (var key in he) {
					has(he, key) && (freeExports[key] = he[key]);
				}
			}
		} else {
			// in Rhino or a web browser
			root.he = he;
		}
	})(undefined);
	/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(188)(module)))

/***/ },
/* 188 */
/***/ function(module, exports) {

	"use strict";

	module.exports = function (module) {
		if (!module.webpackPolyfill) {
			module.deprecate = function () {};
			module.paths = [];
			// module.parent = undefined by default
			module.children = [];
			module.webpackPolyfill = 1;
		}
		return module;
	};

/***/ },
/* 189 */
/***/ function(module, exports) {

	/*!
	 * repeat-string <https://github.com/jonschlinkert/repeat-string>
	 *
	 * Copyright (c) 2014-2015, Jon Schlinkert.
	 * Licensed under the MIT License.
	 */

	'use strict';

	/**
	 * Expose `repeat`
	 */

	module.exports = repeat;

	/**
	 * Repeat the given `string` the specified `number`
	 * of times.
	 *
	 * **Example:**
	 *
	 * ```js
	 * var repeat = require('repeat-string');
	 * repeat('A', 5);
	 * //=> AAAAA
	 * ```
	 *
	 * @param {String} `string` The string to repeat
	 * @param {Number} `number` The number of times to repeat the string
	 * @return {String} Repeated string
	 * @api public
	 */

	function repeat(str, num) {
	  if (typeof str !== 'string') {
	    throw new TypeError('repeat-string expects a string.');
	  }

	  if (num === 1) return str;
	  if (num === 2) return str + str;

	  var max = str.length * num;
	  if (cache !== str || typeof cache === 'undefined') {
	    cache = str;
	    res = '';
	  }

	  while (max > res.length && num > 0) {
	    if (num & 1) {
	      res += str;
	    }

	    num >>= 1;
	    if (!num) break;
	    str += str;
	  }

	  return res.substr(0, max);
	}

	/**
	 * Results cache
	 */

	var res = '';
	var cache;

/***/ },
/* 190 */
/***/ function(module, exports) {

	/**
	 * @author Titus Wormer
	 * @copyright 2015 Titus Wormer. All rights reserved.
	 * @module Utilities
	 * @fileoverview Collection of tiny helpers useful for
	 *   both parsing and compiling markdown.
	 */

	'use strict';

	/*
	 * Methods.
	 */

	var has = Object.prototype.hasOwnProperty;

	/*
	 * Expressions.
	 */

	var WHITE_SPACE_FINAL = /\s+$/;
	var NEW_LINES_FINAL = /\n+$/;
	var WHITE_SPACE_INITIAL = /^\s+/;
	var EXPRESSION_LINE_BREAKS = /\r\n|\r/g;
	var EXPRESSION_SYMBOL_FOR_NEW_LINE = /\u2424/g;
	var WHITE_SPACE_COLLAPSABLE = /[ \t\n]+/g;
	var EXPRESSION_BOM = /^\ufeff/;

	/**
	 * Shallow copy `context` into `target`.
	 *
	 * @example
	 *   var target = {};
	 *   copy(target, {foo: 'bar'}); // target
	 *
	 * @param {Object} target - Object to copy into.
	 * @param {Object} context - Object to copy from.
	 * @return {Object} - `target`.
	 */
	function copy(target, context) {
	    var key;

	    for (key in context) {
	        if (has.call(context, key)) {
	            target[key] = context[key];
	        }
	    }

	    return target;
	}

	/**
	 * Shallow clone `context`.
	 *
	 * @example
	 *   clone({foo: 'bar'}) // {foo: 'bar'}
	 *   clone(['foo', 'bar']) // ['foo', 'bar']
	 *
	 * @return {Object|Array} context - Object to clone.
	 * @return {Object|Array} - Shallow clone of `context`.
	 */
	function clone(context) {
	    if ('concat' in context) {
	        return context.concat();
	    }

	    return copy({}, context);
	}

	/**
	 * Throw an exception with in its `message` `value`
	 * and `name`.
	 *
	 * @param {*} value - Invalid value.
	 * @param {string} name - Setting name.
	 */
	function raise(value, name) {
	    throw new Error('Invalid value `' + value + '` ' + 'for setting `' + name + '`');
	}

	/**
	 * Validate a value to be boolean. Defaults to `def`.
	 * Raises an exception with `context[name]` when not
	 * a boolean.
	 *
	 * @example
	 *   validateBoolean({foo: null}, 'foo', true) // true
	 *   validateBoolean({foo: false}, 'foo', true) // false
	 *   validateBoolean({foo: 'bar'}, 'foo', true) // Throws
	 *
	 * @throws {Error} - When a setting is neither omitted nor
	 *   a boolean.
	 * @param {Object} context - Settings.
	 * @param {string} name - Setting name.
	 * @param {boolean} def - Default value.
	 */
	function validateBoolean(context, name, def) {
	    var value = context[name];

	    if (value === null || value === undefined) {
	        value = def;
	    }

	    if (typeof value !== 'boolean') {
	        raise(value, 'options.' + name);
	    }

	    context[name] = value;
	}

	/**
	 * Validate a value to be boolean. Defaults to `def`.
	 * Raises an exception with `context[name]` when not
	 * a boolean.
	 *
	 * @example
	 *   validateNumber({foo: null}, 'foo', 1) // 1
	 *   validateNumber({foo: 2}, 'foo', 1) // 2
	 *   validateNumber({foo: 'bar'}, 'foo', 1) // Throws
	 *
	 * @throws {Error} - When a setting is neither omitted nor
	 *   a number.
	 * @param {Object} context - Settings.
	 * @param {string} name - Setting name.
	 * @param {number} def - Default value.
	 */
	function validateNumber(context, name, def) {
	    var value = context[name];

	    if (value === null || value === undefined) {
	        value = def;
	    }

	    if (typeof value !== 'number' || value !== value) {
	        raise(value, 'options.' + name);
	    }

	    context[name] = value;
	}

	/**
	 * Validate a value to be in `map`. Defaults to `def`.
	 * Raises an exception with `context[name]` when not
	 * not in `map`.
	 *
	 * @example
	 *   var map = {bar: true, baz: true};
	 *   validateString({foo: null}, 'foo', 'bar', map) // 'bar'
	 *   validateString({foo: 'baz'}, 'foo', 'bar', map) // 'baz'
	 *   validateString({foo: true}, 'foo', 'bar', map) // Throws
	 *
	 * @throws {Error} - When a setting is neither omitted nor
	 *   in `map`.
	 * @param {Object} context - Settings.
	 * @param {string} name - Setting name.
	 * @param {string} def - Default value.
	 * @param {Object} map - Enum.
	 */
	function validateString(context, name, def, map) {
	    var value = context[name];

	    if (value === null || value === undefined) {
	        value = def;
	    }

	    if (!(value in map)) {
	        raise(value, 'options.' + name);
	    }

	    context[name] = value;
	}

	/**
	 * Remove final white space from `value`.
	 *
	 * @example
	 *   trimRight('foo '); // 'foo'
	 *
	 * @param {string} value - Content to trim.
	 * @return {string} - Trimmed content.
	 */
	function trimRight(value) {
	    return String(value).replace(WHITE_SPACE_FINAL, '');
	}

	/**
	 * Remove final new line characters from `value`.
	 *
	 * @example
	 *   trimRightLines('foo\n\n'); // 'foo'
	 *
	 * @param {string} value - Content to trim.
	 * @return {string} - Trimmed content.
	 */
	function trimRightLines(value) {
	    return String(value).replace(NEW_LINES_FINAL, '');
	}

	/**
	 * Remove initial white space from `value`.
	 *
	 * @example
	 *   trimLeft(' foo'); // 'foo'
	 *
	 * @param {string} value - Content to trim.
	 * @return {string} - Trimmed content.
	 */
	function trimLeft(value) {
	    return String(value).replace(WHITE_SPACE_INITIAL, '');
	}

	/**
	 * Remove initial and final white space from `value`.
	 *
	 * @example
	 *   trim(' foo '); // 'foo'
	 *
	 * @param {string} value - Content to trim.
	 * @return {string} - Trimmed content.
	 */
	function trim(value) {
	    return trimLeft(trimRight(value));
	}

	/**
	 * Collapse white space.
	 *
	 * @example
	 *   collapse('foo\t bar'); // 'foo bar'
	 *
	 * @param {string} value - Content to collapse.
	 * @return {string} - Collapsed content.
	 */
	function collapse(value) {
	    return String(value).replace(WHITE_SPACE_COLLAPSABLE, ' ');
	}

	/**
	 * Clean a string in preperation of parsing.
	 *
	 * @example
	 *   clean('\ufefffoo'); // 'foo'
	 *   clean('foo\r\nbar'); // 'foo\nbar'
	 *   clean('foo\u2424bar'); // 'foo\nbar'
	 *
	 * @param {string} value - Content to clean.
	 * @return {string} - Cleaned content.
	 */
	function clean(value) {
	    return String(value).replace(EXPRESSION_BOM, '').replace(EXPRESSION_LINE_BREAKS, '\n').replace(EXPRESSION_SYMBOL_FOR_NEW_LINE, '\n');
	}

	/**
	 * Normalize an identifier.  Collapses multiple white space
	 * characters into a single space, and removes casing.
	 *
	 * @example
	 *   normalizeIdentifier('FOO\t bar'); // 'foo bar'
	 *
	 * @param {string} value - Content to normalize.
	 * @return {string} - Normalized content.
	 */
	function normalizeIdentifier(value) {
	    return collapse(value).toLowerCase();
	}

	/**
	 * Count how many characters `character` occur in `value`.
	 *
	 * @example
	 *   countCharacter('foo(bar(baz)', '(') // 2
	 *   countCharacter('foo(bar(baz)', ')') // 1
	 *
	 * @param {string} value - Content to search in.
	 * @param {string} character - Character to search for.
	 * @return {number} - Count.
	 */
	function countCharacter(value, character) {
	    var index = -1;
	    var length = value.length;
	    var count = 0;

	    while (++index < length) {
	        if (value.charAt(index) === character) {
	            count++;
	        }
	    }

	    return count;
	}

	/**
	 * Create an empty object.
	 *
	 * @example
	 *   objectObject(); // Same as `{}`.
	 *
	 * @return {Object}
	 */
	function objectObject() {
	    return {};
	}

	/*
	 * Break coverage.
	 */

	objectObject();

	/**
	 * Create an object without prototype.
	 *
	 * @example
	 *   objectNull(); // New object without prototype.
	 *
	 * @return {Object}
	 */
	function objectNull() {
	    return Object.create(null);
	}

	/*
	 * Expose `validate`.
	 */

	exports.validate = {
	    'boolean': validateBoolean,
	    'string': validateString,
	    'number': validateNumber
	};

	/*
	 * Expose.
	 */

	exports.trim = trim;
	exports.trimLeft = trimLeft;
	exports.trimRight = trimRight;
	exports.trimRightLines = trimRightLines;
	exports.collapse = collapse;
	exports.normalizeIdentifier = normalizeIdentifier;
	exports.clean = clean;
	exports.raise = raise;
	exports.copy = copy;
	exports.clone = clone;
	exports.countCharacter = countCharacter;

	/* istanbul ignore else */
	if ('create' in Object) {
	    exports.create = objectNull;
	} else {
	    exports.create = objectObject;
	}

/***/ },
/* 191 */
/***/ function(module, exports) {

	/* This file is generated by `script/build-expressions.js` */
	'use strict';

	module.exports = {
	  'rules': {
	    'newline': /^\n([ \t]*\n)*/,
	    'code': /^((?: {4}|\t)[^\n]*\n?([ \t]*\n)*)+/,
	    'horizontalRule': /^[ \t]*([-*_])( *\1){2,} *(?=\n|$)/,
	    'heading': /^([ \t]*)(#{1,6})(?:([ \t]+)([^\n]+?))??(?:[ \t]+#+)?[ \t]*(?=\n|$)/,
	    'lineHeading': /^(\ {0,3})([^\n]+?)[ \t]*\n\ {0,3}(=|-){1,}[ \t]*(?=\n|$)/,
	    'definition': /^[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$)/,
	    'bullet': /(?:[*+-]|\d+\.)/,
	    'indent': /^([ \t]*)((?:[*+-]|\d+\.))( {1,4}(?! )| |\t)/,
	    'item': /([ \t]*)((?:[*+-]|\d+\.))( {1,4}(?! )| |\t)[^\n]*(?:\n(?!\1(?:[*+-]|\d+\.)[ \t])[^\n]*)*/gm,
	    'list': /^([ \t]*)((?:[*+-]|\d+\.))[ \t][\s\S]+?(?:(?=\n+\1?(?:[-*_][ \t]*){3,}(?:\n|$))|(?=\n+[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))|\n{2,}(?![ \t])(?!\1(?:[*+-]|\d+\.)[ \t])|$)/,
	    'blockquote': /^(?=[ \t]*>)(?:(?:(?:[ \t]*>[^\n]*\n)*(?:[ \t]*>[^\n]+(?=\n|$))|(?![ \t]*>)(?![ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))[^\n]+)(?:\n|$))*(?:[ \t]*>[ \t]*(?:\n[ \t]*>[ \t]*)*)?/,
	    'html': /^(?:[ \t]*(?:(?:(?:<(?:article|header|aside|hgroup|blockquote|hr|iframe|body|li|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)(?:(?:\s+)(?:[a-zA-Z_:][a-zA-Z0-9_.:-]*)(?:(?:\s+)?=(?:\s+)?(?:[^"'=<>`]+|'[^']*'|"[^"]*"))?)*(?:\s+)?\/?>?)|(?:<\/(?:article|header|aside|hgroup|blockquote|hr|iframe|body|li|map|button|object|canvas|ol|caption|output|col|p|colgroup|pre|dd|progress|div|section|dl|table|td|dt|tbody|embed|textarea|fieldset|tfoot|figcaption|th|figure|thead|footer|tr|form|ul|h1|h2|h3|h4|h5|h6|video|script|style)(?:\s+)?>))|(?:<!--(?!-?>)(?:[^-]|-(?!-))*-->)|(?:<\?(?:[^\?]|\?(?!>))+\?>)|(?:<![a-zA-Z]+\s+[\s\S]+?>)|(?:<!\[CDATA\[[\s\S]+?\]\]>))[\s\S]*?[ \t]*?(?:\n{2,}|\s*$))/i,
	    'paragraph': /^(?:(?:[^\n]+\n?(?![ \t]*([-*_])( *\1){2,} *(?=\n|$)|([ \t]*)(#{1,6})(?:([ \t]+)([^\n]+?))??(?:[ \t]+#+)?[ \t]*(?=\n|$)|(\ {0,3})([^\n]+?)[ \t]*\n\ {0,3}(=|-){1,}[ \t]*(?=\n|$)|[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$)|(?=[ \t]*>)(?:(?:(?:[ \t]*>[^\n]*\n)*(?:[ \t]*>[^\n]+(?=\n|$))|(?![ \t]*>)(?![ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))[^\n]+)(?:\n|$))*(?:[ \t]*>[ \t]*(?:\n[ \t]*>[ \t]*)*)?|<(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\b)(?!mailto:)\w+(?!:\/|[^\w\s@]*@)\b))+)/,
	    'escape': /^\\([\\`*{}\[\]()#+\-.!_>])/,
	    'autoLink': /^<([^ >]+(@|:\/)[^ >]+)>/,
	    'tag': /^(?:(?:<(?:[a-zA-Z][a-zA-Z0-9]*)(?:(?:\s+)(?:[a-zA-Z_:][a-zA-Z0-9_.:-]*)(?:(?:\s+)?=(?:\s+)?(?:[^"'=<>`]+|'[^']*'|"[^"]*"))?)*(?:\s+)?\/?>)|(?:<\/(?:[a-zA-Z][a-zA-Z0-9]*)(?:\s+)?>)|(?:<!--(?!-?>)(?:[^-]|-(?!-))*-->)|(?:<\?(?:[^\?]|\?(?!>))+\?>)|(?:<![a-zA-Z]+\s+[\s\S]+?>)|(?:<!\[CDATA\[[\s\S]+?\]\]>))/,
	    'strong': /^(_)_((?:\\[\s\S]|[^\\])+?)__(?!_)|^(\*)\*((?:\\[\s\S]|[^\\])+?)\*\*(?!\*)/,
	    'emphasis': /^\b(_)((?:__|\\[\s\S]|[^\\])+?)_\b|^(\*)((?:\*\*|\\[\s\S]|[^\\])+?)\*(?!\*)/,
	    'inlineCode': /^(`+)((?!`)[\s\S]*?(?:`\s+|[^`]))?(\1)(?!`)/,
	    'break': /^ {2,}\n(?!\s*$)/,
	    'inlineText': /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/,
	    'link': /^(!?\[)((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\(\s*(?:(?!<)((?:\((?:\\[\s\S]|[^\)])*?\)|\\[\s\S]|[\s\S])*?)|<([\s\S]*?)>)(?:\s+['"]([\s\S]*?)['"])?\s*\)/,
	    'shortcutReference': /^(!?\[)((?:\\[\s\S]|[^\[\]])+?)\]/,
	    'reference': /^(!?\[)((?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*)\]\s*\[((?:\\[\s\S]|[^\[\]])*)\]/
	  },
	  'gfm': {
	    'fences': /^( *)(([`~])\3{2,})[ \t]*([^\n`~]+)?[ \t]*(?:\n([\s\S]*?))??(?:\n\ {0,3}\2\3*[ \t]*(?=\n|$)|$)/,
	    'paragraph': /^(?:(?:[^\n]+\n?(?![ \t]*([-*_])( *\1){2,} *(?=\n|$)|( *)(([`~])\5{2,})[ \t]*([^\n`~]+)?[ \t]*(?:\n([\s\S]*?))??(?:\n\ {0,3}\4\5*[ \t]*(?=\n|$)|$)|([ \t]*)((?:[*+-]|\d+\.))[ \t][\s\S]+?(?:(?=\n+\8?(?:[-*_][ \t]*){3,}(?:\n|$))|(?=\n+[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))|\n{2,}(?![ \t])(?!\8(?:[*+-]|\d+\.)[ \t])|$)|([ \t]*)(#{1,6})(?:([ \t]+)([^\n]+?))??(?:[ \t]+#+)?[ \t]*(?=\n|$)|(\ {0,3})([^\n]+?)[ \t]*\n\ {0,3}(=|-){1,}[ \t]*(?=\n|$)|[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$)|(?=[ \t]*>)(?:(?:(?:[ \t]*>[^\n]*\n)*(?:[ \t]*>[^\n]+(?=\n|$))|(?![ \t]*>)(?![ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))[^\n]+)(?:\n|$))*(?:[ \t]*>[ \t]*(?:\n[ \t]*>[ \t]*)*)?|<(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\b)(?!mailto:)\w+(?!:\/|[^\w\s@]*@)\b))+)/,
	    'table': /^( *\|(.+))\n( *\|( *[-:]+[-| :]*)\n)((?: *\|.*(?:\n|$))*)/,
	    'looseTable': /^( *(\S.*\|.*))\n( *([-:]+ *\|[-| :]*)\n)((?:.*\|.*(?:\n|$))*)/,
	    'escape': /^\\([\\`*{}\[\]()#+\-.!_>~|])/,
	    'url': /^https?:\/\/[^\s<]+[^<.,:;"')\]\s]/,
	    'deletion': /^~~(?=\S)([\s\S]*?\S)~~/,
	    'inlineText': /^[\s\S]+?(?=[\\<!\[_*`~]|https?:\/\/| {2,}\n|$)/
	  },
	  'footnotes': {
	    'footnoteDefinition': /^( *\[\^([^\]]+)\]: *)([^\n]+(\n+ +[^\n]+)*)/
	  },
	  'yaml': {
	    'yamlFrontMatter': /^-{3}\n([\s\S]+?\n)?-{3}/
	  },
	  'pedantic': {
	    'heading': /^([ \t]*)(#{1,6})([ \t]*)([^\n]*?)[ \t]*#*[ \t]*(?=\n|$)/,
	    'strong': /^(_)_(?=\S)([\s\S]*?\S)__(?!_)|^(\*)\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
	    'emphasis': /^(_)(?=\S)([\s\S]*?\S)_(?!_)|^(\*)(?=\S)([\s\S]*?\S)\*(?!\*)/
	  },
	  'commonmark': {
	    'list': /^([ \t]*)((?:[*+-]|\d+[\.\)]))[ \t][\s\S]+?(?:(?=\n+\1?(?:[-*_][ \t]*){3,}(?:\n|$))|(?=\n+[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))|\n{2,}(?![ \t])(?!\1(?:[*+-]|\d+[\.\)])[ \t])|$)/,
	    'item': /([ \t]*)((?:[*+-]|\d+[\.\)]))( {1,4}(?! )| |\t)[^\n]*(?:\n(?!\1(?:[*+-]|\d+[\.\)])[ \t])[^\n]*)*/gm,
	    'bullet': /(?:[*+-]|\d+[\.\)])/,
	    'indent': /^([ \t]*)((?:[*+-]|\d+[\.\)]))( {1,4}(?! )| |\t)/,
	    'link': /^(!?\[)((?:(?:\[(?:\[(?:\\[\s\S]|[^\[\]])*?\]|\\[\s\S]|[^\[\]])*?\])|\\[\s\S]|[^\[\]])*?)\]\(\s*(?:(?!<)((?:\((?:\\[\s\S]|[^\(\)\s])*?\)|\\[\s\S]|[^\(\)\s])*?)|<([^\n]*?)>)(?:\s+(?:\'((?:\\[\s\S]|[^\'])*?)\'|"((?:\\[\s\S]|[^"])*?)"|\(((?:\\[\s\S]|[^\)])*?)\)))?\s*\)/,
	    'reference': /^(!?\[)((?:(?:\[(?:\[(?:\\[\s\S]|[^\[\]])*?\]|\\[\s\S]|[^\[\]])*?\])|\\[\s\S]|[^\[\]])*?)\]\s*\[((?:\\[\s\S]|[^\[\]])*)\]/,
	    'paragraph': /^(?:(?:[^\n]+\n?(?!\ {0,3}([-*_])( *\1){2,} *(?=\n|$)|(\ {0,3})(#{1,6})(?:([ \t]+)([^\n]+?))??(?:[ \t]+#+)?\ {0,3}(?=\n|$)|(?=\ {0,3}>)(?:(?:(?:\ {0,3}>[^\n]*\n)*(?:\ {0,3}>[^\n]+(?=\n|$))|(?!\ {0,3}>)(?!\ {0,3}\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?\ {0,3}(?=\n|$))[^\n]+)(?:\n|$))*(?:\ {0,3}>\ {0,3}(?:\n\ {0,3}>\ {0,3})*)?|<(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\b)(?!mailto:)\w+(?!:\/|[^\w\s@]*@)\b))+)/,
	    'blockquote': /^(?=[ \t]*>)(?:(?:(?:[ \t]*>[^\n]*\n)*(?:[ \t]*>[^\n]+(?=\n|$))|(?![ \t]*>)(?![ \t]*([-*_])( *\1){2,} *(?=\n|$)|([ \t]*)((?:[*+-]|\d+\.))[ \t][\s\S]+?(?:(?=\n+\3?(?:[-*_][ \t]*){3,}(?:\n|$))|(?=\n+[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))|\n{2,}(?![ \t])(?!\3(?:[*+-]|\d+\.)[ \t])|$)|( *)(([`~])\10{2,})[ \t]*([^\n`~]+)?[ \t]*(?:\n([\s\S]*?))??(?:\n\ {0,3}\9\10*[ \t]*(?=\n|$)|$)|((?: {4}|\t)[^\n]*\n?([ \t]*\n)*)+|[ \t]*\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?[ \t]*(?=\n|$))[^\n]+)(?:\n|$))*(?:[ \t]*>[ \t]*(?:\n[ \t]*>[ \t]*)*)?/,
	    'escape': /^\\(\n|[\\`*{}\[\]()#+\-.!_>"$%&',\/:;<=?@^~|])/
	  },
	  'commonmarkGFM': {
	    'paragraph': /^(?:(?:[^\n]+\n?(?!\ {0,3}([-*_])( *\1){2,} *(?=\n|$)|( *)(([`~])\5{2,})\ {0,3}([^\n`~]+)?\ {0,3}(?:\n([\s\S]*?))??(?:\n\ {0,3}\4\5*\ {0,3}(?=\n|$)|$)|(\ {0,3})((?:[*+-]|\d+\.))[ \t][\s\S]+?(?:(?=\n+\8?(?:[-*_]\ {0,3}){3,}(?:\n|$))|(?=\n+\ {0,3}\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?\ {0,3}(?=\n|$))|\n{2,}(?![ \t])(?!\8(?:[*+-]|\d+\.)[ \t])|$)|(\ {0,3})(#{1,6})(?:([ \t]+)([^\n]+?))??(?:[ \t]+#+)?\ {0,3}(?=\n|$)|(?=\ {0,3}>)(?:(?:(?:\ {0,3}>[^\n]*\n)*(?:\ {0,3}>[^\n]+(?=\n|$))|(?!\ {0,3}>)(?!\ {0,3}\[((?:[^\\](?:\\|\\(?:\\{2})+)\]|[^\]])+)\]:[ \t\n]*(<[^>\[\]]+>|[^\s\[\]]+)(?:[ \t\n]+['"(]((?:[^\n]|\n(?!\n))*?)['")])?\ {0,3}(?=\n|$))[^\n]+)(?:\n|$))*(?:\ {0,3}>\ {0,3}(?:\n\ {0,3}>\ {0,3})*)?|<(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\b)(?!mailto:)\w+(?!:\/|[^\w\s@]*@)\b))+)/
	  },
	  'breaks': {
	    'break': /^ *\n(?!\s*$)/,
	    'inlineText': /^[\s\S]+?(?=[\\<!\[_*`]| *\n|$)/
	  },
	  'breaksGFM': {
	    'inlineText': /^[\s\S]+?(?=[\\<!\[_*`~]|https?:\/\/| *\n|$)/
	  }
	};

/***/ },
/* 192 */
/***/ function(module, exports) {

	/**
	 * @author Titus Wormer
	 * @copyright 2015 Titus Wormer. All rights reserved.
	 * @module Defaults
	 * @fileoverview Default values for parse and
	 *  stringification settings.
	 */

	'use strict';

	/*
	 * Note that `stringify.entities` is a string.
	 */

	module.exports = {
	    'parse': {
	        'position': true,
	        'gfm': true,
	        'yaml': true,
	        'commonmark': false,
	        'footnotes': false,
	        'pedantic': false,
	        'breaks': false
	    },
	    'stringify': {
	        'entities': 'false',
	        'setext': false,
	        'closeAtx': false,
	        'looseTable': false,
	        'spacedTable': true,
	        'incrementListMarker': true,
	        'fences': false,
	        'fence': '`',
	        'bullet': '-',
	        'listItemIndent': 'tab',
	        'rule': '*',
	        'ruleSpaces': true,
	        'ruleRepetition': 3,
	        'strong': '*',
	        'emphasis': '_'
	    }
	};

/***/ },
/* 193 */
/***/ function(module, exports, __webpack_require__) {

	/**
	 * @author Titus Wormer
	 * @copyright 2015 Titus Wormer. All rights reserved.
	 * @module Stringify
	 * @fileoverview Compile a an abstract syntax tree into
	 *   a markdown document.
	 */

	'use strict';

	/*
	 * Dependencies.
	 */

	var he = __webpack_require__(187);
	var table = __webpack_require__(194);
	var repeat = __webpack_require__(189);
	var utilities = __webpack_require__(190);
	var defaultOptions = __webpack_require__(192).stringify;

	/*
	 * Methods.
	 */

	var clone = utilities.clone;
	var raise = utilities.raise;
	var validate = utilities.validate;
	var count = utilities.countCharacter;
	var objectCreate = utilities.create;

	/*
	 * Constants.
	 */

	var INDENT = 4;
	var MINIMUM_CODE_FENCE_LENGTH = 3;
	var YAML_FENCE_LENGTH = 3;
	var MINIMUM_RULE_LENGTH = 3;
	var MAILTO = 'mailto:';

	/*
	 * Expressions.
	 */

	var EXPRESSIONS_WHITE_SPACE = /\s/;

	/*
	 * Expression for a protocol.
	 *
	 * @see http://en.wikipedia.org/wiki/URI_scheme#Generic_syntax
	 */

	var PROTOCOL = /^[a-z][a-z+.-]+:\/?/i;

	/*
	 * Characters.
	 */

	var ANGLE_BRACKET_CLOSE = '>';
	var ANGLE_BRACKET_OPEN = '<';
	var ASTERISK = '*';
	var CARET = '^';
	var COLON = ':';
	var DASH = '-';
	var DOT = '.';
	var EMPTY = '';
	var EQUALS = '=';
	var EXCLAMATION_MARK = '!';
	var HASH = '#';
	var LINE = '\n';
	var PARENTHESIS_OPEN = '(';
	var PARENTHESIS_CLOSE = ')';
	var PIPE = '|';
	var PLUS = '+';
	var QUOTE_DOUBLE = '"';
	var QUOTE_SINGLE = '\'';
	var SPACE = ' ';
	var SQUARE_BRACKET_OPEN = '[';
	var SQUARE_BRACKET_CLOSE = ']';
	var TICK = '`';
	var TILDE = '~';
	var UNDERSCORE = '_';

	/*
	 * Character combinations.
	 */

	var BREAK = LINE + LINE;
	var GAP = BREAK + LINE;
	var DOUBLE_TILDE = TILDE + TILDE;

	/*
	 * Allowed entity options.
	 */

	var ENTITY_OPTIONS = objectCreate();

	ENTITY_OPTIONS['true'] = true;
	ENTITY_OPTIONS['false'] = true;
	ENTITY_OPTIONS.numbers = true;
	ENTITY_OPTIONS.escape = true;

	/*
	 * Allowed list-bullet characters.
	 */

	var LIST_BULLETS = objectCreate();

	LIST_BULLETS[ASTERISK] = true;
	LIST_BULLETS[DASH] = true;
	LIST_BULLETS[PLUS] = true;

	/*
	 * Allowed horizontal-rule bullet characters.
	 */

	var HORIZONTAL_RULE_BULLETS = objectCreate();

	HORIZONTAL_RULE_BULLETS[ASTERISK] = true;
	HORIZONTAL_RULE_BULLETS[DASH] = true;
	HORIZONTAL_RULE_BULLETS[UNDERSCORE] = true;

	/*
	 * Allowed emphasis characters.
	 */

	var EMPHASIS_MARKERS = objectCreate();

	EMPHASIS_MARKERS[UNDERSCORE] = true;
	EMPHASIS_MARKERS[ASTERISK] = true;

	/*
	 * Allowed fence markers.
	 */

	var FENCE_MARKERS = objectCreate();

	FENCE_MARKERS[TICK] = true;
	FENCE_MARKERS[TILDE] = true;

	/*
	 * Which method to use based on `list.ordered`.
	 */

	var ORDERED_MAP = objectCreate();

	ORDERED_MAP['true'] = 'visitOrderedItems';
	ORDERED_MAP['false'] = 'visitUnorderedItems';

	/*
	 * Allowed list-item-indent's.
	 */

	var LIST_ITEM_INDENTS = objectCreate();

	var LIST_ITEM_TAB = 'tab';
	var LIST_ITEM_ONE = '1';
	var LIST_ITEM_MIXED = 'mixed';

	LIST_ITEM_INDENTS[LIST_ITEM_ONE] = true;
	LIST_ITEM_INDENTS[LIST_ITEM_TAB] = true;
	LIST_ITEM_INDENTS[LIST_ITEM_MIXED] = true;

	/*
	 * Which checkbox to use.
	 */

	var CHECKBOX_MAP = objectCreate();

	CHECKBOX_MAP['null'] = EMPTY;
	CHECKBOX_MAP.undefined = EMPTY;
	CHECKBOX_MAP['true'] = SQUARE_BRACKET_OPEN + 'x' + SQUARE_BRACKET_CLOSE + SPACE;
	CHECKBOX_MAP['false'] = SQUARE_BRACKET_OPEN + SPACE + SQUARE_BRACKET_CLOSE + SPACE;

	/**
	 * Encode noop.
	 * Simply returns the given value.
	 *
	 * @example
	 *   var encode = encodeNoop();
	 *   encode('AT&T') // 'AT&T'
	 *
	 * @param {string} value - Content.
	 * @return {string} - Content, without any modifications.
	 */
	function encodeNoop(value) {
	    return value;
	}

	/**
	 * Factory to encode HTML entities.
	 * Creates a no-operation function when `type` is
	 * `'false'`, a function which encodes using named
	 * references when `type` is `'true'`, and a function
	 * which encodes using numbered references when `type` is
	 * `'numbers'`.
	 *
	 * By default this should not throw errors, but he does
	 * throw an error when in `strict` mode:
	 *
	 *     he.encode.options.strict = true;
	 *     encodeFactory('true')('\x01') // throws
	 *
	 * These are thrown on the currently compiled `File`.
	 *
	 * @example
	 *   var file = new File();
	 *
	 *   var encode = encodeFactory('false', file);
	 *   encode('AT&T') // 'AT&T'
	 *
	 *   encode = encodeFactory('true', file);
	 *   encode('AT&T') // 'AT&amp;T'
	 *
	 *   encode = encodeFactory('numbers', file);
	 *   encode('AT&T') // 'ATT&#x26;T'
	 *
	 * @param {string} type - Either `'true'`, `'false'`, or
	 *   `numbers`.
	 * @param {File} file - Currently compiled virtual file.
	 * @return {function(string): string} - Function which
	 *   takes a value and returns its encoded version.
	 */
	function encodeFactory(type, file) {
	    var options = {};
	    var fn;

	    if (type === 'false') {
	        return encodeNoop;
	    }

	    if (type === 'true') {
	        options.useNamedReferences = true;
	    }

	    fn = type === 'escape' ? 'escape' : 'encode';

	    /**
	     * Encode HTML entities using `he` using bound options.
	     *
	     * @see https://github.com/mathiasbynens/he#strict
	     *
	     * @example
	     *   // When `type` is `'true'`.
	     *   encode('AT&T'); // 'AT&amp;T'
	     *
	     *   // When `type` is `'numbers'`.
	     *   encode('AT&T'); // 'ATT&#x26;T'
	     *
	     * @param {string} value - Content.
	     * @param {Object} node - Node which is compiled.
	     * @return {string} - Encoded content.
	     * @throws {Error} - When `file.quiet` is not `true`.
	     *   However, by default `he` does not throw on
	     *   parse errors, but when
	     *   `he.encode.options.strict: true`, they occur on
	     *   invalid HTML.
	     */
	    function encode(value, node) {
	        try {
	            return he[fn](value, options);
	        } catch (exception) {
	            file.fail(exception, node.position);
	        }
	    }

	    return encode;
	}

	/**
	 * Checks if `url` needs to be enclosed by angle brackets.
	 *
	 * @example
	 *   encloseURI('foo bar') // '<foo bar>'
	 *   encloseURI('foo(bar(baz)') // '<foo(bar(baz)>'
	 *   encloseURI('') // '<>'
	 *   encloseURI('example.com') // 'example.com'
	 *   encloseURI('example.com', true) // '<example.com>'
	 *
	 * @param {string} uri
	 * @param {boolean?} [always] - Force enclosing.
	 * @return {boolean} - Properly enclosed `uri`.
	 */
	function encloseURI(uri, always) {
	    if (always || !uri.length || EXPRESSIONS_WHITE_SPACE.test(uri) || count(uri, PARENTHESIS_OPEN) !== count(uri, PARENTHESIS_CLOSE)) {
	        return ANGLE_BRACKET_OPEN + uri + ANGLE_BRACKET_CLOSE;
	    }

	    return uri;
	}

	/**
	 * There is currently no way to support nested delimiters
	 * across Markdown.pl, CommonMark, and GitHub (RedCarpet).
	 * The following supports Markdown.pl, and GitHub.
	 * CommonMark is not supported when mixing double- and
	 * single quotes inside a title.
	 *
	 * @see https://github.com/vmg/redcarpet/issues/473
	 * @see https://github.com/jgm/CommonMark/issues/308
	 *
	 * @example
	 *   encloseTitle('foo') // '"foo"'
	 *   encloseTitle('foo \'bar\' baz') // '"foo \'bar\' baz"'
	 *   encloseTitle('foo "bar" baz') // '\'foo "bar" baz\''
	 *   encloseTitle('foo "bar" \'baz\'') // '"foo "bar" \'baz\'"'
	 *
	 * @param {string} title - Content.
	 * @return {string} - Properly enclosed title.
	 */
	function encloseTitle(title) {
	    var delimiter = QUOTE_DOUBLE;

	    if (title.indexOf(delimiter) !== -1) {
	        delimiter = QUOTE_SINGLE;
	    }

	    return delimiter + title + delimiter;
	}

	/**
	 * Get the count of the longest repeating streak
	 * of `character` in `value`.
	 *
	 * @example
	 *   getLongestRepetition('` foo `` bar `', '`') // 2
	 *
	 * @param {string} value - Content.
	 * @param {string} character - Single character to look
	 *   for.
	 * @return {number} - Number of characters at the place
	 *   where `character` occurs in its longest streak in
	 *   `value`.
	 */
	function getLongestRepetition(value, character) {
	    var highestCount = 0;
	    var index = -1;
	    var length = value.length;
	    var currentCount = 0;
	    var currentCharacter;

	    while (++index < length) {
	        currentCharacter = value.charAt(index);

	        if (currentCharacter === character) {
	            currentCount++;

	            if (currentCount > highestCount) {
	                highestCount = currentCount;
	            }
	        } else {
	            currentCount = 0;
	        }
	    }

	    return highestCount;
	}

	/**
	 * Pad `value` with `level * INDENT` spaces.  Respects
	 * lines.
	 *
	 * @example
	 *   pad('foo', 1) // '    foo'
	 *
	 * @param {string} value - Content.
	 * @param {number} level - Indentation level.
	 * @return {string} - Padded `value`.
	 */
	function pad(value, level) {
	    var index;
	    var padding;

	    value = value.split(LINE);

	    index = value.length;
	    padding = repeat(SPACE, level * INDENT);

	    while (index--) {
	        if (value[index].length !== 0) {
	            value[index] = padding + value[index];
	        }
	    }

	    return value.join(LINE);
	}

	/**
	 * Construct a new compiler.
	 *
	 * @example
	 *   var compiler = new Compiler(new File('> foo.'));
	 *
	 * @constructor
	 * @class {Compiler}
	 * @param {File} file - Virtual file.
	 * @param {Object?} [options] - Passed to
	 *   `Compiler#setOptions()`.
	 */
	function Compiler(file, options) {
	    var self = this;

	    self.file = file;

	    self.options = clone(self.options);

	    self.setOptions(options);
	}

	/*
	 * Cache prototype.
	 */

	var compilerPrototype = Compiler.prototype;

	/*
	 * Expose defaults.
	 */

	compilerPrototype.options = defaultOptions;

	/*
	 * Map of applicable enum's.
	 */

	var maps = {
	    'entities': ENTITY_OPTIONS,
	    'bullet': LIST_BULLETS,
	    'rule': HORIZONTAL_RULE_BULLETS,
	    'listItemIndent': LIST_ITEM_INDENTS,
	    'emphasis': EMPHASIS_MARKERS,
	    'strong': EMPHASIS_MARKERS,
	    'fence': FENCE_MARKERS
	};

	/**
	 * Set options.  Does not overwrite previously set
	 * options.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *   compiler.setOptions({bullet: '*'});
	 *
	 * @this {Compiler}
	 * @throws {Error} - When an option is invalid.
	 * @param {Object?} [options] - Stringify settings.
	 * @return {Compiler} - `self`.
	 */
	compilerPrototype.setOptions = function (options) {
	    var self = this;
	    var current = self.options;
	    var ruleRepetition;
	    var key;

	    if (options === null || options === undefined) {
	        options = {};
	    } else if (typeof options === 'object') {
	        options = clone(options);
	    } else {
	        raise(options, 'options');
	    }

	    for (key in defaultOptions) {
	        validate[typeof current[key]](options, key, current[key], maps[key]);
	    }

	    ruleRepetition = options.ruleRepetition;

	    if (ruleRepetition && ruleRepetition < MINIMUM_RULE_LENGTH) {
	        raise(ruleRepetition, 'options.ruleRepetition');
	    }

	    self.encode = encodeFactory(String(options.entities), self.file);

	    self.options = options;

	    return self;
	};

	/**
	 * Visit a token.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.visit({
	 *     type: 'strong',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '**Foo**'
	 *
	 * @param {Object} token - Node.
	 * @param {Object?} [parent] - `token`s parent node.
	 * @return {string} - Compiled `token`.
	 */
	compilerPrototype.visit = function (token, parent) {
	    var self = this;

	    if (typeof self[token.type] !== 'function') {
	        self.file.fail('Missing compiler for node of type `' + token.type + '`: ' + token, token);
	    }

	    return self[token.type](token, parent);
	};

	/**
	 * Visit all tokens.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.all({
	 *     type: 'strong',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     },
	 *     {
	 *       type: 'text',
	 *       value: 'Bar'
	 *     }]
	 *   });
	 *   // ['Foo', 'Bar']
	 *
	 * @param {Object} parent - Parent node of children.
	 * @return {Array.<string>} - List of compiled children.
	 */
	compilerPrototype.all = function (parent) {
	    var self = this;
	    var tokens = parent.children;
	    var values = [];
	    var index = -1;
	    var length = tokens.length;

	    while (++index < length) {
	        values[index] = self.visit(tokens[index], parent);
	    }

	    return values;
	};

	/**
	 * Visit ordered list items.
	 *
	 * Starts the list with
	 * `token.start` and increments each following list item
	 * bullet by one:
	 *
	 *     2. foo
	 *     3. bar
	 *
	 * In `incrementListMarker: false` mode, does not increment
	 * each marker ans stays on `token.start`:
	 *
	 *     1. foo
	 *     1. bar
	 *
	 * Adds an extra line after an item if it has
	 * `loose: true`.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.visitOrderedItems({
	 *     type: 'list',
	 *     ordered: true,
	 *     children: [{
	 *       type: 'listItem',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // '1.  bar'
	 *
	 * @param {Object} token - `list` node with
	 *   `ordered: true`.
	 * @return {string} - Markdown list.
	 */
	compilerPrototype.visitOrderedItems = function (token) {
	    var self = this;
	    var increment = self.options.incrementListMarker;
	    var values = [];
	    var tokens = token.children;
	    var index = -1;
	    var length = tokens.length;
	    var start = token.start;
	    var bullet;

	    while (++index < length) {
	        bullet = (increment ? start + index : start) + DOT;
	        values[index] = self.listItem(tokens[index], token, index, bullet);
	    }

	    return values.join(LINE);
	};

	/**
	 * Visit unordered list items.
	 *
	 * Uses `options.bullet` as each item's bullet.
	 *
	 * Adds an extra line after an item if it has
	 * `loose: true`.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.visitUnorderedItems({
	 *     type: 'list',
	 *     ordered: false,
	 *     children: [{
	 *       type: 'listItem',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // '-   bar'
	 *
	 * @param {Object} token - `list` node with
	 *   `ordered: false`.
	 * @return {string} - Markdown list.
	 */
	compilerPrototype.visitUnorderedItems = function (token) {
	    var self = this;
	    var values = [];
	    var tokens = token.children;
	    var length = tokens.length;
	    var index = -1;
	    var bullet = self.options.bullet;

	    while (++index < length) {
	        values[index] = self.listItem(tokens[index], token, index, bullet);
	    }

	    return values.join(LINE);
	};

	/**
	 * Stringify a block node with block children (e.g., `root`
	 * or `blockquote`).
	 *
	 * Knows about code following a list, or adjacent lists
	 * with similar bullets, and places an extra newline
	 * between them.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.block({
	 *     type: 'root',
	 *     children: [{
	 *       type: 'paragraph',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // 'bar'
	 *
	 * @param {Object} token - `root` node.
	 * @return {string} - Markdown block content.
	 */
	compilerPrototype.block = function (token) {
	    var self = this;
	    var values = [];
	    var tokens = token.children;
	    var index = -1;
	    var length = tokens.length;
	    var child;
	    var prev;

	    while (++index < length) {
	        child = tokens[index];

	        if (prev) {
	            /*
	             * Duplicate tokens, such as a list
	             * directly following another list,
	             * often need multiple new lines.
	             *
	             * Additionally, code blocks following a list
	             * might easily be mistaken for a paragraph
	             * in the list itself.
	             */

	            if (child.type === prev.type && prev.type === 'list') {
	                values.push(prev.ordered === child.ordered ? GAP : BREAK);
	            } else if (prev.type === 'list' && child.type === 'code' && !child.lang) {
	                values.push(GAP);
	            } else {
	                values.push(BREAK);
	            }
	        }

	        values.push(self.visit(child, token));

	        prev = child;
	    }

	    return values.join(EMPTY);
	};

	/**
	 * Stringify a root.
	 *
	 * Adds a final newline to ensure valid POSIX files.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.root({
	 *     type: 'root',
	 *     children: [{
	 *       type: 'paragraph',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // 'bar'
	 *
	 * @param {Object} token - `root` node.
	 * @return {string} - Markdown document.
	 */
	compilerPrototype.root = function (token) {
	    return this.block(token) + LINE;
	};

	/**
	 * Stringify a heading.
	 *
	 * In `setext: true` mode and when `depth` is smaller than
	 * three, creates a setext header:
	 *
	 *     Foo
	 *     ===
	 *
	 * Otherwise, an ATX header is generated:
	 *
	 *     ### Foo
	 *
	 * In `closeAtx: true` mode, the header is closed with
	 * hashes:
	 *
	 *     ### Foo ###
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.heading({
	 *     type: 'heading',
	 *     depth: 2,
	 *     children: [{
	 *       type: 'strong',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // '## **bar**'
	 *
	 * @param {Object} token - `heading` node.
	 * @return {string} - Markdown heading.
	 */
	compilerPrototype.heading = function (token) {
	    var self = this;
	    var setext = self.options.setext;
	    var closeAtx = self.options.closeAtx;
	    var depth = token.depth;
	    var content = self.all(token).join(EMPTY);
	    var prefix;

	    if (setext && depth < 3) {
	        return content + LINE + repeat(depth === 1 ? EQUALS : DASH, content.length);
	    }

	    prefix = repeat(HASH, token.depth);
	    content = prefix + SPACE + content;

	    if (closeAtx) {
	        content += SPACE + prefix;
	    }

	    return content;
	};

	/**
	 * Stringify text.
	 *
	 * Supports named entities in `settings.encode: true` mode:
	 *
	 *     AT&amp;T
	 *
	 * Supports numbered entities in `settings.encode: numbers`
	 * mode:
	 *
	 *     AT&#x26;T
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.text({
	 *     type: 'text',
	 *     value: 'foo'
	 *   });
	 *   // 'foo'
	 *
	 * @param {Object} token - `text` node.
	 * @return {string} - Raw markdown text.
	 */
	compilerPrototype.text = function (token) {
	    return this.encode(token.value, token);
	};

	/**
	 * Stringify escaped text.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.escape({
	 *     type: 'escape',
	 *     value: '\n'
	 *   });
	 *   // '\\\n'
	 *
	 * @param {Object} token - `escape` node.
	 * @return {string} - Markdown escape.
	 */
	compilerPrototype.escape = function (token) {
	    return '\\' + token.value;
	};

	/**
	 * Stringify a paragraph.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.paragraph({
	 *     type: 'paragraph',
	 *     children: [{
	 *       type: 'strong',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // '**bar**'
	 *
	 * @param {Object} token - `paragraph` node.
	 * @return {string} - Markdown paragraph.
	 */
	compilerPrototype.paragraph = function (token) {
	    return this.all(token).join(EMPTY);
	};

	/**
	 * Stringify a block quote.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.paragraph({
	 *     type: 'blockquote',
	 *     children: [{
	 *       type: 'paragraph',
	 *       children: [{
	 *         type: 'strong',
	 *         children: [{
	 *           type: 'text',
	 *           value: 'bar'
	 *         }]
	 *       }]
	 *     }]
	 *   });
	 *   // '> **bar**'
	 *
	 * @param {Object} token - `blockquote` node.
	 * @return {string} - Markdown block quote.
	 */
	compilerPrototype.blockquote = function (token) {
	    var indent = ANGLE_BRACKET_CLOSE + SPACE;

	    return indent + this.block(token).split(LINE).join(LINE + indent);
	};

	/**
	 * Stringify a list. See `Compiler#visitOrderedList()` and
	 * `Compiler#visitUnorderedList()` for internal working.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.visitUnorderedItems({
	 *     type: 'list',
	 *     ordered: false,
	 *     children: [{
	 *       type: 'listItem',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // '-   bar'
	 *
	 * @param {Object} token - `list` node.
	 * @return {string} - Markdown list.
	 */
	compilerPrototype.list = function (token) {
	    return this[ORDERED_MAP[token.ordered]](token);
	};

	/**
	 * Stringify a list item.
	 *
	 * Prefixes the content with a checked checkbox when
	 * `checked: true`:
	 *
	 *     [x] foo
	 *
	 * Prefixes the content with an unchecked checkbox when
	 * `checked: false`:
	 *
	 *     [ ] foo
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.listItem({
	 *     type: 'listItem',
	 *     checked: true,
	 *     children: [{
	 *       type: 'text',
	 *       value: 'bar'
	 *     }]
	 *   }, {
	 *     type: 'list',
	 *     ordered: false,
	 *     children: [{
	 *       type: 'listItem',
	 *       checked: true,
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   }, 0, '*');
	 *   '-   [x] bar'
	 *
	 * @param {Object} token - `listItem` node.
	 * @param {Object} parent - `list` node.
	 * @param {number} position - Index of `token` in `parent`.
	 * @param {string} bullet - Bullet to use.  This, and the
	 *   `listItemIndent` setting define the used indent.
	 * @return {string} - Markdown list item.
	 */
	compilerPrototype.listItem = function (token, parent, position, bullet) {
	    var self = this;
	    var style = self.options.listItemIndent;
	    var tokens = token.children;
	    var values = [];
	    var index = -1;
	    var length = tokens.length;
	    var loose = token.loose;
	    var value;
	    var indent;
	    var spacing;

	    while (++index < length) {
	        values[index] = self.visit(tokens[index], token);
	    }

	    value = CHECKBOX_MAP[token.checked] + values.join(loose ? BREAK : LINE);

	    if (style === LIST_ITEM_ONE || style === LIST_ITEM_MIXED && value.indexOf(LINE) === -1) {
	        indent = bullet.length + 1;
	        spacing = SPACE;
	    } else {
	        indent = Math.ceil((bullet.length + 1) / INDENT) * INDENT;
	        spacing = repeat(SPACE, indent - bullet.length);
	    }

	    value = bullet + spacing + pad(value, indent / INDENT).slice(indent);

	    if (loose && parent.children.length - 1 !== position) {
	        value += LINE;
	    }

	    return value;
	};

	/**
	 * Stringify inline code.
	 *
	 * Knows about internal ticks (`\``), and ensures one more
	 * tick is used to enclose the inline code:
	 *
	 *     ```foo ``bar`` baz```
	 *
	 * Even knows about inital and final ticks:
	 *
	 *     `` `foo ``
	 *     `` foo` ``
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.inlineCode({
	 *     type: 'inlineCode',
	 *     value: 'foo(); `bar`; baz()'
	 *   });
	 *   // '``foo(); `bar`; baz()``'
	 *
	 * @param {Object} token - `inlineCode` node.
	 * @return {string} - Markdown inline code.
	 */
	compilerPrototype.inlineCode = function (token) {
	    var value = token.value;
	    var ticks = repeat(TICK, getLongestRepetition(value, TICK) + 1);
	    var start = ticks;
	    var end = ticks;

	    if (value.charAt(0) === TICK) {
	        start += SPACE;
	    }

	    if (value.charAt(value.length - 1) === TICK) {
	        end = SPACE + end;
	    }

	    return start + token.value + end;
	};

	/**
	 * Stringify YAML front matter.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.yaml({
	 *     type: 'yaml',
	 *     value: 'foo: bar'
	 *   });
	 *   // '---\nfoo: bar\n---'
	 *
	 * @param {Object} token - `yaml` node.
	 * @return {string} - Markdown YAML document.
	 */
	compilerPrototype.yaml = function (token) {
	    var delimiter = repeat(DASH, YAML_FENCE_LENGTH);
	    var value = token.value ? LINE + token.value : EMPTY;

	    return delimiter + value + LINE + delimiter;
	};

	/**
	 * Stringify a code block.
	 *
	 * Creates indented code when:
	 *
	 * - No language tag exists;
	 * - Not in `fences: true` mode;
	 * - A non-empty value exists.
	 *
	 * Otherwise, GFM fenced code is created:
	 *
	 *     ```js
	 *     foo();
	 *     ```
	 *
	 * When in ``fence: `~` `` mode, uses tildes as fences:
	 *
	 *     ~~~js
	 *     foo();
	 *     ~~~
	 *
	 * Knows about internal fences (Note: GitHub/Kramdown does
	 * not support this):
	 *
	 *     ````javascript
	 *     ```markdown
	 *     foo
	 *     ```
	 *     ````
	 *
	 * Supports named entities in the language flag with
	 * `settings.encode` mode.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.code({
	 *     type: 'code',
	 *     lang: 'js',
	 *     value: 'fooo();'
	 *   });
	 *   // '```js\nfooo();\n```'
	 *
	 * @param {Object} token - `code` node.
	 * @return {string} - Markdown code block.
	 */
	compilerPrototype.code = function (token) {
	    var value = token.value;
	    var marker = this.options.fence;
	    var language = this.encode(token.lang || EMPTY, token);
	    var fence;

	    /*
	     * Probably pedantic.
	     */

	    if (!language && !this.options.fences && value) {
	        return pad(value, 1);
	    }

	    fence = getLongestRepetition(value, marker) + 1;

	    fence = repeat(marker, Math.max(fence, MINIMUM_CODE_FENCE_LENGTH));

	    return fence + language + LINE + value + LINE + fence;
	};

	/**
	 * Stringify HTML.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.html({
	 *     type: 'html',
	 *     value: '<div>bar</div>'
	 *   });
	 *   // '<div>bar</div>'
	 *
	 * @param {Object} token - `html` node.
	 * @return {string} - Markdown HTML.
	 */
	compilerPrototype.html = function (token) {
	    return token.value;
	};

	/**
	 * Stringify a horizontal rule.
	 *
	 * The character used is configurable by `rule`: (`'_'`)
	 *
	 *     ___
	 *
	 * The number of repititions is defined through
	 * `ruleRepetition`: (`6`)
	 *
	 *     ******
	 *
	 * Whether spaces delimit each character, is configured
	 * through `ruleSpaces`: (`true`)
	 *
	 *     * * *
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.horizontalRule({
	 *     type: 'horizontalRule'
	 *   });
	 *   // '***'
	 *
	 * @return {string} - Markdown rule.
	 */
	compilerPrototype.horizontalRule = function () {
	    var options = this.options;
	    var rule = repeat(options.rule, options.ruleRepetition);

	    if (options.ruleSpaces) {
	        rule = rule.split(EMPTY).join(SPACE);
	    }

	    return rule;
	};

	/**
	 * Stringify a strong.
	 *
	 * The marker used is configurable by `strong`, which
	 * defaults to an asterisk (`'*'`) but also accepts an
	 * underscore (`'_'`):
	 *
	 *     _foo_
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.strong({
	 *     type: 'strong',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '**Foo**'
	 *
	 * @param {Object} token - `strong` node.
	 * @return {string} - Markdown strong-emphasised text.
	 */
	compilerPrototype.strong = function (token) {
	    var marker = this.options.strong;

	    marker = marker + marker;

	    return marker + this.all(token).join(EMPTY) + marker;
	};

	/**
	 * Stringify an emphasis.
	 *
	 * The marker used is configurable by `emphasis`, which
	 * defaults to an underscore (`'_'`) but also accepts an
	 * asterisk (`'*'`):
	 *
	 *     *foo*
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.emphasis({
	 *     type: 'emphasis',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '_Foo_'
	 *
	 * @param {Object} token - `emphasis` node.
	 * @return {string} - Markdown emphasised text.
	 */
	compilerPrototype.emphasis = function (token) {
	    var marker = this.options.emphasis;

	    return marker + this.all(token).join(EMPTY) + marker;
	};

	/**
	 * Stringify a hard break.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.break({
	 *     type: 'break'
	 *   });
	 *   // '  \n'
	 *
	 * @return {string} - Hard markdown break.
	 */
	compilerPrototype['break'] = function () {
	    return SPACE + SPACE + LINE;
	};

	/**
	 * Stringify a delete.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.delete({
	 *     type: 'delete',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '~~Foo~~'
	 *
	 * @param {Object} token - `delete` node.
	 * @return {string} - Markdown strike-through.
	 */
	compilerPrototype['delete'] = function (token) {
	    return DOUBLE_TILDE + this.all(token).join(EMPTY) + DOUBLE_TILDE;
	};

	/**
	 * Stringify a link.
	 *
	 * When no title exists, the compiled `children` equal
	 * `href`, and `href` starts with a protocol, an auto
	 * link is created:
	 *
	 *     <http://example.com>
	 *
	 * Otherwise, is smart about enclosing `href` (see
	 * `encloseURI()`) and `title` (see `encloseTitle()`).
	 *
	 *    [foo](<foo at bar dot com> 'An "example" e-mail')
	 *
	 * Supports named entities in the `href` and `title` when
	 * in `settings.encode` mode.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.link({
	 *     type: 'link',
	 *     href: 'http://example.com',
	 *     title: 'Example Domain',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '[Foo](http://example.com "Example Domain")'
	 *
	 * @param {Object} token - `link` node.
	 * @return {string} - Markdown link.
	 */
	compilerPrototype.link = function (token) {
	    var self = this;
	    var url = self.encode(token.href, token);
	    var value = self.all(token).join(EMPTY);

	    if (token.title === null && PROTOCOL.test(url) && (url === value || url === MAILTO + value)) {
	        return encloseURI(url, true);
	    }

	    url = encloseURI(url);

	    if (token.title) {
	        url += SPACE + encloseTitle(self.encode(token.title, token));
	    }

	    value = SQUARE_BRACKET_OPEN + value + SQUARE_BRACKET_CLOSE;

	    value += PARENTHESIS_OPEN + url + PARENTHESIS_CLOSE;

	    return value;
	};

	/**
	 * Stringify a link label.
	 *
	 * Because link references are easily, mistakingly,
	 * created (for example, `[foo]`), reference nodes have
	 * an extra property depicting how it looked in the
	 * original document, so stringification can cause minimal
	 * changes.
	 *
	 * @example
	 *   label({
	 *     type: 'referenceImage',
	 *     referenceType: 'full',
	 *     identifier: 'foo'
	 *   });
	 *   // '[foo]'
	 *
	 *   label({
	 *     type: 'referenceImage',
	 *     referenceType: 'collapsed',
	 *     identifier: 'foo'
	 *   });
	 *   // '[]'
	 *
	 *   label({
	 *     type: 'referenceImage',
	 *     referenceType: 'shortcut',
	 *     identifier: 'foo'
	 *   });
	 *   // ''
	 *
	 * @param {Object} token - `linkReference` or
	 *   `imageReference` node.
	 * @return {string} - Markdown label reference.
	 */
	function label(token) {
	    var value = EMPTY;
	    var type = token.referenceType;

	    if (type === 'full') {
	        value = token.identifier;
	    }

	    if (type !== 'shortcut') {
	        value = SQUARE_BRACKET_OPEN + value + SQUARE_BRACKET_CLOSE;
	    }

	    return value;
	}

	/**
	 * Stringify a link reference.
	 *
	 * See `label()` on how reference labels are created.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.linkReference({
	 *     type: 'linkReference',
	 *     referenceType: 'collapsed',
	 *     identifier: 'foo',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '[Foo][]'
	 *
	 * @param {Object} token - `linkReference` node.
	 * @return {string} - Markdown link reference.
	 */
	compilerPrototype.linkReference = function (token) {
	    return SQUARE_BRACKET_OPEN + this.all(token).join(EMPTY) + SQUARE_BRACKET_CLOSE + label(token);
	};

	/**
	 * Stringify an image reference.
	 *
	 * See `label()` on how reference labels are created.
	 *
	 * Supports named entities in the `alt` when
	 * in `settings.encode` mode.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.imageReference({
	 *     type: 'imageReference',
	 *     referenceType: 'full',
	 *     identifier: 'foo',
	 *     alt: 'Foo'
	 *   });
	 *   // '![Foo][foo]'
	 *
	 * @param {Object} token - `imageReference` node.
	 * @return {string} - Markdown image reference.
	 */
	compilerPrototype.imageReference = function (token) {
	    var alt = this.encode(token.alt, token);

	    return EXCLAMATION_MARK + SQUARE_BRACKET_OPEN + alt + SQUARE_BRACKET_CLOSE + label(token);
	};

	/**
	 * Stringify a footnote reference.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.footnoteReference({
	 *     type: 'footnoteReference',
	 *     identifier: 'foo'
	 *   });
	 *   // '[^foo]'
	 *
	 * @param {Object} token - `footnoteReference` node.
	 * @return {string} - Markdown footnote reference.
	 */
	compilerPrototype.footnoteReference = function (token) {
	    return SQUARE_BRACKET_OPEN + CARET + token.identifier + SQUARE_BRACKET_CLOSE;
	};

	/**
	 * Stringify an link- or image definition.
	 *
	 * Is smart about enclosing `href` (see `encloseURI()`) and
	 * `title` (see `encloseTitle()`).
	 *
	 *    [foo]: <foo at bar dot com> 'An "example" e-mail'
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.definition({
	 *     type: 'definition',
	 *     link: 'http://example.com',
	 *     title: 'Example Domain',
	 *     identifier: 'foo'
	 *   });
	 *   // '[foo]: http://example.com "Example Domain"'
	 *
	 * @param {Object} token - `definition` node.
	 * @return {string} - Markdown link- or image definition.
	 */
	compilerPrototype.definition = function (token) {
	    var value = SQUARE_BRACKET_OPEN + token.identifier + SQUARE_BRACKET_CLOSE;
	    var url = encloseURI(token.link);

	    if (token.title) {
	        url += SPACE + encloseTitle(token.title);
	    }

	    return value + COLON + SPACE + url;
	};

	/**
	 * Stringify an image.
	 *
	 * Is smart about enclosing `href` (see `encloseURI()`) and
	 * `title` (see `encloseTitle()`).
	 *
	 *    ![foo](</fav icon.png> 'My "favourite" icon')
	 *
	 * Supports named entities in `src`, `alt`, and `title`
	 * when in `settings.encode` mode.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.image({
	 *     type: 'image',
	 *     href: 'http://example.png/favicon.png',
	 *     title: 'Example Icon',
	 *     alt: 'Foo'
	 *   });
	 *   // '![Foo](http://example.png/favicon.png "Example Icon")'
	 *
	 * @param {Object} token - `image` node.
	 * @return {string} - Markdown image.
	 */
	compilerPrototype.image = function (token) {
	    var encode = this.encode;
	    var url = encloseURI(encode(token.src, token));
	    var value;

	    if (token.title) {
	        url += SPACE + encloseTitle(encode(token.title, token));
	    }

	    value = EXCLAMATION_MARK + SQUARE_BRACKET_OPEN + encode(token.alt || EMPTY, token) + SQUARE_BRACKET_CLOSE;

	    value += PARENTHESIS_OPEN + url + PARENTHESIS_CLOSE;

	    return value;
	};

	/**
	 * Stringify a footnote.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.footnote({
	 *     type: 'footnote',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   });
	 *   // '[^Foo]'
	 *
	 * @param {Object} token - `footnote` node.
	 * @return {string} - Markdown footnote.
	 */
	compilerPrototype.footnote = function (token) {
	    return SQUARE_BRACKET_OPEN + CARET + this.all(token).join(EMPTY) + SQUARE_BRACKET_CLOSE;
	};

	/**
	 * Stringify a footnote definition.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.footnoteDefinition({
	 *     type: 'footnoteDefinition',
	 *     identifier: 'foo',
	 *     children: [{
	 *       type: 'paragraph',
	 *       children: [{
	 *         type: 'text',
	 *         value: 'bar'
	 *       }]
	 *     }]
	 *   });
	 *   // '[^foo]: bar'
	 *
	 * @param {Object} token - `footnoteDefinition` node.
	 * @return {string} - Markdown footnote definition.
	 */
	compilerPrototype.footnoteDefinition = function (token) {
	    var id = token.identifier.toLowerCase();

	    return SQUARE_BRACKET_OPEN + CARET + id + SQUARE_BRACKET_CLOSE + COLON + SPACE + this.all(token).join(BREAK + repeat(SPACE, INDENT));
	};

	/**
	 * Stringify table.
	 *
	 * Creates a fenced table by default, but not in
	 * `looseTable: true` mode:
	 *
	 *     Foo | Bar
	 *     :-: | ---
	 *     Baz | Qux
	 *
	 * NOTE: Be careful with `looseTable: true` mode, as a
	 * loose table inside an indented code block on GitHub
	 * renders as an actual table!
	 *
	 * Creates a spaces table by default, but not in
	 * `spacedTable: false`:
	 *
	 *     |Foo|Bar|
	 *     |:-:|---|
	 *     |Baz|Qux|
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.table({
	 *     type: 'table',
	 *     align: ['center', null],
	 *     children: [
	 *       {
	 *         type: 'tableHeader',
	 *         children: [
	 *           {
	 *             type: 'tableCell'
	 *             children: [{
	 *               type: 'text'
	 *               value: 'Foo'
	 *             }]
	 *           },
	 *           {
	 *             type: 'tableCell'
	 *             children: [{
	 *               type: 'text'
	 *               value: 'Bar'
	 *             }]
	 *           }
	 *         ]
	 *       },
	 *       {
	 *         type: 'tableRow',
	 *         children: [
	 *           {
	 *             type: 'tableCell'
	 *             children: [{
	 *               type: 'text'
	 *               value: 'Baz'
	 *             }]
	 *           },
	 *           {
	 *             type: 'tableCell'
	 *             children: [{
	 *               type: 'text'
	 *               value: 'Qux'
	 *             }]
	 *           }
	 *         ]
	 *       }
	 *     ]
	 *   });
	 *   // '| Foo | Bar |\n| :-: | --- |\n| Baz | Qux |'
	 *
	 * @param {Object} token - `table` node.
	 * @return {string} - Markdown table.
	 */
	compilerPrototype.table = function (token) {
	    var self = this;
	    var loose = self.options.looseTable;
	    var spaced = self.options.spacedTable;
	    var rows = token.children;
	    var index = rows.length;
	    var result = [];
	    var start;

	    while (index--) {
	        result[index] = self.all(rows[index]);
	    }

	    start = loose ? EMPTY : spaced ? PIPE + SPACE : PIPE;

	    return table(result, {
	        'align': token.align,
	        'start': start,
	        'end': start.split(EMPTY).reverse().join(EMPTY),
	        'delimiter': spaced ? SPACE + PIPE + SPACE : PIPE
	    });
	};

	/**
	 * Stringify a table cell.
	 *
	 * @example
	 *   var compiler = new Compiler();
	 *
	 *   compiler.tableCell({
	 *     type: 'tableCell',
	 *     children: [{
	 *       type: 'text'
	 *       value: 'Qux'
	 *     }]
	 *   });
	 *   // 'Qux'
	 *
	 * @param {Object} token - `tableCell` node.
	 * @return {string} - Markdown table cell.
	 */
	compilerPrototype.tableCell = function (token) {
	    return this.all(token).join(EMPTY);
	};

	/**
	 * Stringify an abstract syntax tree.
	 *
	 * @example
	 *   stringify({
	 *     type: 'strong',
	 *     children: [{
	 *       type: 'text',
	 *       value: 'Foo'
	 *     }]
	 *   }, new File());
	 *   // '**Foo**'
	 *
	 * @param {Object} ast - A node, most commonly, `root`.
	 * @param {File} file - Virtual file.
	 * @param {Object?} [options] - Passed to
	 *   `Compiler#setOptions()`.
	 * @return {string} - Markdown document.
	 */
	function stringify(ast, file, options) {
	    var CustomCompiler = this.Compiler || Compiler;

	    return new CustomCompiler(file, options).visit(ast);
	}

	/*
	 * Expose `Compiler` on `stringify`.
	 */

	stringify.Compiler = Compiler;

	/*
	 * Expose `stringify` on `module.exports`.
	 */

	module.exports = stringify;

/***/ },
/* 194 */
/***/ function(module, exports) {

	'use strict';

	/*
	 * Useful expressions.
	 */

	var EXPRESSION_DOT = /\./;
	var EXPRESSION_LAST_DOT = /\.[^.]*$/;

	/*
	 * Allowed alignment values.
	 */

	var LEFT = 'l';
	var RIGHT = 'r';
	var CENTER = 'c';
	var DOT = '.';
	var NULL = '';

	var ALLIGNMENT = [LEFT, RIGHT, CENTER, DOT, NULL];

	/*
	 * Characters.
	 */

	var COLON = ':';
	var DASH = '-';
	var PIPE = '|';
	var SPACE = ' ';
	var NEW_LINE = '\n';

	/**
	 * Get the length of `value`.
	 *
	 * @param {string} value
	 * @return {number}
	 */
	function lengthNoop(value) {
	    return String(value).length;
	}

	/**
	 * Get a string consisting of `length` `character`s.
	 *
	 * @param {number} length
	 * @param {string} [character=' ']
	 * @return {string}
	 */
	function pad(length, character) {
	    return Array(length + 1).join(character || SPACE);
	}

	/**
	 * Get the position of the last dot in `value`.
	 *
	 * @param {string} value
	 * @return {number}
	 */
	function dotindex(value) {
	    var match = EXPRESSION_LAST_DOT.exec(value);

	    return match ? match.index + 1 : value.length;
	}

	/**
	 * Create a table from a matrix of strings.
	 *
	 * @param {Array.<Array.<string>>} table
	 * @param {Object?} options
	 * @param {boolean?} [options.rule=true]
	 * @param {string?} [options.delimiter=" | "]
	 * @param {string?} [options.start="| "]
	 * @param {string?} [options.end=" |"]
	 * @param {Array.<string>?} options.align
	 * @param {function(string)?} options.stringLength
	 * @return {string} Pretty table
	 */
	function markdownTable(table, options) {
	    var settings = options || {};
	    var delimiter = settings.delimiter;
	    var start = settings.start;
	    var end = settings.end;
	    var alignment = settings.align;
	    var calculateStringLength = settings.stringLength || lengthNoop;
	    var cellCount = 0;
	    var rowIndex = -1;
	    var rowLength = table.length;
	    var sizes = [];
	    var align;
	    var rule;
	    var rows;
	    var row;
	    var cells;
	    var index;
	    var position;
	    var size;
	    var value;
	    var spacing;
	    var before;
	    var after;

	    alignment = alignment ? alignment.concat() : [];

	    if (delimiter === null || delimiter === undefined) {
	        delimiter = SPACE + PIPE + SPACE;
	    }

	    if (start === null || start === undefined) {
	        start = PIPE + SPACE;
	    }

	    if (end === null || end === undefined) {
	        end = SPACE + PIPE;
	    }

	    while (++rowIndex < rowLength) {
	        row = table[rowIndex];

	        index = -1;

	        if (row.length > cellCount) {
	            cellCount = row.length;
	        }

	        while (++index < cellCount) {
	            position = row[index] ? dotindex(row[index]) : null;

	            if (!sizes[index]) {
	                sizes[index] = 3;
	            }

	            if (position > sizes[index]) {
	                sizes[index] = position;
	            }
	        }
	    }

	    if (typeof alignment === 'string') {
	        alignment = pad(cellCount, alignment).split('');
	    }

	    /*
	     * Make sure only valid alignments are used.
	     */

	    index = -1;

	    while (++index < cellCount) {
	        align = alignment[index];

	        if (typeof align === 'string') {
	            align = align.charAt(0).toLowerCase();
	        }

	        if (ALLIGNMENT.indexOf(align) === -1) {
	            align = NULL;
	        }

	        alignment[index] = align;
	    }

	    rowIndex = -1;
	    rows = [];

	    while (++rowIndex < rowLength) {
	        row = table[rowIndex];

	        index = -1;
	        cells = [];

	        while (++index < cellCount) {
	            value = row[index];

	            if (value === null || value === undefined) {
	                value = '';
	            } else {
	                value = String(value);
	            }

	            if (alignment[index] !== DOT) {
	                cells[index] = value;
	            } else {
	                position = dotindex(value);

	                size = sizes[index] + (EXPRESSION_DOT.test(value) ? 0 : 1) - (calculateStringLength(value) - position);

	                cells[index] = value + pad(size - 1);
	            }
	        }

	        rows[rowIndex] = cells;
	    }

	    sizes = [];
	    rowIndex = -1;

	    while (++rowIndex < rowLength) {
	        cells = rows[rowIndex];

	        index = -1;

	        while (++index < cellCount) {
	            value = cells[index];

	            if (!sizes[index]) {
	                sizes[index] = 3;
	            }

	            size = calculateStringLength(value);

	            if (size > sizes[index]) {
	                sizes[index] = size;
	            }
	        }
	    }

	    rowIndex = -1;

	    while (++rowIndex < rowLength) {
	        cells = rows[rowIndex];

	        index = -1;

	        while (++index < cellCount) {
	            value = cells[index];

	            position = sizes[index] - (calculateStringLength(value) || 0);
	            spacing = pad(position);

	            if (alignment[index] === RIGHT || alignment[index] === DOT) {
	                value = spacing + value;
	            } else if (alignment[index] !== CENTER) {
	                value = value + spacing;
	            } else {
	                position = position / 2;

	                if (position % 1 === 0) {
	                    before = position;
	                    after = position;
	                } else {
	                    before = position + 0.5;
	                    after = position - 0.5;
	                }

	                value = pad(before) + value + pad(after);
	            }

	            cells[index] = value;
	        }

	        rows[rowIndex] = cells.join(delimiter);
	    }

	    if (settings.rule !== false) {
	        index = -1;
	        rule = [];

	        while (++index < cellCount) {
	            align = alignment[index];

	            /*
	             * When `align` is left, don't add colons.
	             */

	            value = align === RIGHT || align === NULL ? DASH : COLON;
	            value += pad(sizes[index] - 2, DASH);
	            value += align !== LEFT && align !== NULL ? COLON : DASH;

	            rule[index] = value;
	        }

	        rows.splice(1, 0, rule.join(delimiter));
	    }

	    return start + rows.join(end + NEW_LINE + start) + end;
	}

	/*
	 * Expose `markdownTable`.
	 */

	module.exports = markdownTable;

/***/ },
/* 195 */
/***/ function(module, exports) {

	/**
	 * @author Titus Wormer
	 * @copyright 2015 Titus Wormer. All rights reserved.
	 * @module File
	 * @fileoverview Virtual file format to attach additional
	 *   information related to the processed input.  Similar
	 *   to`wearefractal/vinyl`.  Additionally, File can be
	 *   passed directly to an ESLint formatter to visualise
	 *   warnings and errors relating to a file.
	 */

	'use strict';

	/**
	 * ESLint's formatter API expects `filePath` to be a
	 * string.  This hack supports invocation as well as
	 * implicit coercion.
	 *
	 * @example
	 *   var file = new File();
	 *   filePath = filePathFactory(file);
	 *
	 * @param {File} file
	 * @return {Function}
	 */
	function filePathFactory(file) {
	    /**
	     * Get the location of `file`.
	     *
	     * Returns empty string when without `filename`.
	     *
	     * @example
	     *   var file = new File({
	     *     'directory': '~',
	     *     'filename': 'example',
	     *     'extension': 'markdown'
	     *   });
	     *
	     *   String(file.filePath); // ~/example.markdown
	     *   file.filePath() // ~/example.markdown
	     *
	     * @property {Function} toString - Itself.
	     * @return {string}
	     */
	    function filePath() {
	        var directory;

	        if (file.filename) {
	            directory = file.directory;

	            if (directory.charAt(directory.length - 1) === '/') {
	                directory = directory.slice(0, -1);
	            }

	            if (directory === '.') {
	                directory = '';
	            }

	            return (directory ? directory + '/' : '') + file.filename + (file.extension ? '.' + file.extension : '');
	        }

	        return '';
	    }

	    filePath.toString = filePath;

	    return filePath;
	}

	/**
	 * Construct a new file.
	 *
	 * @example
	 *   var file = new File({
	 *     'directory': '~',
	 *     'filename': 'example',
	 *     'extension': 'markdown',
	 *     'contents': 'Foo *bar* baz'
	 *   });
	 *
	 *   file === File(file) // true
	 *   file === new File(file) // true
	 *   File('foo') instanceof File // true
	 *
	 * @constructor
	 * @class {File}
	 * @param {Object|File|string} [options] - either an
	 *   options object, or the value of `contents` (both
	 *   optional).  When a `file` is passed in, it's
	 *   immediately returned.
	 */
	function File(options) {
	    var self = this;

	    if (!(self instanceof File)) {
	        return new File(options);
	    }

	    if (options instanceof File) {
	        return options;
	    }

	    if (!options) {
	        options = {};
	    } else if (typeof options === 'string') {
	        options = {
	            'contents': options
	        };
	    }

	    self.filename = options.filename || null;
	    self.contents = options.contents || '';

	    self.directory = options.directory === undefined ? '' : options.directory;

	    self.extension = options.extension === undefined ? 'md' : options.extension;

	    self.messages = [];

	    /*
	     * Make sure eslint’s formatters stringify `filePath`
	     * properly.
	     */

	    self.filePath = filePathFactory(self);
	}

	/**
	 * Move a file by passing a new directory, filename,
	 * and extension.  When these are not given, the default
	 * values are kept.
	 *
	 * @example
	 *   var file = new File({
	 *     'directory': '~',
	 *     'filename': 'example',
	 *     'extension': 'markdown',
	 *     'contents': 'Foo *bar* baz'
	 *   });
	 *
	 *   file.move({'directory': '/var/www'});
	 *   file.filePath(); // '/var/www/example.markdown'
	 *
	 *   file.move({'extension': 'md'});
	 *   file.filePath(); // '/var/www/example.md'
	 *
	 * @this {File}
	 * @param {Object} options
	 */
	function move(options) {
	    var self = this;

	    if (!options) {
	        options = {};
	    }

	    self.directory = options.directory || self.directory || '';
	    self.filename = options.filename || self.filename || null;
	    self.extension = options.extension || self.extension || 'md';
	}

	/**
	 * Stringify a position.
	 *
	 * @example
	 *   stringify({'line': 1, 'column': 3}) // '1:3'
	 *   stringify({'line': 1}) // '1:1'
	 *   stringify({'column': 3}) // '1:3'
	 *   stringify() // '1:1'
	 *
	 * @param {Object?} [position] - Single position, like
	 *   those available at `node.position.start`.
	 * @return {string}
	 */
	function stringify(position) {
	    if (!position) {
	        position = {};
	    }

	    return (position.line || 1) + ':' + (position.column || 1);
	}

	/**
	 * Warn.
	 *
	 * Creates an exception (see `File#exception()`),
	 * sets `fatal: false`, and adds it to the file's
	 * `messages` list.
	 *
	 * @example
	 *   var file = new File();
	 *   file.warn('Something went wrong');
	 *
	 * @this {File}
	 * @param {string|Error} reason - Reason for warning.
	 * @param {Node|Location|Position} [position] - Location
	 *   of warning in file.
	 * @return {Error}
	 */
	function warn(reason, position) {
	    var err = this.exception(reason, position);

	    err.fatal = false;

	    this.messages.push(err);

	    return err;
	}

	/**
	 * Fail.
	 *
	 * Creates an exception (see `File#exception()`),
	 * sets `fatal: true`, adds it to the file's
	 * `messages` list.  If `quiet` is not true,
	 * throws the error.
	 *
	 * @example
	 *   var file = new File();
	 *   file.fail('Something went wrong'); // throws
	 *
	 * @this {File}
	 * @throws {Error} - When not `quiet: true`.
	 * @param {string|Error} reason - Reason for failure.
	 * @param {Node|Location|Position} [position] - Location
	 *   of failure in file.
	 * @return {Error} - Unless thrown, of course.
	 */
	function fail(reason, position) {
	    var err = this.exception(reason, position);

	    err.fatal = true;

	    this.messages.push(err);

	    if (!this.quiet) {
	        throw err;
	    }

	    return err;
	}

	/**
	 * Create a pretty exception with `reason` at `position`.
	 * When an error is passed in as `reason`, copies the
	 * stack.  This does not add a message to `messages`.
	 *
	 * @example
	 *   var file = new File();
	 *   var err = file.exception('Something went wrong');
	 *
	 * @this {File}
	 * @param {string|Error} reason - Reason for message.
	 * @param {Node|Location|Position} [position] - Location
	 *   of message in file.
	 * @return {Error} - An object including file information,
	 *   line and column indices.
	 */
	function exception(reason, position) {
	    var file = this.filePath();
	    var message = reason.message || reason;
	    var location;
	    var err;

	    /*
	     * Node / location / position.
	     */

	    if (position && position.position) {
	        position = position.position;
	    }

	    if (position && position.start) {
	        location = stringify(position.start) + '-' + stringify(position.end);
	        position = position.start;
	    } else {
	        location = stringify(position);
	    }

	    err = new Error(message);

	    err.name = (file ? file + ':' : '') + location;
	    err.file = file;
	    err.reason = message;
	    err.line = position ? position.line : null;
	    err.column = position ? position.column : null;

	    if (reason.stack) {
	        err.stack = reason.stack;
	    }

	    return err;
	}

	/**
	 * Check if `file` has a fatal message.
	 *
	 * @example
	 *   var file = new File();
	 *   file.quiet = true;
	 *   file.hasFailed; // false
	 *
	 *   file.fail('Something went wrong');
	 *   file.hasFailed; // true
	 *
	 * @this {File}
	 * @return {boolean}
	 */
	function hasFailed() {
	    var messages = this.messages;
	    var index = -1;
	    var length = messages.length;

	    while (++index < length) {
	        if (messages[index].fatal) {
	            return true;
	        }
	    }

	    return false;
	}

	/**
	 * Create a string representation of `file`.
	 *
	 * @example
	 *   var file = new File('Foo');
	 *   String(file); // 'Foo'
	 *
	 * @this {File}
	 * @return {string} - value at the `contents` property
	 *   in context.
	 */
	function toString() {
	    return this.contents;
	}

	/*
	 * Methods.
	 */

	File.prototype.move = move;
	File.prototype.exception = exception;
	File.prototype.toString = toString;
	File.prototype.warn = warn;
	File.prototype.fail = fail;
	File.prototype.hasFailed = hasFailed;

	/*
	 * Expose.
	 */

	module.exports = File;

/***/ },
/* 196 */
/***/ function(module, exports) {

	var ALLOWED_TAG_NAMES, appendFootnoteDefinitionCollection, applyFootnoteNumber, convertPreToRawHTML, convertScatteredPreToRawHTML, createNodeFromHTMLFragment, decomposeHTMLNode, decomposeHTMLNodes, decomposeHTMLString, defineFootnoteNumber, endIndexFromPosition, foldHTMLNodes, isVoidElement, preprocess, removeDefinitions, sanitizeTag, startIndexFromPosition, wrapHTMLNodeInParagraph,
	  indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };

	preprocess = function(root, sourceText, options) {
	  var defs, mapping;
	  convertPreToRawHTML(root);
	  convertScatteredPreToRawHTML(root, sourceText);
	  root.children = decomposeHTMLNodes(root.children);
	  root.children = foldHTMLNodes(root.children);
	  if (options.footnotes) {
	    mapping = defineFootnoteNumber(root).mapping;
	    applyFootnoteNumber(root, mapping);
	  }
	  defs = removeDefinitions(root);
	  if (options.footnotes) {
	    appendFootnoteDefinitionCollection(root, defs);
	  }
	  root = wrapHTMLNodeInParagraph(root);
	  root = sanitizeTag(root);
	  return [root, defs];
	};

	defineFootnoteNumber = function(node, num, mapping) {
	  var child, id, j, len1, ref;
	  if (num == null) {
	    num = 1;
	  }
	  if (mapping == null) {
	    mapping = {};
	  }
	  ref = node.children;
	  for (j = 0, len1 = ref.length; j < len1; j++) {
	    child = ref[j];
	    if (child.type === 'footnoteReference') {
	      id = child.identifier;
	      if (mapping[id] == null) {
	        mapping[id] = num;
	        num += 1;
	      }
	      child.footnoteNumber = mapping[id];
	    }
	    if (child.children) {
	      num = defineFootnoteNumber(child, num, mapping).maxNumber;
	    }
	  }
	  return {
	    mapping: mapping,
	    maxNumber: num
	  };
	};

	applyFootnoteNumber = function(node, mapping) {
	  var child, id, isFootnoteDefLike, j, len1, ref, results;
	  if (node.children == null) {
	    return;
	  }
	  ref = node.children;
	  results = [];
	  for (j = 0, len1 = ref.length; j < len1; j++) {
	    child = ref[j];
	    isFootnoteDefLike = child.type === 'definition' && /^[^]/.test(child.identifier);
	    if (child.type === 'footnoteDefinition' || isFootnoteDefLike) {
	      id = isFootnoteDefLike ? child.identifier.slice(1) : child.identifier;
	      child.footnoteNumber = mapping[id] || 0;
	    }
	    results.push(applyFootnoteNumber(child, mapping));
	  }
	  return results;
	};

	appendFootnoteDefinitionCollection = function(node, defs) {
	  var def, footnoteDefs;
	  footnoteDefs = (function() {
	    var j, len1, results;
	    results = [];
	    for (j = 0, len1 = defs.length; j < len1; j++) {
	      def = defs[j];
	      if ((def.footnoteNumber != null) && def.footnoteNumber > 0) {
	        results.push(def);
	      }
	    }
	    return results;
	  })();
	  footnoteDefs.sort(function(a, b) {
	    return a.footnoteNumber - b.footnoteNumber;
	  });
	  if (footnoteDefs.length > 0) {
	    return node.children.push({
	      type: 'footnoteDefinitionCollection',
	      children: footnoteDefs
	    });
	  }
	};

	removeDefinitions = function(node) {
	  var child, childDefs, children, defs, j, len1, ref, ref1;
	  if (node.children == null) {
	    return [];
	  }
	  children = [];
	  defs = [];
	  ref = node.children;
	  for (j = 0, len1 = ref.length; j < len1; j++) {
	    child = ref[j];
	    if ((ref1 = child.type) === 'definition' || ref1 === 'footnoteDefinition') {
	      defs.push(child);
	    } else {
	      childDefs = removeDefinitions(child);
	      Array.prototype.push.apply(defs, childDefs);
	      children.push(child);
	    }
	  }
	  node.children = children;
	  return defs;
	};

	convertPreToRawHTML = function(root) {
	  var j, len1, node, ref, results;
	  ref = root.children;
	  results = [];
	  for (j = 0, len1 = ref.length; j < len1; j++) {
	    node = ref[j];
	    if (node.type === 'html' && /^<pre[ >][^]*<\/pre>$/i.test(node.value)) {
	      results.push(node.subtype = 'raw');
	    } else {
	      results.push(void 0);
	    }
	  }
	  return results;
	};

	convertScatteredPreToRawHTML = function(root, sourceText) {
	  var endPreNode, i, isEnd, isStart, j, k, len1, len2, node, offset, paraLastNode, pre, preTexts, rawHTML, rawHTMLNode, ref, results, sliceEnd, sliceStart, sourceLines, start, startParaIndex, startPreNode;
	  preTexts = [];
	  startPreNode = null;
	  startParaIndex = null;
	  sourceLines = null;
	  ref = root.children;
	  for (i = j = 0, len1 = ref.length; j < len1; i = ++j) {
	    node = ref[i];
	    isStart = node.type === 'html' && /^<pre[ >]/i.test(node.value);
	    if (isStart) {
	      startPreNode = node;
	      startParaIndex = i;
	    }
	    paraLastNode = null;
	    isEnd = ((startPreNode != null) && node.type === 'html' && /<\/pre>$/i.test(node.value)) || ((startPreNode != null) && node.type === 'paragraph' && (paraLastNode = node.children[node.children.length - 1]) && paraLastNode.type === 'html' && /<\/pre>$/i.test(paraLastNode.value));
	    if (isEnd) {
	      endPreNode = paraLastNode != null ? paraLastNode : node;
	      if (sourceLines == null) {
	        sourceLines = sourceText.split(/^/m);
	      }
	      sliceStart = startIndexFromPosition(startPreNode.position, sourceLines);
	      sliceEnd = endIndexFromPosition(endPreNode.position, sourceLines);
	      rawHTML = sourceText.slice(sliceStart, sliceEnd);
	      preTexts.push({
	        startParaIndex: startParaIndex,
	        paraCount: i - startParaIndex + 1,
	        rawHTML: rawHTML
	      });
	      startPreNode = null;
	      startParaIndex = null;
	    }
	  }
	  offset = 0;
	  results = [];
	  for (k = 0, len2 = preTexts.length; k < len2; k++) {
	    pre = preTexts[k];
	    rawHTMLNode = {
	      type: 'html',
	      subtype: 'raw',
	      value: pre.rawHTML
	    };
	    start = pre.startParaIndex - offset;
	    root.children.splice(start, pre.paraCount, rawHTMLNode);
	    results.push(offset = pre.paraCount - 1);
	  }
	  return results;
	};

	startIndexFromPosition = function(pos, lines) {
	  var i, index, j, ref;
	  index = 0;
	  for (i = j = 0, ref = pos.start.line - 1; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
	    index += lines[i].length;
	  }
	  index += pos.start.column - 1;
	  return index;
	};

	endIndexFromPosition = function(pos, lines) {
	  var i, index, j, ref;
	  index = 0;
	  for (i = j = 0, ref = pos.end.line - 1; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
	    index += lines[i].length;
	  }
	  index += pos.end.column - 1;
	  return index;
	};

	foldHTMLNodes = function(nodes) {
	  var children, folded, index, j, k, len1, len2, node, pNode, processedNodes, startTag, startTagIndex;
	  processedNodes = [];
	  for (j = 0, len1 = nodes.length; j < len1; j++) {
	    node = nodes[j];
	    if (node.subtype === 'end') {
	      startTagIndex = null;
	      for (index = k = 0, len2 = processedNodes.length; k < len2; index = ++k) {
	        pNode = processedNodes[index];
	        if (pNode.subtype === 'start' && pNode.tagName === node.tagName) {
	          startTagIndex = index;
	        }
	      }
	      if (startTagIndex == null) {
	        processedNodes.push(node);
	        continue;
	      }
	      startTag = processedNodes[startTagIndex];
	      children = processedNodes.splice(startTagIndex).slice(1);
	      folded = {
	        type: 'html',
	        subtype: 'folded',
	        tagName: startTag.tagName,
	        startTag: startTag,
	        endTag: node,
	        children: children
	      };
	      processedNodes.push(folded);
	    } else {
	      if (node.children != null) {
	        node.children = foldHTMLNodes(node.children);
	      }
	      processedNodes.push(node);
	    }
	  }
	  return processedNodes;
	};

	decomposeHTMLNodes = function(nodes) {
	  var fragmentNodes, j, len1, node, processedNodes;
	  processedNodes = [];
	  for (j = 0, len1 = nodes.length; j < len1; j++) {
	    node = nodes[j];
	    if (node.type === 'html' && node.subtype === 'raw') {
	      processedNodes.push(node);
	    } else if (node.type === 'html') {
	      fragmentNodes = decomposeHTMLNode(node);
	      if (fragmentNodes != null) {
	        processedNodes.push.apply(processedNodes, fragmentNodes);
	      } else {
	        node.subtype = 'malformed';
	        processedNodes.push(node);
	      }
	    } else {
	      if (node.children != null) {
	        node.children = decomposeHTMLNodes(node.children);
	      }
	      processedNodes.push(node);
	    }
	  }
	  return processedNodes;
	};

	decomposeHTMLNode = function(node) {
	  var fragments, value;
	  value = node.value;
	  if (node.position.start.line === node.position.end.line) {
	    value = value.replace(/\n\n/, '');
	  }
	  fragments = decomposeHTMLString(value);
	  return fragments != null ? fragments.map(createNodeFromHTMLFragment) : void 0;
	};

	decomposeHTMLString = function(str) {
	  var matches, sumLength;
	  if (str === '') {
	    return null;
	  }
	  matches = str.match(/<[^>]*>|[^<>]+/g);
	  sumLength = matches.reduce((function(len, s) {
	    return len + s.length;
	  }), 0);
	  if (sumLength !== str.length) {
	    return null;
	  } else {
	    return matches;
	  }
	};

	createNodeFromHTMLFragment = function(str) {
	  var j, name, ref, ref1, slash, subtype;
	  if (/^[^<]/.test(str)) {
	    return {
	      type: 'text',
	      value: str
	    };
	  }
	  ref1 = (ref = /^<(\/?)([0-9A-Z]+)/i.exec(str)) != null ? ref : [], j = ref1.length - 2, slash = ref1[j++], name = ref1[j++];
	  subtype = name == null ? 'special' : slash === '/' ? 'end' : isVoidElement(name) ? 'void' : 'start';
	  return {
	    type: 'html',
	    subtype: subtype,
	    tagName: name,
	    value: str
	  };
	};

	isVoidElement = function(elementName) {
	  var voidElementNames;
	  voidElementNames = ['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr'];
	  return voidElementNames.indexOf(elementName) !== -1;
	};

	wrapHTMLNodeInParagraph = function(root) {
	  var child, children, j, len1, ref;
	  children = [];
	  ref = root.children;
	  for (j = 0, len1 = ref.length; j < len1; j++) {
	    child = ref[j];
	    if (child.type === 'html') {
	      children.push({
	        type: 'paragraph',
	        children: [child]
	      });
	    } else {
	      children.push(child);
	    }
	  }
	  root.children = children;
	  return root;
	};

	ALLOWED_TAG_NAMES = ['a', 'abbr', 'b', 'br', 'cite', 'code', 'del', 'dfn', 'em', 'i', 'img', 'input', 'ins', 'kbd', 'mark', 'ruby', 'rp', 'rt', 'q', 's', 'samp', 'small', 'span', 'strong', 'sub', 'sup', 'u', 'wbr'];

	sanitizeTag = function(node) {
	  var child, children, j, len1, ref, ref1;
	  if (node.children == null) {
	    return node;
	  }
	  children = [];
	  ref = node.children;
	  for (j = 0, len1 = ref.length; j < len1; j++) {
	    child = ref[j];
	    if (child.subtype === 'folded' && (ref1 = child.tagName, indexOf.call(ALLOWED_TAG_NAMES, ref1) < 0)) {
	      children.push(child.startTag);
	      Array.prototype.push.apply(children, sanitizeTag(child).children);
	      children.push(child.endTag);
	    } else {
	      children.push(sanitizeTag(child));
	    }
	  }
	  node.children = children;
	  return node;
	};

	module.exports = preprocess;


/***/ },
/* 197 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	module.exports = __webpack_require__(198);

/***/ },
/* 198 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	var hljs = __webpack_require__(199);
	var React = __webpack_require__(18);

	var Highlight = React.createClass({
	  displayName: 'Highlight',

	  getDefaultProps: function getDefaultProps() {
	    return {
	      innerHTML: false,
	      className: ''
	    };
	  },
	  componentDidMount: function componentDidMount() {
	    this.highlightCode();
	  },
	  componentDidUpdate: function componentDidUpdate() {
	    this.highlightCode();
	  },
	  highlightCode: function highlightCode() {
	    var domNode = this.getDOMNode();
	    var nodes = domNode.querySelectorAll('pre code');
	    if (nodes.length > 0) {
	      for (var i = 0; i < nodes.length; i = i + 1) {
	        hljs.highlightBlock(nodes[i]);
	      }
	    }
	  },
	  render: function render() {
	    if (this.props.innerHTML) {
	      return React.createElement('div', { dangerouslySetInnerHTML: { __html: this.props.children }, className: this.props.className || null });
	    } else {
	      return React.createElement('pre', null, React.createElement('code', { className: this.props.className }, this.props.children));
	    }
	  }
	});

	module.exports = Highlight;

/***/ },
/* 199 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	var hljs = __webpack_require__(200);

	hljs.registerLanguage('1c', __webpack_require__(201));
	hljs.registerLanguage('actionscript', __webpack_require__(202));
	hljs.registerLanguage('apache', __webpack_require__(203));
	hljs.registerLanguage('applescript', __webpack_require__(204));
	hljs.registerLanguage('armasm', __webpack_require__(205));
	hljs.registerLanguage('xml', __webpack_require__(206));
	hljs.registerLanguage('asciidoc', __webpack_require__(207));
	hljs.registerLanguage('aspectj', __webpack_require__(208));
	hljs.registerLanguage('autohotkey', __webpack_require__(209));
	hljs.registerLanguage('autoit', __webpack_require__(210));
	hljs.registerLanguage('avrasm', __webpack_require__(211));
	hljs.registerLanguage('axapta', __webpack_require__(212));
	hljs.registerLanguage('bash', __webpack_require__(213));
	hljs.registerLanguage('brainfuck', __webpack_require__(214));
	hljs.registerLanguage('cal', __webpack_require__(215));
	hljs.registerLanguage('capnproto', __webpack_require__(216));
	hljs.registerLanguage('ceylon', __webpack_require__(217));
	hljs.registerLanguage('clojure', __webpack_require__(218));
	hljs.registerLanguage('clojure-repl', __webpack_require__(219));
	hljs.registerLanguage('cmake', __webpack_require__(220));
	hljs.registerLanguage('coffeescript', __webpack_require__(221));
	hljs.registerLanguage('cpp', __webpack_require__(222));
	hljs.registerLanguage('cs', __webpack_require__(223));
	hljs.registerLanguage('css', __webpack_require__(224));
	hljs.registerLanguage('d', __webpack_require__(225));
	hljs.registerLanguage('markdown', __webpack_require__(226));
	hljs.registerLanguage('dart', __webpack_require__(227));
	hljs.registerLanguage('delphi', __webpack_require__(228));
	hljs.registerLanguage('diff', __webpack_require__(229));
	hljs.registerLanguage('django', __webpack_require__(230));
	hljs.registerLanguage('dns', __webpack_require__(231));
	hljs.registerLanguage('dockerfile', __webpack_require__(232));
	hljs.registerLanguage('dos', __webpack_require__(233));
	hljs.registerLanguage('dust', __webpack_require__(234));
	hljs.registerLanguage('elixir', __webpack_require__(235));
	hljs.registerLanguage('elm', __webpack_require__(236));
	hljs.registerLanguage('ruby', __webpack_require__(237));
	hljs.registerLanguage('erb', __webpack_require__(238));
	hljs.registerLanguage('erlang-repl', __webpack_require__(239));
	hljs.registerLanguage('erlang', __webpack_require__(240));
	hljs.registerLanguage('fix', __webpack_require__(241));
	hljs.registerLanguage('fortran', __webpack_require__(242));
	hljs.registerLanguage('fsharp', __webpack_require__(243));
	hljs.registerLanguage('gcode', __webpack_require__(244));
	hljs.registerLanguage('gherkin', __webpack_require__(245));
	hljs.registerLanguage('glsl', __webpack_require__(246));
	hljs.registerLanguage('go', __webpack_require__(247));
	hljs.registerLanguage('gradle', __webpack_require__(248));
	hljs.registerLanguage('groovy', __webpack_require__(249));
	hljs.registerLanguage('haml', __webpack_require__(250));
	hljs.registerLanguage('handlebars', __webpack_require__(251));
	hljs.registerLanguage('haskell', __webpack_require__(252));
	hljs.registerLanguage('haxe', __webpack_require__(253));
	hljs.registerLanguage('http', __webpack_require__(254));
	hljs.registerLanguage('inform7', __webpack_require__(255));
	hljs.registerLanguage('ini', __webpack_require__(256));
	hljs.registerLanguage('java', __webpack_require__(257));
	hljs.registerLanguage('javascript', __webpack_require__(258));
	hljs.registerLanguage('json', __webpack_require__(259));
	hljs.registerLanguage('julia', __webpack_require__(260));
	hljs.registerLanguage('kotlin', __webpack_require__(261));
	hljs.registerLanguage('lasso', __webpack_require__(262));
	hljs.registerLanguage('less', __webpack_require__(263));
	hljs.registerLanguage('lisp', __webpack_require__(264));
	hljs.registerLanguage('livecodeserver', __webpack_require__(265));
	hljs.registerLanguage('livescript', __webpack_require__(266));
	hljs.registerLanguage('lua', __webpack_require__(267));
	hljs.registerLanguage('makefile', __webpack_require__(268));
	hljs.registerLanguage('mathematica', __webpack_require__(269));
	hljs.registerLanguage('matlab', __webpack_require__(270));
	hljs.registerLanguage('mel', __webpack_require__(271));
	hljs.registerLanguage('mercury', __webpack_require__(272));
	hljs.registerLanguage('mizar', __webpack_require__(273));
	hljs.registerLanguage('perl', __webpack_require__(274));
	hljs.registerLanguage('mojolicious', __webpack_require__(275));
	hljs.registerLanguage('monkey', __webpack_require__(276));
	hljs.registerLanguage('nginx', __webpack_require__(277));
	hljs.registerLanguage('nimrod', __webpack_require__(278));
	hljs.registerLanguage('nix', __webpack_require__(279));
	hljs.registerLanguage('nsis', __webpack_require__(280));
	hljs.registerLanguage('objectivec', __webpack_require__(281));
	hljs.registerLanguage('ocaml', __webpack_require__(282));
	hljs.registerLanguage('openscad', __webpack_require__(283));
	hljs.registerLanguage('oxygene', __webpack_require__(284));
	hljs.registerLanguage('parser3', __webpack_require__(285));
	hljs.registerLanguage('pf', __webpack_require__(286));
	hljs.registerLanguage('php', __webpack_require__(287));
	hljs.registerLanguage('powershell', __webpack_require__(288));
	hljs.registerLanguage('processing', __webpack_require__(289));
	hljs.registerLanguage('profile', __webpack_require__(290));
	hljs.registerLanguage('prolog', __webpack_require__(291));
	hljs.registerLanguage('protobuf', __webpack_require__(292));
	hljs.registerLanguage('puppet', __webpack_require__(293));
	hljs.registerLanguage('python', __webpack_require__(294));
	hljs.registerLanguage('q', __webpack_require__(295));
	hljs.registerLanguage('r', __webpack_require__(296));
	hljs.registerLanguage('rib', __webpack_require__(297));
	hljs.registerLanguage('roboconf', __webpack_require__(298));
	hljs.registerLanguage('rsl', __webpack_require__(299));
	hljs.registerLanguage('ruleslanguage', __webpack_require__(300));
	hljs.registerLanguage('rust', __webpack_require__(301));
	hljs.registerLanguage('scala', __webpack_require__(302));
	hljs.registerLanguage('scheme', __webpack_require__(303));
	hljs.registerLanguage('scilab', __webpack_require__(304));
	hljs.registerLanguage('scss', __webpack_require__(305));
	hljs.registerLanguage('smali', __webpack_require__(306));
	hljs.registerLanguage('smalltalk', __webpack_require__(307));
	hljs.registerLanguage('sml', __webpack_require__(308));
	hljs.registerLanguage('sql', __webpack_require__(309));
	hljs.registerLanguage('stata', __webpack_require__(310));
	hljs.registerLanguage('step21', __webpack_require__(311));
	hljs.registerLanguage('stylus', __webpack_require__(312));
	hljs.registerLanguage('swift', __webpack_require__(313));
	hljs.registerLanguage('tcl', __webpack_require__(314));
	hljs.registerLanguage('tex', __webpack_require__(315));
	hljs.registerLanguage('thrift', __webpack_require__(316));
	hljs.registerLanguage('tp', __webpack_require__(317));
	hljs.registerLanguage('twig', __webpack_require__(318));
	hljs.registerLanguage('typescript', __webpack_require__(319));
	hljs.registerLanguage('vala', __webpack_require__(320));
	hljs.registerLanguage('vbnet', __webpack_require__(321));
	hljs.registerLanguage('vbscript', __webpack_require__(322));
	hljs.registerLanguage('vbscript-html', __webpack_require__(323));
	hljs.registerLanguage('verilog', __webpack_require__(324));
	hljs.registerLanguage('vhdl', __webpack_require__(325));
	hljs.registerLanguage('vim', __webpack_require__(326));
	hljs.registerLanguage('x86asm', __webpack_require__(327));
	hljs.registerLanguage('xl', __webpack_require__(328));
	hljs.registerLanguage('xquery', __webpack_require__(329));
	hljs.registerLanguage('zephir', __webpack_require__(330));

	module.exports = hljs;

/***/ },
/* 200 */
/***/ function(module, exports, __webpack_require__) {

	/*
	Syntax highlighting with language autodetection.
	https://highlightjs.org/
	*/

	'use strict';

	(function (factory) {

	  // Setup highlight.js for different environments. First is Node.js or
	  // CommonJS.
	  if (true) {
	    factory(exports);
	  } else {
	    // Export hljs globally even when using AMD for cases when this script
	    // is loaded with others that may still expect a global hljs.
	    window.hljs = factory({});

	    // Finally register the global hljs with AMD.
	    if (typeof define === 'function' && define.amd) {
	      define('hljs', [], function () {
	        return window.hljs;
	      });
	    }
	  }
	})(function (hljs) {

	  /* Utility functions */

	  function escape(value) {
	    return value.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');
	  }

	  function tag(node) {
	    return node.nodeName.toLowerCase();
	  }

	  function testRe(re, lexeme) {
	    var match = re && re.exec(lexeme);
	    return match && match.index == 0;
	  }

	  function isNotHighlighted(language) {
	    return (/no-?highlight|plain|text/.test(language)
	    );
	  }

	  function blockLanguage(block) {
	    var i,
	        match,
	        length,
	        classes = block.className + ' ';

	    classes += block.parentNode ? block.parentNode.className : '';

	    // language-* takes precedence over non-prefixed class names and
	    match = /\blang(?:uage)?-([\w-]+)\b/.exec(classes);
	    if (match) {
	      return getLanguage(match[1]) ? match[1] : 'no-highlight';
	    }

	    classes = classes.split(/\s+/);
	    for (i = 0, length = classes.length; i < length; i++) {
	      if (getLanguage(classes[i]) || isNotHighlighted(classes[i])) {
	        return classes[i];
	      }
	    }
	  }

	  function inherit(parent, obj) {
	    var result = {},
	        key;
	    for (key in parent) result[key] = parent[key];
	    if (obj) for (key in obj) result[key] = obj[key];
	    return result;
	  }

	  /* Stream merging */

	  function nodeStream(node) {
	    var result = [];
	    (function _nodeStream(node, offset) {
	      for (var child = node.firstChild; child; child = child.nextSibling) {
	        if (child.nodeType == 3) offset += child.nodeValue.length;else if (child.nodeType == 1) {
	          result.push({
	            event: 'start',
	            offset: offset,
	            node: child
	          });
	          offset = _nodeStream(child, offset);
	          // Prevent void elements from having an end tag that would actually
	          // double them in the output. There are more void elements in HTML
	          // but we list only those realistically expected in code display.
	          if (!tag(child).match(/br|hr|img|input/)) {
	            result.push({
	              event: 'stop',
	              offset: offset,
	              node: child
	            });
	          }
	        }
	      }
	      return offset;
	    })(node, 0);
	    return result;
	  }

	  function mergeStreams(original, highlighted, value) {
	    var processed = 0;
	    var result = '';
	    var nodeStack = [];

	    function selectStream() {
	      if (!original.length || !highlighted.length) {
	        return original.length ? original : highlighted;
	      }
	      if (original[0].offset != highlighted[0].offset) {
	        return original[0].offset < highlighted[0].offset ? original : highlighted;
	      }

	      /*
	      To avoid starting the stream just before it should stop the order is
	      ensured that original always starts first and closes last:
	       if (event1 == 'start' && event2 == 'start')
	        return original;
	      if (event1 == 'start' && event2 == 'stop')
	        return highlighted;
	      if (event1 == 'stop' && event2 == 'start')
	        return original;
	      if (event1 == 'stop' && event2 == 'stop')
	        return highlighted;
	       ... which is collapsed to:
	      */
	      return highlighted[0].event == 'start' ? original : highlighted;
	    }

	    function open(node) {
	      function attr_str(a) {
	        return ' ' + a.nodeName + '="' + escape(a.value) + '"';
	      }
	      result += '<' + tag(node) + Array.prototype.map.call(node.attributes, attr_str).join('') + '>';
	    }

	    function close(node) {
	      result += '</' + tag(node) + '>';
	    }

	    function render(event) {
	      (event.event == 'start' ? open : close)(event.node);
	    }

	    while (original.length || highlighted.length) {
	      var stream = selectStream();
	      result += escape(value.substr(processed, stream[0].offset - processed));
	      processed = stream[0].offset;
	      if (stream == original) {
	        /*
	        On any opening or closing tag of the original markup we first close
	        the entire highlighted node stack, then render the original tag along
	        with all the following original tags at the same offset and then
	        reopen all the tags on the highlighted stack.
	        */
	        nodeStack.reverse().forEach(close);
	        do {
	          render(stream.splice(0, 1)[0]);
	          stream = selectStream();
	        } while (stream == original && stream.length && stream[0].offset == processed);
	        nodeStack.reverse().forEach(open);
	      } else {
	        if (stream[0].event == 'start') {
	          nodeStack.push(stream[0].node);
	        } else {
	          nodeStack.pop();
	        }
	        render(stream.splice(0, 1)[0]);
	      }
	    }
	    return result + escape(value.substr(processed));
	  }

	  /* Initialization */

	  function compileLanguage(language) {

	    function reStr(re) {
	      return re && re.source || re;
	    }

	    function langRe(value, global) {
	      return new RegExp(reStr(value), 'm' + (language.case_insensitive ? 'i' : '') + (global ? 'g' : ''));
	    }

	    function compileMode(mode, parent) {
	      if (mode.compiled) return;
	      mode.compiled = true;

	      mode.keywords = mode.keywords || mode.beginKeywords;
	      if (mode.keywords) {
	        var compiled_keywords = {};

	        var flatten = function flatten(className, str) {
	          if (language.case_insensitive) {
	            str = str.toLowerCase();
	          }
	          str.split(' ').forEach(function (kw) {
	            var pair = kw.split('|');
	            compiled_keywords[pair[0]] = [className, pair[1] ? Number(pair[1]) : 1];
	          });
	        };

	        if (typeof mode.keywords == 'string') {
	          // string
	          flatten('keyword', mode.keywords);
	        } else {
	          Object.keys(mode.keywords).forEach(function (className) {
	            flatten(className, mode.keywords[className]);
	          });
	        }
	        mode.keywords = compiled_keywords;
	      }
	      mode.lexemesRe = langRe(mode.lexemes || /\b\w+\b/, true);

	      if (parent) {
	        if (mode.beginKeywords) {
	          mode.begin = '\\b(' + mode.beginKeywords.split(' ').join('|') + ')\\b';
	        }
	        if (!mode.begin) mode.begin = /\B|\b/;
	        mode.beginRe = langRe(mode.begin);
	        if (!mode.end && !mode.endsWithParent) mode.end = /\B|\b/;
	        if (mode.end) mode.endRe = langRe(mode.end);
	        mode.terminator_end = reStr(mode.end) || '';
	        if (mode.endsWithParent && parent.terminator_end) mode.terminator_end += (mode.end ? '|' : '') + parent.terminator_end;
	      }
	      if (mode.illegal) mode.illegalRe = langRe(mode.illegal);
	      if (mode.relevance === undefined) mode.relevance = 1;
	      if (!mode.contains) {
	        mode.contains = [];
	      }
	      var expanded_contains = [];
	      mode.contains.forEach(function (c) {
	        if (c.variants) {
	          c.variants.forEach(function (v) {
	            expanded_contains.push(inherit(c, v));
	          });
	        } else {
	          expanded_contains.push(c == 'self' ? mode : c);
	        }
	      });
	      mode.contains = expanded_contains;
	      mode.contains.forEach(function (c) {
	        compileMode(c, mode);
	      });

	      if (mode.starts) {
	        compileMode(mode.starts, parent);
	      }

	      var terminators = mode.contains.map(function (c) {
	        return c.beginKeywords ? '\\.?(' + c.begin + ')\\.?' : c.begin;
	      }).concat([mode.terminator_end, mode.illegal]).map(reStr).filter(Boolean);
	      mode.terminators = terminators.length ? langRe(terminators.join('|'), true) : { exec: function exec() /*s*/{
	          return null;
	        } };
	    }

	    compileMode(language);
	  }

	  /*
	  Core highlighting function. Accepts a language name, or an alias, and a
	  string with the code to highlight. Returns an object with the following
	  properties:
	   - relevance (int)
	  - value (an HTML string with highlighting markup)
	   */
	  function highlight(name, value, ignore_illegals, continuation) {

	    function subMode(lexeme, mode) {
	      for (var i = 0; i < mode.contains.length; i++) {
	        if (testRe(mode.contains[i].beginRe, lexeme)) {
	          return mode.contains[i];
	        }
	      }
	    }

	    function endOfMode(_x, _x2) {
	      var _again = true;

	      _function: while (_again) {
	        var mode = _x,
	            lexeme = _x2;
	        _again = false;

	        if (testRe(mode.endRe, lexeme)) {
	          while (mode.endsParent && mode.parent) {
	            mode = mode.parent;
	          }
	          return mode;
	        }
	        if (mode.endsWithParent) {
	          _x = mode.parent;
	          _x2 = lexeme;
	          _again = true;
	          continue _function;
	        }
	      }
	    }

	    function isIllegal(lexeme, mode) {
	      return !ignore_illegals && testRe(mode.illegalRe, lexeme);
	    }

	    function keywordMatch(mode, match) {
	      var match_str = language.case_insensitive ? match[0].toLowerCase() : match[0];
	      return mode.keywords.hasOwnProperty(match_str) && mode.keywords[match_str];
	    }

	    function buildSpan(classname, insideSpan, leaveOpen, noPrefix) {
	      var classPrefix = noPrefix ? '' : options.classPrefix,
	          openSpan = '<span class="' + classPrefix,
	          closeSpan = leaveOpen ? '' : '</span>';

	      openSpan += classname + '">';

	      return openSpan + insideSpan + closeSpan;
	    }

	    function processKeywords() {
	      if (!top.keywords) return escape(mode_buffer);
	      var result = '';
	      var last_index = 0;
	      top.lexemesRe.lastIndex = 0;
	      var match = top.lexemesRe.exec(mode_buffer);
	      while (match) {
	        result += escape(mode_buffer.substr(last_index, match.index - last_index));
	        var keyword_match = keywordMatch(top, match);
	        if (keyword_match) {
	          relevance += keyword_match[1];
	          result += buildSpan(keyword_match[0], escape(match[0]));
	        } else {
	          result += escape(match[0]);
	        }
	        last_index = top.lexemesRe.lastIndex;
	        match = top.lexemesRe.exec(mode_buffer);
	      }
	      return result + escape(mode_buffer.substr(last_index));
	    }

	    function processSubLanguage() {
	      var explicit = typeof top.subLanguage == 'string';
	      if (explicit && !languages[top.subLanguage]) {
	        return escape(mode_buffer);
	      }

	      var result = explicit ? highlight(top.subLanguage, mode_buffer, true, continuations[top.subLanguage]) : highlightAuto(mode_buffer, top.subLanguage.length ? top.subLanguage : undefined);

	      // Counting embedded language score towards the host language may be disabled
	      // with zeroing the containing mode relevance. Usecase in point is Markdown that
	      // allows XML everywhere and makes every XML snippet to have a much larger Markdown
	      // score.
	      if (top.relevance > 0) {
	        relevance += result.relevance;
	      }
	      if (explicit) {
	        continuations[top.subLanguage] = result.top;
	      }
	      return buildSpan(result.language, result.value, false, true);
	    }

	    function processBuffer() {
	      return top.subLanguage !== undefined ? processSubLanguage() : processKeywords();
	    }

	    function startNewMode(mode, lexeme) {
	      var markup = mode.className ? buildSpan(mode.className, '', true) : '';
	      if (mode.returnBegin) {
	        result += markup;
	        mode_buffer = '';
	      } else if (mode.excludeBegin) {
	        result += escape(lexeme) + markup;
	        mode_buffer = '';
	      } else {
	        result += markup;
	        mode_buffer = lexeme;
	      }
	      top = Object.create(mode, { parent: { value: top } });
	    }

	    function processLexeme(buffer, lexeme) {

	      mode_buffer += buffer;
	      if (lexeme === undefined) {
	        result += processBuffer();
	        return 0;
	      }

	      var new_mode = subMode(lexeme, top);
	      if (new_mode) {
	        result += processBuffer();
	        startNewMode(new_mode, lexeme);
	        return new_mode.returnBegin ? 0 : lexeme.length;
	      }

	      var end_mode = endOfMode(top, lexeme);
	      if (end_mode) {
	        var origin = top;
	        if (!(origin.returnEnd || origin.excludeEnd)) {
	          mode_buffer += lexeme;
	        }
	        result += processBuffer();
	        do {
	          if (top.className) {
	            result += '</span>';
	          }
	          relevance += top.relevance;
	          top = top.parent;
	        } while (top != end_mode.parent);
	        if (origin.excludeEnd) {
	          result += escape(lexeme);
	        }
	        mode_buffer = '';
	        if (end_mode.starts) {
	          startNewMode(end_mode.starts, '');
	        }
	        return origin.returnEnd ? 0 : lexeme.length;
	      }

	      if (isIllegal(lexeme, top)) throw new Error('Illegal lexeme "' + lexeme + '" for mode "' + (top.className || '<unnamed>') + '"');

	      /*
	      Parser should not reach this point as all types of lexemes should be caught
	      earlier, but if it does due to some bug make sure it advances at least one
	      character forward to prevent infinite looping.
	      */
	      mode_buffer += lexeme;
	      return lexeme.length || 1;
	    }

	    var language = getLanguage(name);
	    if (!language) {
	      throw new Error('Unknown language: "' + name + '"');
	    }

	    compileLanguage(language);
	    var top = continuation || language;
	    var continuations = {}; // keep continuations for sub-languages
	    var result = '',
	        current;
	    for (current = top; current != language; current = current.parent) {
	      if (current.className) {
	        result = buildSpan(current.className, '', true) + result;
	      }
	    }
	    var mode_buffer = '';
	    var relevance = 0;
	    try {
	      var match,
	          count,
	          index = 0;
	      while (true) {
	        top.terminators.lastIndex = index;
	        match = top.terminators.exec(value);
	        if (!match) break;
	        count = processLexeme(value.substr(index, match.index - index), match[0]);
	        index = match.index + count;
	      }
	      processLexeme(value.substr(index));
	      for (current = top; current.parent; current = current.parent) {
	        // close dangling modes
	        if (current.className) {
	          result += '</span>';
	        }
	      }
	      return {
	        relevance: relevance,
	        value: result,
	        language: name,
	        top: top
	      };
	    } catch (e) {
	      if (e.message.indexOf('Illegal') != -1) {
	        return {
	          relevance: 0,
	          value: escape(value)
	        };
	      } else {
	        throw e;
	      }
	    }
	  }

	  /*
	  Highlighting with language detection. Accepts a string with the code to
	  highlight. Returns an object with the following properties:
	   - language (detected language)
	  - relevance (int)
	  - value (an HTML string with highlighting markup)
	  - second_best (object with the same structure for second-best heuristically
	    detected language, may be absent)
	   */
	  function highlightAuto(text, languageSubset) {
	    languageSubset = languageSubset || options.languages || Object.keys(languages);
	    var result = {
	      relevance: 0,
	      value: escape(text)
	    };
	    var second_best = result;
	    languageSubset.forEach(function (name) {
	      if (!getLanguage(name)) {
	        return;
	      }
	      var current = highlight(name, text, false);
	      current.language = name;
	      if (current.relevance > second_best.relevance) {
	        second_best = current;
	      }
	      if (current.relevance > result.relevance) {
	        second_best = result;
	        result = current;
	      }
	    });
	    if (second_best.language) {
	      result.second_best = second_best;
	    }
	    return result;
	  }

	  /*
	  Post-processing of the highlighted markup:
	   - replace TABs with something more useful
	  - replace real line-breaks with '<br>' for non-pre containers
	   */
	  function fixMarkup(value) {
	    if (options.tabReplace) {
	      value = value.replace(/^((<[^>]+>|\t)+)/gm, function (match, p1 /*..., offset, s*/) {
	        return p1.replace(/\t/g, options.tabReplace);
	      });
	    }
	    if (options.useBR) {
	      value = value.replace(/\n/g, '<br>');
	    }
	    return value;
	  }

	  function buildClassName(prevClassName, currentLang, resultLang) {
	    var language = currentLang ? aliases[currentLang] : resultLang,
	        result = [prevClassName.trim()];

	    if (!prevClassName.match(/\bhljs\b/)) {
	      result.push('hljs');
	    }

	    if (prevClassName.indexOf(language) === -1) {
	      result.push(language);
	    }

	    return result.join(' ').trim();
	  }

	  /*
	  Applies highlighting to a DOM node containing code. Accepts a DOM node and
	  two optional parameters for fixMarkup.
	  */
	  function highlightBlock(block) {
	    var language = blockLanguage(block);
	    if (isNotHighlighted(language)) return;

	    var node;
	    if (options.useBR) {
	      node = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
	      node.innerHTML = block.innerHTML.replace(/\n/g, '').replace(/<br[ \/]*>/g, '\n');
	    } else {
	      node = block;
	    }
	    var text = node.textContent;
	    var result = language ? highlight(language, text, true) : highlightAuto(text);

	    var originalStream = nodeStream(node);
	    if (originalStream.length) {
	      var resultNode = document.createElementNS('http://www.w3.org/1999/xhtml', 'div');
	      resultNode.innerHTML = result.value;
	      result.value = mergeStreams(originalStream, nodeStream(resultNode), text);
	    }
	    result.value = fixMarkup(result.value);

	    block.innerHTML = result.value;
	    block.className = buildClassName(block.className, language, result.language);
	    block.result = {
	      language: result.language,
	      re: result.relevance
	    };
	    if (result.second_best) {
	      block.second_best = {
	        language: result.second_best.language,
	        re: result.second_best.relevance
	      };
	    }
	  }

	  var options = {
	    classPrefix: 'hljs-',
	    tabReplace: null,
	    useBR: false,
	    languages: undefined
	  };

	  /*
	  Updates highlight.js global options with values passed in the form of an object
	  */
	  function configure(user_options) {
	    options = inherit(options, user_options);
	  }

	  /*
	  Applies highlighting to all <pre><code>..</code></pre> blocks on a page.
	  */
	  function initHighlighting() {
	    if (initHighlighting.called) return;
	    initHighlighting.called = true;

	    var blocks = document.querySelectorAll('pre code');
	    Array.prototype.forEach.call(blocks, highlightBlock);
	  }

	  /*
	  Attaches highlighting to the page load event.
	  */
	  function initHighlightingOnLoad() {
	    addEventListener('DOMContentLoaded', initHighlighting, false);
	    addEventListener('load', initHighlighting, false);
	  }

	  var languages = {};
	  var aliases = {};

	  function registerLanguage(name, language) {
	    var lang = languages[name] = language(hljs);
	    if (lang.aliases) {
	      lang.aliases.forEach(function (alias) {
	        aliases[alias] = name;
	      });
	    }
	  }

	  function listLanguages() {
	    return Object.keys(languages);
	  }

	  function getLanguage(name) {
	    return languages[name] || languages[aliases[name]];
	  }

	  /* Interface definition */

	  hljs.highlight = highlight;
	  hljs.highlightAuto = highlightAuto;
	  hljs.fixMarkup = fixMarkup;
	  hljs.highlightBlock = highlightBlock;
	  hljs.configure = configure;
	  hljs.initHighlighting = initHighlighting;
	  hljs.initHighlightingOnLoad = initHighlightingOnLoad;
	  hljs.registerLanguage = registerLanguage;
	  hljs.listLanguages = listLanguages;
	  hljs.getLanguage = getLanguage;
	  hljs.inherit = inherit;

	  // Common regexps
	  hljs.IDENT_RE = '[a-zA-Z]\\w*';
	  hljs.UNDERSCORE_IDENT_RE = '[a-zA-Z_]\\w*';
	  hljs.NUMBER_RE = '\\b\\d+(\\.\\d+)?';
	  hljs.C_NUMBER_RE = '(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)'; // 0x..., 0..., decimal, float
	  hljs.BINARY_NUMBER_RE = '\\b(0b[01]+)'; // 0b...
	  hljs.RE_STARTERS_RE = '!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~';

	  // Common modes
	  hljs.BACKSLASH_ESCAPE = {
	    begin: '\\\\[\\s\\S]', relevance: 0
	  };
	  hljs.APOS_STRING_MODE = {
	    className: 'string',
	    begin: '\'', end: '\'',
	    illegal: '\\n',
	    contains: [hljs.BACKSLASH_ESCAPE]
	  };
	  hljs.QUOTE_STRING_MODE = {
	    className: 'string',
	    begin: '"', end: '"',
	    illegal: '\\n',
	    contains: [hljs.BACKSLASH_ESCAPE]
	  };
	  hljs.PHRASAL_WORDS_MODE = {
	    begin: /\b(a|an|the|are|I|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such)\b/
	  };
	  hljs.COMMENT = function (begin, end, inherits) {
	    var mode = hljs.inherit({
	      className: 'comment',
	      begin: begin, end: end,
	      contains: []
	    }, inherits || {});
	    mode.contains.push(hljs.PHRASAL_WORDS_MODE);
	    mode.contains.push({
	      className: 'doctag',
	      begin: "(?:TODO|FIXME|NOTE|BUG|XXX):",
	      relevance: 0
	    });
	    return mode;
	  };
	  hljs.C_LINE_COMMENT_MODE = hljs.COMMENT('//', '$');
	  hljs.C_BLOCK_COMMENT_MODE = hljs.COMMENT('/\\*', '\\*/');
	  hljs.HASH_COMMENT_MODE = hljs.COMMENT('#', '$');
	  hljs.NUMBER_MODE = {
	    className: 'number',
	    begin: hljs.NUMBER_RE,
	    relevance: 0
	  };
	  hljs.C_NUMBER_MODE = {
	    className: 'number',
	    begin: hljs.C_NUMBER_RE,
	    relevance: 0
	  };
	  hljs.BINARY_NUMBER_MODE = {
	    className: 'number',
	    begin: hljs.BINARY_NUMBER_RE,
	    relevance: 0
	  };
	  hljs.CSS_NUMBER_MODE = {
	    className: 'number',
	    begin: hljs.NUMBER_RE + '(' + '%|em|ex|ch|rem' + '|vw|vh|vmin|vmax' + '|cm|mm|in|pt|pc|px' + '|deg|grad|rad|turn' + '|s|ms' + '|Hz|kHz' + '|dpi|dpcm|dppx' + ')?',
	    relevance: 0
	  };
	  hljs.REGEXP_MODE = {
	    className: 'regexp',
	    begin: /\//, end: /\/[gimuy]*/,
	    illegal: /\n/,
	    contains: [hljs.BACKSLASH_ESCAPE, {
	      begin: /\[/, end: /\]/,
	      relevance: 0,
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }]
	  };
	  hljs.TITLE_MODE = {
	    className: 'title',
	    begin: hljs.IDENT_RE,
	    relevance: 0
	  };
	  hljs.UNDERSCORE_TITLE_MODE = {
	    className: 'title',
	    begin: hljs.UNDERSCORE_IDENT_RE,
	    relevance: 0
	  };

	  return hljs;
	});

/***/ },
/* 201 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE_RU = '[a-zA-Zа-яА-Я][a-zA-Z0-9_а-яА-Я]*';
	  var OneS_KEYWORDS = 'возврат дата для если и или иначе иначеесли исключение конецесли ' + 'конецпопытки конецпроцедуры конецфункции конеццикла константа не перейти перем ' + 'перечисление по пока попытка прервать продолжить процедура строка тогда фс функция цикл ' + 'число экспорт';
	  var OneS_BUILT_IN = 'ansitooem oemtoansi ввестивидсубконто ввестидату ввестизначение ' + 'ввестиперечисление ввестипериод ввестиплансчетов ввестистроку ввестичисло вопрос ' + 'восстановитьзначение врег выбранныйплансчетов вызватьисключение датагод датамесяц ' + 'датачисло добавитьмесяц завершитьработусистемы заголовоксистемы записьжурналарегистрации ' + 'запуститьприложение зафиксироватьтранзакцию значениевстроку значениевстрокувнутр ' + 'значениевфайл значениеизстроки значениеизстрокивнутр значениеизфайла имякомпьютера ' + 'имяпользователя каталогвременныхфайлов каталогиб каталогпользователя каталогпрограммы ' + 'кодсимв командасистемы конгода конецпериодаби конецрассчитанногопериодаби ' + 'конецстандартногоинтервала конквартала конмесяца коннедели лев лог лог10 макс ' + 'максимальноеколичествосубконто мин монопольныйрежим названиеинтерфейса названиенабораправ ' + 'назначитьвид назначитьсчет найти найтипомеченныенаудаление найтиссылки началопериодаби ' + 'началостандартногоинтервала начатьтранзакцию начгода начквартала начмесяца начнедели ' + 'номерднягода номерднянедели номернеделигода нрег обработкаожидания окр описаниеошибки ' + 'основнойжурналрасчетов основнойплансчетов основнойязык открытьформу открытьформумодально ' + 'отменитьтранзакцию очиститьокносообщений периодстр полноеимяпользователя получитьвремята ' + 'получитьдатута получитьдокументта получитьзначенияотбора получитьпозициюта ' + 'получитьпустоезначение получитьта прав праводоступа предупреждение префиксавтонумерации ' + 'пустаястрока пустоезначение рабочаядаттьпустоезначение рабочаядата разделительстраниц ' + 'разделительстрок разм разобратьпозициюдокумента рассчитатьрегистрына ' + 'рассчитатьрегистрыпо сигнал симв символтабуляции создатьобъект сокрл сокрлп сокрп ' + 'сообщить состояние сохранитьзначение сред статусвозврата стрдлина стрзаменить ' + 'стрколичествострок стрполучитьстроку  стрчисловхождений сформироватьпозициюдокумента ' + 'счетпокоду текущаядата текущеевремя типзначения типзначениястр удалитьобъекты ' + 'установитьтана установитьтапо фиксшаблон формат цел шаблон';
	  var DQUOTE = { className: 'dquote', begin: '""' };
	  var STR_START = {
	    className: 'string',
	    begin: '"', end: '"|$',
	    contains: [DQUOTE]
	  };
	  var STR_CONT = {
	    className: 'string',
	    begin: '\\|', end: '"|$',
	    contains: [DQUOTE]
	  };

	  return {
	    case_insensitive: true,
	    lexemes: IDENT_RE_RU,
	    keywords: { keyword: OneS_KEYWORDS, built_in: OneS_BUILT_IN },
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.NUMBER_MODE, STR_START, STR_CONT, {
	      className: 'function',
	      begin: '(процедура|функция)', end: '$',
	      lexemes: IDENT_RE_RU,
	      keywords: 'процедура функция',
	      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE_RU }), {
	        className: 'tail',
	        endsWithParent: true,
	        contains: [{
	          className: 'params',
	          begin: '\\(', end: '\\)',
	          lexemes: IDENT_RE_RU,
	          keywords: 'знач',
	          contains: [STR_START, STR_CONT]
	        }, {
	          className: 'export',
	          begin: 'экспорт', endsWithParent: true,
	          lexemes: IDENT_RE_RU,
	          keywords: 'экспорт',
	          contains: [hljs.C_LINE_COMMENT_MODE]
	        }]
	      }, hljs.C_LINE_COMMENT_MODE]
	    }, { className: 'preprocessor', begin: '#', end: '$' }, { className: 'date', begin: '\'\\d{2}\\.\\d{2}\\.(\\d{2}|\\d{4})\'' }]
	  };
	};

/***/ },
/* 202 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
	  var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';

	  var AS3_REST_ARG_MODE = {
	    className: 'rest_arg',
	    begin: '[.]{3}', end: IDENT_RE,
	    relevance: 10
	  };

	  return {
	    aliases: ['as'],
	    keywords: {
	      keyword: 'as break case catch class const continue default delete do dynamic each ' + 'else extends final finally for function get if implements import in include ' + 'instanceof interface internal is namespace native new override package private ' + 'protected public return set static super switch this throw try typeof use var void ' + 'while with',
	      literal: 'true false null undefined'
	    },
	    contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.C_NUMBER_MODE, {
	      className: 'package',
	      beginKeywords: 'package', end: '{',
	      contains: [hljs.TITLE_MODE]
	    }, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '{', excludeEnd: true,
	      contains: [{
	        beginKeywords: 'extends implements'
	      }, hljs.TITLE_MODE]
	    }, {
	      className: 'preprocessor',
	      beginKeywords: 'import include', end: ';'
	    }, {
	      className: 'function',
	      beginKeywords: 'function', end: '[{;]', excludeEnd: true,
	      illegal: '\\S',
	      contains: [hljs.TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)',
	        contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, AS3_REST_ARG_MODE]
	      }, {
	        className: 'type',
	        begin: ':',
	        end: IDENT_FUNC_RETURN_TYPE_RE,
	        relevance: 10
	      }]
	    }],
	    illegal: /#/
	  };
	};

/***/ },
/* 203 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var NUMBER = { className: 'number', begin: '[\\$%]\\d+' };
	  return {
	    aliases: ['apacheconf'],
	    case_insensitive: true,
	    contains: [hljs.HASH_COMMENT_MODE, { className: 'tag', begin: '</?', end: '>' }, {
	      className: 'keyword',
	      begin: /\w+/,
	      relevance: 0,
	      // keywords aren’t needed for highlighting per se, they only boost relevance
	      // for a very generally defined mode (starts with a word, ends with line-end
	      keywords: {
	        common: 'order deny allow setenv rewriterule rewriteengine rewritecond documentroot ' + 'sethandler errordocument loadmodule options header listen serverroot ' + 'servername'
	      },
	      starts: {
	        end: /$/,
	        relevance: 0,
	        keywords: {
	          literal: 'on off all'
	        },
	        contains: [{
	          className: 'sqbracket',
	          begin: '\\s\\[', end: '\\]$'
	        }, {
	          className: 'cbracket',
	          begin: '[\\$%]\\{', end: '\\}',
	          contains: ['self', NUMBER]
	        }, NUMBER, hljs.QUOTE_STRING_MODE]
	      }
	    }],
	    illegal: /\S/
	  };
	};

/***/ },
/* 204 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: '' });
	  var PARAMS = {
	    className: 'params',
	    begin: '\\(', end: '\\)',
	    contains: ['self', hljs.C_NUMBER_MODE, STRING]
	  };
	  var COMMENT_MODE_1 = hljs.COMMENT('--', '$');
	  var COMMENT_MODE_2 = hljs.COMMENT('\\(\\*', '\\*\\)', {
	    contains: ['self', COMMENT_MODE_1] //allow nesting
	  });
	  var COMMENTS = [COMMENT_MODE_1, COMMENT_MODE_2, hljs.HASH_COMMENT_MODE];

	  return {
	    aliases: ['osascript'],
	    keywords: {
	      keyword: 'about above after against and around as at back before beginning ' + 'behind below beneath beside between but by considering ' + 'contain contains continue copy div does eighth else end equal ' + 'equals error every exit fifth first for fourth from front ' + 'get given global if ignoring in into is it its last local me ' + 'middle mod my ninth not of on onto or over prop property put ref ' + 'reference repeat returning script second set seventh since ' + 'sixth some tell tenth that the|0 then third through thru ' + 'timeout times to transaction try until where while whose with ' + 'without',
	      constant: 'AppleScript false linefeed return pi quote result space tab true',
	      type: 'alias application boolean class constant date file integer list ' + 'number real record string text',
	      command: 'activate beep count delay launch log offset read round ' + 'run say summarize write',
	      property: 'character characters contents day frontmost id item length ' + 'month name paragraph paragraphs rest reverse running time version ' + 'weekday word words year'
	    },
	    contains: [STRING, hljs.C_NUMBER_MODE, {
	      className: 'type',
	      begin: '\\bPOSIX file\\b'
	    }, {
	      className: 'command',
	      begin: '\\b(clipboard info|the clipboard|info for|list (disks|folder)|' + 'mount volume|path to|(close|open for) access|(get|set) eof|' + 'current date|do shell script|get volume settings|random number|' + 'set volume|system attribute|system info|time to GMT|' + '(load|run|store) script|scripting components|' + 'ASCII (character|number)|localized string|' + 'choose (application|color|file|file name|' + 'folder|from list|remote application|URL)|' + 'display (alert|dialog))\\b|^\\s*return\\b'
	    }, {
	      className: 'constant',
	      begin: '\\b(text item delimiters|current application|missing value)\\b'
	    }, {
	      className: 'keyword',
	      begin: '\\b(apart from|aside from|instead of|out of|greater than|' + "isn't|(doesn't|does not) (equal|come before|come after|contain)|" + '(greater|less) than( or equal)?|(starts?|ends|begins?) with|' + 'contained by|comes (before|after)|a (ref|reference))\\b'
	    }, {
	      className: 'property',
	      begin: '\\b(POSIX path|(date|time) string|quoted form)\\b'
	    }, {
	      className: 'function_start',
	      beginKeywords: 'on',
	      illegal: '[${=;\\n]',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
	    }].concat(COMMENTS),
	    illegal: '//|->|=>|\\[\\['
	  };
	};

/***/ },
/* 205 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  //local labels: %?[FB]?[AT]?\d{1,2}\w+
	  return {
	    case_insensitive: true,
	    aliases: ['arm'],
	    lexemes: '\\.?' + hljs.IDENT_RE,
	    keywords: {
	      literal: 'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 ' + //standard registers
	      'pc lr sp ip sl sb fp ' + //typical regs plus backward compatibility
	      'a1 a2 a3 a4 v1 v2 v3 v4 v5 v6 v7 v8 f0 f1 f2 f3 f4 f5 f6 f7 ' + //more regs and fp
	      'p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 p15 ' + //coprocessor regs
	      'c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11 c12 c13 c14 c15 ' + //more coproc
	      'q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 ' + //advanced SIMD NEON regs

	      //program status registers
	      'cpsr_c cpsr_x cpsr_s cpsr_f cpsr_cx cpsr_cxs cpsr_xs cpsr_xsf cpsr_sf cpsr_cxsf ' + 'spsr_c spsr_x spsr_s spsr_f spsr_cx spsr_cxs spsr_xs spsr_xsf spsr_sf spsr_cxsf ' +

	      //NEON and VFP registers
	      's0 s1 s2 s3 s4 s5 s6 s7 s8 s9 s10 s11 s12 s13 s14 s15 ' + 's16 s17 s18 s19 s20 s21 s22 s23 s24 s25 s26 s27 s28 s29 s30 s31 ' + 'd0 d1 d2 d3 d4 d5 d6 d7 d8 d9 d10 d11 d12 d13 d14 d15 ' + 'd16 d17 d18 d19 d20 d21 d22 d23 d24 d25 d26 d27 d28 d29 d30 d31 ',
	      preprocessor:
	      //GNU preprocs
	      '.2byte .4byte .align .ascii .asciz .balign .byte .code .data .else .end .endif .endm .endr .equ .err .exitm .extern .global .hword .if .ifdef .ifndef .include .irp .long .macro .rept .req .section .set .skip .space .text .word .arm .thumb .code16 .code32 .force_thumb .thumb_func .ltorg ' +
	      //ARM directives
	      'ALIAS ALIGN ARM AREA ASSERT ATTR CN CODE CODE16 CODE32 COMMON CP DATA DCB DCD DCDU DCDO DCFD DCFDU DCI DCQ DCQU DCW DCWU DN ELIF ELSE END ENDFUNC ENDIF ENDP ENTRY EQU EXPORT EXPORTAS EXTERN FIELD FILL FUNCTION GBLA GBLL GBLS GET GLOBAL IF IMPORT INCBIN INCLUDE INFO KEEP LCLA LCLL LCLS LTORG MACRO MAP MEND MEXIT NOFP OPT PRESERVE8 PROC QN READONLY RELOC REQUIRE REQUIRE8 RLIST FN ROUT SETA SETL SETS SN SPACE SUBT THUMB THUMBX TTL WHILE WEND ',
	      built_in: '{PC} {VAR} {TRUE} {FALSE} {OPT} {CONFIG} {ENDIAN} {CODESIZE} {CPU} {FPU} {ARCHITECTURE} {PCSTOREOFFSET} {ARMASM_VERSION} {INTER} {ROPI} {RWPI} {SWST} {NOSWST} . @ '
	    },
	    contains: [{
	      className: 'keyword',
	      begin: '\\b(' + //mnemonics
	      'adc|' + '(qd?|sh?|u[qh]?)?add(8|16)?|usada?8|(q|sh?|u[qh]?)?(as|sa)x|' + 'and|adrl?|sbc|rs[bc]|asr|b[lx]?|blx|bxj|cbn?z|tb[bh]|bic|' + 'bfc|bfi|[su]bfx|bkpt|cdp2?|clz|clrex|cmp|cmn|cpsi[ed]|cps|' + 'setend|dbg|dmb|dsb|eor|isb|it[te]{0,3}|lsl|lsr|ror|rrx|' + 'ldm(([id][ab])|f[ds])?|ldr((s|ex)?[bhd])?|movt?|mvn|mra|mar|' + 'mul|[us]mull|smul[bwt][bt]|smu[as]d|smmul|smmla|' + 'mla|umlaal|smlal?([wbt][bt]|d)|mls|smlsl?[ds]|smc|svc|sev|' + 'mia([bt]{2}|ph)?|mrr?c2?|mcrr2?|mrs|msr|orr|orn|pkh(tb|bt)|rbit|' + 'rev(16|sh)?|sel|[su]sat(16)?|nop|pop|push|rfe([id][ab])?|' + 'stm([id][ab])?|str(ex)?[bhd]?|(qd?)?sub|(sh?|q|u[qh]?)?sub(8|16)|' + '[su]xt(a?h|a?b(16)?)|srs([id][ab])?|swpb?|swi|smi|tst|teq|' + 'wfe|wfi|yield' + ')' + '(eq|ne|cs|cc|mi|pl|vs|vc|hi|ls|ge|lt|gt|le|al|hs|lo)?' + //condition codes
	      '[sptrx]?', //legal postfixes
	      end: '\\s'
	    }, hljs.COMMENT('[;@]', '$', { relevance: 0 }), hljs.C_BLOCK_COMMENT_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      begin: '\'',
	      end: '[^\\\\]\'',
	      relevance: 0
	    }, {
	      className: 'title',
	      begin: '\\|', end: '\\|',
	      illegal: '\\n',
	      relevance: 0
	    }, {
	      className: 'number',
	      variants: [{ begin: '[#$=]?0x[0-9a-f]+' }, //hex
	      { begin: '[#$=]?0b[01]+' }, //bin
	      { begin: '[#$=]\\d+' }, //literal
	      { begin: '\\b\\d+' } //bare number
	      ],
	      relevance: 0
	    }, {
	      className: 'label',
	      variants: [{ begin: '^[a-z_\\.\\$][a-z0-9_\\.\\$]+' }, //ARM syntax
	      { begin: '^\\s*[a-z_\\.\\$][a-z0-9_\\.\\$]+:' }, //GNU ARM syntax
	      { begin: '[=#]\\w+' } //label reference
	      ],
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 206 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var XML_IDENT_RE = '[A-Za-z0-9\\._:-]+';
	  var PHP = {
	    begin: /<\?(php)?(?!\w)/, end: /\?>/,
	    subLanguage: 'php'
	  };
	  var TAG_INTERNALS = {
	    endsWithParent: true,
	    illegal: /</,
	    relevance: 0,
	    contains: [PHP, {
	      className: 'attribute',
	      begin: XML_IDENT_RE,
	      relevance: 0
	    }, {
	      begin: '=',
	      relevance: 0,
	      contains: [{
	        className: 'value',
	        contains: [PHP],
	        variants: [{ begin: /"/, end: /"/ }, { begin: /'/, end: /'/ }, { begin: /[^\s\/>]+/ }]
	      }]
	    }]
	  };
	  return {
	    aliases: ['html', 'xhtml', 'rss', 'atom', 'xsl', 'plist'],
	    case_insensitive: true,
	    contains: [{
	      className: 'doctype',
	      begin: '<!DOCTYPE', end: '>',
	      relevance: 10,
	      contains: [{ begin: '\\[', end: '\\]' }]
	    }, hljs.COMMENT('<!--', '-->', {
	      relevance: 10
	    }), {
	      className: 'cdata',
	      begin: '<\\!\\[CDATA\\[', end: '\\]\\]>',
	      relevance: 10
	    }, {
	      className: 'tag',
	      /*
	      The lookahead pattern (?=...) ensures that 'begin' only matches
	      '<style' as a single word, followed by a whitespace or an
	      ending braket. The '$' is needed for the lexeme to be recognized
	      by hljs.subMode() that tests lexemes outside the stream.
	      */
	      begin: '<style(?=\\s|>|$)', end: '>',
	      keywords: { title: 'style' },
	      contains: [TAG_INTERNALS],
	      starts: {
	        end: '</style>', returnEnd: true,
	        subLanguage: 'css'
	      }
	    }, {
	      className: 'tag',
	      // See the comment in the <style tag about the lookahead pattern
	      begin: '<script(?=\\s|>|$)', end: '>',
	      keywords: { title: 'script' },
	      contains: [TAG_INTERNALS],
	      starts: {
	        end: '\<\/script\>', returnEnd: true,
	        subLanguage: ['actionscript', 'javascript', 'handlebars']
	      }
	    }, PHP, {
	      className: 'pi',
	      begin: /<\?\w+/, end: /\?>/,
	      relevance: 10
	    }, {
	      className: 'tag',
	      begin: '</?', end: '/?>',
	      contains: [{
	        className: 'title', begin: /[^ \/><\n\t]+/, relevance: 0
	      }, TAG_INTERNALS]
	    }]
	  };
	};

/***/ },
/* 207 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['adoc'],
	    contains: [
	    // block comment
	    hljs.COMMENT('^/{4,}\\n', '\\n/{4,}$',
	    // can also be done as...
	    //'^/{4,}$',
	    //'^/{4,}$',
	    {
	      relevance: 10
	    }),
	    // line comment
	    hljs.COMMENT('^//', '$', {
	      relevance: 0
	    }),
	    // title
	    {
	      className: 'title',
	      begin: '^\\.\\w.*$'
	    },
	    // example, admonition & sidebar blocks
	    {
	      begin: '^[=\\*]{4,}\\n',
	      end: '\\n^[=\\*]{4,}$',
	      relevance: 10
	    },
	    // headings
	    {
	      className: 'header',
	      begin: '^(={1,5}) .+?( \\1)?$',
	      relevance: 10
	    }, {
	      className: 'header',
	      begin: '^[^\\[\\]\\n]+?\\n[=\\-~\\^\\+]{2,}$',
	      relevance: 10
	    },
	    // document attributes
	    {
	      className: 'attribute',
	      begin: '^:.+?:',
	      end: '\\s',
	      excludeEnd: true,
	      relevance: 10
	    },
	    // block attributes
	    {
	      className: 'attribute',
	      begin: '^\\[.+?\\]$',
	      relevance: 0
	    },
	    // quoteblocks
	    {
	      className: 'blockquote',
	      begin: '^_{4,}\\n',
	      end: '\\n_{4,}$',
	      relevance: 10
	    },
	    // listing and literal blocks
	    {
	      className: 'code',
	      begin: '^[\\-\\.]{4,}\\n',
	      end: '\\n[\\-\\.]{4,}$',
	      relevance: 10
	    },
	    // passthrough blocks
	    {
	      begin: '^\\+{4,}\\n',
	      end: '\\n\\+{4,}$',
	      contains: [{
	        begin: '<', end: '>',
	        subLanguage: 'xml',
	        relevance: 0
	      }],
	      relevance: 10
	    },
	    // lists (can only capture indicators)
	    {
	      className: 'bullet',
	      begin: '^(\\*+|\\-+|\\.+|[^\\n]+?::)\\s+'
	    },
	    // admonition
	    {
	      className: 'label',
	      begin: '^(NOTE|TIP|IMPORTANT|WARNING|CAUTION):\\s+',
	      relevance: 10
	    },
	    // inline strong
	    {
	      className: 'strong',
	      // must not follow a word character or be followed by an asterisk or space
	      begin: '\\B\\*(?![\\*\\s])',
	      end: '(\\n{2}|\\*)',
	      // allow escaped asterisk followed by word char
	      contains: [{
	        begin: '\\\\*\\w',
	        relevance: 0
	      }]
	    },
	    // inline emphasis
	    {
	      className: 'emphasis',
	      // must not follow a word character or be followed by a single quote or space
	      begin: '\\B\'(?![\'\\s])',
	      end: '(\\n{2}|\')',
	      // allow escaped single quote followed by word char
	      contains: [{
	        begin: '\\\\\'\\w',
	        relevance: 0
	      }],
	      relevance: 0
	    },
	    // inline emphasis (alt)
	    {
	      className: 'emphasis',
	      // must not follow a word character or be followed by an underline or space
	      begin: '_(?![_\\s])',
	      end: '(\\n{2}|_)',
	      relevance: 0
	    },
	    // inline smart quotes
	    {
	      className: 'smartquote',
	      variants: [{ begin: "``.+?''" }, { begin: "`.+?'" }]
	    },
	    // inline code snippets (TODO should get same treatment as strong and emphasis)
	    {
	      className: 'code',
	      begin: '(`.+?`|\\+.+?\\+)',
	      relevance: 0
	    },
	    // indented literal block
	    {
	      className: 'code',
	      begin: '^[ \\t]',
	      end: '$',
	      relevance: 0
	    },
	    // horizontal rules
	    {
	      className: 'horizontal_rule',
	      begin: '^\'{3,}[ \\t]*$',
	      relevance: 10
	    },
	    // images and links
	    {
	      begin: '(link:)?(http|https|ftp|file|irc|image:?):\\S+\\[.*?\\]',
	      returnBegin: true,
	      contains: [{
	        //className: 'macro',
	        begin: '(link|image:?):',
	        relevance: 0
	      }, {
	        className: 'link_url',
	        begin: '\\w',
	        end: '[^\\[]+',
	        relevance: 0
	      }, {
	        className: 'link_label',
	        begin: '\\[',
	        end: '\\]',
	        excludeBegin: true,
	        excludeEnd: true,
	        relevance: 0
	      }],
	      relevance: 10
	    }]
	  };
	};

/***/ },
/* 208 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = 'false synchronized int abstract float private char boolean static null if const ' + 'for true while long throw strictfp finally protected import native final return void ' + 'enum else extends implements break transient new catch instanceof byte super volatile case ' + 'assert short package default double public try this switch continue throws privileged ' + 'aspectOf adviceexecution proceed cflowbelow cflow initialization preinitialization ' + 'staticinitialization withincode target within execution getWithinTypeName handler ' + 'thisJoinPoint thisJoinPointStaticPart thisEnclosingJoinPointStaticPart declare parents ' + 'warning error soft precedence thisAspectInstance';
	  var SHORTKEYS = 'get set args call';
	  return {
	    keywords: KEYWORDS,
	    illegal: /<\/|#/,
	    contains: [hljs.COMMENT('/\\*\\*', '\\*/', {
	      relevance: 0,
	      contains: [{
	        className: 'doctag',
	        begin: '@[A-Za-z]+'
	      }]
	    }), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'aspect',
	      beginKeywords: 'aspect',
	      end: /[{;=]/,
	      excludeEnd: true,
	      illegal: /[:;"\[\]]/,
	      contains: [{
	        beginKeywords: 'extends implements pertypewithin perthis pertarget percflowbelow percflow issingleton'
	      }, hljs.UNDERSCORE_TITLE_MODE, {
	        begin: /\([^\)]*/,
	        end: /[)]+/,
	        keywords: KEYWORDS + ' ' + SHORTKEYS,
	        excludeEnd: false
	      }]
	    }, {
	      className: 'class',
	      beginKeywords: 'class interface',
	      end: /[{;=]/,
	      excludeEnd: true,
	      relevance: 0,
	      keywords: 'class interface',
	      illegal: /[:"\[\]]/,
	      contains: [{ beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      // AspectJ Constructs
	      beginKeywords: 'pointcut after before around throwing returning',
	      end: /[)]/,
	      excludeEnd: false,
	      illegal: /["\[\]]/,
	      contains: [{
	        begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
	        returnBegin: true,
	        contains: [hljs.UNDERSCORE_TITLE_MODE]
	      }]
	    }, {
	      begin: /[:]/,
	      returnBegin: true,
	      end: /[{;]/,
	      relevance: 0,
	      excludeEnd: false,
	      keywords: KEYWORDS,
	      illegal: /["\[\]]/,
	      contains: [{
	        begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
	        keywords: KEYWORDS + ' ' + SHORTKEYS
	      }, hljs.QUOTE_STRING_MODE]
	    }, {
	      // this prevents 'new Name(...), or throw ...' from being recognized as a function definition
	      beginKeywords: 'new throw',
	      relevance: 0
	    }, {
	      // the function class is a bit different for AspectJ compared to the Java language
	      className: 'function',
	      begin: /\w+ +\w+(\.)?\w+\s*\([^\)]*\)\s*((throws)[\w\s,]+)?[\{;]/,
	      returnBegin: true,
	      end: /[{;=]/,
	      keywords: KEYWORDS,
	      excludeEnd: true,
	      contains: [{
	        begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(',
	        returnBegin: true,
	        relevance: 0,
	        contains: [hljs.UNDERSCORE_TITLE_MODE]
	      }, {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        relevance: 0,
	        keywords: KEYWORDS,
	        contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, hljs.C_BLOCK_COMMENT_MODE]
	      }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }, hljs.C_NUMBER_MODE, {
	      // annotation is also used in this language
	      className: 'annotation',
	      begin: '@[A-Za-z]+'
	    }]
	  };
	};

/***/ },
/* 209 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var BACKTICK_ESCAPE = {
	    className: 'escape',
	    begin: '`[\\s\\S]'
	  };
	  var COMMENTS = hljs.COMMENT(';', '$', {
	    relevance: 0
	  });
	  var BUILT_IN = [{
	    className: 'built_in',
	    begin: 'A_[a-zA-Z0-9]+'
	  }, {
	    className: 'built_in',
	    beginKeywords: 'ComSpec Clipboard ClipboardAll ErrorLevel'
	  }];

	  return {
	    case_insensitive: true,
	    keywords: {
	      keyword: 'Break Continue Else Gosub If Loop Return While',
	      literal: 'A true false NOT AND OR'
	    },
	    contains: BUILT_IN.concat([BACKTICK_ESCAPE, hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [BACKTICK_ESCAPE] }), COMMENTS, {
	      className: 'number',
	      begin: hljs.NUMBER_RE,
	      relevance: 0
	    }, {
	      className: 'var_expand', // FIXME
	      begin: '%', end: '%',
	      illegal: '\\n',
	      contains: [BACKTICK_ESCAPE]
	    }, {
	      className: 'label',
	      contains: [BACKTICK_ESCAPE],
	      variants: [{ begin: '^[^\\n";]+::(?!=)' }, { begin: '^[^\\n";]+:(?!=)', relevance: 0 } // zero relevance as it catches a lot of things
	      // followed by a single ':' in many languages
	      ]
	    }, {
	      // consecutive commas, not for highlighting but just for relevance
	      begin: ',\\s*,',
	      relevance: 10
	    }])
	  };
	};

/***/ },
/* 210 */
/***/ function(module, exports) {

	'use strict';module.exports = function(hljs){var KEYWORDS='ByRef Case Const ContinueCase ContinueLoop ' + 'Default Dim Do Else ElseIf EndFunc EndIf EndSelect ' + 'EndSwitch EndWith Enum Exit ExitLoop For Func ' + 'Global If In Local Next ReDim Return Select Static ' + 'Step Switch Then To Until Volatile WEnd While With',LITERAL='True False And Null Not Or',BUILT_IN='Abs ACos AdlibRegister AdlibUnRegister Asc AscW ASin ' + 'Assign ATan AutoItSetOption AutoItWinGetTitle ' + 'AutoItWinSetTitle Beep Binary BinaryLen BinaryMid ' + 'BinaryToString BitAND BitNOT BitOR BitRotate BitShift ' + 'BitXOR BlockInput Break Call CDTray Ceiling Chr ' + 'ChrW ClipGet ClipPut ConsoleRead ConsoleWrite ' + 'ConsoleWriteError ControlClick ControlCommand ' + 'ControlDisable ControlEnable ControlFocus ControlGetFocus ' + 'ControlGetHandle ControlGetPos ControlGetText ControlHide ' + 'ControlListView ControlMove ControlSend ControlSetText ' + 'ControlShow ControlTreeView Cos Dec DirCopy DirCreate ' + 'DirGetSize DirMove DirRemove DllCall DllCallAddress ' + 'DllCallbackFree DllCallbackGetPtr DllCallbackRegister ' + 'DllClose DllOpen DllStructCreate DllStructGetData ' + 'DllStructGetPtr DllStructGetSize DllStructSetData ' + 'DriveGetDrive DriveGetFileSystem DriveGetLabel ' + 'DriveGetSerial DriveGetType DriveMapAdd DriveMapDel ' + 'DriveMapGet DriveSetLabel DriveSpaceFree DriveSpaceTotal ' + 'DriveStatus EnvGet EnvSet EnvUpdate Eval Execute Exp ' + 'FileChangeDir FileClose FileCopy FileCreateNTFSLink ' + 'FileCreateShortcut FileDelete FileExists FileFindFirstFile ' + 'FileFindNextFile FileFlush FileGetAttrib FileGetEncoding ' + 'FileGetLongName FileGetPos FileGetShortcut FileGetShortName ' + 'FileGetSize FileGetTime FileGetVersion FileInstall ' + 'FileMove FileOpen FileOpenDialog FileRead FileReadLine ' + 'FileReadToArray FileRecycle FileRecycleEmpty FileSaveDialog ' + 'FileSelectFolder FileSetAttrib FileSetEnd FileSetPos ' + 'FileSetTime FileWrite FileWriteLine Floor FtpSetProxy ' + 'FuncName GUICreate GUICtrlCreateAvi GUICtrlCreateButton ' + 'GUICtrlCreateCheckbox GUICtrlCreateCombo ' + 'GUICtrlCreateContextMenu GUICtrlCreateDate GUICtrlCreateDummy ' + 'GUICtrlCreateEdit GUICtrlCreateGraphic GUICtrlCreateGroup ' + 'GUICtrlCreateIcon GUICtrlCreateInput GUICtrlCreateLabel ' + 'GUICtrlCreateList GUICtrlCreateListView ' + 'GUICtrlCreateListViewItem GUICtrlCreateMenu ' + 'GUICtrlCreateMenuItem GUICtrlCreateMonthCal GUICtrlCreateObj ' + 'GUICtrlCreatePic GUICtrlCreateProgress GUICtrlCreateRadio ' + 'GUICtrlCreateSlider GUICtrlCreateTab GUICtrlCreateTabItem ' + 'GUICtrlCreateTreeView GUICtrlCreateTreeViewItem ' + 'GUICtrlCreateUpdown GUICtrlDelete GUICtrlGetHandle ' + 'GUICtrlGetState GUICtrlRead GUICtrlRecvMsg ' + 'GUICtrlRegisterListViewSort GUICtrlSendMsg GUICtrlSendToDummy ' + 'GUICtrlSetBkColor GUICtrlSetColor GUICtrlSetCursor ' + 'GUICtrlSetData GUICtrlSetDefBkColor GUICtrlSetDefColor ' + 'GUICtrlSetFont GUICtrlSetGraphic GUICtrlSetImage ' + 'GUICtrlSetLimit GUICtrlSetOnEvent GUICtrlSetPos ' + 'GUICtrlSetResizing GUICtrlSetState GUICtrlSetStyle ' + 'GUICtrlSetTip GUIDelete GUIGetCursorInfo GUIGetMsg ' + 'GUIGetStyle GUIRegisterMsg GUISetAccelerators GUISetBkColor ' + 'GUISetCoord GUISetCursor GUISetFont GUISetHelp GUISetIcon ' + 'GUISetOnEvent GUISetState GUISetStyle GUIStartGroup ' + 'GUISwitch Hex HotKeySet HttpSetProxy HttpSetUserAgent ' + 'HWnd InetClose InetGet InetGetInfo InetGetSize InetRead ' + 'IniDelete IniRead IniReadSection IniReadSectionNames ' + 'IniRenameSection IniWrite IniWriteSection InputBox Int ' + 'IsAdmin IsArray IsBinary IsBool IsDeclared IsDllStruct ' + 'IsFloat IsFunc IsHWnd IsInt IsKeyword IsNumber IsObj ' + 'IsPtr IsString Log MemGetStats Mod MouseClick ' + 'MouseClickDrag MouseDown MouseGetCursor MouseGetPos ' + 'MouseMove MouseUp MouseWheel MsgBox Number ObjCreate ' + 'ObjCreateInterface ObjEvent ObjGet ObjName ' + 'OnAutoItExitRegister OnAutoItExitUnRegister Opt Ping ' + 'PixelChecksum PixelGetColor PixelSearch ProcessClose ' + 'ProcessExists ProcessGetStats ProcessList ' + 'ProcessSetPriority ProcessWait ProcessWaitClose ProgressOff ' + 'ProgressOn ProgressSet Ptr Random RegDelete RegEnumKey ' + 'RegEnumVal RegRead RegWrite Round Run RunAs RunAsWait ' + 'RunWait Send SendKeepActive SetError SetExtended ' + 'ShellExecute ShellExecuteWait Shutdown Sin Sleep ' + 'SoundPlay SoundSetWaveVolume SplashImageOn SplashOff ' + 'SplashTextOn Sqrt SRandom StatusbarGetText StderrRead ' + 'StdinWrite StdioClose StdoutRead String StringAddCR ' + 'StringCompare StringFormat StringFromASCIIArray StringInStr ' + 'StringIsAlNum StringIsAlpha StringIsASCII StringIsDigit ' + 'StringIsFloat StringIsInt StringIsLower StringIsSpace ' + 'StringIsUpper StringIsXDigit StringLeft StringLen ' + 'StringLower StringMid StringRegExp StringRegExpReplace ' + 'StringReplace StringReverse StringRight StringSplit ' + 'StringStripCR StringStripWS StringToASCIIArray ' + 'StringToBinary StringTrimLeft StringTrimRight StringUpper ' + 'Tan TCPAccept TCPCloseSocket TCPConnect TCPListen ' + 'TCPNameToIP TCPRecv TCPSend TCPShutdown TCPStartup ' + 'TimerDiff TimerInit ToolTip TrayCreateItem TrayCreateMenu ' + 'TrayGetMsg TrayItemDelete TrayItemGetHandle ' + 'TrayItemGetState TrayItemGetText TrayItemSetOnEvent ' + 'TrayItemSetState TrayItemSetText TraySetClick TraySetIcon ' + 'TraySetOnEvent TraySetPauseIcon TraySetState TraySetToolTip ' + 'TrayTip UBound UDPBind UDPCloseSocket UDPOpen UDPRecv ' + 'UDPSend UDPShutdown UDPStartup VarGetType WinActivate ' + 'WinActive WinClose WinExists WinFlash WinGetCaretPos ' + 'WinGetClassList WinGetClientSize WinGetHandle WinGetPos ' + 'WinGetProcess WinGetState WinGetText WinGetTitle WinKill ' + 'WinList WinMenuSelectItem WinMinimizeAll WinMinimizeAllUndo ' + 'WinMove WinSetOnTop WinSetState WinSetTitle WinSetTrans ' + 'WinWait WinWaitActive WinWaitClose WinWaitNotActive ' + 'Array1DToHistogram ArrayAdd ArrayBinarySearch ' + 'ArrayColDelete ArrayColInsert ArrayCombinations ' + 'ArrayConcatenate ArrayDelete ArrayDisplay ArrayExtract ' + 'ArrayFindAll ArrayInsert ArrayMax ArrayMaxIndex ArrayMin ' + 'ArrayMinIndex ArrayPermute ArrayPop ArrayPush ' + 'ArrayReverse ArraySearch ArrayShuffle ArraySort ArraySwap ' + 'ArrayToClip ArrayToString ArrayTranspose ArrayTrim ' + 'ArrayUnique Assert ChooseColor ChooseFont ' + 'ClipBoard_ChangeChain ClipBoard_Close ClipBoard_CountFormats ' + 'ClipBoard_Empty ClipBoard_EnumFormats ClipBoard_FormatStr ' + 'ClipBoard_GetData ClipBoard_GetDataEx ClipBoard_GetFormatName ' + 'ClipBoard_GetOpenWindow ClipBoard_GetOwner ' + 'ClipBoard_GetPriorityFormat ClipBoard_GetSequenceNumber ' + 'ClipBoard_GetViewer ClipBoard_IsFormatAvailable ' + 'ClipBoard_Open ClipBoard_RegisterFormat ClipBoard_SetData ' + 'ClipBoard_SetDataEx ClipBoard_SetViewer ClipPutFile ' + 'ColorConvertHSLtoRGB ColorConvertRGBtoHSL ColorGetBlue ' + 'ColorGetCOLORREF ColorGetGreen ColorGetRed ColorGetRGB ' + 'ColorSetCOLORREF ColorSetRGB Crypt_DecryptData ' + 'Crypt_DecryptFile Crypt_DeriveKey Crypt_DestroyKey ' + 'Crypt_EncryptData Crypt_EncryptFile Crypt_GenRandom ' + 'Crypt_HashData Crypt_HashFile Crypt_Shutdown Crypt_Startup ' + 'DateAdd DateDayOfWeek DateDaysInMonth DateDiff ' + 'DateIsLeapYear DateIsValid DateTimeFormat DateTimeSplit ' + 'DateToDayOfWeek DateToDayOfWeekISO DateToDayValue ' + 'DateToMonth Date_Time_CompareFileTime ' + 'Date_Time_DOSDateTimeToArray Date_Time_DOSDateTimeToFileTime ' + 'Date_Time_DOSDateTimeToStr Date_Time_DOSDateToArray ' + 'Date_Time_DOSDateToStr Date_Time_DOSTimeToArray ' + 'Date_Time_DOSTimeToStr Date_Time_EncodeFileTime ' + 'Date_Time_EncodeSystemTime Date_Time_FileTimeToArray ' + 'Date_Time_FileTimeToDOSDateTime ' + 'Date_Time_FileTimeToLocalFileTime Date_Time_FileTimeToStr ' + 'Date_Time_FileTimeToSystemTime Date_Time_GetFileTime ' + 'Date_Time_GetLocalTime Date_Time_GetSystemTime ' + 'Date_Time_GetSystemTimeAdjustment ' + 'Date_Time_GetSystemTimeAsFileTime Date_Time_GetSystemTimes ' + 'Date_Time_GetTickCount Date_Time_GetTimeZoneInformation ' + 'Date_Time_LocalFileTimeToFileTime Date_Time_SetFileTime ' + 'Date_Time_SetLocalTime Date_Time_SetSystemTime ' + 'Date_Time_SetSystemTimeAdjustment ' + 'Date_Time_SetTimeZoneInformation Date_Time_SystemTimeToArray ' + 'Date_Time_SystemTimeToDateStr Date_Time_SystemTimeToDateTimeStr ' + 'Date_Time_SystemTimeToFileTime Date_Time_SystemTimeToTimeStr ' + 'Date_Time_SystemTimeToTzSpecificLocalTime ' + 'Date_Time_TzSpecificLocalTimeToSystemTime DayValueToDate ' + 'DebugBugReportEnv DebugCOMError DebugOut DebugReport ' + 'DebugReportEx DebugReportVar DebugSetup Degree ' + 'EventLog__Backup EventLog__Clear EventLog__Close ' + 'EventLog__Count EventLog__DeregisterSource EventLog__Full ' + 'EventLog__Notify EventLog__Oldest EventLog__Open ' + 'EventLog__OpenBackup EventLog__Read EventLog__RegisterSource ' + 'EventLog__Report Excel_BookAttach Excel_BookClose ' + 'Excel_BookList Excel_BookNew Excel_BookOpen ' + 'Excel_BookOpenText Excel_BookSave Excel_BookSaveAs ' + 'Excel_Close Excel_ColumnToLetter Excel_ColumnToNumber ' + 'Excel_ConvertFormula Excel_Export Excel_FilterGet ' + 'Excel_FilterSet Excel_Open Excel_PictureAdd Excel_Print ' + 'Excel_RangeCopyPaste Excel_RangeDelete Excel_RangeFind ' + 'Excel_RangeInsert Excel_RangeLinkAddRemove Excel_RangeRead ' + 'Excel_RangeReplace Excel_RangeSort Excel_RangeValidate ' + 'Excel_RangeWrite Excel_SheetAdd Excel_SheetCopyMove ' + 'Excel_SheetDelete Excel_SheetList FileCountLines FileCreate ' + 'FileListToArray FileListToArrayRec FilePrint ' + 'FileReadToArray FileWriteFromArray FileWriteLog ' + 'FileWriteToLine FTP_Close FTP_Command FTP_Connect ' + 'FTP_DecodeInternetStatus FTP_DirCreate FTP_DirDelete ' + 'FTP_DirGetCurrent FTP_DirPutContents FTP_DirSetCurrent ' + 'FTP_FileClose FTP_FileDelete FTP_FileGet FTP_FileGetSize ' + 'FTP_FileOpen FTP_FilePut FTP_FileRead FTP_FileRename ' + 'FTP_FileTimeLoHiToStr FTP_FindFileClose FTP_FindFileFirst ' + 'FTP_FindFileNext FTP_GetLastResponseInfo FTP_ListToArray ' + 'FTP_ListToArray2D FTP_ListToArrayEx FTP_Open ' + 'FTP_ProgressDownload FTP_ProgressUpload FTP_SetStatusCallback ' + 'GDIPlus_ArrowCapCreate GDIPlus_ArrowCapDispose ' + 'GDIPlus_ArrowCapGetFillState GDIPlus_ArrowCapGetHeight ' + 'GDIPlus_ArrowCapGetMiddleInset GDIPlus_ArrowCapGetWidth ' + 'GDIPlus_ArrowCapSetFillState GDIPlus_ArrowCapSetHeight ' + 'GDIPlus_ArrowCapSetMiddleInset GDIPlus_ArrowCapSetWidth ' + 'GDIPlus_BitmapApplyEffect GDIPlus_BitmapApplyEffectEx ' + 'GDIPlus_BitmapCloneArea GDIPlus_BitmapConvertFormat ' + 'GDIPlus_BitmapCreateApplyEffect ' + 'GDIPlus_BitmapCreateApplyEffectEx ' + 'GDIPlus_BitmapCreateDIBFromBitmap GDIPlus_BitmapCreateFromFile ' + 'GDIPlus_BitmapCreateFromGraphics ' + 'GDIPlus_BitmapCreateFromHBITMAP GDIPlus_BitmapCreateFromHICON ' + 'GDIPlus_BitmapCreateFromHICON32 GDIPlus_BitmapCreateFromMemory ' + 'GDIPlus_BitmapCreateFromResource GDIPlus_BitmapCreateFromScan0 ' + 'GDIPlus_BitmapCreateFromStream ' + 'GDIPlus_BitmapCreateHBITMAPFromBitmap GDIPlus_BitmapDispose ' + 'GDIPlus_BitmapGetHistogram GDIPlus_BitmapGetHistogramEx ' + 'GDIPlus_BitmapGetHistogramSize GDIPlus_BitmapGetPixel ' + 'GDIPlus_BitmapLockBits GDIPlus_BitmapSetPixel ' + 'GDIPlus_BitmapUnlockBits GDIPlus_BrushClone ' + 'GDIPlus_BrushCreateSolid GDIPlus_BrushDispose ' + 'GDIPlus_BrushGetSolidColor GDIPlus_BrushGetType ' + 'GDIPlus_BrushSetSolidColor GDIPlus_ColorMatrixCreate ' + 'GDIPlus_ColorMatrixCreateGrayScale ' + 'GDIPlus_ColorMatrixCreateNegative ' + 'GDIPlus_ColorMatrixCreateSaturation ' + 'GDIPlus_ColorMatrixCreateScale ' + 'GDIPlus_ColorMatrixCreateTranslate GDIPlus_CustomLineCapClone ' + 'GDIPlus_CustomLineCapCreate GDIPlus_CustomLineCapDispose ' + 'GDIPlus_CustomLineCapGetStrokeCaps ' + 'GDIPlus_CustomLineCapSetStrokeCaps GDIPlus_Decoders ' + 'GDIPlus_DecodersGetCount GDIPlus_DecodersGetSize ' + 'GDIPlus_DrawImageFX GDIPlus_DrawImageFXEx ' + 'GDIPlus_DrawImagePoints GDIPlus_EffectCreate ' + 'GDIPlus_EffectCreateBlur GDIPlus_EffectCreateBrightnessContrast ' + 'GDIPlus_EffectCreateColorBalance GDIPlus_EffectCreateColorCurve ' + 'GDIPlus_EffectCreateColorLUT GDIPlus_EffectCreateColorMatrix ' + 'GDIPlus_EffectCreateHueSaturationLightness ' + 'GDIPlus_EffectCreateLevels GDIPlus_EffectCreateRedEyeCorrection ' + 'GDIPlus_EffectCreateSharpen GDIPlus_EffectCreateTint ' + 'GDIPlus_EffectDispose GDIPlus_EffectGetParameters ' + 'GDIPlus_EffectSetParameters GDIPlus_Encoders ' + 'GDIPlus_EncodersGetCLSID GDIPlus_EncodersGetCount ' + 'GDIPlus_EncodersGetParamList GDIPlus_EncodersGetParamListSize ' + 'GDIPlus_EncodersGetSize GDIPlus_FontCreate ' + 'GDIPlus_FontDispose GDIPlus_FontFamilyCreate ' + 'GDIPlus_FontFamilyCreateFromCollection ' + 'GDIPlus_FontFamilyDispose GDIPlus_FontFamilyGetCellAscent ' + 'GDIPlus_FontFamilyGetCellDescent GDIPlus_FontFamilyGetEmHeight ' + 'GDIPlus_FontFamilyGetLineSpacing GDIPlus_FontGetHeight ' + 'GDIPlus_FontPrivateAddFont GDIPlus_FontPrivateAddMemoryFont ' + 'GDIPlus_FontPrivateCollectionDispose ' + 'GDIPlus_FontPrivateCreateCollection GDIPlus_GraphicsClear ' + 'GDIPlus_GraphicsCreateFromHDC GDIPlus_GraphicsCreateFromHWND ' + 'GDIPlus_GraphicsDispose GDIPlus_GraphicsDrawArc ' + 'GDIPlus_GraphicsDrawBezier GDIPlus_GraphicsDrawClosedCurve ' + 'GDIPlus_GraphicsDrawClosedCurve2 GDIPlus_GraphicsDrawCurve ' + 'GDIPlus_GraphicsDrawCurve2 GDIPlus_GraphicsDrawEllipse ' + 'GDIPlus_GraphicsDrawImage GDIPlus_GraphicsDrawImagePointsRect ' + 'GDIPlus_GraphicsDrawImageRect GDIPlus_GraphicsDrawImageRectRect ' + 'GDIPlus_GraphicsDrawLine GDIPlus_GraphicsDrawPath ' + 'GDIPlus_GraphicsDrawPie GDIPlus_GraphicsDrawPolygon ' + 'GDIPlus_GraphicsDrawRect GDIPlus_GraphicsDrawString ' + 'GDIPlus_GraphicsDrawStringEx GDIPlus_GraphicsFillClosedCurve ' + 'GDIPlus_GraphicsFillClosedCurve2 GDIPlus_GraphicsFillEllipse ' + 'GDIPlus_GraphicsFillPath GDIPlus_GraphicsFillPie ' + 'GDIPlus_GraphicsFillPolygon GDIPlus_GraphicsFillRect ' + 'GDIPlus_GraphicsFillRegion GDIPlus_GraphicsGetCompositingMode ' + 'GDIPlus_GraphicsGetCompositingQuality GDIPlus_GraphicsGetDC ' + 'GDIPlus_GraphicsGetInterpolationMode ' + 'GDIPlus_GraphicsGetSmoothingMode GDIPlus_GraphicsGetTransform ' + 'GDIPlus_GraphicsMeasureCharacterRanges ' + 'GDIPlus_GraphicsMeasureString GDIPlus_GraphicsReleaseDC ' + 'GDIPlus_GraphicsResetClip GDIPlus_GraphicsResetTransform ' + 'GDIPlus_GraphicsRestore GDIPlus_GraphicsRotateTransform ' + 'GDIPlus_GraphicsSave GDIPlus_GraphicsScaleTransform ' + 'GDIPlus_GraphicsSetClipPath GDIPlus_GraphicsSetClipRect ' + 'GDIPlus_GraphicsSetClipRegion ' + 'GDIPlus_GraphicsSetCompositingMode ' + 'GDIPlus_GraphicsSetCompositingQuality ' + 'GDIPlus_GraphicsSetInterpolationMode ' + 'GDIPlus_GraphicsSetPixelOffsetMode ' + 'GDIPlus_GraphicsSetSmoothingMode ' + 'GDIPlus_GraphicsSetTextRenderingHint ' + 'GDIPlus_GraphicsSetTransform GDIPlus_GraphicsTransformPoints ' + 'GDIPlus_GraphicsTranslateTransform GDIPlus_HatchBrushCreate ' + 'GDIPlus_HICONCreateFromBitmap GDIPlus_ImageAttributesCreate ' + 'GDIPlus_ImageAttributesDispose ' + 'GDIPlus_ImageAttributesSetColorKeys ' + 'GDIPlus_ImageAttributesSetColorMatrix GDIPlus_ImageDispose ' + 'GDIPlus_ImageGetDimension GDIPlus_ImageGetFlags ' + 'GDIPlus_ImageGetGraphicsContext GDIPlus_ImageGetHeight ' + 'GDIPlus_ImageGetHorizontalResolution ' + 'GDIPlus_ImageGetPixelFormat GDIPlus_ImageGetRawFormat ' + 'GDIPlus_ImageGetThumbnail GDIPlus_ImageGetType ' + 'GDIPlus_ImageGetVerticalResolution GDIPlus_ImageGetWidth ' + 'GDIPlus_ImageLoadFromFile GDIPlus_ImageLoadFromStream ' + 'GDIPlus_ImageResize GDIPlus_ImageRotateFlip ' + 'GDIPlus_ImageSaveToFile GDIPlus_ImageSaveToFileEx ' + 'GDIPlus_ImageSaveToStream GDIPlus_ImageScale ' + 'GDIPlus_LineBrushCreate GDIPlus_LineBrushCreateFromRect ' + 'GDIPlus_LineBrushCreateFromRectWithAngle ' + 'GDIPlus_LineBrushGetColors GDIPlus_LineBrushGetRect ' + 'GDIPlus_LineBrushMultiplyTransform ' + 'GDIPlus_LineBrushResetTransform GDIPlus_LineBrushSetBlend ' + 'GDIPlus_LineBrushSetColors GDIPlus_LineBrushSetGammaCorrection ' + 'GDIPlus_LineBrushSetLinearBlend GDIPlus_LineBrushSetPresetBlend ' + 'GDIPlus_LineBrushSetSigmaBlend GDIPlus_LineBrushSetTransform ' + 'GDIPlus_MatrixClone GDIPlus_MatrixCreate ' + 'GDIPlus_MatrixDispose GDIPlus_MatrixGetElements ' + 'GDIPlus_MatrixInvert GDIPlus_MatrixMultiply ' + 'GDIPlus_MatrixRotate GDIPlus_MatrixScale ' + 'GDIPlus_MatrixSetElements GDIPlus_MatrixShear ' + 'GDIPlus_MatrixTransformPoints GDIPlus_MatrixTranslate ' + 'GDIPlus_PaletteInitialize GDIPlus_ParamAdd GDIPlus_ParamInit ' + 'GDIPlus_ParamSize GDIPlus_PathAddArc GDIPlus_PathAddBezier ' + 'GDIPlus_PathAddClosedCurve GDIPlus_PathAddClosedCurve2 ' + 'GDIPlus_PathAddCurve GDIPlus_PathAddCurve2 ' + 'GDIPlus_PathAddCurve3 GDIPlus_PathAddEllipse ' + 'GDIPlus_PathAddLine GDIPlus_PathAddLine2 GDIPlus_PathAddPath ' + 'GDIPlus_PathAddPie GDIPlus_PathAddPolygon ' + 'GDIPlus_PathAddRectangle GDIPlus_PathAddString ' + 'GDIPlus_PathBrushCreate GDIPlus_PathBrushCreateFromPath ' + 'GDIPlus_PathBrushGetCenterPoint GDIPlus_PathBrushGetFocusScales ' + 'GDIPlus_PathBrushGetPointCount GDIPlus_PathBrushGetRect ' + 'GDIPlus_PathBrushGetWrapMode GDIPlus_PathBrushMultiplyTransform ' + 'GDIPlus_PathBrushResetTransform GDIPlus_PathBrushSetBlend ' + 'GDIPlus_PathBrushSetCenterColor GDIPlus_PathBrushSetCenterPoint ' + 'GDIPlus_PathBrushSetFocusScales ' + 'GDIPlus_PathBrushSetGammaCorrection ' + 'GDIPlus_PathBrushSetLinearBlend GDIPlus_PathBrushSetPresetBlend ' + 'GDIPlus_PathBrushSetSigmaBlend ' + 'GDIPlus_PathBrushSetSurroundColor ' + 'GDIPlus_PathBrushSetSurroundColorsWithCount ' + 'GDIPlus_PathBrushSetTransform GDIPlus_PathBrushSetWrapMode ' + 'GDIPlus_PathClone GDIPlus_PathCloseFigure GDIPlus_PathCreate ' + 'GDIPlus_PathCreate2 GDIPlus_PathDispose GDIPlus_PathFlatten ' + 'GDIPlus_PathGetData GDIPlus_PathGetFillMode ' + 'GDIPlus_PathGetLastPoint GDIPlus_PathGetPointCount ' + 'GDIPlus_PathGetPoints GDIPlus_PathGetWorldBounds ' + 'GDIPlus_PathIsOutlineVisiblePoint GDIPlus_PathIsVisiblePoint ' + 'GDIPlus_PathIterCreate GDIPlus_PathIterDispose ' + 'GDIPlus_PathIterGetSubpathCount GDIPlus_PathIterNextMarkerPath ' + 'GDIPlus_PathIterNextSubpathPath GDIPlus_PathIterRewind ' + 'GDIPlus_PathReset GDIPlus_PathReverse GDIPlus_PathSetFillMode ' + 'GDIPlus_PathSetMarker GDIPlus_PathStartFigure ' + 'GDIPlus_PathTransform GDIPlus_PathWarp GDIPlus_PathWiden ' + 'GDIPlus_PathWindingModeOutline GDIPlus_PenCreate ' + 'GDIPlus_PenCreate2 GDIPlus_PenDispose GDIPlus_PenGetAlignment ' + 'GDIPlus_PenGetColor GDIPlus_PenGetCustomEndCap ' + 'GDIPlus_PenGetDashCap GDIPlus_PenGetDashStyle ' + 'GDIPlus_PenGetEndCap GDIPlus_PenGetMiterLimit ' + 'GDIPlus_PenGetWidth GDIPlus_PenSetAlignment ' + 'GDIPlus_PenSetColor GDIPlus_PenSetCustomEndCap ' + 'GDIPlus_PenSetDashCap GDIPlus_PenSetDashStyle ' + 'GDIPlus_PenSetEndCap GDIPlus_PenSetLineCap ' + 'GDIPlus_PenSetLineJoin GDIPlus_PenSetMiterLimit ' + 'GDIPlus_PenSetStartCap GDIPlus_PenSetWidth ' + 'GDIPlus_RectFCreate GDIPlus_RegionClone ' + 'GDIPlus_RegionCombinePath GDIPlus_RegionCombineRect ' + 'GDIPlus_RegionCombineRegion GDIPlus_RegionCreate ' + 'GDIPlus_RegionCreateFromPath GDIPlus_RegionCreateFromRect ' + 'GDIPlus_RegionDispose GDIPlus_RegionGetBounds ' + 'GDIPlus_RegionGetHRgn GDIPlus_RegionTransform ' + 'GDIPlus_RegionTranslate GDIPlus_Shutdown GDIPlus_Startup ' + 'GDIPlus_StringFormatCreate GDIPlus_StringFormatDispose ' + 'GDIPlus_StringFormatGetMeasurableCharacterRangeCount ' + 'GDIPlus_StringFormatSetAlign GDIPlus_StringFormatSetLineAlign ' + 'GDIPlus_StringFormatSetMeasurableCharacterRanges ' + 'GDIPlus_TextureCreate GDIPlus_TextureCreate2 ' + 'GDIPlus_TextureCreateIA GetIP GUICtrlAVI_Close ' + 'GUICtrlAVI_Create GUICtrlAVI_Destroy GUICtrlAVI_IsPlaying ' + 'GUICtrlAVI_Open GUICtrlAVI_OpenEx GUICtrlAVI_Play ' + 'GUICtrlAVI_Seek GUICtrlAVI_Show GUICtrlAVI_Stop ' + 'GUICtrlButton_Click GUICtrlButton_Create ' + 'GUICtrlButton_Destroy GUICtrlButton_Enable ' + 'GUICtrlButton_GetCheck GUICtrlButton_GetFocus ' + 'GUICtrlButton_GetIdealSize GUICtrlButton_GetImage ' + 'GUICtrlButton_GetImageList GUICtrlButton_GetNote ' + 'GUICtrlButton_GetNoteLength GUICtrlButton_GetSplitInfo ' + 'GUICtrlButton_GetState GUICtrlButton_GetText ' + 'GUICtrlButton_GetTextMargin GUICtrlButton_SetCheck ' + 'GUICtrlButton_SetDontClick GUICtrlButton_SetFocus ' + 'GUICtrlButton_SetImage GUICtrlButton_SetImageList ' + 'GUICtrlButton_SetNote GUICtrlButton_SetShield ' + 'GUICtrlButton_SetSize GUICtrlButton_SetSplitInfo ' + 'GUICtrlButton_SetState GUICtrlButton_SetStyle ' + 'GUICtrlButton_SetText GUICtrlButton_SetTextMargin ' + 'GUICtrlButton_Show GUICtrlComboBoxEx_AddDir ' + 'GUICtrlComboBoxEx_AddString GUICtrlComboBoxEx_BeginUpdate ' + 'GUICtrlComboBoxEx_Create GUICtrlComboBoxEx_CreateSolidBitMap ' + 'GUICtrlComboBoxEx_DeleteString GUICtrlComboBoxEx_Destroy ' + 'GUICtrlComboBoxEx_EndUpdate GUICtrlComboBoxEx_FindStringExact ' + 'GUICtrlComboBoxEx_GetComboBoxInfo ' + 'GUICtrlComboBoxEx_GetComboControl GUICtrlComboBoxEx_GetCount ' + 'GUICtrlComboBoxEx_GetCurSel ' + 'GUICtrlComboBoxEx_GetDroppedControlRect ' + 'GUICtrlComboBoxEx_GetDroppedControlRectEx ' + 'GUICtrlComboBoxEx_GetDroppedState ' + 'GUICtrlComboBoxEx_GetDroppedWidth ' + 'GUICtrlComboBoxEx_GetEditControl GUICtrlComboBoxEx_GetEditSel ' + 'GUICtrlComboBoxEx_GetEditText ' + 'GUICtrlComboBoxEx_GetExtendedStyle ' + 'GUICtrlComboBoxEx_GetExtendedUI GUICtrlComboBoxEx_GetImageList ' + 'GUICtrlComboBoxEx_GetItem GUICtrlComboBoxEx_GetItemEx ' + 'GUICtrlComboBoxEx_GetItemHeight GUICtrlComboBoxEx_GetItemImage ' + 'GUICtrlComboBoxEx_GetItemIndent ' + 'GUICtrlComboBoxEx_GetItemOverlayImage ' + 'GUICtrlComboBoxEx_GetItemParam ' + 'GUICtrlComboBoxEx_GetItemSelectedImage ' + 'GUICtrlComboBoxEx_GetItemText GUICtrlComboBoxEx_GetItemTextLen ' + 'GUICtrlComboBoxEx_GetList GUICtrlComboBoxEx_GetListArray ' + 'GUICtrlComboBoxEx_GetLocale GUICtrlComboBoxEx_GetLocaleCountry ' + 'GUICtrlComboBoxEx_GetLocaleLang ' + 'GUICtrlComboBoxEx_GetLocalePrimLang ' + 'GUICtrlComboBoxEx_GetLocaleSubLang ' + 'GUICtrlComboBoxEx_GetMinVisible GUICtrlComboBoxEx_GetTopIndex ' + 'GUICtrlComboBoxEx_GetUnicode GUICtrlComboBoxEx_InitStorage ' + 'GUICtrlComboBoxEx_InsertString GUICtrlComboBoxEx_LimitText ' + 'GUICtrlComboBoxEx_ReplaceEditSel GUICtrlComboBoxEx_ResetContent ' + 'GUICtrlComboBoxEx_SetCurSel GUICtrlComboBoxEx_SetDroppedWidth ' + 'GUICtrlComboBoxEx_SetEditSel GUICtrlComboBoxEx_SetEditText ' + 'GUICtrlComboBoxEx_SetExtendedStyle ' + 'GUICtrlComboBoxEx_SetExtendedUI GUICtrlComboBoxEx_SetImageList ' + 'GUICtrlComboBoxEx_SetItem GUICtrlComboBoxEx_SetItemEx ' + 'GUICtrlComboBoxEx_SetItemHeight GUICtrlComboBoxEx_SetItemImage ' + 'GUICtrlComboBoxEx_SetItemIndent ' + 'GUICtrlComboBoxEx_SetItemOverlayImage ' + 'GUICtrlComboBoxEx_SetItemParam ' + 'GUICtrlComboBoxEx_SetItemSelectedImage ' + 'GUICtrlComboBoxEx_SetMinVisible GUICtrlComboBoxEx_SetTopIndex ' + 'GUICtrlComboBoxEx_SetUnicode GUICtrlComboBoxEx_ShowDropDown ' + 'GUICtrlComboBox_AddDir GUICtrlComboBox_AddString ' + 'GUICtrlComboBox_AutoComplete GUICtrlComboBox_BeginUpdate ' + 'GUICtrlComboBox_Create GUICtrlComboBox_DeleteString ' + 'GUICtrlComboBox_Destroy GUICtrlComboBox_EndUpdate ' + 'GUICtrlComboBox_FindString GUICtrlComboBox_FindStringExact ' + 'GUICtrlComboBox_GetComboBoxInfo GUICtrlComboBox_GetCount ' + 'GUICtrlComboBox_GetCueBanner GUICtrlComboBox_GetCurSel ' + 'GUICtrlComboBox_GetDroppedControlRect ' + 'GUICtrlComboBox_GetDroppedControlRectEx ' + 'GUICtrlComboBox_GetDroppedState GUICtrlComboBox_GetDroppedWidth ' + 'GUICtrlComboBox_GetEditSel GUICtrlComboBox_GetEditText ' + 'GUICtrlComboBox_GetExtendedUI ' + 'GUICtrlComboBox_GetHorizontalExtent ' + 'GUICtrlComboBox_GetItemHeight GUICtrlComboBox_GetLBText ' + 'GUICtrlComboBox_GetLBTextLen GUICtrlComboBox_GetList ' + 'GUICtrlComboBox_GetListArray GUICtrlComboBox_GetLocale ' + 'GUICtrlComboBox_GetLocaleCountry GUICtrlComboBox_GetLocaleLang ' + 'GUICtrlComboBox_GetLocalePrimLang ' + 'GUICtrlComboBox_GetLocaleSubLang GUICtrlComboBox_GetMinVisible ' + 'GUICtrlComboBox_GetTopIndex GUICtrlComboBox_InitStorage ' + 'GUICtrlComboBox_InsertString GUICtrlComboBox_LimitText ' + 'GUICtrlComboBox_ReplaceEditSel GUICtrlComboBox_ResetContent ' + 'GUICtrlComboBox_SelectString GUICtrlComboBox_SetCueBanner ' + 'GUICtrlComboBox_SetCurSel GUICtrlComboBox_SetDroppedWidth ' + 'GUICtrlComboBox_SetEditSel GUICtrlComboBox_SetEditText ' + 'GUICtrlComboBox_SetExtendedUI ' + 'GUICtrlComboBox_SetHorizontalExtent ' + 'GUICtrlComboBox_SetItemHeight GUICtrlComboBox_SetMinVisible ' + 'GUICtrlComboBox_SetTopIndex GUICtrlComboBox_ShowDropDown ' + 'GUICtrlDTP_Create GUICtrlDTP_Destroy GUICtrlDTP_GetMCColor ' + 'GUICtrlDTP_GetMCFont GUICtrlDTP_GetMonthCal ' + 'GUICtrlDTP_GetRange GUICtrlDTP_GetRangeEx ' + 'GUICtrlDTP_GetSystemTime GUICtrlDTP_GetSystemTimeEx ' + 'GUICtrlDTP_SetFormat GUICtrlDTP_SetMCColor ' + 'GUICtrlDTP_SetMCFont GUICtrlDTP_SetRange ' + 'GUICtrlDTP_SetRangeEx GUICtrlDTP_SetSystemTime ' + 'GUICtrlDTP_SetSystemTimeEx GUICtrlEdit_AppendText ' + 'GUICtrlEdit_BeginUpdate GUICtrlEdit_CanUndo ' + 'GUICtrlEdit_CharFromPos GUICtrlEdit_Create ' + 'GUICtrlEdit_Destroy GUICtrlEdit_EmptyUndoBuffer ' + 'GUICtrlEdit_EndUpdate GUICtrlEdit_Find GUICtrlEdit_FmtLines ' + 'GUICtrlEdit_GetCueBanner GUICtrlEdit_GetFirstVisibleLine ' + 'GUICtrlEdit_GetLimitText GUICtrlEdit_GetLine ' + 'GUICtrlEdit_GetLineCount GUICtrlEdit_GetMargins ' + 'GUICtrlEdit_GetModify GUICtrlEdit_GetPasswordChar ' + 'GUICtrlEdit_GetRECT GUICtrlEdit_GetRECTEx GUICtrlEdit_GetSel ' + 'GUICtrlEdit_GetText GUICtrlEdit_GetTextLen ' + 'GUICtrlEdit_HideBalloonTip GUICtrlEdit_InsertText ' + 'GUICtrlEdit_LineFromChar GUICtrlEdit_LineIndex ' + 'GUICtrlEdit_LineLength GUICtrlEdit_LineScroll ' + 'GUICtrlEdit_PosFromChar GUICtrlEdit_ReplaceSel ' + 'GUICtrlEdit_Scroll GUICtrlEdit_SetCueBanner ' + 'GUICtrlEdit_SetLimitText GUICtrlEdit_SetMargins ' + 'GUICtrlEdit_SetModify GUICtrlEdit_SetPasswordChar ' + 'GUICtrlEdit_SetReadOnly GUICtrlEdit_SetRECT ' + 'GUICtrlEdit_SetRECTEx GUICtrlEdit_SetRECTNP ' + 'GUICtrlEdit_SetRectNPEx GUICtrlEdit_SetSel ' + 'GUICtrlEdit_SetTabStops GUICtrlEdit_SetText ' + 'GUICtrlEdit_ShowBalloonTip GUICtrlEdit_Undo ' + 'GUICtrlHeader_AddItem GUICtrlHeader_ClearFilter ' + 'GUICtrlHeader_ClearFilterAll GUICtrlHeader_Create ' + 'GUICtrlHeader_CreateDragImage GUICtrlHeader_DeleteItem ' + 'GUICtrlHeader_Destroy GUICtrlHeader_EditFilter ' + 'GUICtrlHeader_GetBitmapMargin GUICtrlHeader_GetImageList ' + 'GUICtrlHeader_GetItem GUICtrlHeader_GetItemAlign ' + 'GUICtrlHeader_GetItemBitmap GUICtrlHeader_GetItemCount ' + 'GUICtrlHeader_GetItemDisplay GUICtrlHeader_GetItemFlags ' + 'GUICtrlHeader_GetItemFormat GUICtrlHeader_GetItemImage ' + 'GUICtrlHeader_GetItemOrder GUICtrlHeader_GetItemParam ' + 'GUICtrlHeader_GetItemRect GUICtrlHeader_GetItemRectEx ' + 'GUICtrlHeader_GetItemText GUICtrlHeader_GetItemWidth ' + 'GUICtrlHeader_GetOrderArray GUICtrlHeader_GetUnicodeFormat ' + 'GUICtrlHeader_HitTest GUICtrlHeader_InsertItem ' + 'GUICtrlHeader_Layout GUICtrlHeader_OrderToIndex ' + 'GUICtrlHeader_SetBitmapMargin ' + 'GUICtrlHeader_SetFilterChangeTimeout ' + 'GUICtrlHeader_SetHotDivider GUICtrlHeader_SetImageList ' + 'GUICtrlHeader_SetItem GUICtrlHeader_SetItemAlign ' + 'GUICtrlHeader_SetItemBitmap GUICtrlHeader_SetItemDisplay ' + 'GUICtrlHeader_SetItemFlags GUICtrlHeader_SetItemFormat ' + 'GUICtrlHeader_SetItemImage GUICtrlHeader_SetItemOrder ' + 'GUICtrlHeader_SetItemParam GUICtrlHeader_SetItemText ' + 'GUICtrlHeader_SetItemWidth GUICtrlHeader_SetOrderArray ' + 'GUICtrlHeader_SetUnicodeFormat GUICtrlIpAddress_ClearAddress ' + 'GUICtrlIpAddress_Create GUICtrlIpAddress_Destroy ' + 'GUICtrlIpAddress_Get GUICtrlIpAddress_GetArray ' + 'GUICtrlIpAddress_GetEx GUICtrlIpAddress_IsBlank ' + 'GUICtrlIpAddress_Set GUICtrlIpAddress_SetArray ' + 'GUICtrlIpAddress_SetEx GUICtrlIpAddress_SetFocus ' + 'GUICtrlIpAddress_SetFont GUICtrlIpAddress_SetRange ' + 'GUICtrlIpAddress_ShowHide GUICtrlListBox_AddFile ' + 'GUICtrlListBox_AddString GUICtrlListBox_BeginUpdate ' + 'GUICtrlListBox_ClickItem GUICtrlListBox_Create ' + 'GUICtrlListBox_DeleteString GUICtrlListBox_Destroy ' + 'GUICtrlListBox_Dir GUICtrlListBox_EndUpdate ' + 'GUICtrlListBox_FindInText GUICtrlListBox_FindString ' + 'GUICtrlListBox_GetAnchorIndex GUICtrlListBox_GetCaretIndex ' + 'GUICtrlListBox_GetCount GUICtrlListBox_GetCurSel ' + 'GUICtrlListBox_GetHorizontalExtent GUICtrlListBox_GetItemData ' + 'GUICtrlListBox_GetItemHeight GUICtrlListBox_GetItemRect ' + 'GUICtrlListBox_GetItemRectEx GUICtrlListBox_GetListBoxInfo ' + 'GUICtrlListBox_GetLocale GUICtrlListBox_GetLocaleCountry ' + 'GUICtrlListBox_GetLocaleLang GUICtrlListBox_GetLocalePrimLang ' + 'GUICtrlListBox_GetLocaleSubLang GUICtrlListBox_GetSel ' + 'GUICtrlListBox_GetSelCount GUICtrlListBox_GetSelItems ' + 'GUICtrlListBox_GetSelItemsText GUICtrlListBox_GetText ' + 'GUICtrlListBox_GetTextLen GUICtrlListBox_GetTopIndex ' + 'GUICtrlListBox_InitStorage GUICtrlListBox_InsertString ' + 'GUICtrlListBox_ItemFromPoint GUICtrlListBox_ReplaceString ' + 'GUICtrlListBox_ResetContent GUICtrlListBox_SelectString ' + 'GUICtrlListBox_SelItemRange GUICtrlListBox_SelItemRangeEx ' + 'GUICtrlListBox_SetAnchorIndex GUICtrlListBox_SetCaretIndex ' + 'GUICtrlListBox_SetColumnWidth GUICtrlListBox_SetCurSel ' + 'GUICtrlListBox_SetHorizontalExtent GUICtrlListBox_SetItemData ' + 'GUICtrlListBox_SetItemHeight GUICtrlListBox_SetLocale ' + 'GUICtrlListBox_SetSel GUICtrlListBox_SetTabStops ' + 'GUICtrlListBox_SetTopIndex GUICtrlListBox_Sort ' + 'GUICtrlListBox_SwapString GUICtrlListBox_UpdateHScroll ' + 'GUICtrlListView_AddArray GUICtrlListView_AddColumn ' + 'GUICtrlListView_AddItem GUICtrlListView_AddSubItem ' + 'GUICtrlListView_ApproximateViewHeight ' + 'GUICtrlListView_ApproximateViewRect ' + 'GUICtrlListView_ApproximateViewWidth GUICtrlListView_Arrange ' + 'GUICtrlListView_BeginUpdate GUICtrlListView_CancelEditLabel ' + 'GUICtrlListView_ClickItem GUICtrlListView_CopyItems ' + 'GUICtrlListView_Create GUICtrlListView_CreateDragImage ' + 'GUICtrlListView_CreateSolidBitMap ' + 'GUICtrlListView_DeleteAllItems GUICtrlListView_DeleteColumn ' + 'GUICtrlListView_DeleteItem GUICtrlListView_DeleteItemsSelected ' + 'GUICtrlListView_Destroy GUICtrlListView_DrawDragImage ' + 'GUICtrlListView_EditLabel GUICtrlListView_EnableGroupView ' + 'GUICtrlListView_EndUpdate GUICtrlListView_EnsureVisible ' + 'GUICtrlListView_FindInText GUICtrlListView_FindItem ' + 'GUICtrlListView_FindNearest GUICtrlListView_FindParam ' + 'GUICtrlListView_FindText GUICtrlListView_GetBkColor ' + 'GUICtrlListView_GetBkImage GUICtrlListView_GetCallbackMask ' + 'GUICtrlListView_GetColumn GUICtrlListView_GetColumnCount ' + 'GUICtrlListView_GetColumnOrder ' + 'GUICtrlListView_GetColumnOrderArray ' + 'GUICtrlListView_GetColumnWidth GUICtrlListView_GetCounterPage ' + 'GUICtrlListView_GetEditControl ' + 'GUICtrlListView_GetExtendedListViewStyle ' + 'GUICtrlListView_GetFocusedGroup GUICtrlListView_GetGroupCount ' + 'GUICtrlListView_GetGroupInfo ' + 'GUICtrlListView_GetGroupInfoByIndex ' + 'GUICtrlListView_GetGroupRect ' + 'GUICtrlListView_GetGroupViewEnabled GUICtrlListView_GetHeader ' + 'GUICtrlListView_GetHotCursor GUICtrlListView_GetHotItem ' + 'GUICtrlListView_GetHoverTime GUICtrlListView_GetImageList ' + 'GUICtrlListView_GetISearchString GUICtrlListView_GetItem ' + 'GUICtrlListView_GetItemChecked GUICtrlListView_GetItemCount ' + 'GUICtrlListView_GetItemCut GUICtrlListView_GetItemDropHilited ' + 'GUICtrlListView_GetItemEx GUICtrlListView_GetItemFocused ' + 'GUICtrlListView_GetItemGroupID GUICtrlListView_GetItemImage ' + 'GUICtrlListView_GetItemIndent GUICtrlListView_GetItemParam ' + 'GUICtrlListView_GetItemPosition ' + 'GUICtrlListView_GetItemPositionX ' + 'GUICtrlListView_GetItemPositionY GUICtrlListView_GetItemRect ' + 'GUICtrlListView_GetItemRectEx GUICtrlListView_GetItemSelected ' + 'GUICtrlListView_GetItemSpacing GUICtrlListView_GetItemSpacingX ' + 'GUICtrlListView_GetItemSpacingY GUICtrlListView_GetItemState ' + 'GUICtrlListView_GetItemStateImage GUICtrlListView_GetItemText ' + 'GUICtrlListView_GetItemTextArray ' + 'GUICtrlListView_GetItemTextString GUICtrlListView_GetNextItem ' + 'GUICtrlListView_GetNumberOfWorkAreas GUICtrlListView_GetOrigin ' + 'GUICtrlListView_GetOriginX GUICtrlListView_GetOriginY ' + 'GUICtrlListView_GetOutlineColor ' + 'GUICtrlListView_GetSelectedColumn ' + 'GUICtrlListView_GetSelectedCount ' + 'GUICtrlListView_GetSelectedIndices ' + 'GUICtrlListView_GetSelectionMark GUICtrlListView_GetStringWidth ' + 'GUICtrlListView_GetSubItemRect GUICtrlListView_GetTextBkColor ' + 'GUICtrlListView_GetTextColor GUICtrlListView_GetToolTips ' + 'GUICtrlListView_GetTopIndex GUICtrlListView_GetUnicodeFormat ' + 'GUICtrlListView_GetView GUICtrlListView_GetViewDetails ' + 'GUICtrlListView_GetViewLarge GUICtrlListView_GetViewList ' + 'GUICtrlListView_GetViewRect GUICtrlListView_GetViewSmall ' + 'GUICtrlListView_GetViewTile GUICtrlListView_HideColumn ' + 'GUICtrlListView_HitTest GUICtrlListView_InsertColumn ' + 'GUICtrlListView_InsertGroup GUICtrlListView_InsertItem ' + 'GUICtrlListView_JustifyColumn GUICtrlListView_MapIDToIndex ' + 'GUICtrlListView_MapIndexToID GUICtrlListView_RedrawItems ' + 'GUICtrlListView_RegisterSortCallBack ' + 'GUICtrlListView_RemoveAllGroups GUICtrlListView_RemoveGroup ' + 'GUICtrlListView_Scroll GUICtrlListView_SetBkColor ' + 'GUICtrlListView_SetBkImage GUICtrlListView_SetCallBackMask ' + 'GUICtrlListView_SetColumn GUICtrlListView_SetColumnOrder ' + 'GUICtrlListView_SetColumnOrderArray ' + 'GUICtrlListView_SetColumnWidth ' + 'GUICtrlListView_SetExtendedListViewStyle ' + 'GUICtrlListView_SetGroupInfo GUICtrlListView_SetHotItem ' + 'GUICtrlListView_SetHoverTime GUICtrlListView_SetIconSpacing ' + 'GUICtrlListView_SetImageList GUICtrlListView_SetItem ' + 'GUICtrlListView_SetItemChecked GUICtrlListView_SetItemCount ' + 'GUICtrlListView_SetItemCut GUICtrlListView_SetItemDropHilited ' + 'GUICtrlListView_SetItemEx GUICtrlListView_SetItemFocused ' + 'GUICtrlListView_SetItemGroupID GUICtrlListView_SetItemImage ' + 'GUICtrlListView_SetItemIndent GUICtrlListView_SetItemParam ' + 'GUICtrlListView_SetItemPosition ' + 'GUICtrlListView_SetItemPosition32 ' + 'GUICtrlListView_SetItemSelected GUICtrlListView_SetItemState ' + 'GUICtrlListView_SetItemStateImage GUICtrlListView_SetItemText ' + 'GUICtrlListView_SetOutlineColor ' + 'GUICtrlListView_SetSelectedColumn ' + 'GUICtrlListView_SetSelectionMark GUICtrlListView_SetTextBkColor ' + 'GUICtrlListView_SetTextColor GUICtrlListView_SetToolTips ' + 'GUICtrlListView_SetUnicodeFormat GUICtrlListView_SetView ' + 'GUICtrlListView_SetWorkAreas GUICtrlListView_SimpleSort ' + 'GUICtrlListView_SortItems GUICtrlListView_SubItemHitTest ' + 'GUICtrlListView_UnRegisterSortCallBack GUICtrlMenu_AddMenuItem ' + 'GUICtrlMenu_AppendMenu GUICtrlMenu_CalculatePopupWindowPosition ' + 'GUICtrlMenu_CheckMenuItem GUICtrlMenu_CheckRadioItem ' + 'GUICtrlMenu_CreateMenu GUICtrlMenu_CreatePopup ' + 'GUICtrlMenu_DeleteMenu GUICtrlMenu_DestroyMenu ' + 'GUICtrlMenu_DrawMenuBar GUICtrlMenu_EnableMenuItem ' + 'GUICtrlMenu_FindItem GUICtrlMenu_FindParent ' + 'GUICtrlMenu_GetItemBmp GUICtrlMenu_GetItemBmpChecked ' + 'GUICtrlMenu_GetItemBmpUnchecked GUICtrlMenu_GetItemChecked ' + 'GUICtrlMenu_GetItemCount GUICtrlMenu_GetItemData ' + 'GUICtrlMenu_GetItemDefault GUICtrlMenu_GetItemDisabled ' + 'GUICtrlMenu_GetItemEnabled GUICtrlMenu_GetItemGrayed ' + 'GUICtrlMenu_GetItemHighlighted GUICtrlMenu_GetItemID ' + 'GUICtrlMenu_GetItemInfo GUICtrlMenu_GetItemRect ' + 'GUICtrlMenu_GetItemRectEx GUICtrlMenu_GetItemState ' + 'GUICtrlMenu_GetItemStateEx GUICtrlMenu_GetItemSubMenu ' + 'GUICtrlMenu_GetItemText GUICtrlMenu_GetItemType ' + 'GUICtrlMenu_GetMenu GUICtrlMenu_GetMenuBackground ' + 'GUICtrlMenu_GetMenuBarInfo GUICtrlMenu_GetMenuContextHelpID ' + 'GUICtrlMenu_GetMenuData GUICtrlMenu_GetMenuDefaultItem ' + 'GUICtrlMenu_GetMenuHeight GUICtrlMenu_GetMenuInfo ' + 'GUICtrlMenu_GetMenuStyle GUICtrlMenu_GetSystemMenu ' + 'GUICtrlMenu_InsertMenuItem GUICtrlMenu_InsertMenuItemEx ' + 'GUICtrlMenu_IsMenu GUICtrlMenu_LoadMenu ' + 'GUICtrlMenu_MapAccelerator GUICtrlMenu_MenuItemFromPoint ' + 'GUICtrlMenu_RemoveMenu GUICtrlMenu_SetItemBitmaps ' + 'GUICtrlMenu_SetItemBmp GUICtrlMenu_SetItemBmpChecked ' + 'GUICtrlMenu_SetItemBmpUnchecked GUICtrlMenu_SetItemChecked ' + 'GUICtrlMenu_SetItemData GUICtrlMenu_SetItemDefault ' + 'GUICtrlMenu_SetItemDisabled GUICtrlMenu_SetItemEnabled ' + 'GUICtrlMenu_SetItemGrayed GUICtrlMenu_SetItemHighlighted ' + 'GUICtrlMenu_SetItemID GUICtrlMenu_SetItemInfo ' + 'GUICtrlMenu_SetItemState GUICtrlMenu_SetItemSubMenu ' + 'GUICtrlMenu_SetItemText GUICtrlMenu_SetItemType ' + 'GUICtrlMenu_SetMenu GUICtrlMenu_SetMenuBackground ' + 'GUICtrlMenu_SetMenuContextHelpID GUICtrlMenu_SetMenuData ' + 'GUICtrlMenu_SetMenuDefaultItem GUICtrlMenu_SetMenuHeight ' + 'GUICtrlMenu_SetMenuInfo GUICtrlMenu_SetMenuStyle ' + 'GUICtrlMenu_TrackPopupMenu GUICtrlMonthCal_Create ' + 'GUICtrlMonthCal_Destroy GUICtrlMonthCal_GetCalendarBorder ' + 'GUICtrlMonthCal_GetCalendarCount GUICtrlMonthCal_GetColor ' + 'GUICtrlMonthCal_GetColorArray GUICtrlMonthCal_GetCurSel ' + 'GUICtrlMonthCal_GetCurSelStr GUICtrlMonthCal_GetFirstDOW ' + 'GUICtrlMonthCal_GetFirstDOWStr GUICtrlMonthCal_GetMaxSelCount ' + 'GUICtrlMonthCal_GetMaxTodayWidth ' + 'GUICtrlMonthCal_GetMinReqHeight GUICtrlMonthCal_GetMinReqRect ' + 'GUICtrlMonthCal_GetMinReqRectArray ' + 'GUICtrlMonthCal_GetMinReqWidth GUICtrlMonthCal_GetMonthDelta ' + 'GUICtrlMonthCal_GetMonthRange GUICtrlMonthCal_GetMonthRangeMax ' + 'GUICtrlMonthCal_GetMonthRangeMaxStr ' + 'GUICtrlMonthCal_GetMonthRangeMin ' + 'GUICtrlMonthCal_GetMonthRangeMinStr ' + 'GUICtrlMonthCal_GetMonthRangeSpan GUICtrlMonthCal_GetRange ' + 'GUICtrlMonthCal_GetRangeMax GUICtrlMonthCal_GetRangeMaxStr ' + 'GUICtrlMonthCal_GetRangeMin GUICtrlMonthCal_GetRangeMinStr ' + 'GUICtrlMonthCal_GetSelRange GUICtrlMonthCal_GetSelRangeMax ' + 'GUICtrlMonthCal_GetSelRangeMaxStr ' + 'GUICtrlMonthCal_GetSelRangeMin ' + 'GUICtrlMonthCal_GetSelRangeMinStr GUICtrlMonthCal_GetToday ' + 'GUICtrlMonthCal_GetTodayStr GUICtrlMonthCal_GetUnicodeFormat ' + 'GUICtrlMonthCal_HitTest GUICtrlMonthCal_SetCalendarBorder ' + 'GUICtrlMonthCal_SetColor GUICtrlMonthCal_SetCurSel ' + 'GUICtrlMonthCal_SetDayState GUICtrlMonthCal_SetFirstDOW ' + 'GUICtrlMonthCal_SetMaxSelCount GUICtrlMonthCal_SetMonthDelta ' + 'GUICtrlMonthCal_SetRange GUICtrlMonthCal_SetSelRange ' + 'GUICtrlMonthCal_SetToday GUICtrlMonthCal_SetUnicodeFormat ' + 'GUICtrlRebar_AddBand GUICtrlRebar_AddToolBarBand ' + 'GUICtrlRebar_BeginDrag GUICtrlRebar_Create ' + 'GUICtrlRebar_DeleteBand GUICtrlRebar_Destroy ' + 'GUICtrlRebar_DragMove GUICtrlRebar_EndDrag ' + 'GUICtrlRebar_GetBandBackColor GUICtrlRebar_GetBandBorders ' + 'GUICtrlRebar_GetBandBordersEx GUICtrlRebar_GetBandChildHandle ' + 'GUICtrlRebar_GetBandChildSize GUICtrlRebar_GetBandCount ' + 'GUICtrlRebar_GetBandForeColor GUICtrlRebar_GetBandHeaderSize ' + 'GUICtrlRebar_GetBandID GUICtrlRebar_GetBandIdealSize ' + 'GUICtrlRebar_GetBandLength GUICtrlRebar_GetBandLParam ' + 'GUICtrlRebar_GetBandMargins GUICtrlRebar_GetBandMarginsEx ' + 'GUICtrlRebar_GetBandRect GUICtrlRebar_GetBandRectEx ' + 'GUICtrlRebar_GetBandStyle GUICtrlRebar_GetBandStyleBreak ' + 'GUICtrlRebar_GetBandStyleChildEdge ' + 'GUICtrlRebar_GetBandStyleFixedBMP ' + 'GUICtrlRebar_GetBandStyleFixedSize ' + 'GUICtrlRebar_GetBandStyleGripperAlways ' + 'GUICtrlRebar_GetBandStyleHidden ' + 'GUICtrlRebar_GetBandStyleHideTitle ' + 'GUICtrlRebar_GetBandStyleNoGripper ' + 'GUICtrlRebar_GetBandStyleTopAlign ' + 'GUICtrlRebar_GetBandStyleUseChevron ' + 'GUICtrlRebar_GetBandStyleVariableHeight ' + 'GUICtrlRebar_GetBandText GUICtrlRebar_GetBarHeight ' + 'GUICtrlRebar_GetBarInfo GUICtrlRebar_GetBKColor ' + 'GUICtrlRebar_GetColorScheme GUICtrlRebar_GetRowCount ' + 'GUICtrlRebar_GetRowHeight GUICtrlRebar_GetTextColor ' + 'GUICtrlRebar_GetToolTips GUICtrlRebar_GetUnicodeFormat ' + 'GUICtrlRebar_HitTest GUICtrlRebar_IDToIndex ' + 'GUICtrlRebar_MaximizeBand GUICtrlRebar_MinimizeBand ' + 'GUICtrlRebar_MoveBand GUICtrlRebar_SetBandBackColor ' + 'GUICtrlRebar_SetBandForeColor GUICtrlRebar_SetBandHeaderSize ' + 'GUICtrlRebar_SetBandID GUICtrlRebar_SetBandIdealSize ' + 'GUICtrlRebar_SetBandLength GUICtrlRebar_SetBandLParam ' + 'GUICtrlRebar_SetBandStyle GUICtrlRebar_SetBandStyleBreak ' + 'GUICtrlRebar_SetBandStyleChildEdge ' + 'GUICtrlRebar_SetBandStyleFixedBMP ' + 'GUICtrlRebar_SetBandStyleFixedSize ' + 'GUICtrlRebar_SetBandStyleGripperAlways ' + 'GUICtrlRebar_SetBandStyleHidden ' + 'GUICtrlRebar_SetBandStyleHideTitle ' + 'GUICtrlRebar_SetBandStyleNoGripper ' + 'GUICtrlRebar_SetBandStyleTopAlign ' + 'GUICtrlRebar_SetBandStyleUseChevron ' + 'GUICtrlRebar_SetBandStyleVariableHeight ' + 'GUICtrlRebar_SetBandText GUICtrlRebar_SetBarInfo ' + 'GUICtrlRebar_SetBKColor GUICtrlRebar_SetColorScheme ' + 'GUICtrlRebar_SetTextColor GUICtrlRebar_SetToolTips ' + 'GUICtrlRebar_SetUnicodeFormat GUICtrlRebar_ShowBand ' + 'GUICtrlRichEdit_AppendText GUICtrlRichEdit_AutoDetectURL ' + 'GUICtrlRichEdit_CanPaste GUICtrlRichEdit_CanPasteSpecial ' + 'GUICtrlRichEdit_CanRedo GUICtrlRichEdit_CanUndo ' + 'GUICtrlRichEdit_ChangeFontSize GUICtrlRichEdit_Copy ' + 'GUICtrlRichEdit_Create GUICtrlRichEdit_Cut ' + 'GUICtrlRichEdit_Deselect GUICtrlRichEdit_Destroy ' + 'GUICtrlRichEdit_EmptyUndoBuffer GUICtrlRichEdit_FindText ' + 'GUICtrlRichEdit_FindTextInRange GUICtrlRichEdit_GetBkColor ' + 'GUICtrlRichEdit_GetCharAttributes ' + 'GUICtrlRichEdit_GetCharBkColor GUICtrlRichEdit_GetCharColor ' + 'GUICtrlRichEdit_GetCharPosFromXY ' + 'GUICtrlRichEdit_GetCharPosOfNextWord ' + 'GUICtrlRichEdit_GetCharPosOfPreviousWord ' + 'GUICtrlRichEdit_GetCharWordBreakInfo ' + 'GUICtrlRichEdit_GetFirstCharPosOnLine GUICtrlRichEdit_GetFont ' + 'GUICtrlRichEdit_GetLineCount GUICtrlRichEdit_GetLineLength ' + 'GUICtrlRichEdit_GetLineNumberFromCharPos ' + 'GUICtrlRichEdit_GetNextRedo GUICtrlRichEdit_GetNextUndo ' + 'GUICtrlRichEdit_GetNumberOfFirstVisibleLine ' + 'GUICtrlRichEdit_GetParaAlignment ' + 'GUICtrlRichEdit_GetParaAttributes GUICtrlRichEdit_GetParaBorder ' + 'GUICtrlRichEdit_GetParaIndents GUICtrlRichEdit_GetParaNumbering ' + 'GUICtrlRichEdit_GetParaShading GUICtrlRichEdit_GetParaSpacing ' + 'GUICtrlRichEdit_GetParaTabStops GUICtrlRichEdit_GetPasswordChar ' + 'GUICtrlRichEdit_GetRECT GUICtrlRichEdit_GetScrollPos ' + 'GUICtrlRichEdit_GetSel GUICtrlRichEdit_GetSelAA ' + 'GUICtrlRichEdit_GetSelText GUICtrlRichEdit_GetSpaceUnit ' + 'GUICtrlRichEdit_GetText GUICtrlRichEdit_GetTextInLine ' + 'GUICtrlRichEdit_GetTextInRange GUICtrlRichEdit_GetTextLength ' + 'GUICtrlRichEdit_GetVersion GUICtrlRichEdit_GetXYFromCharPos ' + 'GUICtrlRichEdit_GetZoom GUICtrlRichEdit_GotoCharPos ' + 'GUICtrlRichEdit_HideSelection GUICtrlRichEdit_InsertText ' + 'GUICtrlRichEdit_IsModified GUICtrlRichEdit_IsTextSelected ' + 'GUICtrlRichEdit_Paste GUICtrlRichEdit_PasteSpecial ' + 'GUICtrlRichEdit_PauseRedraw GUICtrlRichEdit_Redo ' + 'GUICtrlRichEdit_ReplaceText GUICtrlRichEdit_ResumeRedraw ' + 'GUICtrlRichEdit_ScrollLineOrPage GUICtrlRichEdit_ScrollLines ' + 'GUICtrlRichEdit_ScrollToCaret GUICtrlRichEdit_SetBkColor ' + 'GUICtrlRichEdit_SetCharAttributes ' + 'GUICtrlRichEdit_SetCharBkColor GUICtrlRichEdit_SetCharColor ' + 'GUICtrlRichEdit_SetEventMask GUICtrlRichEdit_SetFont ' + 'GUICtrlRichEdit_SetLimitOnText GUICtrlRichEdit_SetModified ' + 'GUICtrlRichEdit_SetParaAlignment ' + 'GUICtrlRichEdit_SetParaAttributes GUICtrlRichEdit_SetParaBorder ' + 'GUICtrlRichEdit_SetParaIndents GUICtrlRichEdit_SetParaNumbering ' + 'GUICtrlRichEdit_SetParaShading GUICtrlRichEdit_SetParaSpacing ' + 'GUICtrlRichEdit_SetParaTabStops GUICtrlRichEdit_SetPasswordChar ' + 'GUICtrlRichEdit_SetReadOnly GUICtrlRichEdit_SetRECT ' + 'GUICtrlRichEdit_SetScrollPos GUICtrlRichEdit_SetSel ' + 'GUICtrlRichEdit_SetSpaceUnit GUICtrlRichEdit_SetTabStops ' + 'GUICtrlRichEdit_SetText GUICtrlRichEdit_SetUndoLimit ' + 'GUICtrlRichEdit_SetZoom GUICtrlRichEdit_StreamFromFile ' + 'GUICtrlRichEdit_StreamFromVar GUICtrlRichEdit_StreamToFile ' + 'GUICtrlRichEdit_StreamToVar GUICtrlRichEdit_Undo ' + 'GUICtrlSlider_ClearSel GUICtrlSlider_ClearTics ' + 'GUICtrlSlider_Create GUICtrlSlider_Destroy ' + 'GUICtrlSlider_GetBuddy GUICtrlSlider_GetChannelRect ' + 'GUICtrlSlider_GetChannelRectEx GUICtrlSlider_GetLineSize ' + 'GUICtrlSlider_GetLogicalTics GUICtrlSlider_GetNumTics ' + 'GUICtrlSlider_GetPageSize GUICtrlSlider_GetPos ' + 'GUICtrlSlider_GetRange GUICtrlSlider_GetRangeMax ' + 'GUICtrlSlider_GetRangeMin GUICtrlSlider_GetSel ' + 'GUICtrlSlider_GetSelEnd GUICtrlSlider_GetSelStart ' + 'GUICtrlSlider_GetThumbLength GUICtrlSlider_GetThumbRect ' + 'GUICtrlSlider_GetThumbRectEx GUICtrlSlider_GetTic ' + 'GUICtrlSlider_GetTicPos GUICtrlSlider_GetToolTips ' + 'GUICtrlSlider_GetUnicodeFormat GUICtrlSlider_SetBuddy ' + 'GUICtrlSlider_SetLineSize GUICtrlSlider_SetPageSize ' + 'GUICtrlSlider_SetPos GUICtrlSlider_SetRange ' + 'GUICtrlSlider_SetRangeMax GUICtrlSlider_SetRangeMin ' + 'GUICtrlSlider_SetSel GUICtrlSlider_SetSelEnd ' + 'GUICtrlSlider_SetSelStart GUICtrlSlider_SetThumbLength ' + 'GUICtrlSlider_SetTic GUICtrlSlider_SetTicFreq ' + 'GUICtrlSlider_SetTipSide GUICtrlSlider_SetToolTips ' + 'GUICtrlSlider_SetUnicodeFormat GUICtrlStatusBar_Create ' + 'GUICtrlStatusBar_Destroy GUICtrlStatusBar_EmbedControl ' + 'GUICtrlStatusBar_GetBorders GUICtrlStatusBar_GetBordersHorz ' + 'GUICtrlStatusBar_GetBordersRect GUICtrlStatusBar_GetBordersVert ' + 'GUICtrlStatusBar_GetCount GUICtrlStatusBar_GetHeight ' + 'GUICtrlStatusBar_GetIcon GUICtrlStatusBar_GetParts ' + 'GUICtrlStatusBar_GetRect GUICtrlStatusBar_GetRectEx ' + 'GUICtrlStatusBar_GetText GUICtrlStatusBar_GetTextFlags ' + 'GUICtrlStatusBar_GetTextLength GUICtrlStatusBar_GetTextLengthEx ' + 'GUICtrlStatusBar_GetTipText GUICtrlStatusBar_GetUnicodeFormat ' + 'GUICtrlStatusBar_GetWidth GUICtrlStatusBar_IsSimple ' + 'GUICtrlStatusBar_Resize GUICtrlStatusBar_SetBkColor ' + 'GUICtrlStatusBar_SetIcon GUICtrlStatusBar_SetMinHeight ' + 'GUICtrlStatusBar_SetParts GUICtrlStatusBar_SetSimple ' + 'GUICtrlStatusBar_SetText GUICtrlStatusBar_SetTipText ' + 'GUICtrlStatusBar_SetUnicodeFormat GUICtrlStatusBar_ShowHide ' + 'GUICtrlTab_ActivateTab GUICtrlTab_ClickTab GUICtrlTab_Create ' + 'GUICtrlTab_DeleteAllItems GUICtrlTab_DeleteItem ' + 'GUICtrlTab_DeselectAll GUICtrlTab_Destroy GUICtrlTab_FindTab ' + 'GUICtrlTab_GetCurFocus GUICtrlTab_GetCurSel ' + 'GUICtrlTab_GetDisplayRect GUICtrlTab_GetDisplayRectEx ' + 'GUICtrlTab_GetExtendedStyle GUICtrlTab_GetImageList ' + 'GUICtrlTab_GetItem GUICtrlTab_GetItemCount ' + 'GUICtrlTab_GetItemImage GUICtrlTab_GetItemParam ' + 'GUICtrlTab_GetItemRect GUICtrlTab_GetItemRectEx ' + 'GUICtrlTab_GetItemState GUICtrlTab_GetItemText ' + 'GUICtrlTab_GetRowCount GUICtrlTab_GetToolTips ' + 'GUICtrlTab_GetUnicodeFormat GUICtrlTab_HighlightItem ' + 'GUICtrlTab_HitTest GUICtrlTab_InsertItem ' + 'GUICtrlTab_RemoveImage GUICtrlTab_SetCurFocus ' + 'GUICtrlTab_SetCurSel GUICtrlTab_SetExtendedStyle ' + 'GUICtrlTab_SetImageList GUICtrlTab_SetItem ' + 'GUICtrlTab_SetItemImage GUICtrlTab_SetItemParam ' + 'GUICtrlTab_SetItemSize GUICtrlTab_SetItemState ' + 'GUICtrlTab_SetItemText GUICtrlTab_SetMinTabWidth ' + 'GUICtrlTab_SetPadding GUICtrlTab_SetToolTips ' + 'GUICtrlTab_SetUnicodeFormat GUICtrlToolbar_AddBitmap ' + 'GUICtrlToolbar_AddButton GUICtrlToolbar_AddButtonSep ' + 'GUICtrlToolbar_AddString GUICtrlToolbar_ButtonCount ' + 'GUICtrlToolbar_CheckButton GUICtrlToolbar_ClickAccel ' + 'GUICtrlToolbar_ClickButton GUICtrlToolbar_ClickIndex ' + 'GUICtrlToolbar_CommandToIndex GUICtrlToolbar_Create ' + 'GUICtrlToolbar_Customize GUICtrlToolbar_DeleteButton ' + 'GUICtrlToolbar_Destroy GUICtrlToolbar_EnableButton ' + 'GUICtrlToolbar_FindToolbar GUICtrlToolbar_GetAnchorHighlight ' + 'GUICtrlToolbar_GetBitmapFlags GUICtrlToolbar_GetButtonBitmap ' + 'GUICtrlToolbar_GetButtonInfo GUICtrlToolbar_GetButtonInfoEx ' + 'GUICtrlToolbar_GetButtonParam GUICtrlToolbar_GetButtonRect ' + 'GUICtrlToolbar_GetButtonRectEx GUICtrlToolbar_GetButtonSize ' + 'GUICtrlToolbar_GetButtonState GUICtrlToolbar_GetButtonStyle ' + 'GUICtrlToolbar_GetButtonText GUICtrlToolbar_GetColorScheme ' + 'GUICtrlToolbar_GetDisabledImageList ' + 'GUICtrlToolbar_GetExtendedStyle GUICtrlToolbar_GetHotImageList ' + 'GUICtrlToolbar_GetHotItem GUICtrlToolbar_GetImageList ' + 'GUICtrlToolbar_GetInsertMark GUICtrlToolbar_GetInsertMarkColor ' + 'GUICtrlToolbar_GetMaxSize GUICtrlToolbar_GetMetrics ' + 'GUICtrlToolbar_GetPadding GUICtrlToolbar_GetRows ' + 'GUICtrlToolbar_GetString GUICtrlToolbar_GetStyle ' + 'GUICtrlToolbar_GetStyleAltDrag ' + 'GUICtrlToolbar_GetStyleCustomErase GUICtrlToolbar_GetStyleFlat ' + 'GUICtrlToolbar_GetStyleList GUICtrlToolbar_GetStyleRegisterDrop ' + 'GUICtrlToolbar_GetStyleToolTips ' + 'GUICtrlToolbar_GetStyleTransparent ' + 'GUICtrlToolbar_GetStyleWrapable GUICtrlToolbar_GetTextRows ' + 'GUICtrlToolbar_GetToolTips GUICtrlToolbar_GetUnicodeFormat ' + 'GUICtrlToolbar_HideButton GUICtrlToolbar_HighlightButton ' + 'GUICtrlToolbar_HitTest GUICtrlToolbar_IndexToCommand ' + 'GUICtrlToolbar_InsertButton GUICtrlToolbar_InsertMarkHitTest ' + 'GUICtrlToolbar_IsButtonChecked GUICtrlToolbar_IsButtonEnabled ' + 'GUICtrlToolbar_IsButtonHidden ' + 'GUICtrlToolbar_IsButtonHighlighted ' + 'GUICtrlToolbar_IsButtonIndeterminate ' + 'GUICtrlToolbar_IsButtonPressed GUICtrlToolbar_LoadBitmap ' + 'GUICtrlToolbar_LoadImages GUICtrlToolbar_MapAccelerator ' + 'GUICtrlToolbar_MoveButton GUICtrlToolbar_PressButton ' + 'GUICtrlToolbar_SetAnchorHighlight GUICtrlToolbar_SetBitmapSize ' + 'GUICtrlToolbar_SetButtonBitMap GUICtrlToolbar_SetButtonInfo ' + 'GUICtrlToolbar_SetButtonInfoEx GUICtrlToolbar_SetButtonParam ' + 'GUICtrlToolbar_SetButtonSize GUICtrlToolbar_SetButtonState ' + 'GUICtrlToolbar_SetButtonStyle GUICtrlToolbar_SetButtonText ' + 'GUICtrlToolbar_SetButtonWidth GUICtrlToolbar_SetCmdID ' + 'GUICtrlToolbar_SetColorScheme ' + 'GUICtrlToolbar_SetDisabledImageList ' + 'GUICtrlToolbar_SetDrawTextFlags GUICtrlToolbar_SetExtendedStyle ' + 'GUICtrlToolbar_SetHotImageList GUICtrlToolbar_SetHotItem ' + 'GUICtrlToolbar_SetImageList GUICtrlToolbar_SetIndent ' + 'GUICtrlToolbar_SetIndeterminate GUICtrlToolbar_SetInsertMark ' + 'GUICtrlToolbar_SetInsertMarkColor GUICtrlToolbar_SetMaxTextRows ' + 'GUICtrlToolbar_SetMetrics GUICtrlToolbar_SetPadding ' + 'GUICtrlToolbar_SetParent GUICtrlToolbar_SetRows ' + 'GUICtrlToolbar_SetStyle GUICtrlToolbar_SetStyleAltDrag ' + 'GUICtrlToolbar_SetStyleCustomErase GUICtrlToolbar_SetStyleFlat ' + 'GUICtrlToolbar_SetStyleList GUICtrlToolbar_SetStyleRegisterDrop ' + 'GUICtrlToolbar_SetStyleToolTips ' + 'GUICtrlToolbar_SetStyleTransparent ' + 'GUICtrlToolbar_SetStyleWrapable GUICtrlToolbar_SetToolTips ' + 'GUICtrlToolbar_SetUnicodeFormat GUICtrlToolbar_SetWindowTheme ' + 'GUICtrlTreeView_Add GUICtrlTreeView_AddChild ' + 'GUICtrlTreeView_AddChildFirst GUICtrlTreeView_AddFirst ' + 'GUICtrlTreeView_BeginUpdate GUICtrlTreeView_ClickItem ' + 'GUICtrlTreeView_Create GUICtrlTreeView_CreateDragImage ' + 'GUICtrlTreeView_CreateSolidBitMap GUICtrlTreeView_Delete ' + 'GUICtrlTreeView_DeleteAll GUICtrlTreeView_DeleteChildren ' + 'GUICtrlTreeView_Destroy GUICtrlTreeView_DisplayRect ' + 'GUICtrlTreeView_DisplayRectEx GUICtrlTreeView_EditText ' + 'GUICtrlTreeView_EndEdit GUICtrlTreeView_EndUpdate ' + 'GUICtrlTreeView_EnsureVisible GUICtrlTreeView_Expand ' + 'GUICtrlTreeView_ExpandedOnce GUICtrlTreeView_FindItem ' + 'GUICtrlTreeView_FindItemEx GUICtrlTreeView_GetBkColor ' + 'GUICtrlTreeView_GetBold GUICtrlTreeView_GetChecked ' + 'GUICtrlTreeView_GetChildCount GUICtrlTreeView_GetChildren ' + 'GUICtrlTreeView_GetCount GUICtrlTreeView_GetCut ' + 'GUICtrlTreeView_GetDropTarget GUICtrlTreeView_GetEditControl ' + 'GUICtrlTreeView_GetExpanded GUICtrlTreeView_GetFirstChild ' + 'GUICtrlTreeView_GetFirstItem GUICtrlTreeView_GetFirstVisible ' + 'GUICtrlTreeView_GetFocused GUICtrlTreeView_GetHeight ' + 'GUICtrlTreeView_GetImageIndex ' + 'GUICtrlTreeView_GetImageListIconHandle ' + 'GUICtrlTreeView_GetIndent GUICtrlTreeView_GetInsertMarkColor ' + 'GUICtrlTreeView_GetISearchString GUICtrlTreeView_GetItemByIndex ' + 'GUICtrlTreeView_GetItemHandle GUICtrlTreeView_GetItemParam ' + 'GUICtrlTreeView_GetLastChild GUICtrlTreeView_GetLineColor ' + 'GUICtrlTreeView_GetNext GUICtrlTreeView_GetNextChild ' + 'GUICtrlTreeView_GetNextSibling GUICtrlTreeView_GetNextVisible ' + 'GUICtrlTreeView_GetNormalImageList ' + 'GUICtrlTreeView_GetParentHandle GUICtrlTreeView_GetParentParam ' + 'GUICtrlTreeView_GetPrev GUICtrlTreeView_GetPrevChild ' + 'GUICtrlTreeView_GetPrevSibling GUICtrlTreeView_GetPrevVisible ' + 'GUICtrlTreeView_GetScrollTime GUICtrlTreeView_GetSelected ' + 'GUICtrlTreeView_GetSelectedImageIndex ' + 'GUICtrlTreeView_GetSelection GUICtrlTreeView_GetSiblingCount ' + 'GUICtrlTreeView_GetState GUICtrlTreeView_GetStateImageIndex ' + 'GUICtrlTreeView_GetStateImageList GUICtrlTreeView_GetText ' + 'GUICtrlTreeView_GetTextColor GUICtrlTreeView_GetToolTips ' + 'GUICtrlTreeView_GetTree GUICtrlTreeView_GetUnicodeFormat ' + 'GUICtrlTreeView_GetVisible GUICtrlTreeView_GetVisibleCount ' + 'GUICtrlTreeView_HitTest GUICtrlTreeView_HitTestEx ' + 'GUICtrlTreeView_HitTestItem GUICtrlTreeView_Index ' + 'GUICtrlTreeView_InsertItem GUICtrlTreeView_IsFirstItem ' + 'GUICtrlTreeView_IsParent GUICtrlTreeView_Level ' + 'GUICtrlTreeView_SelectItem GUICtrlTreeView_SelectItemByIndex ' + 'GUICtrlTreeView_SetBkColor GUICtrlTreeView_SetBold ' + 'GUICtrlTreeView_SetChecked GUICtrlTreeView_SetCheckedByIndex ' + 'GUICtrlTreeView_SetChildren GUICtrlTreeView_SetCut ' + 'GUICtrlTreeView_SetDropTarget GUICtrlTreeView_SetFocused ' + 'GUICtrlTreeView_SetHeight GUICtrlTreeView_SetIcon ' + 'GUICtrlTreeView_SetImageIndex GUICtrlTreeView_SetIndent ' + 'GUICtrlTreeView_SetInsertMark ' + 'GUICtrlTreeView_SetInsertMarkColor ' + 'GUICtrlTreeView_SetItemHeight GUICtrlTreeView_SetItemParam ' + 'GUICtrlTreeView_SetLineColor GUICtrlTreeView_SetNormalImageList ' + 'GUICtrlTreeView_SetScrollTime GUICtrlTreeView_SetSelected ' + 'GUICtrlTreeView_SetSelectedImageIndex GUICtrlTreeView_SetState ' + 'GUICtrlTreeView_SetStateImageIndex ' + 'GUICtrlTreeView_SetStateImageList GUICtrlTreeView_SetText ' + 'GUICtrlTreeView_SetTextColor GUICtrlTreeView_SetToolTips ' + 'GUICtrlTreeView_SetUnicodeFormat GUICtrlTreeView_Sort ' + 'GUIImageList_Add GUIImageList_AddBitmap GUIImageList_AddIcon ' + 'GUIImageList_AddMasked GUIImageList_BeginDrag ' + 'GUIImageList_Copy GUIImageList_Create GUIImageList_Destroy ' + 'GUIImageList_DestroyIcon GUIImageList_DragEnter ' + 'GUIImageList_DragLeave GUIImageList_DragMove ' + 'GUIImageList_Draw GUIImageList_DrawEx GUIImageList_Duplicate ' + 'GUIImageList_EndDrag GUIImageList_GetBkColor ' + 'GUIImageList_GetIcon GUIImageList_GetIconHeight ' + 'GUIImageList_GetIconSize GUIImageList_GetIconSizeEx ' + 'GUIImageList_GetIconWidth GUIImageList_GetImageCount ' + 'GUIImageList_GetImageInfoEx GUIImageList_Remove ' + 'GUIImageList_ReplaceIcon GUIImageList_SetBkColor ' + 'GUIImageList_SetIconSize GUIImageList_SetImageCount ' + 'GUIImageList_Swap GUIScrollBars_EnableScrollBar ' + 'GUIScrollBars_GetScrollBarInfoEx GUIScrollBars_GetScrollBarRect ' + 'GUIScrollBars_GetScrollBarRGState ' + 'GUIScrollBars_GetScrollBarXYLineButton ' + 'GUIScrollBars_GetScrollBarXYThumbBottom ' + 'GUIScrollBars_GetScrollBarXYThumbTop ' + 'GUIScrollBars_GetScrollInfo GUIScrollBars_GetScrollInfoEx ' + 'GUIScrollBars_GetScrollInfoMax GUIScrollBars_GetScrollInfoMin ' + 'GUIScrollBars_GetScrollInfoPage GUIScrollBars_GetScrollInfoPos ' + 'GUIScrollBars_GetScrollInfoTrackPos GUIScrollBars_GetScrollPos ' + 'GUIScrollBars_GetScrollRange GUIScrollBars_Init ' + 'GUIScrollBars_ScrollWindow GUIScrollBars_SetScrollInfo ' + 'GUIScrollBars_SetScrollInfoMax GUIScrollBars_SetScrollInfoMin ' + 'GUIScrollBars_SetScrollInfoPage GUIScrollBars_SetScrollInfoPos ' + 'GUIScrollBars_SetScrollRange GUIScrollBars_ShowScrollBar ' + 'GUIToolTip_Activate GUIToolTip_AddTool GUIToolTip_AdjustRect ' + 'GUIToolTip_BitsToTTF GUIToolTip_Create GUIToolTip_Deactivate ' + 'GUIToolTip_DelTool GUIToolTip_Destroy GUIToolTip_EnumTools ' + 'GUIToolTip_GetBubbleHeight GUIToolTip_GetBubbleSize ' + 'GUIToolTip_GetBubbleWidth GUIToolTip_GetCurrentTool ' + 'GUIToolTip_GetDelayTime GUIToolTip_GetMargin ' + 'GUIToolTip_GetMarginEx GUIToolTip_GetMaxTipWidth ' + 'GUIToolTip_GetText GUIToolTip_GetTipBkColor ' + 'GUIToolTip_GetTipTextColor GUIToolTip_GetTitleBitMap ' + 'GUIToolTip_GetTitleText GUIToolTip_GetToolCount ' + 'GUIToolTip_GetToolInfo GUIToolTip_HitTest ' + 'GUIToolTip_NewToolRect GUIToolTip_Pop GUIToolTip_PopUp ' + 'GUIToolTip_SetDelayTime GUIToolTip_SetMargin ' + 'GUIToolTip_SetMaxTipWidth GUIToolTip_SetTipBkColor ' + 'GUIToolTip_SetTipTextColor GUIToolTip_SetTitle ' + 'GUIToolTip_SetToolInfo GUIToolTip_SetWindowTheme ' + 'GUIToolTip_ToolExists GUIToolTip_ToolToArray ' + 'GUIToolTip_TrackActivate GUIToolTip_TrackPosition ' + 'GUIToolTip_Update GUIToolTip_UpdateTipText HexToString ' + 'IEAction IEAttach IEBodyReadHTML IEBodyReadText ' + 'IEBodyWriteHTML IECreate IECreateEmbedded IEDocGetObj ' + 'IEDocInsertHTML IEDocInsertText IEDocReadHTML ' + 'IEDocWriteHTML IEErrorNotify IEFormElementCheckBoxSelect ' + 'IEFormElementGetCollection IEFormElementGetObjByName ' + 'IEFormElementGetValue IEFormElementOptionSelect ' + 'IEFormElementRadioSelect IEFormElementSetValue ' + 'IEFormGetCollection IEFormGetObjByName IEFormImageClick ' + 'IEFormReset IEFormSubmit IEFrameGetCollection ' + 'IEFrameGetObjByName IEGetObjById IEGetObjByName ' + 'IEHeadInsertEventScript IEImgClick IEImgGetCollection ' + 'IEIsFrameSet IELinkClickByIndex IELinkClickByText ' + 'IELinkGetCollection IELoadWait IELoadWaitTimeout IENavigate ' + 'IEPropertyGet IEPropertySet IEQuit IETableGetCollection ' + 'IETableWriteToArray IETagNameAllGetCollection ' + 'IETagNameGetCollection IE_Example IE_Introduction ' + 'IE_VersionInfo INetExplorerCapable INetGetSource INetMail ' + 'INetSmtpMail IsPressed MathCheckDiv Max MemGlobalAlloc ' + 'MemGlobalFree MemGlobalLock MemGlobalSize MemGlobalUnlock ' + 'MemMoveMemory MemVirtualAlloc MemVirtualAllocEx ' + 'MemVirtualFree MemVirtualFreeEx Min MouseTrap ' + 'NamedPipes_CallNamedPipe NamedPipes_ConnectNamedPipe ' + 'NamedPipes_CreateNamedPipe NamedPipes_CreatePipe ' + 'NamedPipes_DisconnectNamedPipe ' + 'NamedPipes_GetNamedPipeHandleState NamedPipes_GetNamedPipeInfo ' + 'NamedPipes_PeekNamedPipe NamedPipes_SetNamedPipeHandleState ' + 'NamedPipes_TransactNamedPipe NamedPipes_WaitNamedPipe ' + 'Net_Share_ConnectionEnum Net_Share_FileClose ' + 'Net_Share_FileEnum Net_Share_FileGetInfo Net_Share_PermStr ' + 'Net_Share_ResourceStr Net_Share_SessionDel ' + 'Net_Share_SessionEnum Net_Share_SessionGetInfo ' + 'Net_Share_ShareAdd Net_Share_ShareCheck Net_Share_ShareDel ' + 'Net_Share_ShareEnum Net_Share_ShareGetInfo ' + 'Net_Share_ShareSetInfo Net_Share_StatisticsGetSvr ' + 'Net_Share_StatisticsGetWrk Now NowCalc NowCalcDate ' + 'NowDate NowTime PathFull PathGetRelative PathMake ' + 'PathSplit ProcessGetName ProcessGetPriority Radian ' + 'ReplaceStringInFile RunDos ScreenCapture_Capture ' + 'ScreenCapture_CaptureWnd ScreenCapture_SaveImage ' + 'ScreenCapture_SetBMPFormat ScreenCapture_SetJPGQuality ' + 'ScreenCapture_SetTIFColorDepth ScreenCapture_SetTIFCompression ' + 'Security__AdjustTokenPrivileges ' + 'Security__CreateProcessWithToken Security__DuplicateTokenEx ' + 'Security__GetAccountSid Security__GetLengthSid ' + 'Security__GetTokenInformation Security__ImpersonateSelf ' + 'Security__IsValidSid Security__LookupAccountName ' + 'Security__LookupAccountSid Security__LookupPrivilegeValue ' + 'Security__OpenProcessToken Security__OpenThreadToken ' + 'Security__OpenThreadTokenEx Security__SetPrivilege ' + 'Security__SetTokenInformation Security__SidToStringSid ' + 'Security__SidTypeStr Security__StringSidToSid SendMessage ' + 'SendMessageA SetDate SetTime Singleton SoundClose ' + 'SoundLength SoundOpen SoundPause SoundPlay SoundPos ' + 'SoundResume SoundSeek SoundStatus SoundStop ' + 'SQLite_Changes SQLite_Close SQLite_Display2DResult ' + 'SQLite_Encode SQLite_ErrCode SQLite_ErrMsg SQLite_Escape ' + 'SQLite_Exec SQLite_FastEncode SQLite_FastEscape ' + 'SQLite_FetchData SQLite_FetchNames SQLite_GetTable ' + 'SQLite_GetTable2d SQLite_LastInsertRowID SQLite_LibVersion ' + 'SQLite_Open SQLite_Query SQLite_QueryFinalize ' + 'SQLite_QueryReset SQLite_QuerySingleRow SQLite_SafeMode ' + 'SQLite_SetTimeout SQLite_Shutdown SQLite_SQLiteExe ' + 'SQLite_Startup SQLite_TotalChanges StringBetween ' + 'StringExplode StringInsert StringProper StringRepeat ' + 'StringTitleCase StringToHex TCPIpToName TempFile ' + 'TicksToTime Timer_Diff Timer_GetIdleTime Timer_GetTimerID ' + 'Timer_Init Timer_KillAllTimers Timer_KillTimer ' + 'Timer_SetTimer TimeToTicks VersionCompare viClose ' + 'viExecCommand viFindGpib viGpibBusReset viGTL ' + 'viInteractiveControl viOpen viSetAttribute viSetTimeout ' + 'WeekNumberISO WinAPI_AbortPath WinAPI_ActivateKeyboardLayout ' + 'WinAPI_AddClipboardFormatListener WinAPI_AddFontMemResourceEx ' + 'WinAPI_AddFontResourceEx WinAPI_AddIconOverlay ' + 'WinAPI_AddIconTransparency WinAPI_AddMRUString ' + 'WinAPI_AdjustBitmap WinAPI_AdjustTokenPrivileges ' + 'WinAPI_AdjustWindowRectEx WinAPI_AlphaBlend WinAPI_AngleArc ' + 'WinAPI_AnimateWindow WinAPI_Arc WinAPI_ArcTo ' + 'WinAPI_ArrayToStruct WinAPI_AssignProcessToJobObject ' + 'WinAPI_AssocGetPerceivedType WinAPI_AssocQueryString ' + 'WinAPI_AttachConsole WinAPI_AttachThreadInput ' + 'WinAPI_BackupRead WinAPI_BackupReadAbort WinAPI_BackupSeek ' + 'WinAPI_BackupWrite WinAPI_BackupWriteAbort WinAPI_Beep ' + 'WinAPI_BeginBufferedPaint WinAPI_BeginDeferWindowPos ' + 'WinAPI_BeginPaint WinAPI_BeginPath WinAPI_BeginUpdateResource ' + 'WinAPI_BitBlt WinAPI_BringWindowToTop ' + 'WinAPI_BroadcastSystemMessage WinAPI_BrowseForFolderDlg ' + 'WinAPI_BufferedPaintClear WinAPI_BufferedPaintInit ' + 'WinAPI_BufferedPaintSetAlpha WinAPI_BufferedPaintUnInit ' + 'WinAPI_CallNextHookEx WinAPI_CallWindowProc ' + 'WinAPI_CallWindowProcW WinAPI_CascadeWindows ' + 'WinAPI_ChangeWindowMessageFilterEx WinAPI_CharToOem ' + 'WinAPI_ChildWindowFromPointEx WinAPI_ClientToScreen ' + 'WinAPI_ClipCursor WinAPI_CloseDesktop WinAPI_CloseEnhMetaFile ' + 'WinAPI_CloseFigure WinAPI_CloseHandle WinAPI_CloseThemeData ' + 'WinAPI_CloseWindow WinAPI_CloseWindowStation ' + 'WinAPI_CLSIDFromProgID WinAPI_CoInitialize ' + 'WinAPI_ColorAdjustLuma WinAPI_ColorHLSToRGB ' + 'WinAPI_ColorRGBToHLS WinAPI_CombineRgn ' + 'WinAPI_CombineTransform WinAPI_CommandLineToArgv ' + 'WinAPI_CommDlgExtendedError WinAPI_CommDlgExtendedErrorEx ' + 'WinAPI_CompareString WinAPI_CompressBitmapBits ' + 'WinAPI_CompressBuffer WinAPI_ComputeCrc32 ' + 'WinAPI_ConfirmCredentials WinAPI_CopyBitmap WinAPI_CopyCursor ' + 'WinAPI_CopyEnhMetaFile WinAPI_CopyFileEx WinAPI_CopyIcon ' + 'WinAPI_CopyImage WinAPI_CopyRect WinAPI_CopyStruct ' + 'WinAPI_CoTaskMemAlloc WinAPI_CoTaskMemFree ' + 'WinAPI_CoTaskMemRealloc WinAPI_CoUninitialize ' + 'WinAPI_Create32BitHBITMAP WinAPI_Create32BitHICON ' + 'WinAPI_CreateANDBitmap WinAPI_CreateBitmap ' + 'WinAPI_CreateBitmapIndirect WinAPI_CreateBrushIndirect ' + 'WinAPI_CreateBuffer WinAPI_CreateBufferFromStruct ' + 'WinAPI_CreateCaret WinAPI_CreateColorAdjustment ' + 'WinAPI_CreateCompatibleBitmap WinAPI_CreateCompatibleBitmapEx ' + 'WinAPI_CreateCompatibleDC WinAPI_CreateDesktop ' + 'WinAPI_CreateDIB WinAPI_CreateDIBColorTable ' + 'WinAPI_CreateDIBitmap WinAPI_CreateDIBSection ' + 'WinAPI_CreateDirectory WinAPI_CreateDirectoryEx ' + 'WinAPI_CreateEllipticRgn WinAPI_CreateEmptyIcon ' + 'WinAPI_CreateEnhMetaFile WinAPI_CreateEvent WinAPI_CreateFile ' + 'WinAPI_CreateFileEx WinAPI_CreateFileMapping ' + 'WinAPI_CreateFont WinAPI_CreateFontEx ' + 'WinAPI_CreateFontIndirect WinAPI_CreateGUID ' + 'WinAPI_CreateHardLink WinAPI_CreateIcon ' + 'WinAPI_CreateIconFromResourceEx WinAPI_CreateIconIndirect ' + 'WinAPI_CreateJobObject WinAPI_CreateMargins ' + 'WinAPI_CreateMRUList WinAPI_CreateMutex WinAPI_CreateNullRgn ' + 'WinAPI_CreateNumberFormatInfo WinAPI_CreateObjectID ' + 'WinAPI_CreatePen WinAPI_CreatePoint WinAPI_CreatePolygonRgn ' + 'WinAPI_CreateProcess WinAPI_CreateProcessWithToken ' + 'WinAPI_CreateRect WinAPI_CreateRectEx WinAPI_CreateRectRgn ' + 'WinAPI_CreateRectRgnIndirect WinAPI_CreateRoundRectRgn ' + 'WinAPI_CreateSemaphore WinAPI_CreateSize ' + 'WinAPI_CreateSolidBitmap WinAPI_CreateSolidBrush ' + 'WinAPI_CreateStreamOnHGlobal WinAPI_CreateString ' + 'WinAPI_CreateSymbolicLink WinAPI_CreateTransform ' + 'WinAPI_CreateWindowEx WinAPI_CreateWindowStation ' + 'WinAPI_DecompressBuffer WinAPI_DecryptFile ' + 'WinAPI_DeferWindowPos WinAPI_DefineDosDevice ' + 'WinAPI_DefRawInputProc WinAPI_DefSubclassProc ' + 'WinAPI_DefWindowProc WinAPI_DefWindowProcW WinAPI_DeleteDC ' + 'WinAPI_DeleteEnhMetaFile WinAPI_DeleteFile ' + 'WinAPI_DeleteObject WinAPI_DeleteObjectID ' + 'WinAPI_DeleteVolumeMountPoint WinAPI_DeregisterShellHookWindow ' + 'WinAPI_DestroyCaret WinAPI_DestroyCursor WinAPI_DestroyIcon ' + 'WinAPI_DestroyWindow WinAPI_DeviceIoControl ' + 'WinAPI_DisplayStruct WinAPI_DllGetVersion WinAPI_DllInstall ' + 'WinAPI_DllUninstall WinAPI_DPtoLP WinAPI_DragAcceptFiles ' + 'WinAPI_DragFinish WinAPI_DragQueryFileEx ' + 'WinAPI_DragQueryPoint WinAPI_DrawAnimatedRects ' + 'WinAPI_DrawBitmap WinAPI_DrawEdge WinAPI_DrawFocusRect ' + 'WinAPI_DrawFrameControl WinAPI_DrawIcon WinAPI_DrawIconEx ' + 'WinAPI_DrawLine WinAPI_DrawShadowText WinAPI_DrawText ' + 'WinAPI_DrawThemeBackground WinAPI_DrawThemeEdge ' + 'WinAPI_DrawThemeIcon WinAPI_DrawThemeParentBackground ' + 'WinAPI_DrawThemeText WinAPI_DrawThemeTextEx ' + 'WinAPI_DuplicateEncryptionInfoFile WinAPI_DuplicateHandle ' + 'WinAPI_DuplicateTokenEx WinAPI_DwmDefWindowProc ' + 'WinAPI_DwmEnableBlurBehindWindow WinAPI_DwmEnableComposition ' + 'WinAPI_DwmExtendFrameIntoClientArea ' + 'WinAPI_DwmGetColorizationColor ' + 'WinAPI_DwmGetColorizationParameters ' + 'WinAPI_DwmGetWindowAttribute WinAPI_DwmInvalidateIconicBitmaps ' + 'WinAPI_DwmIsCompositionEnabled ' + 'WinAPI_DwmQueryThumbnailSourceSize WinAPI_DwmRegisterThumbnail ' + 'WinAPI_DwmSetColorizationParameters ' + 'WinAPI_DwmSetIconicLivePreviewBitmap ' + 'WinAPI_DwmSetIconicThumbnail WinAPI_DwmSetWindowAttribute ' + 'WinAPI_DwmUnregisterThumbnail ' + 'WinAPI_DwmUpdateThumbnailProperties WinAPI_DWordToFloat ' + 'WinAPI_DWordToInt WinAPI_EjectMedia WinAPI_Ellipse ' + 'WinAPI_EmptyWorkingSet WinAPI_EnableWindow WinAPI_EncryptFile ' + 'WinAPI_EncryptionDisable WinAPI_EndBufferedPaint ' + 'WinAPI_EndDeferWindowPos WinAPI_EndPaint WinAPI_EndPath ' + 'WinAPI_EndUpdateResource WinAPI_EnumChildProcess ' + 'WinAPI_EnumChildWindows WinAPI_EnumDesktops ' + 'WinAPI_EnumDesktopWindows WinAPI_EnumDeviceDrivers ' + 'WinAPI_EnumDisplayDevices WinAPI_EnumDisplayMonitors ' + 'WinAPI_EnumDisplaySettings WinAPI_EnumDllProc ' + 'WinAPI_EnumFiles WinAPI_EnumFileStreams ' + 'WinAPI_EnumFontFamilies WinAPI_EnumHardLinks ' + 'WinAPI_EnumMRUList WinAPI_EnumPageFiles ' + 'WinAPI_EnumProcessHandles WinAPI_EnumProcessModules ' + 'WinAPI_EnumProcessThreads WinAPI_EnumProcessWindows ' + 'WinAPI_EnumRawInputDevices WinAPI_EnumResourceLanguages ' + 'WinAPI_EnumResourceNames WinAPI_EnumResourceTypes ' + 'WinAPI_EnumSystemGeoID WinAPI_EnumSystemLocales ' + 'WinAPI_EnumUILanguages WinAPI_EnumWindows ' + 'WinAPI_EnumWindowsPopup WinAPI_EnumWindowStations ' + 'WinAPI_EnumWindowsTop WinAPI_EqualMemory WinAPI_EqualRect ' + 'WinAPI_EqualRgn WinAPI_ExcludeClipRect ' + 'WinAPI_ExpandEnvironmentStrings WinAPI_ExtCreatePen ' + 'WinAPI_ExtCreateRegion WinAPI_ExtFloodFill WinAPI_ExtractIcon ' + 'WinAPI_ExtractIconEx WinAPI_ExtSelectClipRgn ' + 'WinAPI_FatalAppExit WinAPI_FatalExit ' + 'WinAPI_FileEncryptionStatus WinAPI_FileExists ' + 'WinAPI_FileIconInit WinAPI_FileInUse WinAPI_FillMemory ' + 'WinAPI_FillPath WinAPI_FillRect WinAPI_FillRgn ' + 'WinAPI_FindClose WinAPI_FindCloseChangeNotification ' + 'WinAPI_FindExecutable WinAPI_FindFirstChangeNotification ' + 'WinAPI_FindFirstFile WinAPI_FindFirstFileName ' + 'WinAPI_FindFirstStream WinAPI_FindNextChangeNotification ' + 'WinAPI_FindNextFile WinAPI_FindNextFileName ' + 'WinAPI_FindNextStream WinAPI_FindResource ' + 'WinAPI_FindResourceEx WinAPI_FindTextDlg WinAPI_FindWindow ' + 'WinAPI_FlashWindow WinAPI_FlashWindowEx WinAPI_FlattenPath ' + 'WinAPI_FloatToDWord WinAPI_FloatToInt WinAPI_FlushFileBuffers ' + 'WinAPI_FlushFRBuffer WinAPI_FlushViewOfFile ' + 'WinAPI_FormatDriveDlg WinAPI_FormatMessage WinAPI_FrameRect ' + 'WinAPI_FrameRgn WinAPI_FreeLibrary WinAPI_FreeMemory ' + 'WinAPI_FreeMRUList WinAPI_FreeResource WinAPI_GdiComment ' + 'WinAPI_GetActiveWindow WinAPI_GetAllUsersProfileDirectory ' + 'WinAPI_GetAncestor WinAPI_GetApplicationRestartSettings ' + 'WinAPI_GetArcDirection WinAPI_GetAsyncKeyState ' + 'WinAPI_GetBinaryType WinAPI_GetBitmapBits ' + 'WinAPI_GetBitmapDimension WinAPI_GetBitmapDimensionEx ' + 'WinAPI_GetBkColor WinAPI_GetBkMode WinAPI_GetBoundsRect ' + 'WinAPI_GetBrushOrg WinAPI_GetBufferedPaintBits ' + 'WinAPI_GetBufferedPaintDC WinAPI_GetBufferedPaintTargetDC ' + 'WinAPI_GetBufferedPaintTargetRect WinAPI_GetBValue ' + 'WinAPI_GetCaretBlinkTime WinAPI_GetCaretPos WinAPI_GetCDType ' + 'WinAPI_GetClassInfoEx WinAPI_GetClassLongEx ' + 'WinAPI_GetClassName WinAPI_GetClientHeight ' + 'WinAPI_GetClientRect WinAPI_GetClientWidth ' + 'WinAPI_GetClipboardSequenceNumber WinAPI_GetClipBox ' + 'WinAPI_GetClipCursor WinAPI_GetClipRgn ' + 'WinAPI_GetColorAdjustment WinAPI_GetCompressedFileSize ' + 'WinAPI_GetCompression WinAPI_GetConnectedDlg ' + 'WinAPI_GetCurrentDirectory WinAPI_GetCurrentHwProfile ' + 'WinAPI_GetCurrentObject WinAPI_GetCurrentPosition ' + 'WinAPI_GetCurrentProcess ' + 'WinAPI_GetCurrentProcessExplicitAppUserModelID ' + 'WinAPI_GetCurrentProcessID WinAPI_GetCurrentThemeName ' + 'WinAPI_GetCurrentThread WinAPI_GetCurrentThreadId ' + 'WinAPI_GetCursor WinAPI_GetCursorInfo WinAPI_GetDateFormat ' + 'WinAPI_GetDC WinAPI_GetDCEx WinAPI_GetDefaultPrinter ' + 'WinAPI_GetDefaultUserProfileDirectory WinAPI_GetDesktopWindow ' + 'WinAPI_GetDeviceCaps WinAPI_GetDeviceDriverBaseName ' + 'WinAPI_GetDeviceDriverFileName WinAPI_GetDeviceGammaRamp ' + 'WinAPI_GetDIBColorTable WinAPI_GetDIBits ' + 'WinAPI_GetDiskFreeSpaceEx WinAPI_GetDlgCtrlID ' + 'WinAPI_GetDlgItem WinAPI_GetDllDirectory ' + 'WinAPI_GetDriveBusType WinAPI_GetDriveGeometryEx ' + 'WinAPI_GetDriveNumber WinAPI_GetDriveType ' + 'WinAPI_GetDurationFormat WinAPI_GetEffectiveClientRect ' + 'WinAPI_GetEnhMetaFile WinAPI_GetEnhMetaFileBits ' + 'WinAPI_GetEnhMetaFileDescription WinAPI_GetEnhMetaFileDimension ' + 'WinAPI_GetEnhMetaFileHeader WinAPI_GetErrorMessage ' + 'WinAPI_GetErrorMode WinAPI_GetExitCodeProcess ' + 'WinAPI_GetExtended WinAPI_GetFileAttributes WinAPI_GetFileID ' + 'WinAPI_GetFileInformationByHandle ' + 'WinAPI_GetFileInformationByHandleEx WinAPI_GetFilePointerEx ' + 'WinAPI_GetFileSizeEx WinAPI_GetFileSizeOnDisk ' + 'WinAPI_GetFileTitle WinAPI_GetFileType ' + 'WinAPI_GetFileVersionInfo WinAPI_GetFinalPathNameByHandle ' + 'WinAPI_GetFinalPathNameByHandleEx WinAPI_GetFocus ' + 'WinAPI_GetFontMemoryResourceInfo WinAPI_GetFontName ' + 'WinAPI_GetFontResourceInfo WinAPI_GetForegroundWindow ' + 'WinAPI_GetFRBuffer WinAPI_GetFullPathName WinAPI_GetGeoInfo ' + 'WinAPI_GetGlyphOutline WinAPI_GetGraphicsMode ' + 'WinAPI_GetGuiResources WinAPI_GetGUIThreadInfo ' + 'WinAPI_GetGValue WinAPI_GetHandleInformation ' + 'WinAPI_GetHGlobalFromStream WinAPI_GetIconDimension ' + 'WinAPI_GetIconInfo WinAPI_GetIconInfoEx WinAPI_GetIdleTime ' + 'WinAPI_GetKeyboardLayout WinAPI_GetKeyboardLayoutList ' + 'WinAPI_GetKeyboardState WinAPI_GetKeyboardType ' + 'WinAPI_GetKeyNameText WinAPI_GetKeyState ' + 'WinAPI_GetLastActivePopup WinAPI_GetLastError ' + 'WinAPI_GetLastErrorMessage WinAPI_GetLayeredWindowAttributes ' + 'WinAPI_GetLocaleInfo WinAPI_GetLogicalDrives ' + 'WinAPI_GetMapMode WinAPI_GetMemorySize ' + 'WinAPI_GetMessageExtraInfo WinAPI_GetModuleFileNameEx ' + 'WinAPI_GetModuleHandle WinAPI_GetModuleHandleEx ' + 'WinAPI_GetModuleInformation WinAPI_GetMonitorInfo ' + 'WinAPI_GetMousePos WinAPI_GetMousePosX WinAPI_GetMousePosY ' + 'WinAPI_GetMUILanguage WinAPI_GetNumberFormat WinAPI_GetObject ' + 'WinAPI_GetObjectID WinAPI_GetObjectInfoByHandle ' + 'WinAPI_GetObjectNameByHandle WinAPI_GetObjectType ' + 'WinAPI_GetOpenFileName WinAPI_GetOutlineTextMetrics ' + 'WinAPI_GetOverlappedResult WinAPI_GetParent ' + 'WinAPI_GetParentProcess WinAPI_GetPerformanceInfo ' + 'WinAPI_GetPEType WinAPI_GetPhysicallyInstalledSystemMemory ' + 'WinAPI_GetPixel WinAPI_GetPolyFillMode WinAPI_GetPosFromRect ' + 'WinAPI_GetPriorityClass WinAPI_GetProcAddress ' + 'WinAPI_GetProcessAffinityMask WinAPI_GetProcessCommandLine ' + 'WinAPI_GetProcessFileName WinAPI_GetProcessHandleCount ' + 'WinAPI_GetProcessID WinAPI_GetProcessIoCounters ' + 'WinAPI_GetProcessMemoryInfo WinAPI_GetProcessName ' + 'WinAPI_GetProcessShutdownParameters WinAPI_GetProcessTimes ' + 'WinAPI_GetProcessUser WinAPI_GetProcessWindowStation ' + 'WinAPI_GetProcessWorkingDirectory WinAPI_GetProfilesDirectory ' + 'WinAPI_GetPwrCapabilities WinAPI_GetRawInputBuffer ' + 'WinAPI_GetRawInputBufferLength WinAPI_GetRawInputData ' + 'WinAPI_GetRawInputDeviceInfo WinAPI_GetRegionData ' + 'WinAPI_GetRegisteredRawInputDevices ' + 'WinAPI_GetRegKeyNameByHandle WinAPI_GetRgnBox WinAPI_GetROP2 ' + 'WinAPI_GetRValue WinAPI_GetSaveFileName WinAPI_GetShellWindow ' + 'WinAPI_GetStartupInfo WinAPI_GetStdHandle ' + 'WinAPI_GetStockObject WinAPI_GetStretchBltMode ' + 'WinAPI_GetString WinAPI_GetSysColor WinAPI_GetSysColorBrush ' + 'WinAPI_GetSystemDefaultLangID WinAPI_GetSystemDefaultLCID ' + 'WinAPI_GetSystemDefaultUILanguage WinAPI_GetSystemDEPPolicy ' + 'WinAPI_GetSystemInfo WinAPI_GetSystemMetrics ' + 'WinAPI_GetSystemPowerStatus WinAPI_GetSystemTimes ' + 'WinAPI_GetSystemWow64Directory WinAPI_GetTabbedTextExtent ' + 'WinAPI_GetTempFileName WinAPI_GetTextAlign ' + 'WinAPI_GetTextCharacterExtra WinAPI_GetTextColor ' + 'WinAPI_GetTextExtentPoint32 WinAPI_GetTextFace ' + 'WinAPI_GetTextMetrics WinAPI_GetThemeAppProperties ' + 'WinAPI_GetThemeBackgroundContentRect ' + 'WinAPI_GetThemeBackgroundExtent WinAPI_GetThemeBackgroundRegion ' + 'WinAPI_GetThemeBitmap WinAPI_GetThemeBool ' + 'WinAPI_GetThemeColor WinAPI_GetThemeDocumentationProperty ' + 'WinAPI_GetThemeEnumValue WinAPI_GetThemeFilename ' + 'WinAPI_GetThemeFont WinAPI_GetThemeInt WinAPI_GetThemeMargins ' + 'WinAPI_GetThemeMetric WinAPI_GetThemePartSize ' + 'WinAPI_GetThemePosition WinAPI_GetThemePropertyOrigin ' + 'WinAPI_GetThemeRect WinAPI_GetThemeString ' + 'WinAPI_GetThemeSysBool WinAPI_GetThemeSysColor ' + 'WinAPI_GetThemeSysColorBrush WinAPI_GetThemeSysFont ' + 'WinAPI_GetThemeSysInt WinAPI_GetThemeSysSize ' + 'WinAPI_GetThemeSysString WinAPI_GetThemeTextExtent ' + 'WinAPI_GetThemeTextMetrics WinAPI_GetThemeTransitionDuration ' + 'WinAPI_GetThreadDesktop WinAPI_GetThreadErrorMode ' + 'WinAPI_GetThreadLocale WinAPI_GetThreadUILanguage ' + 'WinAPI_GetTickCount WinAPI_GetTickCount64 ' + 'WinAPI_GetTimeFormat WinAPI_GetTopWindow ' + 'WinAPI_GetUDFColorMode WinAPI_GetUpdateRect ' + 'WinAPI_GetUpdateRgn WinAPI_GetUserDefaultLangID ' + 'WinAPI_GetUserDefaultLCID WinAPI_GetUserDefaultUILanguage ' + 'WinAPI_GetUserGeoID WinAPI_GetUserObjectInformation ' + 'WinAPI_GetVersion WinAPI_GetVersionEx ' + 'WinAPI_GetVolumeInformation WinAPI_GetVolumeInformationByHandle ' + 'WinAPI_GetVolumeNameForVolumeMountPoint WinAPI_GetWindow ' + 'WinAPI_GetWindowDC WinAPI_GetWindowDisplayAffinity ' + 'WinAPI_GetWindowExt WinAPI_GetWindowFileName ' + 'WinAPI_GetWindowHeight WinAPI_GetWindowInfo ' + 'WinAPI_GetWindowLong WinAPI_GetWindowOrg ' + 'WinAPI_GetWindowPlacement WinAPI_GetWindowRect ' + 'WinAPI_GetWindowRgn WinAPI_GetWindowRgnBox ' + 'WinAPI_GetWindowSubclass WinAPI_GetWindowText ' + 'WinAPI_GetWindowTheme WinAPI_GetWindowThreadProcessId ' + 'WinAPI_GetWindowWidth WinAPI_GetWorkArea ' + 'WinAPI_GetWorldTransform WinAPI_GetXYFromPoint ' + 'WinAPI_GlobalMemoryStatus WinAPI_GradientFill ' + 'WinAPI_GUIDFromString WinAPI_GUIDFromStringEx WinAPI_HashData ' + 'WinAPI_HashString WinAPI_HiByte WinAPI_HideCaret ' + 'WinAPI_HiDWord WinAPI_HiWord WinAPI_InflateRect ' + 'WinAPI_InitMUILanguage WinAPI_InProcess ' + 'WinAPI_IntersectClipRect WinAPI_IntersectRect ' + 'WinAPI_IntToDWord WinAPI_IntToFloat WinAPI_InvalidateRect ' + 'WinAPI_InvalidateRgn WinAPI_InvertANDBitmap ' + 'WinAPI_InvertColor WinAPI_InvertRect WinAPI_InvertRgn ' + 'WinAPI_IOCTL WinAPI_IsAlphaBitmap WinAPI_IsBadCodePtr ' + 'WinAPI_IsBadReadPtr WinAPI_IsBadStringPtr ' + 'WinAPI_IsBadWritePtr WinAPI_IsChild WinAPI_IsClassName ' + 'WinAPI_IsDoorOpen WinAPI_IsElevated WinAPI_IsHungAppWindow ' + 'WinAPI_IsIconic WinAPI_IsInternetConnected ' + 'WinAPI_IsLoadKBLayout WinAPI_IsMemory ' + 'WinAPI_IsNameInExpression WinAPI_IsNetworkAlive ' + 'WinAPI_IsPathShared WinAPI_IsProcessInJob ' + 'WinAPI_IsProcessorFeaturePresent WinAPI_IsRectEmpty ' + 'WinAPI_IsThemeActive ' + 'WinAPI_IsThemeBackgroundPartiallyTransparent ' + 'WinAPI_IsThemePartDefined WinAPI_IsValidLocale ' + 'WinAPI_IsWindow WinAPI_IsWindowEnabled WinAPI_IsWindowUnicode ' + 'WinAPI_IsWindowVisible WinAPI_IsWow64Process ' + 'WinAPI_IsWritable WinAPI_IsZoomed WinAPI_Keybd_Event ' + 'WinAPI_KillTimer WinAPI_LineDDA WinAPI_LineTo ' + 'WinAPI_LoadBitmap WinAPI_LoadCursor WinAPI_LoadCursorFromFile ' + 'WinAPI_LoadIcon WinAPI_LoadIconMetric ' + 'WinAPI_LoadIconWithScaleDown WinAPI_LoadImage ' + 'WinAPI_LoadIndirectString WinAPI_LoadKeyboardLayout ' + 'WinAPI_LoadLibrary WinAPI_LoadLibraryEx WinAPI_LoadMedia ' + 'WinAPI_LoadResource WinAPI_LoadShell32Icon WinAPI_LoadString ' + 'WinAPI_LoadStringEx WinAPI_LoByte WinAPI_LocalFree ' + 'WinAPI_LockDevice WinAPI_LockFile WinAPI_LockResource ' + 'WinAPI_LockWindowUpdate WinAPI_LockWorkStation WinAPI_LoDWord ' + 'WinAPI_LongMid WinAPI_LookupIconIdFromDirectoryEx ' + 'WinAPI_LoWord WinAPI_LPtoDP WinAPI_MAKELANGID ' + 'WinAPI_MAKELCID WinAPI_MakeLong WinAPI_MakeQWord ' + 'WinAPI_MakeWord WinAPI_MapViewOfFile WinAPI_MapVirtualKey ' + 'WinAPI_MaskBlt WinAPI_MessageBeep WinAPI_MessageBoxCheck ' + 'WinAPI_MessageBoxIndirect WinAPI_MirrorIcon ' + 'WinAPI_ModifyWorldTransform WinAPI_MonitorFromPoint ' + 'WinAPI_MonitorFromRect WinAPI_MonitorFromWindow ' + 'WinAPI_Mouse_Event WinAPI_MoveFileEx WinAPI_MoveMemory ' + 'WinAPI_MoveTo WinAPI_MoveToEx WinAPI_MoveWindow ' + 'WinAPI_MsgBox WinAPI_MulDiv WinAPI_MultiByteToWideChar ' + 'WinAPI_MultiByteToWideCharEx WinAPI_NtStatusToDosError ' + 'WinAPI_OemToChar WinAPI_OffsetClipRgn WinAPI_OffsetPoints ' + 'WinAPI_OffsetRect WinAPI_OffsetRgn WinAPI_OffsetWindowOrg ' + 'WinAPI_OpenDesktop WinAPI_OpenFileById WinAPI_OpenFileDlg ' + 'WinAPI_OpenFileMapping WinAPI_OpenIcon ' + 'WinAPI_OpenInputDesktop WinAPI_OpenJobObject WinAPI_OpenMutex ' + 'WinAPI_OpenProcess WinAPI_OpenProcessToken ' + 'WinAPI_OpenSemaphore WinAPI_OpenThemeData ' + 'WinAPI_OpenWindowStation WinAPI_PageSetupDlg ' + 'WinAPI_PaintDesktop WinAPI_PaintRgn WinAPI_ParseURL ' + 'WinAPI_ParseUserName WinAPI_PatBlt WinAPI_PathAddBackslash ' + 'WinAPI_PathAddExtension WinAPI_PathAppend ' + 'WinAPI_PathBuildRoot WinAPI_PathCanonicalize ' + 'WinAPI_PathCommonPrefix WinAPI_PathCompactPath ' + 'WinAPI_PathCompactPathEx WinAPI_PathCreateFromUrl ' + 'WinAPI_PathFindExtension WinAPI_PathFindFileName ' + 'WinAPI_PathFindNextComponent WinAPI_PathFindOnPath ' + 'WinAPI_PathGetArgs WinAPI_PathGetCharType ' + 'WinAPI_PathGetDriveNumber WinAPI_PathIsContentType ' + 'WinAPI_PathIsDirectory WinAPI_PathIsDirectoryEmpty ' + 'WinAPI_PathIsExe WinAPI_PathIsFileSpec ' + 'WinAPI_PathIsLFNFileSpec WinAPI_PathIsRelative ' + 'WinAPI_PathIsRoot WinAPI_PathIsSameRoot ' + 'WinAPI_PathIsSystemFolder WinAPI_PathIsUNC ' + 'WinAPI_PathIsUNCServer WinAPI_PathIsUNCServerShare ' + 'WinAPI_PathMakeSystemFolder WinAPI_PathMatchSpec ' + 'WinAPI_PathParseIconLocation WinAPI_PathRelativePathTo ' + 'WinAPI_PathRemoveArgs WinAPI_PathRemoveBackslash ' + 'WinAPI_PathRemoveExtension WinAPI_PathRemoveFileSpec ' + 'WinAPI_PathRenameExtension WinAPI_PathSearchAndQualify ' + 'WinAPI_PathSkipRoot WinAPI_PathStripPath ' + 'WinAPI_PathStripToRoot WinAPI_PathToRegion ' + 'WinAPI_PathUndecorate WinAPI_PathUnExpandEnvStrings ' + 'WinAPI_PathUnmakeSystemFolder WinAPI_PathUnquoteSpaces ' + 'WinAPI_PathYetAnotherMakeUniqueName WinAPI_PickIconDlg ' + 'WinAPI_PlayEnhMetaFile WinAPI_PlaySound WinAPI_PlgBlt ' + 'WinAPI_PointFromRect WinAPI_PolyBezier WinAPI_PolyBezierTo ' + 'WinAPI_PolyDraw WinAPI_Polygon WinAPI_PostMessage ' + 'WinAPI_PrimaryLangId WinAPI_PrintDlg WinAPI_PrintDlgEx ' + 'WinAPI_PrintWindow WinAPI_ProgIDFromCLSID WinAPI_PtInRect ' + 'WinAPI_PtInRectEx WinAPI_PtInRegion WinAPI_PtVisible ' + 'WinAPI_QueryDosDevice WinAPI_QueryInformationJobObject ' + 'WinAPI_QueryPerformanceCounter WinAPI_QueryPerformanceFrequency ' + 'WinAPI_RadialGradientFill WinAPI_ReadDirectoryChanges ' + 'WinAPI_ReadFile WinAPI_ReadProcessMemory WinAPI_Rectangle ' + 'WinAPI_RectInRegion WinAPI_RectIsEmpty WinAPI_RectVisible ' + 'WinAPI_RedrawWindow WinAPI_RegCloseKey ' + 'WinAPI_RegConnectRegistry WinAPI_RegCopyTree ' + 'WinAPI_RegCopyTreeEx WinAPI_RegCreateKey ' + 'WinAPI_RegDeleteEmptyKey WinAPI_RegDeleteKey ' + 'WinAPI_RegDeleteKeyValue WinAPI_RegDeleteTree ' + 'WinAPI_RegDeleteTreeEx WinAPI_RegDeleteValue ' + 'WinAPI_RegDisableReflectionKey WinAPI_RegDuplicateHKey ' + 'WinAPI_RegEnableReflectionKey WinAPI_RegEnumKey ' + 'WinAPI_RegEnumValue WinAPI_RegFlushKey ' + 'WinAPI_RegisterApplicationRestart WinAPI_RegisterClass ' + 'WinAPI_RegisterClassEx WinAPI_RegisterHotKey ' + 'WinAPI_RegisterPowerSettingNotification ' + 'WinAPI_RegisterRawInputDevices WinAPI_RegisterShellHookWindow ' + 'WinAPI_RegisterWindowMessage WinAPI_RegLoadMUIString ' + 'WinAPI_RegNotifyChangeKeyValue WinAPI_RegOpenKey ' + 'WinAPI_RegQueryInfoKey WinAPI_RegQueryLastWriteTime ' + 'WinAPI_RegQueryMultipleValues WinAPI_RegQueryReflectionKey ' + 'WinAPI_RegQueryValue WinAPI_RegRestoreKey WinAPI_RegSaveKey ' + 'WinAPI_RegSetValue WinAPI_ReleaseCapture WinAPI_ReleaseDC ' + 'WinAPI_ReleaseMutex WinAPI_ReleaseSemaphore ' + 'WinAPI_ReleaseStream WinAPI_RemoveClipboardFormatListener ' + 'WinAPI_RemoveDirectory WinAPI_RemoveFontMemResourceEx ' + 'WinAPI_RemoveFontResourceEx WinAPI_RemoveWindowSubclass ' + 'WinAPI_ReOpenFile WinAPI_ReplaceFile WinAPI_ReplaceTextDlg ' + 'WinAPI_ResetEvent WinAPI_RestartDlg WinAPI_RestoreDC ' + 'WinAPI_RGB WinAPI_RotatePoints WinAPI_RoundRect ' + 'WinAPI_SaveDC WinAPI_SaveFileDlg WinAPI_SaveHBITMAPToFile ' + 'WinAPI_SaveHICONToFile WinAPI_ScaleWindowExt ' + 'WinAPI_ScreenToClient WinAPI_SearchPath WinAPI_SelectClipPath ' + 'WinAPI_SelectClipRgn WinAPI_SelectObject ' + 'WinAPI_SendMessageTimeout WinAPI_SetActiveWindow ' + 'WinAPI_SetArcDirection WinAPI_SetBitmapBits ' + 'WinAPI_SetBitmapDimensionEx WinAPI_SetBkColor ' + 'WinAPI_SetBkMode WinAPI_SetBoundsRect WinAPI_SetBrushOrg ' + 'WinAPI_SetCapture WinAPI_SetCaretBlinkTime WinAPI_SetCaretPos ' + 'WinAPI_SetClassLongEx WinAPI_SetColorAdjustment ' + 'WinAPI_SetCompression WinAPI_SetCurrentDirectory ' + 'WinAPI_SetCurrentProcessExplicitAppUserModelID WinAPI_SetCursor ' + 'WinAPI_SetDCBrushColor WinAPI_SetDCPenColor ' + 'WinAPI_SetDefaultPrinter WinAPI_SetDeviceGammaRamp ' + 'WinAPI_SetDIBColorTable WinAPI_SetDIBits ' + 'WinAPI_SetDIBitsToDevice WinAPI_SetDllDirectory ' + 'WinAPI_SetEndOfFile WinAPI_SetEnhMetaFileBits ' + 'WinAPI_SetErrorMode WinAPI_SetEvent WinAPI_SetFileAttributes ' + 'WinAPI_SetFileInformationByHandleEx WinAPI_SetFilePointer ' + 'WinAPI_SetFilePointerEx WinAPI_SetFileShortName ' + 'WinAPI_SetFileValidData WinAPI_SetFocus WinAPI_SetFont ' + 'WinAPI_SetForegroundWindow WinAPI_SetFRBuffer ' + 'WinAPI_SetGraphicsMode WinAPI_SetHandleInformation ' + 'WinAPI_SetInformationJobObject WinAPI_SetKeyboardLayout ' + 'WinAPI_SetKeyboardState WinAPI_SetLastError ' + 'WinAPI_SetLayeredWindowAttributes WinAPI_SetLocaleInfo ' + 'WinAPI_SetMapMode WinAPI_SetMessageExtraInfo WinAPI_SetParent ' + 'WinAPI_SetPixel WinAPI_SetPolyFillMode ' + 'WinAPI_SetPriorityClass WinAPI_SetProcessAffinityMask ' + 'WinAPI_SetProcessShutdownParameters ' + 'WinAPI_SetProcessWindowStation WinAPI_SetRectRgn ' + 'WinAPI_SetROP2 WinAPI_SetSearchPathMode ' + 'WinAPI_SetStretchBltMode WinAPI_SetSysColors ' + 'WinAPI_SetSystemCursor WinAPI_SetTextAlign ' + 'WinAPI_SetTextCharacterExtra WinAPI_SetTextColor ' + 'WinAPI_SetTextJustification WinAPI_SetThemeAppProperties ' + 'WinAPI_SetThreadDesktop WinAPI_SetThreadErrorMode ' + 'WinAPI_SetThreadExecutionState WinAPI_SetThreadLocale ' + 'WinAPI_SetThreadUILanguage WinAPI_SetTimer ' + 'WinAPI_SetUDFColorMode WinAPI_SetUserGeoID ' + 'WinAPI_SetUserObjectInformation WinAPI_SetVolumeMountPoint ' + 'WinAPI_SetWindowDisplayAffinity WinAPI_SetWindowExt ' + 'WinAPI_SetWindowLong WinAPI_SetWindowOrg ' + 'WinAPI_SetWindowPlacement WinAPI_SetWindowPos ' + 'WinAPI_SetWindowRgn WinAPI_SetWindowsHookEx ' + 'WinAPI_SetWindowSubclass WinAPI_SetWindowText ' + 'WinAPI_SetWindowTheme WinAPI_SetWinEventHook ' + 'WinAPI_SetWorldTransform WinAPI_SfcIsFileProtected ' + 'WinAPI_SfcIsKeyProtected WinAPI_ShellAboutDlg ' + 'WinAPI_ShellAddToRecentDocs WinAPI_ShellChangeNotify ' + 'WinAPI_ShellChangeNotifyDeregister ' + 'WinAPI_ShellChangeNotifyRegister WinAPI_ShellCreateDirectory ' + 'WinAPI_ShellEmptyRecycleBin WinAPI_ShellExecute ' + 'WinAPI_ShellExecuteEx WinAPI_ShellExtractAssociatedIcon ' + 'WinAPI_ShellExtractIcon WinAPI_ShellFileOperation ' + 'WinAPI_ShellFlushSFCache WinAPI_ShellGetFileInfo ' + 'WinAPI_ShellGetIconOverlayIndex WinAPI_ShellGetImageList ' + 'WinAPI_ShellGetKnownFolderIDList WinAPI_ShellGetKnownFolderPath ' + 'WinAPI_ShellGetLocalizedName WinAPI_ShellGetPathFromIDList ' + 'WinAPI_ShellGetSetFolderCustomSettings WinAPI_ShellGetSettings ' + 'WinAPI_ShellGetSpecialFolderLocation ' + 'WinAPI_ShellGetSpecialFolderPath WinAPI_ShellGetStockIconInfo ' + 'WinAPI_ShellILCreateFromPath WinAPI_ShellNotifyIcon ' + 'WinAPI_ShellNotifyIconGetRect WinAPI_ShellObjectProperties ' + 'WinAPI_ShellOpenFolderAndSelectItems WinAPI_ShellOpenWithDlg ' + 'WinAPI_ShellQueryRecycleBin ' + 'WinAPI_ShellQueryUserNotificationState ' + 'WinAPI_ShellRemoveLocalizedName WinAPI_ShellRestricted ' + 'WinAPI_ShellSetKnownFolderPath WinAPI_ShellSetLocalizedName ' + 'WinAPI_ShellSetSettings WinAPI_ShellStartNetConnectionDlg ' + 'WinAPI_ShellUpdateImage WinAPI_ShellUserAuthenticationDlg ' + 'WinAPI_ShellUserAuthenticationDlgEx WinAPI_ShortToWord ' + 'WinAPI_ShowCaret WinAPI_ShowCursor WinAPI_ShowError ' + 'WinAPI_ShowLastError WinAPI_ShowMsg WinAPI_ShowOwnedPopups ' + 'WinAPI_ShowWindow WinAPI_ShutdownBlockReasonCreate ' + 'WinAPI_ShutdownBlockReasonDestroy ' + 'WinAPI_ShutdownBlockReasonQuery WinAPI_SizeOfResource ' + 'WinAPI_StretchBlt WinAPI_StretchDIBits ' + 'WinAPI_StrFormatByteSize WinAPI_StrFormatByteSizeEx ' + 'WinAPI_StrFormatKBSize WinAPI_StrFromTimeInterval ' + 'WinAPI_StringFromGUID WinAPI_StringLenA WinAPI_StringLenW ' + 'WinAPI_StrLen WinAPI_StrokeAndFillPath WinAPI_StrokePath ' + 'WinAPI_StructToArray WinAPI_SubLangId WinAPI_SubtractRect ' + 'WinAPI_SwapDWord WinAPI_SwapQWord WinAPI_SwapWord ' + 'WinAPI_SwitchColor WinAPI_SwitchDesktop ' + 'WinAPI_SwitchToThisWindow WinAPI_SystemParametersInfo ' + 'WinAPI_TabbedTextOut WinAPI_TerminateJobObject ' + 'WinAPI_TerminateProcess WinAPI_TextOut WinAPI_TileWindows ' + 'WinAPI_TrackMouseEvent WinAPI_TransparentBlt ' + 'WinAPI_TwipsPerPixelX WinAPI_TwipsPerPixelY ' + 'WinAPI_UnhookWindowsHookEx WinAPI_UnhookWinEvent ' + 'WinAPI_UnionRect WinAPI_UnionStruct WinAPI_UniqueHardwareID ' + 'WinAPI_UnloadKeyboardLayout WinAPI_UnlockFile ' + 'WinAPI_UnmapViewOfFile WinAPI_UnregisterApplicationRestart ' + 'WinAPI_UnregisterClass WinAPI_UnregisterHotKey ' + 'WinAPI_UnregisterPowerSettingNotification ' + 'WinAPI_UpdateLayeredWindow WinAPI_UpdateLayeredWindowEx ' + 'WinAPI_UpdateLayeredWindowIndirect WinAPI_UpdateResource ' + 'WinAPI_UpdateWindow WinAPI_UrlApplyScheme ' + 'WinAPI_UrlCanonicalize WinAPI_UrlCombine WinAPI_UrlCompare ' + 'WinAPI_UrlCreateFromPath WinAPI_UrlFixup WinAPI_UrlGetPart ' + 'WinAPI_UrlHash WinAPI_UrlIs WinAPI_UserHandleGrantAccess ' + 'WinAPI_ValidateRect WinAPI_ValidateRgn WinAPI_VerQueryRoot ' + 'WinAPI_VerQueryValue WinAPI_VerQueryValueEx ' + 'WinAPI_WaitForInputIdle WinAPI_WaitForMultipleObjects ' + 'WinAPI_WaitForSingleObject WinAPI_WideCharToMultiByte ' + 'WinAPI_WidenPath WinAPI_WindowFromDC WinAPI_WindowFromPoint ' + 'WinAPI_WordToShort WinAPI_Wow64EnableWow64FsRedirection ' + 'WinAPI_WriteConsole WinAPI_WriteFile ' + 'WinAPI_WriteProcessMemory WinAPI_ZeroMemory ' + 'WinNet_AddConnection WinNet_AddConnection2 ' + 'WinNet_AddConnection3 WinNet_CancelConnection ' + 'WinNet_CancelConnection2 WinNet_CloseEnum ' + 'WinNet_ConnectionDialog WinNet_ConnectionDialog1 ' + 'WinNet_DisconnectDialog WinNet_DisconnectDialog1 ' + 'WinNet_EnumResource WinNet_GetConnection ' + 'WinNet_GetConnectionPerformance WinNet_GetLastError ' + 'WinNet_GetNetworkInformation WinNet_GetProviderName ' + 'WinNet_GetResourceInformation WinNet_GetResourceParent ' + 'WinNet_GetUniversalName WinNet_GetUser WinNet_OpenEnum ' + 'WinNet_RestoreConnection WinNet_UseConnection Word_Create ' + 'Word_DocAdd Word_DocAttach Word_DocClose Word_DocExport ' + 'Word_DocFind Word_DocFindReplace Word_DocGet ' + 'Word_DocLinkAdd Word_DocLinkGet Word_DocOpen ' + 'Word_DocPictureAdd Word_DocPrint Word_DocRangeSet ' + 'Word_DocSave Word_DocSaveAs Word_DocTableRead ' + 'Word_DocTableWrite Word_Quit',COMMENT={variants:[hljs.COMMENT(';','$',{relevance:0}),hljs.COMMENT('#cs','#ce'),hljs.COMMENT('#comments-start','#comments-end')]},VARIABLE={className:'variable',begin:'\\$[A-z0-9_]+'},STRING={className:'string',variants:[{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]},NUMBER={variants:[hljs.BINARY_NUMBER_MODE,hljs.C_NUMBER_MODE]},PREPROCESSOR={className:'preprocessor',begin:'#',end:'$',keywords:'include include-once NoTrayIcon OnAutoItStartRegister RequireAdmin pragma ' + 'Au3Stripper_Ignore_Funcs Au3Stripper_Ignore_Variables ' + 'Au3Stripper_Off Au3Stripper_On Au3Stripper_Parameters ' + 'AutoIt3Wrapper_Add_Constants AutoIt3Wrapper_Au3Check_Parameters ' + 'AutoIt3Wrapper_Au3Check_Stop_OnWarning AutoIt3Wrapper_Aut2Exe ' + 'AutoIt3Wrapper_AutoIt3 AutoIt3Wrapper_AutoIt3Dir ' + 'AutoIt3Wrapper_Change2CUI AutoIt3Wrapper_Compile_Both ' + 'AutoIt3Wrapper_Compression AutoIt3Wrapper_EndIf ' + 'AutoIt3Wrapper_Icon AutoIt3Wrapper_If_Compile ' + 'AutoIt3Wrapper_If_Run AutoIt3Wrapper_Jump_To_First_Error ' + 'AutoIt3Wrapper_OutFile AutoIt3Wrapper_OutFile_Type ' + 'AutoIt3Wrapper_OutFile_X64 AutoIt3Wrapper_PlugIn_Funcs ' + 'AutoIt3Wrapper_Res_Comment Autoit3Wrapper_Res_Compatibility ' + 'AutoIt3Wrapper_Res_Description AutoIt3Wrapper_Res_Field ' + 'AutoIt3Wrapper_Res_File_Add AutoIt3Wrapper_Res_FileVersion ' + 'AutoIt3Wrapper_Res_FileVersion_AutoIncrement ' + 'AutoIt3Wrapper_Res_Icon_Add AutoIt3Wrapper_Res_Language ' + 'AutoIt3Wrapper_Res_LegalCopyright ' + 'AutoIt3Wrapper_Res_ProductVersion ' + 'AutoIt3Wrapper_Res_requestedExecutionLevel ' + 'AutoIt3Wrapper_Res_SaveSource AutoIt3Wrapper_Run_After ' + 'AutoIt3Wrapper_Run_Au3Check AutoIt3Wrapper_Run_Au3Stripper ' + 'AutoIt3Wrapper_Run_Before AutoIt3Wrapper_Run_Debug_Mode ' + 'AutoIt3Wrapper_Run_SciTE_Minimized ' + 'AutoIt3Wrapper_Run_SciTE_OutputPane_Minimized ' + 'AutoIt3Wrapper_Run_Tidy AutoIt3Wrapper_ShowProgress ' + 'AutoIt3Wrapper_Testing AutoIt3Wrapper_Tidy_Stop_OnError ' + 'AutoIt3Wrapper_UPX_Parameters AutoIt3Wrapper_UseUPX ' + 'AutoIt3Wrapper_UseX64 AutoIt3Wrapper_Version ' + 'AutoIt3Wrapper_Versioning AutoIt3Wrapper_Versioning_Parameters ' + 'Tidy_Off Tidy_On Tidy_Parameters EndRegion Region',contains:[{begin:/\\\n/,relevance:0},{beginKeywords:'include',end:'$',contains:[STRING,{className:'string',variants:[{begin:'<',end:'>'},{begin:/"/,end:/"/,contains:[{begin:/""/,relevance:0}]},{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]}]}]},STRING,COMMENT]},CONSTANT={className:'constant', // begin: '@',
	// end: '$',
	// keywords: 'AppDataCommonDir AppDataDir AutoItExe AutoItPID AutoItVersion AutoItX64 COM_EventObj CommonFilesDir Compiled ComputerName ComSpec CPUArch CR CRLF DesktopCommonDir DesktopDepth DesktopDir DesktopHeight DesktopRefresh DesktopWidth DocumentsCommonDir error exitCode exitMethod extended FavoritesCommonDir FavoritesDir GUI_CtrlHandle GUI_CtrlId GUI_DragFile GUI_DragId GUI_DropId GUI_WinHandle HomeDrive HomePath HomeShare HotKeyPressed HOUR IPAddress1 IPAddress2 IPAddress3 IPAddress4 KBLayout LF LocalAppDataDir LogonDNSDomain LogonDomain LogonServer MDAY MIN MON MSEC MUILang MyDocumentsDir NumParams OSArch OSBuild OSLang OSServicePack OSType OSVersion ProgramFilesDir ProgramsCommonDir ProgramsDir ScriptDir ScriptFullPath ScriptLineNumber ScriptName SEC StartMenuCommonDir StartMenuDir StartupCommonDir StartupDir SW_DISABLE SW_ENABLE SW_HIDE SW_LOCK SW_MAXIMIZE SW_MINIMIZE SW_RESTORE SW_SHOW SW_SHOWDEFAULT SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWMINNOACTIVE SW_SHOWNA SW_SHOWNOACTIVATE SW_SHOWNORMAL SW_UNLOCK SystemDir TAB TempDir TRAY_ID TrayIconFlashing TrayIconVisible UserName UserProfileDir WDAY WindowsDir WorkingDir YDAY YEAR',
	// relevance: 5
	begin:'@[A-z0-9_]+'},FUNCTION={className:'function',beginKeywords:'Func',end:'$',excludeEnd:true,illegal:'\\$|\\[|%',contains:[hljs.UNDERSCORE_TITLE_MODE,{className:'params',begin:'\\(',end:'\\)',contains:[VARIABLE,STRING,NUMBER]}]};return {case_insensitive:true,keywords:{keyword:KEYWORDS,built_in:BUILT_IN,literal:LITERAL},contains:[COMMENT,VARIABLE,STRING,NUMBER,PREPROCESSOR,CONSTANT,FUNCTION]};};

/***/ },
/* 211 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    case_insensitive: true,
	    lexemes: '\\.?' + hljs.IDENT_RE,
	    keywords: {
	      keyword:
	      /* mnemonic */
	      'adc add adiw and andi asr bclr bld brbc brbs brcc brcs break breq brge brhc brhs ' + 'brid brie brlo brlt brmi brne brpl brsh brtc brts brvc brvs bset bst call cbi cbr ' + 'clc clh cli cln clr cls clt clv clz com cp cpc cpi cpse dec eicall eijmp elpm eor ' + 'fmul fmuls fmulsu icall ijmp in inc jmp ld ldd ldi lds lpm lsl lsr mov movw mul ' + 'muls mulsu neg nop or ori out pop push rcall ret reti rjmp rol ror sbc sbr sbrc sbrs ' + 'sec seh sbi sbci sbic sbis sbiw sei sen ser ses set sev sez sleep spm st std sts sub ' + 'subi swap tst wdr',
	      built_in:
	      /* general purpose registers */
	      'r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15 r16 r17 r18 r19 r20 r21 r22 ' + 'r23 r24 r25 r26 r27 r28 r29 r30 r31 x|0 xh xl y|0 yh yl z|0 zh zl ' +
	      /* IO Registers (ATMega128) */
	      'ucsr1c udr1 ucsr1a ucsr1b ubrr1l ubrr1h ucsr0c ubrr0h tccr3c tccr3a tccr3b tcnt3h ' + 'tcnt3l ocr3ah ocr3al ocr3bh ocr3bl ocr3ch ocr3cl icr3h icr3l etimsk etifr tccr1c ' + 'ocr1ch ocr1cl twcr twdr twar twsr twbr osccal xmcra xmcrb eicra spmcsr spmcr portg ' + 'ddrg ping portf ddrf sreg sph spl xdiv rampz eicrb eimsk gimsk gicr eifr gifr timsk ' + 'tifr mcucr mcucsr tccr0 tcnt0 ocr0 assr tccr1a tccr1b tcnt1h tcnt1l ocr1ah ocr1al ' + 'ocr1bh ocr1bl icr1h icr1l tccr2 tcnt2 ocr2 ocdr wdtcr sfior eearh eearl eedr eecr ' + 'porta ddra pina portb ddrb pinb portc ddrc pinc portd ddrd pind spdr spsr spcr udr0 ' + 'ucsr0a ucsr0b ubrr0l acsr admux adcsr adch adcl porte ddre pine pinf',
	      preprocessor: '.byte .cseg .db .def .device .dseg .dw .endmacro .equ .eseg .exit .include .list ' + '.listmac .macro .nolist .org .set'
	    },
	    contains: [hljs.C_BLOCK_COMMENT_MODE, hljs.COMMENT(';', '$', {
	      relevance: 0
	    }), hljs.C_NUMBER_MODE, // 0x..., decimal, float
	    hljs.BINARY_NUMBER_MODE, // 0b...
	    {
	      className: 'number',
	      begin: '\\b(\\$[a-zA-Z0-9]+|0o[0-7]+)' // $..., 0o...
	    }, hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      begin: '\'', end: '[^\\\\]\'',
	      illegal: '[^\\\\][^\']'
	    }, { className: 'label', begin: '^[A-Za-z0-9_.$]+:' }, { className: 'preprocessor', begin: '#', end: '$' }, { // подстановка в «.macro»
	      className: 'localvars',
	      begin: '@[0-9]+'
	    }]
	  };
	};

/***/ },
/* 212 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: 'false int abstract private char boolean static null if for true ' + 'while long throw finally protected final return void enum else ' + 'break new catch byte super case short default double public try this switch ' + 'continue reverse firstfast firstonly forupdate nofetch sum avg minof maxof count ' + 'order group by asc desc index hint like dispaly edit client server ttsbegin ' + 'ttscommit str real date container anytype common div mod',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, {
	      className: 'preprocessor',
	      begin: '#', end: '$'
	    }, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '{', excludeEnd: true,
	      illegal: ':',
	      contains: [{ beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE]
	    }]
	  };
	};

/***/ },
/* 213 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var VAR = {
	    className: 'variable',
	    variants: [{ begin: /\$[\w\d#@][\w\d_]*/ }, { begin: /\$\{(.*?)}/ }]
	  };
	  var QUOTE_STRING = {
	    className: 'string',
	    begin: /"/, end: /"/,
	    contains: [hljs.BACKSLASH_ESCAPE, VAR, {
	      className: 'variable',
	      begin: /\$\(/, end: /\)/,
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }]
	  };
	  var APOS_STRING = {
	    className: 'string',
	    begin: /'/, end: /'/
	  };

	  return {
	    aliases: ['sh', 'zsh'],
	    lexemes: /-?[a-z\.]+/,
	    keywords: {
	      keyword: 'if then else elif fi for while in do done case esac function',
	      literal: 'true false',
	      built_in:
	      // Shell built-ins
	      // http://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
	      'break cd continue eval exec exit export getopts hash pwd readonly return shift test times ' + 'trap umask unset ' +
	      // Bash built-ins
	      'alias bind builtin caller command declare echo enable help let local logout mapfile printf ' + 'read readarray source type typeset ulimit unalias ' +
	      // Shell modifiers
	      'set shopt ' +
	      // Zsh built-ins
	      'autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles ' + 'compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate ' + 'fc fg float functions getcap getln history integer jobs kill limit log noglob popd print ' + 'pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit ' + 'unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof ' + 'zpty zregexparse zsocket zstyle ztcp',
	      operator: '-ne -eq -lt -gt -f -d -e -s -l -a' // relevance booster
	    },
	    contains: [{
	      className: 'shebang',
	      begin: /^#![^\n]+sh\s*$/,
	      relevance: 10
	    }, {
	      className: 'function',
	      begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/,
	      returnBegin: true,
	      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: /\w[\w\d_]*/ })],
	      relevance: 0
	    }, hljs.HASH_COMMENT_MODE, hljs.NUMBER_MODE, QUOTE_STRING, APOS_STRING, VAR]
	  };
	};

/***/ },
/* 214 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var LITERAL = {
	    className: 'literal',
	    begin: '[\\+\\-]',
	    relevance: 0
	  };
	  return {
	    aliases: ['bf'],
	    contains: [hljs.COMMENT('[^\\[\\]\\.,\\+\\-<> \r\n]', '[\\[\\]\\.,\\+\\-<> \r\n]', {
	      returnEnd: true,
	      relevance: 0
	    }), {
	      className: 'title',
	      begin: '[\\[\\]]',
	      relevance: 0
	    }, {
	      className: 'string',
	      begin: '[\\.,]',
	      relevance: 0
	    }, {
	      // this mode works as the only relevance counter
	      begin: /\+\+|\-\-/, returnBegin: true,
	      contains: [LITERAL]
	    }, LITERAL]
	  };
	};

/***/ },
/* 215 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = 'div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to ' + 'until while with var';
	  var LITERALS = 'false true';
	  var COMMENT_MODES = [hljs.C_LINE_COMMENT_MODE, hljs.COMMENT(/\{/, /\}/, {
	    relevance: 0
	  }), hljs.COMMENT(/\(\*/, /\*\)/, {
	    relevance: 10
	  })];
	  var STRING = {
	    className: 'string',
	    begin: /'/, end: /'/,
	    contains: [{ begin: /''/ }]
	  };
	  var CHAR_STRING = {
	    className: 'string', begin: /(#\d+)+/
	  };
	  var DATE = {
	    className: 'date',
	    begin: '\\b\\d+(\\.\\d+)?(DT|D|T)',
	    relevance: 0
	  };
	  var DBL_QUOTED_VARIABLE = {
	    className: 'variable',
	    begin: '"',
	    end: '"'
	  };

	  var PROCEDURE = {
	    className: 'function',
	    beginKeywords: 'procedure', end: /[:;]/,
	    keywords: 'procedure|10',
	    contains: [hljs.TITLE_MODE, {
	      className: 'params',
	      begin: /\(/, end: /\)/,
	      keywords: KEYWORDS,
	      contains: [STRING, CHAR_STRING]
	    }].concat(COMMENT_MODES)
	  };

	  var OBJECT = {
	    className: 'class',
	    begin: 'OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)',
	    returnBegin: true,
	    contains: [hljs.TITLE_MODE, PROCEDURE]
	  };

	  return {
	    case_insensitive: true,
	    keywords: { keyword: KEYWORDS, literal: LITERALS },
	    contains: [STRING, CHAR_STRING, DATE, DBL_QUOTED_VARIABLE, hljs.NUMBER_MODE, OBJECT, PROCEDURE]
	  };
	};

/***/ },
/* 216 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['capnp'],
	    keywords: {
	      keyword: 'struct enum interface union group import using const annotation extends in of on as with from fixed',
	      built_in: 'Void Bool Int8 Int16 Int32 Int64 UInt8 UInt16 UInt32 UInt64 Float32 Float64 ' + 'Text Data AnyPointer AnyStruct Capability List',
	      literal: 'true false'
	    },
	    contains: [hljs.QUOTE_STRING_MODE, hljs.NUMBER_MODE, hljs.HASH_COMMENT_MODE, {
	      className: 'shebang',
	      begin: /@0x[\w\d]{16};/,
	      illegal: /\n/
	    }, {
	      className: 'number',
	      begin: /@\d+\b/
	    }, {
	      className: 'class',
	      beginKeywords: 'struct enum', end: /\{/,
	      illegal: /\n/,
	      contains: [hljs.inherit(hljs.TITLE_MODE, {
	        starts: { endsWithParent: true, excludeEnd: true } // hack: eating everything after the first title
	      })]
	    }, {
	      className: 'class',
	      beginKeywords: 'interface', end: /\{/,
	      illegal: /\n/,
	      contains: [hljs.inherit(hljs.TITLE_MODE, {
	        starts: { endsWithParent: true, excludeEnd: true } // hack: eating everything after the first title
	      })]
	    }]
	  };
	};

/***/ },
/* 217 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  // 2.3. Identifiers and keywords
	  var KEYWORDS = 'assembly module package import alias class interface object given value ' + 'assign void function new of extends satisfies abstracts in out return ' + 'break continue throw assert dynamic if else switch case for while try ' + 'catch finally then let this outer super is exists nonempty';
	  // 7.4.1 Declaration Modifiers
	  var DECLARATION_MODIFIERS = 'shared abstract formal default actual variable late native deprecated' + 'final sealed annotation suppressWarnings small';
	  // 7.4.2 Documentation
	  var DOCUMENTATION = 'doc by license see throws tagged';
	  var LANGUAGE_ANNOTATIONS = DECLARATION_MODIFIERS + ' ' + DOCUMENTATION;
	  var SUBST = {
	    className: 'subst', excludeBegin: true, excludeEnd: true,
	    begin: /``/, end: /``/,
	    keywords: KEYWORDS,
	    relevance: 10
	  };
	  var EXPRESSIONS = [{
	    // verbatim string
	    className: 'string',
	    begin: '"""',
	    end: '"""',
	    relevance: 10
	  }, {
	    // string literal or template
	    className: 'string',
	    begin: '"', end: '"',
	    contains: [SUBST]
	  }, {
	    // character literal
	    className: 'string',
	    begin: "'",
	    end: "'"
	  }, {
	    // numeric literal
	    className: 'number',
	    begin: '#[0-9a-fA-F_]+|\\$[01_]+|[0-9_]+(?:\\.[0-9_](?:[eE][+-]?\\d+)?)?[kMGTPmunpf]?',
	    relevance: 0
	  }];
	  SUBST.contains = EXPRESSIONS;

	  return {
	    keywords: {
	      keyword: KEYWORDS,
	      annotation: LANGUAGE_ANNOTATIONS
	    },
	    illegal: '\\$[^01]|#[^0-9a-fA-F]',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.COMMENT('/\\*', '\\*/', { contains: ['self'] }), {
	      // compiler annotation
	      className: 'annotation',
	      begin: '@[a-z]\\w*(?:\\:\"[^\"]*\")?'
	    }].concat(EXPRESSIONS)
	  };
	};

/***/ },
/* 218 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var keywords = {
	    built_in:
	    // Clojure keywords
	    'def cond apply if-not if-let if not not= = < > <= >= == + / * - rem ' + 'quot neg? pos? delay? symbol? keyword? true? false? integer? empty? coll? list? ' + 'set? ifn? fn? associative? sequential? sorted? counted? reversible? number? decimal? ' + 'class? distinct? isa? float? rational? reduced? ratio? odd? even? char? seq? vector? ' + 'string? map? nil? contains? zero? instance? not-every? not-any? libspec? -> ->> .. . ' + 'inc compare do dotimes mapcat take remove take-while drop letfn drop-last take-last ' + 'drop-while while intern condp case reduced cycle split-at split-with repeat replicate ' + 'iterate range merge zipmap declare line-seq sort comparator sort-by dorun doall nthnext ' + 'nthrest partition eval doseq await await-for let agent atom send send-off release-pending-sends ' + 'add-watch mapv filterv remove-watch agent-error restart-agent set-error-handler error-handler ' + 'set-error-mode! error-mode shutdown-agents quote var fn loop recur throw try monitor-enter ' + 'monitor-exit defmacro defn defn- macroexpand macroexpand-1 for dosync and or ' + 'when when-not when-let comp juxt partial sequence memoize constantly complement identity assert ' + 'peek pop doto proxy defstruct first rest cons defprotocol cast coll deftype defrecord last butlast ' + 'sigs reify second ffirst fnext nfirst nnext defmulti defmethod meta with-meta ns in-ns create-ns import ' + 'refer keys select-keys vals key val rseq name namespace promise into transient persistent! conj! ' + 'assoc! dissoc! pop! disj! use class type num float double short byte boolean bigint biginteger ' + 'bigdec print-method print-dup throw-if printf format load compile get-in update-in pr pr-on newline ' + 'flush read slurp read-line subvec with-open memfn time re-find re-groups rand-int rand mod locking ' + 'assert-valid-fdecl alias resolve ref deref refset swap! reset! set-validator! compare-and-set! alter-meta! ' + 'reset-meta! commute get-validator alter ref-set ref-history-count ref-min-history ref-max-history ensure sync io! ' + 'new next conj set! to-array future future-call into-array aset gen-class reduce map filter find empty ' + 'hash-map hash-set sorted-map sorted-map-by sorted-set sorted-set-by vec vector seq flatten reverse assoc dissoc list ' + 'disj get union difference intersection extend extend-type extend-protocol int nth delay count concat chunk chunk-buffer ' + 'chunk-append chunk-first chunk-rest max min dec unchecked-inc-int unchecked-inc unchecked-dec-inc unchecked-dec unchecked-negate ' + 'unchecked-add-int unchecked-add unchecked-subtract-int unchecked-subtract chunk-next chunk-cons chunked-seq? prn vary-meta ' + 'lazy-seq spread list* str find-keyword keyword symbol gensym force rationalize'
	  };

	  var SYMBOLSTART = 'a-zA-Z_\\-!.?+*=<>&#\'';
	  var SYMBOL_RE = '[' + SYMBOLSTART + '][' + SYMBOLSTART + '0-9/;:]*';
	  var SIMPLE_NUMBER_RE = '[-+]?\\d+(\\.\\d+)?';

	  var SYMBOL = {
	    begin: SYMBOL_RE,
	    relevance: 0
	  };
	  var NUMBER = {
	    className: 'number', begin: SIMPLE_NUMBER_RE,
	    relevance: 0
	  };
	  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
	  var COMMENT = hljs.COMMENT(';', '$', {
	    relevance: 0
	  });
	  var LITERAL = {
	    className: 'literal',
	    begin: /\b(true|false|nil)\b/
	  };
	  var COLLECTION = {
	    className: 'collection',
	    begin: '[\\[\\{]', end: '[\\]\\}]'
	  };
	  var HINT = {
	    className: 'comment',
	    begin: '\\^' + SYMBOL_RE
	  };
	  var HINT_COL = hljs.COMMENT('\\^\\{', '\\}');
	  var KEY = {
	    className: 'attribute',
	    begin: '[:]' + SYMBOL_RE
	  };
	  var LIST = {
	    className: 'list',
	    begin: '\\(', end: '\\)'
	  };
	  var BODY = {
	    endsWithParent: true,
	    relevance: 0
	  };
	  var NAME = {
	    keywords: keywords,
	    lexemes: SYMBOL_RE,
	    className: 'keyword', begin: SYMBOL_RE,
	    starts: BODY
	  };
	  var DEFAULT_CONTAINS = [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL, SYMBOL];

	  LIST.contains = [hljs.COMMENT('comment', ''), NAME, BODY];
	  BODY.contains = DEFAULT_CONTAINS;
	  COLLECTION.contains = DEFAULT_CONTAINS;

	  return {
	    aliases: ['clj'],
	    illegal: /\S/,
	    contains: [LIST, STRING, HINT, HINT_COL, COMMENT, KEY, COLLECTION, NUMBER, LITERAL]
	  };
	};

/***/ },
/* 219 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    contains: [{
	      className: 'prompt',
	      begin: /^([\w.-]+|\s*#_)=>/,
	      starts: {
	        end: /$/,
	        subLanguage: 'clojure'
	      }
	    }]
	  };
	};

/***/ },
/* 220 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['cmake.in'],
	    case_insensitive: true,
	    keywords: {
	      keyword: 'add_custom_command add_custom_target add_definitions add_dependencies ' + 'add_executable add_library add_subdirectory add_test aux_source_directory ' + 'break build_command cmake_minimum_required cmake_policy configure_file ' + 'create_test_sourcelist define_property else elseif enable_language enable_testing ' + 'endforeach endfunction endif endmacro endwhile execute_process export find_file ' + 'find_library find_package find_path find_program fltk_wrap_ui foreach function ' + 'get_cmake_property get_directory_property get_filename_component get_property ' + 'get_source_file_property get_target_property get_test_property if include ' + 'include_directories include_external_msproject include_regular_expression install ' + 'link_directories load_cache load_command macro mark_as_advanced message option ' + 'output_required_files project qt_wrap_cpp qt_wrap_ui remove_definitions return ' + 'separate_arguments set set_directory_properties set_property ' + 'set_source_files_properties set_target_properties set_tests_properties site_name ' + 'source_group string target_link_libraries try_compile try_run unset variable_watch ' + 'while build_name exec_program export_library_dependencies install_files ' + 'install_programs install_targets link_libraries make_directory remove subdir_depends ' + 'subdirs use_mangled_mesa utility_source variable_requires write_file ' + 'qt5_use_modules qt5_use_package qt5_wrap_cpp on off true false and or',
	      operator: 'equal less greater strless strgreater strequal matches'
	    },
	    contains: [{
	      className: 'envvar',
	      begin: '\\${', end: '}'
	    }, hljs.HASH_COMMENT_MODE, hljs.QUOTE_STRING_MODE, hljs.NUMBER_MODE]
	  };
	};

/***/ },
/* 221 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = {
	    keyword:
	    // JS keywords
	    'in if for while finally new do return else break catch instanceof throw try this ' + 'switch continue typeof delete debugger super ' +
	    // Coffee keywords
	    'then unless until loop of by when and or is isnt not',
	    literal:
	    // JS literals
	    'true false null undefined ' +
	    // Coffee literals
	    'yes no on off',
	    built_in: 'npm require console print module global window document'
	  };
	  var JS_IDENT_RE = '[A-Za-z$_][0-9A-Za-z$_]*';
	  var SUBST = {
	    className: 'subst',
	    begin: /#\{/, end: /}/,
	    keywords: KEYWORDS
	  };
	  var EXPRESSIONS = [hljs.BINARY_NUMBER_MODE, hljs.inherit(hljs.C_NUMBER_MODE, { starts: { end: '(\\s*/)?', relevance: 0 } }), // a number tries to eat the following slash to prevent treating it as a regexp
	  {
	    className: 'string',
	    variants: [{
	      begin: /'''/, end: /'''/,
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: /'/, end: /'/,
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: /"""/, end: /"""/,
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST]
	    }, {
	      begin: /"/, end: /"/,
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST]
	    }]
	  }, {
	    className: 'regexp',
	    variants: [{
	      begin: '///', end: '///',
	      contains: [SUBST, hljs.HASH_COMMENT_MODE]
	    }, {
	      begin: '//[gim]*',
	      relevance: 0
	    }, {
	      // regex can't start with space to parse x / 2 / 3 as two divisions
	      // regex can't start with *, and it supports an "illegal" in the main mode
	      begin: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/
	    }]
	  }, {
	    className: 'property',
	    begin: '@' + JS_IDENT_RE
	  }, {
	    begin: '`', end: '`',
	    excludeBegin: true, excludeEnd: true,
	    subLanguage: 'javascript'
	  }];
	  SUBST.contains = EXPRESSIONS;

	  var TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });
	  var PARAMS_RE = '(\\(.*\\))?\\s*\\B[-=]>';
	  var PARAMS = {
	    className: 'params',
	    begin: '\\([^\\(]', returnBegin: true,
	    /* We need another contained nameless mode to not have every nested
	    pair of parens to be called "params" */
	    contains: [{
	      begin: /\(/, end: /\)/,
	      keywords: KEYWORDS,
	      contains: ['self'].concat(EXPRESSIONS)
	    }]
	  };

	  return {
	    aliases: ['coffee', 'cson', 'iced'],
	    keywords: KEYWORDS,
	    illegal: /\/\*/,
	    contains: EXPRESSIONS.concat([hljs.COMMENT('###', '###'), hljs.HASH_COMMENT_MODE, {
	      className: 'function',
	      begin: '^\\s*' + JS_IDENT_RE + '\\s*=\\s*' + PARAMS_RE, end: '[-=]>',
	      returnBegin: true,
	      contains: [TITLE, PARAMS]
	    }, {
	      // anonymous function start
	      begin: /[:\(,=]\s*/,
	      relevance: 0,
	      contains: [{
	        className: 'function',
	        begin: PARAMS_RE, end: '[-=]>',
	        returnBegin: true,
	        contains: [PARAMS]
	      }]
	    }, {
	      className: 'class',
	      beginKeywords: 'class',
	      end: '$',
	      illegal: /[:="\[\]]/,
	      contains: [{
	        beginKeywords: 'extends',
	        endsWithParent: true,
	        illegal: /[:="\[\]]/,
	        contains: [TITLE]
	      }, TITLE]
	    }, {
	      className: 'attribute',
	      begin: JS_IDENT_RE + ':', end: ':',
	      returnBegin: true, returnEnd: true,
	      relevance: 0
	    }])
	  };
	};

/***/ },
/* 222 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var CPP_PRIMATIVE_TYPES = {
	    className: 'keyword',
	    begin: '\\b[a-z\\d_]*_t\\b'
	  };

	  var STRINGS = {
	    className: 'string',
	    variants: [hljs.inherit(hljs.QUOTE_STRING_MODE, { begin: '((u8?|U)|L)?"' }), {
	      begin: '(u8?|U)?R"', end: '"',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: '\'\\\\?.', end: '\'',
	      illegal: '.'
	    }]
	  };

	  var NUMBERS = {
	    className: 'number',
	    variants: [{ begin: '\\b(\\d+(\\.\\d*)?|\\.\\d+)(u|U|l|L|ul|UL|f|F)' }, { begin: hljs.C_NUMBER_RE }]
	  };

	  var FUNCTION_TITLE = hljs.IDENT_RE + '\\s*\\(';

	  var CPP_KEYWORDS = {
	    keyword: 'int float while private char catch export virtual operator sizeof ' + 'dynamic_cast|10 typedef const_cast|10 const struct for static_cast|10 union namespace ' + 'unsigned long volatile static protected bool template mutable if public friend ' + 'do goto auto void enum else break extern using class asm case typeid ' + 'short reinterpret_cast|10 default double register explicit signed typename try this ' + 'switch continue inline delete alignof constexpr decltype ' + 'noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary ' + 'atomic_bool atomic_char atomic_schar ' + 'atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong ' + 'atomic_ullong',
	    built_in: 'std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream ' + 'auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set ' + 'unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos ' + 'asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp ' + 'fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper ' + 'isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow ' + 'printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp ' + 'strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan ' + 'vfprintf vprintf vsprintf',
	    literal: 'true false nullptr NULL'
	  };
	  return {
	    aliases: ['c', 'cc', 'h', 'c++', 'h++', 'hpp'],
	    keywords: CPP_KEYWORDS,
	    illegal: '</',
	    contains: [CPP_PRIMATIVE_TYPES, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, NUMBERS, STRINGS, {
	      className: 'preprocessor',
	      begin: '#', end: '$',
	      keywords: 'if else elif endif define undef warning error line ' + 'pragma ifdef ifndef',
	      contains: [{
	        begin: /\\\n/, relevance: 0
	      }, {
	        beginKeywords: 'include', end: '$',
	        contains: [STRINGS, {
	          className: 'string',
	          begin: '<', end: '>',
	          illegal: '\\n'
	        }]
	      }, STRINGS, NUMBERS, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }, {
	      begin: '\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<', end: '>',
	      keywords: CPP_KEYWORDS,
	      contains: ['self', CPP_PRIMATIVE_TYPES]
	    }, {
	      begin: hljs.IDENT_RE + '::',
	      keywords: CPP_KEYWORDS
	    }, {
	      // Expression keywords prevent 'keyword Name(...) or else if(...)' from
	      // being recognized as a function definition
	      beginKeywords: 'new throw return else',
	      relevance: 0
	    }, {
	      className: 'function',
	      begin: '(' + hljs.IDENT_RE + '[\\*&\\s]+)+' + FUNCTION_TITLE,
	      returnBegin: true, end: /[{;=]/,
	      excludeEnd: true,
	      keywords: CPP_KEYWORDS,
	      contains: [{
	        begin: FUNCTION_TITLE, returnBegin: true,
	        contains: [hljs.TITLE_MODE],
	        relevance: 0
	      }, {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        keywords: CPP_KEYWORDS,
	        relevance: 0,
	        contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, STRINGS, NUMBERS]
	      }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }]
	  };
	};

/***/ },
/* 223 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS =
	  // Normal keywords.
	  'abstract as base bool break byte case catch char checked const continue decimal dynamic ' + 'default delegate do double else enum event explicit extern false finally fixed float ' + 'for foreach goto if implicit in int interface internal is lock long null when ' + 'object operator out override params private protected public readonly ref sbyte ' + 'sealed short sizeof stackalloc static string struct switch this true try typeof ' + 'uint ulong unchecked unsafe ushort using virtual volatile void while async ' + 'protected public private internal ' +
	  // Contextual keywords.
	  'ascending descending from get group into join let orderby partial select set value var ' + 'where yield';
	  var GENERIC_IDENT_RE = hljs.IDENT_RE + '(<' + hljs.IDENT_RE + '>)?';
	  return {
	    aliases: ['csharp'],
	    keywords: KEYWORDS,
	    illegal: /::/,
	    contains: [hljs.COMMENT('///', '$', {
	      returnBegin: true,
	      contains: [{
	        className: 'xmlDocTag',
	        variants: [{
	          begin: '///', relevance: 0
	        }, {
	          begin: '<!--|-->'
	        }, {
	          begin: '</?', end: '>'
	        }]
	      }]
	    }), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'preprocessor',
	      begin: '#', end: '$',
	      keywords: 'if else elif endif define undef warning error line region endregion pragma checksum'
	    }, {
	      className: 'string',
	      begin: '@"', end: '"',
	      contains: [{ begin: '""' }]
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, {
	      beginKeywords: 'class interface', end: /[{;=]/,
	      illegal: /[^\s:]/,
	      contains: [hljs.TITLE_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }, {
	      beginKeywords: 'namespace', end: /[{;=]/,
	      illegal: /[^\s:]/,
	      contains: [{
	        // Customization of hljs.TITLE_MODE that allows '.'
	        className: 'title',
	        begin: '[a-zA-Z](\\.?\\w)*',
	        relevance: 0
	      }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }, {
	      // Expression keywords prevent 'keyword Name(...)' from being
	      // recognized as a function definition
	      beginKeywords: 'new return throw await',
	      relevance: 0
	    }, {
	      className: 'function',
	      begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
	      excludeEnd: true,
	      keywords: KEYWORDS,
	      contains: [{
	        begin: hljs.IDENT_RE + '\\s*\\(', returnBegin: true,
	        contains: [hljs.TITLE_MODE],
	        relevance: 0
	      }, {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        excludeBegin: true,
	        excludeEnd: true,
	        keywords: KEYWORDS,
	        relevance: 0,
	        contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, hljs.C_BLOCK_COMMENT_MODE]
	      }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }]
	  };
	};

/***/ },
/* 224 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
	  var FUNCTION = {
	    className: 'function',
	    begin: IDENT_RE + '\\(',
	    returnBegin: true,
	    excludeEnd: true,
	    end: '\\('
	  };
	  var RULE = {
	    className: 'rule',
	    begin: /[A-Z\_\.\-]+\s*:/, returnBegin: true, end: ';', endsWithParent: true,
	    contains: [{
	      className: 'attribute',
	      begin: /\S/, end: ':', excludeEnd: true,
	      starts: {
	        className: 'value',
	        endsWithParent: true, excludeEnd: true,
	        contains: [FUNCTION, hljs.CSS_NUMBER_MODE, hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	          className: 'hexcolor', begin: '#[0-9A-Fa-f]+'
	        }, {
	          className: 'important', begin: '!important'
	        }]
	      }
	    }]
	  };

	  return {
	    case_insensitive: true,
	    illegal: /[=\/|'\$]/,
	    contains: [hljs.C_BLOCK_COMMENT_MODE, RULE, {
	      className: 'id', begin: /\#[A-Za-z0-9_-]+/
	    }, {
	      className: 'class', begin: /\.[A-Za-z0-9_-]+/
	    }, {
	      className: 'attr_selector',
	      begin: /\[/, end: /\]/,
	      illegal: '$'
	    }, {
	      className: 'pseudo',
	      begin: /:(:)?[a-zA-Z0-9\_\-\+\(\)"']+/
	    }, {
	      className: 'at_rule',
	      begin: '@(font-face|page)',
	      lexemes: '[a-z-]+',
	      keywords: 'font-face page'
	    }, {
	      className: 'at_rule',
	      begin: '@', end: '[{;]', // at_rule eating first "{" is a good thing
	      // because it doesn’t let it to be parsed as
	      // a rule set but instead drops parser into
	      // the default mode which is how it should be.
	      contains: [{
	        className: 'keyword',
	        begin: /\S+/
	      }, {
	        begin: /\s/, endsWithParent: true, excludeEnd: true,
	        relevance: 0,
	        contains: [FUNCTION, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.CSS_NUMBER_MODE]
	      }]
	    }, {
	      className: 'tag', begin: IDENT_RE,
	      relevance: 0
	    }, {
	      className: 'rules',
	      begin: '{', end: '}',
	      illegal: /\S/,
	      contains: [hljs.C_BLOCK_COMMENT_MODE, RULE]
	    }]
	  };
	};

/***/ },
/* 225 */
/***/ function(module, exports) {

	'use strict';

	module.exports = /**
	                 * Known issues:
	                 *
	                 * - invalid hex string literals will be recognized as a double quoted strings
	                 *   but 'x' at the beginning of string will not be matched
	                 *
	                 * - delimited string literals are not checked for matching end delimiter
	                 *   (not possible to do with js regexp)
	                 *
	                 * - content of token string is colored as a string (i.e. no keyword coloring inside a token string)
	                 *   also, content of token string is not validated to contain only valid D tokens
	                 *
	                 * - special token sequence rule is not strictly following D grammar (anything following #line
	                 *   up to the end of line is matched as special token sequence)
	                 */

	function (hljs) {
	  /**
	   * Language keywords
	   *
	   * @type {Object}
	   */
	  var D_KEYWORDS = {
	    keyword: 'abstract alias align asm assert auto body break byte case cast catch class ' + 'const continue debug default delete deprecated do else enum export extern final ' + 'finally for foreach foreach_reverse|10 goto if immutable import in inout int ' + 'interface invariant is lazy macro mixin module new nothrow out override package ' + 'pragma private protected public pure ref return scope shared static struct ' + 'super switch synchronized template this throw try typedef typeid typeof union ' + 'unittest version void volatile while with __FILE__ __LINE__ __gshared|10 ' + '__thread __traits __DATE__ __EOF__ __TIME__ __TIMESTAMP__ __VENDOR__ __VERSION__',
	    built_in: 'bool cdouble cent cfloat char creal dchar delegate double dstring float function ' + 'idouble ifloat ireal long real short string ubyte ucent uint ulong ushort wchar ' + 'wstring',
	    literal: 'false null true'
	  };

	  /**
	   * Number literal regexps
	   *
	   * @type {String}
	   */
	  var decimal_integer_re = '(0|[1-9][\\d_]*)',
	      decimal_integer_nosus_re = '(0|[1-9][\\d_]*|\\d[\\d_]*|[\\d_]+?\\d)',
	      binary_integer_re = '0[bB][01_]+',
	      hexadecimal_digits_re = '([\\da-fA-F][\\da-fA-F_]*|_[\\da-fA-F][\\da-fA-F_]*)',
	      hexadecimal_integer_re = '0[xX]' + hexadecimal_digits_re,
	      decimal_exponent_re = '([eE][+-]?' + decimal_integer_nosus_re + ')',
	      decimal_float_re = '(' + decimal_integer_nosus_re + '(\\.\\d*|' + decimal_exponent_re + ')|' + '\\d+\\.' + decimal_integer_nosus_re + decimal_integer_nosus_re + '|' + '\\.' + decimal_integer_re + decimal_exponent_re + '?' + ')',
	      hexadecimal_float_re = '(0[xX](' + hexadecimal_digits_re + '\\.' + hexadecimal_digits_re + '|' + '\\.?' + hexadecimal_digits_re + ')[pP][+-]?' + decimal_integer_nosus_re + ')',
	      integer_re = '(' + decimal_integer_re + '|' + binary_integer_re + '|' + hexadecimal_integer_re + ')',
	      float_re = '(' + hexadecimal_float_re + '|' + decimal_float_re + ')';

	  /**
	   * Escape sequence supported in D string and character literals
	   *
	   * @type {String}
	   */
	  var escape_sequence_re = '\\\\(' + '[\'"\\?\\\\abfnrtv]|' + // common escapes
	  'u[\\dA-Fa-f]{4}|' + // four hex digit unicode codepoint
	  '[0-7]{1,3}|' + // one to three octal digit ascii char code
	  'x[\\dA-Fa-f]{2}|' + // two hex digit ascii char code
	  'U[\\dA-Fa-f]{8}' + // eight hex digit unicode codepoint
	  ')|' + '&[a-zA-Z\\d]{2,};'; // named character entity

	  /**
	   * D integer number literals
	   *
	   * @type {Object}
	   */
	  var D_INTEGER_MODE = {
	    className: 'number',
	    begin: '\\b' + integer_re + '(L|u|U|Lu|LU|uL|UL)?',
	    relevance: 0
	  };

	  /**
	   * [D_FLOAT_MODE description]
	   * @type {Object}
	   */
	  var D_FLOAT_MODE = {
	    className: 'number',
	    begin: '\\b(' + float_re + '([fF]|L|i|[fF]i|Li)?|' + integer_re + '(i|[fF]i|Li)' + ')',
	    relevance: 0
	  };

	  /**
	   * D character literal
	   *
	   * @type {Object}
	   */
	  var D_CHARACTER_MODE = {
	    className: 'string',
	    begin: '\'(' + escape_sequence_re + '|.)', end: '\'',
	    illegal: '.'
	  };

	  /**
	   * D string escape sequence
	   *
	   * @type {Object}
	   */
	  var D_ESCAPE_SEQUENCE = {
	    begin: escape_sequence_re,
	    relevance: 0
	  };

	  /**
	   * D double quoted string literal
	   *
	   * @type {Object}
	   */
	  var D_STRING_MODE = {
	    className: 'string',
	    begin: '"',
	    contains: [D_ESCAPE_SEQUENCE],
	    end: '"[cwd]?'
	  };

	  /**
	   * D wysiwyg and delimited string literals
	   *
	   * @type {Object}
	   */
	  var D_WYSIWYG_DELIMITED_STRING_MODE = {
	    className: 'string',
	    begin: '[rq]"',
	    end: '"[cwd]?',
	    relevance: 5
	  };

	  /**
	   * D alternate wysiwyg string literal
	   *
	   * @type {Object}
	   */
	  var D_ALTERNATE_WYSIWYG_STRING_MODE = {
	    className: 'string',
	    begin: '`',
	    end: '`[cwd]?'
	  };

	  /**
	   * D hexadecimal string literal
	   *
	   * @type {Object}
	   */
	  var D_HEX_STRING_MODE = {
	    className: 'string',
	    begin: 'x"[\\da-fA-F\\s\\n\\r]*"[cwd]?',
	    relevance: 10
	  };

	  /**
	   * D delimited string literal
	   *
	   * @type {Object}
	   */
	  var D_TOKEN_STRING_MODE = {
	    className: 'string',
	    begin: 'q"\\{',
	    end: '\\}"'
	  };

	  /**
	   * Hashbang support
	   *
	   * @type {Object}
	   */
	  var D_HASHBANG_MODE = {
	    className: 'shebang',
	    begin: '^#!',
	    end: '$',
	    relevance: 5
	  };

	  /**
	   * D special token sequence
	   *
	   * @type {Object}
	   */
	  var D_SPECIAL_TOKEN_SEQUENCE_MODE = {
	    className: 'preprocessor',
	    begin: '#(line)',
	    end: '$',
	    relevance: 5
	  };

	  /**
	   * D attributes
	   *
	   * @type {Object}
	   */
	  var D_ATTRIBUTE_MODE = {
	    className: 'keyword',
	    begin: '@[a-zA-Z_][a-zA-Z_\\d]*'
	  };

	  /**
	   * D nesting comment
	   *
	   * @type {Object}
	   */
	  var D_NESTING_COMMENT_MODE = hljs.COMMENT('\\/\\+', '\\+\\/', {
	    contains: ['self'],
	    relevance: 10
	  });

	  return {
	    lexemes: hljs.UNDERSCORE_IDENT_RE,
	    keywords: D_KEYWORDS,
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, D_NESTING_COMMENT_MODE, D_HEX_STRING_MODE, D_STRING_MODE, D_WYSIWYG_DELIMITED_STRING_MODE, D_ALTERNATE_WYSIWYG_STRING_MODE, D_TOKEN_STRING_MODE, D_FLOAT_MODE, D_INTEGER_MODE, D_CHARACTER_MODE, D_HASHBANG_MODE, D_SPECIAL_TOKEN_SEQUENCE_MODE, D_ATTRIBUTE_MODE]
	  };
	};

/***/ },
/* 226 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['md', 'mkdown', 'mkd'],
	    contains: [
	    // highlight headers
	    {
	      className: 'header',
	      variants: [{ begin: '^#{1,6}', end: '$' }, { begin: '^.+?\\n[=-]{2,}$' }]
	    },
	    // inline html
	    {
	      begin: '<', end: '>',
	      subLanguage: 'xml',
	      relevance: 0
	    },
	    // lists (indicators only)
	    {
	      className: 'bullet',
	      begin: '^([*+-]|(\\d+\\.))\\s+'
	    },
	    // strong segments
	    {
	      className: 'strong',
	      begin: '[*_]{2}.+?[*_]{2}'
	    },
	    // emphasis segments
	    {
	      className: 'emphasis',
	      variants: [{ begin: '\\*.+?\\*' }, { begin: '_.+?_',
	        relevance: 0
	      }]
	    },
	    // blockquotes
	    {
	      className: 'blockquote',
	      begin: '^>\\s+', end: '$'
	    },
	    // code snippets
	    {
	      className: 'code',
	      variants: [{ begin: '`.+?`' }, { begin: '^( {4}|\t)', end: '$',
	        relevance: 0
	      }]
	    },
	    // horizontal rules
	    {
	      className: 'horizontal_rule',
	      begin: '^[-\\*]{3,}', end: '$'
	    },
	    // using links - title and link
	    {
	      begin: '\\[.+?\\][\\(\\[].*?[\\)\\]]',
	      returnBegin: true,
	      contains: [{
	        className: 'link_label',
	        begin: '\\[', end: '\\]',
	        excludeBegin: true,
	        returnEnd: true,
	        relevance: 0
	      }, {
	        className: 'link_url',
	        begin: '\\]\\(', end: '\\)',
	        excludeBegin: true, excludeEnd: true
	      }, {
	        className: 'link_reference',
	        begin: '\\]\\[', end: '\\]',
	        excludeBegin: true, excludeEnd: true
	      }],
	      relevance: 10
	    }, {
	      begin: '^\\[\.+\\]:',
	      returnBegin: true,
	      contains: [{
	        className: 'link_reference',
	        begin: '\\[', end: '\\]:',
	        excludeBegin: true, excludeEnd: true,
	        starts: {
	          className: 'link_url',
	          end: '$'
	        }
	      }]
	    }]
	  };
	};

/***/ },
/* 227 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var SUBST = {
	    className: 'subst',
	    begin: '\\$\\{', end: '}',
	    keywords: 'true false null this is new super'
	  };

	  var STRING = {
	    className: 'string',
	    variants: [{
	      begin: 'r\'\'\'', end: '\'\'\''
	    }, {
	      begin: 'r"""', end: '"""'
	    }, {
	      begin: 'r\'', end: '\'',
	      illegal: '\\n'
	    }, {
	      begin: 'r"', end: '"',
	      illegal: '\\n'
	    }, {
	      begin: '\'\'\'', end: '\'\'\'',
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST]
	    }, {
	      begin: '"""', end: '"""',
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST]
	    }, {
	      begin: '\'', end: '\'',
	      illegal: '\\n',
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST]
	    }, {
	      begin: '"', end: '"',
	      illegal: '\\n',
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST]
	    }]
	  };
	  SUBST.contains = [hljs.C_NUMBER_MODE, STRING];

	  var KEYWORDS = {
	    keyword: 'assert break case catch class const continue default do else enum extends false final finally for if ' + 'in is new null rethrow return super switch this throw true try var void while with',
	    literal: 'abstract as dynamic export external factory get implements import library operator part set static typedef',
	    built_in:
	    // dart:core
	    'print Comparable DateTime Duration Function Iterable Iterator List Map Match Null Object Pattern RegExp Set ' + 'Stopwatch String StringBuffer StringSink Symbol Type Uri bool double int num ' +
	    // dart:html
	    'document window querySelector querySelectorAll Element ElementList'
	  };

	  return {
	    keywords: KEYWORDS,
	    contains: [STRING, hljs.COMMENT('/\\*\\*', '\\*/', {
	      subLanguage: 'markdown'
	    }), hljs.COMMENT('///', '$', {
	      subLanguage: 'markdown'
	    }), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '{', excludeEnd: true,
	      contains: [{
	        beginKeywords: 'extends implements'
	      }, hljs.UNDERSCORE_TITLE_MODE]
	    }, hljs.C_NUMBER_MODE, {
	      className: 'annotation', begin: '@[A-Za-z]+'
	    }, {
	      begin: '=>' // No markup, just a relevance booster
	    }]
	  };
	};

/***/ },
/* 228 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = 'exports register file shl array record property for mod while set ally label uses raise not ' + 'stored class safecall var interface or private static exit index inherited to else stdcall ' + 'override shr asm far resourcestring finalization packed virtual out and protected library do ' + 'xorwrite goto near function end div overload object unit begin string on inline repeat until ' + 'destructor write message program with read initialization except default nil if case cdecl in ' + 'downto threadvar of try pascal const external constructor type public then implementation ' + 'finally published procedure';
	  var COMMENT_MODES = [hljs.C_LINE_COMMENT_MODE, hljs.COMMENT(/\{/, /\}/, {
	    relevance: 0
	  }), hljs.COMMENT(/\(\*/, /\*\)/, {
	    relevance: 10
	  })];
	  var STRING = {
	    className: 'string',
	    begin: /'/, end: /'/,
	    contains: [{ begin: /''/ }]
	  };
	  var CHAR_STRING = {
	    className: 'string', begin: /(#\d+)+/
	  };
	  var CLASS = {
	    begin: hljs.IDENT_RE + '\\s*=\\s*class\\s*\\(', returnBegin: true,
	    contains: [hljs.TITLE_MODE]
	  };
	  var FUNCTION = {
	    className: 'function',
	    beginKeywords: 'function constructor destructor procedure', end: /[:;]/,
	    keywords: 'function constructor|10 destructor|10 procedure|10',
	    contains: [hljs.TITLE_MODE, {
	      className: 'params',
	      begin: /\(/, end: /\)/,
	      keywords: KEYWORDS,
	      contains: [STRING, CHAR_STRING]
	    }].concat(COMMENT_MODES)
	  };
	  return {
	    case_insensitive: true,
	    keywords: KEYWORDS,
	    illegal: /"|\$[G-Zg-z]|\/\*|<\/|\|/,
	    contains: [STRING, CHAR_STRING, hljs.NUMBER_MODE, CLASS, FUNCTION].concat(COMMENT_MODES)
	  };
	};

/***/ },
/* 229 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['patch'],
	    contains: [{
	      className: 'chunk',
	      relevance: 10,
	      variants: [{ begin: /^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/ }, { begin: /^\*\*\* +\d+,\d+ +\*\*\*\*$/ }, { begin: /^\-\-\- +\d+,\d+ +\-\-\-\-$/ }]
	    }, {
	      className: 'header',
	      variants: [{ begin: /Index: /, end: /$/ }, { begin: /=====/, end: /=====$/ }, { begin: /^\-\-\-/, end: /$/ }, { begin: /^\*{3} /, end: /$/ }, { begin: /^\+\+\+/, end: /$/ }, { begin: /\*{5}/, end: /\*{5}$/ }]
	    }, {
	      className: 'addition',
	      begin: '^\\+', end: '$'
	    }, {
	      className: 'deletion',
	      begin: '^\\-', end: '$'
	    }, {
	      className: 'change',
	      begin: '^\\!', end: '$'
	    }]
	  };
	};

/***/ },
/* 230 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var FILTER = {
	    className: 'filter',
	    begin: /\|[A-Za-z]+:?/,
	    keywords: 'truncatewords removetags linebreaksbr yesno get_digit timesince random striptags ' + 'filesizeformat escape linebreaks length_is ljust rjust cut urlize fix_ampersands ' + 'title floatformat capfirst pprint divisibleby add make_list unordered_list urlencode ' + 'timeuntil urlizetrunc wordcount stringformat linenumbers slice date dictsort ' + 'dictsortreversed default_if_none pluralize lower join center default ' + 'truncatewords_html upper length phone2numeric wordwrap time addslashes slugify first ' + 'escapejs force_escape iriencode last safe safeseq truncatechars localize unlocalize ' + 'localtime utc timezone',
	    contains: [{ className: 'argument', begin: /"/, end: /"/ }, { className: 'argument', begin: /'/, end: /'/ }]
	  };

	  return {
	    aliases: ['jinja'],
	    case_insensitive: true,
	    subLanguage: 'xml',
	    contains: [hljs.COMMENT(/\{%\s*comment\s*%}/, /\{%\s*endcomment\s*%}/), hljs.COMMENT(/\{#/, /#}/), {
	      className: 'template_tag',
	      begin: /\{%/, end: /%}/,
	      keywords: 'comment endcomment load templatetag ifchanged endifchanged if endif firstof for ' + 'endfor in ifnotequal endifnotequal widthratio extends include spaceless ' + 'endspaceless regroup by as ifequal endifequal ssi now with cycle url filter ' + 'endfilter debug block endblock else autoescape endautoescape csrf_token empty elif ' + 'endwith static trans blocktrans endblocktrans get_static_prefix get_media_prefix ' + 'plural get_current_language language get_available_languages ' + 'get_current_language_bidi get_language_info get_language_info_list localize ' + 'endlocalize localtime endlocaltime timezone endtimezone get_current_timezone ' + 'verbatim',
	      contains: [FILTER]
	    }, {
	      className: 'variable',
	      begin: /\{\{/, end: /}}/,
	      contains: [FILTER]
	    }]
	  };
	};

/***/ },
/* 231 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['bind', 'zone'],
	    keywords: {
	      keyword: 'IN A AAAA AFSDB APL CAA CDNSKEY CDS CERT CNAME DHCID DLV DNAME DNSKEY DS HIP IPSECKEY KEY KX ' + 'LOC MX NAPTR NS NSEC NSEC3 NSEC3PARAM PTR RRSIG RP SIG SOA SRV SSHFP TA TKEY TLSA TSIG TXT'
	    },
	    contains: [hljs.COMMENT(';', '$'), {
	      className: 'operator',
	      beginKeywords: '$TTL $GENERATE $INCLUDE $ORIGIN'
	    },
	    // IPv6
	    {
	      className: 'number',
	      begin: '((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(\\.(25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))'
	    },
	    // IPv4
	    {
	      className: 'number',
	      begin: '((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])'
	    }]
	  };
	};

/***/ },
/* 232 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['docker'],
	    case_insensitive: true,
	    keywords: {
	      built_ins: 'from maintainer cmd expose add copy entrypoint volume user workdir onbuild run env'
	    },
	    contains: [hljs.HASH_COMMENT_MODE, {
	      keywords: {
	        built_in: 'run cmd entrypoint volume add copy workdir onbuild'
	      },
	      begin: /^ *(onbuild +)?(run|cmd|entrypoint|volume|add|copy|workdir) +/,
	      starts: {
	        end: /[^\\]\n/,
	        subLanguage: 'bash'
	      }
	    }, {
	      keywords: {
	        built_in: 'from maintainer expose env user onbuild'
	      },
	      begin: /^ *(onbuild +)?(from|maintainer|expose|env|user|onbuild) +/, end: /[^\\]\n/,
	      contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.NUMBER_MODE, hljs.HASH_COMMENT_MODE]
	    }]
	  };
	};

/***/ },
/* 233 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var COMMENT = hljs.COMMENT(/@?rem\b/, /$/, {
	    relevance: 10
	  });
	  var LABEL = {
	    className: 'label',
	    begin: '^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)',
	    relevance: 0
	  };
	  return {
	    aliases: ['bat', 'cmd'],
	    case_insensitive: true,
	    keywords: {
	      flow: 'if else goto for in do call exit not exist errorlevel defined',
	      operator: 'equ neq lss leq gtr geq',
	      keyword: 'shift cd dir echo setlocal endlocal set pause copy',
	      stream: 'prn nul lpt3 lpt2 lpt1 con com4 com3 com2 com1 aux',
	      winutils: 'ping net ipconfig taskkill xcopy ren del',
	      built_in: 'append assoc at attrib break cacls cd chcp chdir chkdsk chkntfs cls cmd color ' + 'comp compact convert date dir diskcomp diskcopy doskey erase fs ' + 'find findstr format ftype graftabl help keyb label md mkdir mode more move path ' + 'pause print popd pushd promt rd recover rem rename replace restore rmdir shift' + 'sort start subst time title tree type ver verify vol'
	    },
	    contains: [{
	      className: 'envvar', begin: /%%[^ ]|%[^ ]+?%|![^ ]+?!/
	    }, {
	      className: 'function',
	      begin: LABEL.begin, end: 'goto:eof',
	      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*' }), COMMENT]
	    }, {
	      className: 'number', begin: '\\b\\d+',
	      relevance: 0
	    }, COMMENT]
	  };
	};

/***/ },
/* 234 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var EXPRESSION_KEYWORDS = 'if eq ne lt lte gt gte select default math sep';
	  return {
	    aliases: ['dst'],
	    case_insensitive: true,
	    subLanguage: 'xml',
	    contains: [{
	      className: 'expression',
	      begin: '{', end: '}',
	      relevance: 0,
	      contains: [{
	        className: 'begin-block', begin: '\#[a-zA-Z\-\ \.]+',
	        keywords: EXPRESSION_KEYWORDS
	      }, {
	        className: 'string',
	        begin: '"', end: '"'
	      }, {
	        className: 'end-block', begin: '\\\/[a-zA-Z\-\ \.]+',
	        keywords: EXPRESSION_KEYWORDS
	      }, {
	        className: 'variable', begin: '[a-zA-Z\-\.]+',
	        keywords: EXPRESSION_KEYWORDS,
	        relevance: 0
	      }]
	    }]
	  };
	};

/***/ },
/* 235 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var ELIXIR_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?';
	  var ELIXIR_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
	  var ELIXIR_KEYWORDS = 'and false then defined module in return redo retry end for true self when ' + 'next until do begin unless nil break not case cond alias while ensure or ' + 'include use alias fn quote';
	  var SUBST = {
	    className: 'subst',
	    begin: '#\\{', end: '}',
	    lexemes: ELIXIR_IDENT_RE,
	    keywords: ELIXIR_KEYWORDS
	  };
	  var STRING = {
	    className: 'string',
	    contains: [hljs.BACKSLASH_ESCAPE, SUBST],
	    variants: [{
	      begin: /'/, end: /'/
	    }, {
	      begin: /"/, end: /"/
	    }]
	  };
	  var FUNCTION = {
	    className: 'function',
	    beginKeywords: 'def defp defmacro', end: /\B\b/, // the mode is ended by the title
	    contains: [hljs.inherit(hljs.TITLE_MODE, {
	      begin: ELIXIR_IDENT_RE,
	      endsParent: true
	    })]
	  };
	  var CLASS = hljs.inherit(FUNCTION, {
	    className: 'class',
	    beginKeywords: 'defmodule defrecord', end: /\bdo\b|$|;/
	  });
	  var ELIXIR_DEFAULT_CONTAINS = [STRING, hljs.HASH_COMMENT_MODE, CLASS, FUNCTION, {
	    className: 'constant',
	    begin: '(\\b[A-Z_]\\w*(.)?)+',
	    relevance: 0
	  }, {
	    className: 'symbol',
	    begin: ':',
	    contains: [STRING, { begin: ELIXIR_METHOD_RE }],
	    relevance: 0
	  }, {
	    className: 'symbol',
	    begin: ELIXIR_IDENT_RE + ':',
	    relevance: 0
	  }, {
	    className: 'number',
	    begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
	    relevance: 0
	  }, {
	    className: 'variable',
	    begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
	  }, {
	    begin: '->'
	  }, { // regexp container
	    begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
	    contains: [hljs.HASH_COMMENT_MODE, {
	      className: 'regexp',
	      illegal: '\\n',
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST],
	      variants: [{
	        begin: '/', end: '/[a-z]*'
	      }, {
	        begin: '%r\\[', end: '\\][a-z]*'
	      }]
	    }],
	    relevance: 0
	  }];
	  SUBST.contains = ELIXIR_DEFAULT_CONTAINS;

	  return {
	    lexemes: ELIXIR_IDENT_RE,
	    keywords: ELIXIR_KEYWORDS,
	    contains: ELIXIR_DEFAULT_CONTAINS
	  };
	};

/***/ },
/* 236 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var COMMENT_MODES = [hljs.COMMENT('--', '$'), hljs.COMMENT('{-', '-}', {
	    contains: ['self']
	  })];

	  var CONSTRUCTOR = {
	    className: 'type',
	    begin: '\\b[A-Z][\\w\']*', // TODO: other constructors (build-in, infix).
	    relevance: 0
	  };

	  var LIST = {
	    className: 'container',
	    begin: '\\(', end: '\\)',
	    illegal: '"',
	    contains: [{ className: 'type', begin: '\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?' }, hljs.inherit(hljs.TITLE_MODE, { begin: '[_a-z][\\w\']*' })].concat(COMMENT_MODES)
	  };

	  var RECORD = {
	    className: 'container',
	    begin: '{', end: '}',
	    contains: LIST.contains
	  };

	  return {
	    keywords: 'let in if then else case of where module import exposing ' + 'type alias as infix infixl infixr port',
	    contains: [

	    // Top-level constructions.

	    {
	      className: 'module',
	      begin: '\\bmodule\\b', end: 'where',
	      keywords: 'module where',
	      contains: [LIST].concat(COMMENT_MODES),
	      illegal: '\\W\\.|;'
	    }, {
	      className: 'import',
	      begin: '\\bimport\\b', end: '$',
	      keywords: 'import|0 as exposing',
	      contains: [LIST].concat(COMMENT_MODES),
	      illegal: '\\W\\.|;'
	    }, {
	      className: 'typedef',
	      begin: '\\btype\\b', end: '$',
	      keywords: 'type alias',
	      contains: [CONSTRUCTOR, LIST, RECORD].concat(COMMENT_MODES)
	    }, {
	      className: 'infix',
	      beginKeywords: 'infix infixl infixr', end: '$',
	      contains: [hljs.C_NUMBER_MODE].concat(COMMENT_MODES)
	    }, {
	      className: 'foreign',
	      begin: '\\bport\\b', end: '$',
	      keywords: 'port',
	      contains: COMMENT_MODES
	    },

	    // Literals and names.

	    // TODO: characters.
	    hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, CONSTRUCTOR, hljs.inherit(hljs.TITLE_MODE, { begin: '^[_a-z][\\w\']*' }), { begin: '->|<-' } // No markup, relevance booster
	    ].concat(COMMENT_MODES)
	  };
	};

/***/ },
/* 237 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var RUBY_METHOD_RE = '[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?';
	  var RUBY_KEYWORDS = 'and false then defined module in return redo if BEGIN retry end for true self when ' + 'next until do begin unless END rescue nil else break undef not super class case ' + 'require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor';
	  var YARDOCTAG = {
	    className: 'doctag',
	    begin: '@[A-Za-z]+'
	  };
	  var IRB_OBJECT = {
	    className: 'value',
	    begin: '#<', end: '>'
	  };
	  var COMMENT_MODES = [hljs.COMMENT('#', '$', {
	    contains: [YARDOCTAG]
	  }), hljs.COMMENT('^\\=begin', '^\\=end', {
	    contains: [YARDOCTAG],
	    relevance: 10
	  }), hljs.COMMENT('^__END__', '\\n$')];
	  var SUBST = {
	    className: 'subst',
	    begin: '#\\{', end: '}',
	    keywords: RUBY_KEYWORDS
	  };
	  var STRING = {
	    className: 'string',
	    contains: [hljs.BACKSLASH_ESCAPE, SUBST],
	    variants: [{ begin: /'/, end: /'/ }, { begin: /"/, end: /"/ }, { begin: /`/, end: /`/ }, { begin: '%[qQwWx]?\\(', end: '\\)' }, { begin: '%[qQwWx]?\\[', end: '\\]' }, { begin: '%[qQwWx]?{', end: '}' }, { begin: '%[qQwWx]?<', end: '>' }, { begin: '%[qQwWx]?/', end: '/' }, { begin: '%[qQwWx]?%', end: '%' }, { begin: '%[qQwWx]?-', end: '-' }, { begin: '%[qQwWx]?\\|', end: '\\|' }, {
	      // \B in the beginning suppresses recognition of ?-sequences where ?
	      // is the last character of a preceding identifier, as in: `func?4`
	      begin: /\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/
	    }]
	  };
	  var PARAMS = {
	    className: 'params',
	    begin: '\\(', end: '\\)',
	    keywords: RUBY_KEYWORDS
	  };

	  var RUBY_DEFAULT_CONTAINS = [STRING, IRB_OBJECT, {
	    className: 'class',
	    beginKeywords: 'class module', end: '$|;',
	    illegal: /=/,
	    contains: [hljs.inherit(hljs.TITLE_MODE, { begin: '[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?' }), {
	      className: 'inheritance',
	      begin: '<\\s*',
	      contains: [{
	        className: 'parent',
	        begin: '(' + hljs.IDENT_RE + '::)?' + hljs.IDENT_RE
	      }]
	    }].concat(COMMENT_MODES)
	  }, {
	    className: 'function',
	    beginKeywords: 'def', end: '$|;',
	    relevance: 0,
	    contains: [hljs.inherit(hljs.TITLE_MODE, { begin: RUBY_METHOD_RE }), PARAMS].concat(COMMENT_MODES)
	  }, {
	    className: 'constant',
	    begin: '(::)?(\\b[A-Z]\\w*(::)?)+',
	    relevance: 0
	  }, {
	    className: 'symbol',
	    begin: hljs.UNDERSCORE_IDENT_RE + '(\\!|\\?)?:',
	    relevance: 0
	  }, {
	    className: 'symbol',
	    begin: ':',
	    contains: [STRING, { begin: RUBY_METHOD_RE }],
	    relevance: 0
	  }, {
	    className: 'number',
	    begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
	    relevance: 0
	  }, {
	    className: 'variable',
	    begin: '(\\$\\W)|((\\$|\\@\\@?)(\\w+))'
	  }, { // regexp container
	    begin: '(' + hljs.RE_STARTERS_RE + ')\\s*',
	    contains: [IRB_OBJECT, {
	      className: 'regexp',
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST],
	      illegal: /\n/,
	      variants: [{ begin: '/', end: '/[a-z]*' }, { begin: '%r{', end: '}[a-z]*' }, { begin: '%r\\(', end: '\\)[a-z]*' }, { begin: '%r!', end: '![a-z]*' }, { begin: '%r\\[', end: '\\][a-z]*' }]
	    }].concat(COMMENT_MODES),
	    relevance: 0
	  }].concat(COMMENT_MODES);

	  SUBST.contains = RUBY_DEFAULT_CONTAINS;
	  PARAMS.contains = RUBY_DEFAULT_CONTAINS;

	  var SIMPLE_PROMPT = "[>?]>";
	  var DEFAULT_PROMPT = "[\\w#]+\\(\\w+\\):\\d+:\\d+>";
	  var RVM_PROMPT = "(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>";

	  var IRB_DEFAULT = [{
	    begin: /^\s*=>/,
	    className: 'status',
	    starts: {
	      end: '$', contains: RUBY_DEFAULT_CONTAINS
	    }
	  }, {
	    className: 'prompt',
	    begin: '^(' + SIMPLE_PROMPT + "|" + DEFAULT_PROMPT + '|' + RVM_PROMPT + ')',
	    starts: {
	      end: '$', contains: RUBY_DEFAULT_CONTAINS
	    }
	  }];

	  return {
	    aliases: ['rb', 'gemspec', 'podspec', 'thor', 'irb'],
	    keywords: RUBY_KEYWORDS,
	    contains: COMMENT_MODES.concat(IRB_DEFAULT).concat(RUBY_DEFAULT_CONTAINS)
	  };
	};

/***/ },
/* 238 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    subLanguage: 'xml',
	    contains: [hljs.COMMENT('<%#', '%>'), {
	      begin: '<%[%=-]?', end: '[%-]?%>',
	      subLanguage: 'ruby',
	      excludeBegin: true,
	      excludeEnd: true
	    }]
	  };
	};

/***/ },
/* 239 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      special_functions: 'spawn spawn_link self',
	      reserved: 'after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if ' + 'let not of or orelse|10 query receive rem try when xor'
	    },
	    contains: [{
	      className: 'prompt', begin: '^[0-9]+> ',
	      relevance: 10
	    }, hljs.COMMENT('%', '$'), {
	      className: 'number',
	      begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
	      relevance: 0
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'constant', begin: '\\?(::)?([A-Z]\\w*(::)?)+'
	    }, {
	      className: 'arrow', begin: '->'
	    }, {
	      className: 'ok', begin: 'ok'
	    }, {
	      className: 'exclamation_mark', begin: '!'
	    }, {
	      className: 'function_or_atom',
	      begin: '(\\b[a-z\'][a-zA-Z0-9_\']*:[a-z\'][a-zA-Z0-9_\']*)|(\\b[a-z\'][a-zA-Z0-9_\']*)',
	      relevance: 0
	    }, {
	      className: 'variable',
	      begin: '[A-Z][a-zA-Z0-9_\']*',
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 240 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var BASIC_ATOM_RE = '[a-z\'][a-zA-Z0-9_\']*';
	  var FUNCTION_NAME_RE = '(' + BASIC_ATOM_RE + ':' + BASIC_ATOM_RE + '|' + BASIC_ATOM_RE + ')';
	  var ERLANG_RESERVED = {
	    keyword: 'after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if ' + 'let not of orelse|10 query receive rem try when xor',
	    literal: 'false true'
	  };

	  var COMMENT = hljs.COMMENT('%', '$');
	  var NUMBER = {
	    className: 'number',
	    begin: '\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)',
	    relevance: 0
	  };
	  var NAMED_FUN = {
	    begin: 'fun\\s+' + BASIC_ATOM_RE + '/\\d+'
	  };
	  var FUNCTION_CALL = {
	    begin: FUNCTION_NAME_RE + '\\(', end: '\\)',
	    returnBegin: true,
	    relevance: 0,
	    contains: [{
	      className: 'function_name', begin: FUNCTION_NAME_RE,
	      relevance: 0
	    }, {
	      begin: '\\(', end: '\\)', endsWithParent: true,
	      returnEnd: true,
	      relevance: 0
	      // "contains" defined later
	    }]
	  };
	  var TUPLE = {
	    className: 'tuple',
	    begin: '{', end: '}',
	    relevance: 0
	    // "contains" defined later
	  };
	  var VAR1 = {
	    className: 'variable',
	    begin: '\\b_([A-Z][A-Za-z0-9_]*)?',
	    relevance: 0
	  };
	  var VAR2 = {
	    className: 'variable',
	    begin: '[A-Z][a-zA-Z0-9_]*',
	    relevance: 0
	  };
	  var RECORD_ACCESS = {
	    begin: '#' + hljs.UNDERSCORE_IDENT_RE,
	    relevance: 0,
	    returnBegin: true,
	    contains: [{
	      className: 'record_name',
	      begin: '#' + hljs.UNDERSCORE_IDENT_RE,
	      relevance: 0
	    }, {
	      begin: '{', end: '}',
	      relevance: 0
	      // "contains" defined later
	    }]
	  };

	  var BLOCK_STATEMENTS = {
	    beginKeywords: 'fun receive if try case', end: 'end',
	    keywords: ERLANG_RESERVED
	  };
	  BLOCK_STATEMENTS.contains = [COMMENT, NAMED_FUN, hljs.inherit(hljs.APOS_STRING_MODE, { className: '' }), BLOCK_STATEMENTS, FUNCTION_CALL, hljs.QUOTE_STRING_MODE, NUMBER, TUPLE, VAR1, VAR2, RECORD_ACCESS];

	  var BASIC_MODES = [COMMENT, NAMED_FUN, BLOCK_STATEMENTS, FUNCTION_CALL, hljs.QUOTE_STRING_MODE, NUMBER, TUPLE, VAR1, VAR2, RECORD_ACCESS];
	  FUNCTION_CALL.contains[1].contains = BASIC_MODES;
	  TUPLE.contains = BASIC_MODES;
	  RECORD_ACCESS.contains[1].contains = BASIC_MODES;

	  var PARAMS = {
	    className: 'params',
	    begin: '\\(', end: '\\)',
	    contains: BASIC_MODES
	  };
	  return {
	    aliases: ['erl'],
	    keywords: ERLANG_RESERVED,
	    illegal: '(</|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))',
	    contains: [{
	      className: 'function',
	      begin: '^' + BASIC_ATOM_RE + '\\s*\\(', end: '->',
	      returnBegin: true,
	      illegal: '\\(|#|//|/\\*|\\\\|:|;',
	      contains: [PARAMS, hljs.inherit(hljs.TITLE_MODE, { begin: BASIC_ATOM_RE })],
	      starts: {
	        end: ';|\\.',
	        keywords: ERLANG_RESERVED,
	        contains: BASIC_MODES
	      }
	    }, COMMENT, {
	      className: 'pp',
	      begin: '^-', end: '\\.',
	      relevance: 0,
	      excludeEnd: true,
	      returnBegin: true,
	      lexemes: '-' + hljs.IDENT_RE,
	      keywords: '-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn ' + '-import -include -include_lib -compile -define -else -endif -file -behaviour ' + '-behavior -spec',
	      contains: [PARAMS]
	    }, NUMBER, hljs.QUOTE_STRING_MODE, RECORD_ACCESS, VAR1, VAR2, TUPLE, { begin: /\.$/ } // relevance booster
	    ]
	  };
	};

/***/ },
/* 241 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    contains: [{
	      begin: /[^\u2401\u0001]+/,
	      end: /[\u2401\u0001]/,
	      excludeEnd: true,
	      returnBegin: true,
	      returnEnd: false,
	      contains: [{
	        begin: /([^\u2401\u0001=]+)/,
	        end: /=([^\u2401\u0001=]+)/,
	        returnEnd: true,
	        returnBegin: false,
	        className: 'attribute'
	      }, {
	        begin: /=/,
	        end: /([\u2401\u0001])/,
	        excludeEnd: true,
	        excludeBegin: true,
	        className: 'string'
	      }]
	    }],
	    case_insensitive: true
	  };
	};

/***/ },
/* 242 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var PARAMS = {
	    className: 'params',
	    begin: '\\(', end: '\\)'
	  };

	  var F_KEYWORDS = {
	    constant: '.False. .True.',
	    type: 'integer real character complex logical dimension allocatable|10 parameter ' + 'external implicit|10 none double precision assign intent optional pointer ' + 'target in out common equivalence data',
	    keyword: 'kind do while private call intrinsic where elsewhere ' + 'type endtype endmodule endselect endinterface end enddo endif if forall endforall only contains default return stop then ' + 'public subroutine|10 function program .and. .or. .not. .le. .eq. .ge. .gt. .lt. ' + 'goto save else use module select case ' + 'access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit ' + 'continue format pause cycle exit ' + 'c_null_char c_alert c_backspace c_form_feed flush wait decimal round iomsg ' + 'synchronous nopass non_overridable pass protected volatile abstract extends import ' + 'non_intrinsic value deferred generic final enumerator class associate bind enum ' + 'c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t ' + 'c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double ' + 'c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr ' + 'c_new_line c_carriage_return c_horizontal_tab c_vertical_tab iso_c_binding c_loc c_funloc c_associated  c_f_pointer ' + 'c_ptr c_funptr iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor ' + 'numeric_storage_size output_unit c_f_procpointer ieee_arithmetic ieee_support_underflow_control ' + 'ieee_get_underflow_mode ieee_set_underflow_mode newunit contiguous ' + 'pad position action delim readwrite eor advance nml interface procedure namelist include sequence elemental pure',
	    built_in: 'alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint ' + 'dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl ' + 'algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama ' + 'iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod ' + 'qnint qsign qsin qsinh qsqrt qtan qtanh abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log ' + 'log10 max min nint sign sin sinh sqrt tan tanh print write dim lge lgt lle llt mod nullify allocate deallocate ' + 'adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product ' + 'eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul ' + 'maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack present product ' + 'radix random_number random_seed range repeat reshape rrspacing scale scan selected_int_kind selected_real_kind ' + 'set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify achar iachar transfer ' + 'dble entry dprod cpu_time command_argument_count get_command get_command_argument get_environment_variable is_iostat_end ' + 'ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode ' + 'is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of' + 'acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2 ' + 'atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits ' + 'bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr ' + 'num_images parity popcnt poppar shifta shiftl shiftr this_image'
	  };
	  return {
	    case_insensitive: true,
	    aliases: ['f90', 'f95'],
	    keywords: F_KEYWORDS,
	    contains: [hljs.inherit(hljs.APOS_STRING_MODE, { className: 'string', relevance: 0 }), hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string', relevance: 0 }), {
	      className: 'function',
	      beginKeywords: 'subroutine function program',
	      illegal: '[${=\\n]',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
	    }, hljs.COMMENT('!', '$', { relevance: 0 }), {
	      className: 'number',
	      begin: '(?=\\b|\\+|\\-|\\.)(?=\\.\\d|\\d)(?:\\d+)?(?:\\.?\\d*)(?:[de][+-]?\\d+)?\\b\\.?',
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 243 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var TYPEPARAM = {
	    begin: '<', end: '>',
	    contains: [hljs.inherit(hljs.TITLE_MODE, { begin: /'[a-zA-Z0-9_]+/ })]
	  };

	  return {
	    aliases: ['fs'],
	    keywords:
	    // monad builder keywords (at top, matches before non-bang kws)
	    'yield! return! let! do!' +
	    // regular keywords
	    'abstract and as assert base begin class default delegate do done ' + 'downcast downto elif else end exception extern false finally for ' + 'fun function global if in inherit inline interface internal lazy let ' + 'match member module mutable namespace new null of open or ' + 'override private public rec return sig static struct then to ' + 'true try type upcast use val void when while with yield',
	    contains: [{
	      className: 'string',
	      begin: '@"', end: '"',
	      contains: [{ begin: '""' }]
	    }, {
	      className: 'string',
	      begin: '"""', end: '"""'
	    }, hljs.COMMENT('\\(\\*', '\\*\\)'), {
	      className: 'class',
	      beginKeywords: 'type', end: '\\(|=|$', excludeEnd: true,
	      contains: [hljs.UNDERSCORE_TITLE_MODE, TYPEPARAM]
	    }, {
	      className: 'annotation',
	      begin: '\\[<', end: '>\\]',
	      relevance: 10
	    }, {
	      className: 'attribute',
	      begin: '\\B(\'[A-Za-z])\\b',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, hljs.C_LINE_COMMENT_MODE, hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 244 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	    var GCODE_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
	    var GCODE_CLOSE_RE = '\\%';
	    var GCODE_KEYWORDS = {
	        literal: '',
	        built_in: '',
	        keyword: 'IF DO WHILE ENDWHILE CALL ENDIF SUB ENDSUB GOTO REPEAT ENDREPEAT ' + 'EQ LT GT NE GE LE OR XOR'
	    };
	    var GCODE_START = {
	        className: 'preprocessor',
	        begin: '([O])([0-9]+)'
	    };
	    var GCODE_CODE = [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.COMMENT(/\(/, /\)/), hljs.inherit(hljs.C_NUMBER_MODE, { begin: '([-+]?([0-9]*\\.?[0-9]+\\.?))|' + hljs.C_NUMBER_RE }), hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), {
	        className: 'keyword',
	        begin: '([G])([0-9]+\\.?[0-9]?)'
	    }, {
	        className: 'title',
	        begin: '([M])([0-9]+\\.?[0-9]?)'
	    }, {
	        className: 'title',
	        begin: '(VC|VS|#)',
	        end: '(\\d+)'
	    }, {
	        className: 'title',
	        begin: '(VZOFX|VZOFY|VZOFZ)'
	    }, {
	        className: 'built_in',
	        begin: '(ATAN|ABS|ACOS|ASIN|SIN|COS|EXP|FIX|FUP|ROUND|LN|TAN)(\\[)',
	        end: '([-+]?([0-9]*\\.?[0-9]+\\.?))(\\])'
	    }, {
	        className: 'label',
	        variants: [{
	            begin: 'N', end: '\\d+',
	            illegal: '\\W'
	        }]
	    }];

	    return {
	        aliases: ['nc'],
	        // Some implementations (CNC controls) of G-code are interoperable with uppercase and lowercase letters seamlessly.
	        // However, most prefer all uppercase and uppercase is customary.
	        case_insensitive: true,
	        lexemes: GCODE_IDENT_RE,
	        keywords: GCODE_KEYWORDS,
	        contains: [{
	            className: 'preprocessor',
	            begin: GCODE_CLOSE_RE
	        }, GCODE_START].concat(GCODE_CODE)
	    };
	};

/***/ },
/* 245 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['feature'],
	    keywords: 'Feature Background Ability Business\ Need Scenario Scenarios Scenario\ Outline Scenario\ Template Examples Given And Then But When',
	    contains: [{
	      className: 'keyword',
	      begin: '\\*'
	    }, hljs.COMMENT('@[^@\r\n\t ]+', '$'), {
	      begin: '\\|', end: '\\|\\w*$',
	      contains: [{
	        className: 'string',
	        begin: '[^|]+'
	      }]
	    }, {
	      className: 'variable',
	      begin: '<', end: '>'
	    }, hljs.HASH_COMMENT_MODE, {
	      className: 'string',
	      begin: '"""', end: '"""'
	    }, hljs.QUOTE_STRING_MODE]
	  };
	};

/***/ },
/* 246 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      keyword: 'atomic_uint attribute bool break bvec2 bvec3 bvec4 case centroid coherent const continue default ' + 'discard dmat2 dmat2x2 dmat2x3 dmat2x4 dmat3 dmat3x2 dmat3x3 dmat3x4 dmat4 dmat4x2 dmat4x3 ' + 'dmat4x4 do double dvec2 dvec3 dvec4 else flat float for highp if iimage1D iimage1DArray ' + 'iimage2D iimage2DArray iimage2DMS iimage2DMSArray iimage2DRect iimage3D iimageBuffer iimageCube ' + 'iimageCubeArray image1D image1DArray image2D image2DArray image2DMS image2DMSArray image2DRect ' + 'image3D imageBuffer imageCube imageCubeArray in inout int invariant isampler1D isampler1DArray ' + 'isampler2D isampler2DArray isampler2DMS isampler2DMSArray isampler2DRect isampler3D isamplerBuffer ' + 'isamplerCube isamplerCubeArray ivec2 ivec3 ivec4 layout lowp mat2 mat2x2 mat2x3 mat2x4 mat3 mat3x2 ' + 'mat3x3 mat3x4 mat4 mat4x2 mat4x3 mat4x4 mediump noperspective out patch precision readonly restrict ' + 'return sample sampler1D sampler1DArray sampler1DArrayShadow sampler1DShadow sampler2D sampler2DArray ' + 'sampler2DArrayShadow sampler2DMS sampler2DMSArray sampler2DRect sampler2DRectShadow sampler2DShadow ' + 'sampler3D samplerBuffer samplerCube samplerCubeArray samplerCubeArrayShadow samplerCubeShadow smooth ' + 'struct subroutine switch uimage1D uimage1DArray uimage2D uimage2DArray uimage2DMS uimage2DMSArray ' + 'uimage2DRect uimage3D uimageBuffer uimageCube uimageCubeArray uint uniform usampler1D usampler1DArray ' + 'usampler2D usampler2DArray usampler2DMS usampler2DMSArray usampler2DRect usampler3D usamplerBuffer ' + 'usamplerCube usamplerCubeArray uvec2 uvec3 uvec4 varying vec2 vec3 vec4 void volatile while writeonly',
	      built_in: 'gl_BackColor gl_BackLightModelProduct gl_BackLightProduct gl_BackMaterial ' + 'gl_BackSecondaryColor gl_ClipDistance gl_ClipPlane gl_ClipVertex gl_Color ' + 'gl_DepthRange gl_EyePlaneQ gl_EyePlaneR gl_EyePlaneS gl_EyePlaneT gl_Fog gl_FogCoord ' + 'gl_FogFragCoord gl_FragColor gl_FragCoord gl_FragData gl_FragDepth gl_FrontColor ' + 'gl_FrontFacing gl_FrontLightModelProduct gl_FrontLightProduct gl_FrontMaterial ' + 'gl_FrontSecondaryColor gl_InstanceID gl_InvocationID gl_Layer gl_LightModel ' + 'gl_LightSource gl_MaxAtomicCounterBindings gl_MaxAtomicCounterBufferSize ' + 'gl_MaxClipDistances gl_MaxClipPlanes gl_MaxCombinedAtomicCounterBuffers ' + 'gl_MaxCombinedAtomicCounters gl_MaxCombinedImageUniforms gl_MaxCombinedImageUnitsAndFragmentOutputs ' + 'gl_MaxCombinedTextureImageUnits gl_MaxDrawBuffers gl_MaxFragmentAtomicCounterBuffers ' + 'gl_MaxFragmentAtomicCounters gl_MaxFragmentImageUniforms gl_MaxFragmentInputComponents ' + 'gl_MaxFragmentUniformComponents gl_MaxFragmentUniformVectors gl_MaxGeometryAtomicCounterBuffers ' + 'gl_MaxGeometryAtomicCounters gl_MaxGeometryImageUniforms gl_MaxGeometryInputComponents ' + 'gl_MaxGeometryOutputComponents gl_MaxGeometryOutputVertices gl_MaxGeometryTextureImageUnits ' + 'gl_MaxGeometryTotalOutputComponents gl_MaxGeometryUniformComponents gl_MaxGeometryVaryingComponents ' + 'gl_MaxImageSamples gl_MaxImageUnits gl_MaxLights gl_MaxPatchVertices gl_MaxProgramTexelOffset ' + 'gl_MaxTessControlAtomicCounterBuffers gl_MaxTessControlAtomicCounters gl_MaxTessControlImageUniforms ' + 'gl_MaxTessControlInputComponents gl_MaxTessControlOutputComponents gl_MaxTessControlTextureImageUnits ' + 'gl_MaxTessControlTotalOutputComponents gl_MaxTessControlUniformComponents ' + 'gl_MaxTessEvaluationAtomicCounterBuffers gl_MaxTessEvaluationAtomicCounters ' + 'gl_MaxTessEvaluationImageUniforms gl_MaxTessEvaluationInputComponents gl_MaxTessEvaluationOutputComponents ' + 'gl_MaxTessEvaluationTextureImageUnits gl_MaxTessEvaluationUniformComponents ' + 'gl_MaxTessGenLevel gl_MaxTessPatchComponents gl_MaxTextureCoords gl_MaxTextureImageUnits ' + 'gl_MaxTextureUnits gl_MaxVaryingComponents gl_MaxVaryingFloats gl_MaxVaryingVectors ' + 'gl_MaxVertexAtomicCounterBuffers gl_MaxVertexAtomicCounters gl_MaxVertexAttribs ' + 'gl_MaxVertexImageUniforms gl_MaxVertexOutputComponents gl_MaxVertexTextureImageUnits ' + 'gl_MaxVertexUniformComponents gl_MaxVertexUniformVectors gl_MaxViewports gl_MinProgramTexelOffset' + 'gl_ModelViewMatrix gl_ModelViewMatrixInverse gl_ModelViewMatrixInverseTranspose ' + 'gl_ModelViewMatrixTranspose gl_ModelViewProjectionMatrix gl_ModelViewProjectionMatrixInverse ' + 'gl_ModelViewProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixTranspose ' + 'gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 ' + 'gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_Normal gl_NormalMatrix ' + 'gl_NormalScale gl_ObjectPlaneQ gl_ObjectPlaneR gl_ObjectPlaneS gl_ObjectPlaneT gl_PatchVerticesIn ' + 'gl_PerVertex gl_Point gl_PointCoord gl_PointSize gl_Position gl_PrimitiveID gl_PrimitiveIDIn ' + 'gl_ProjectionMatrix gl_ProjectionMatrixInverse gl_ProjectionMatrixInverseTranspose ' + 'gl_ProjectionMatrixTranspose gl_SampleID gl_SampleMask gl_SampleMaskIn gl_SamplePosition ' + 'gl_SecondaryColor gl_TessCoord gl_TessLevelInner gl_TessLevelOuter gl_TexCoord gl_TextureEnvColor ' + 'gl_TextureMatrixInverseTranspose gl_TextureMatrixTranspose gl_Vertex gl_VertexID ' + 'gl_ViewportIndex gl_in gl_out EmitStreamVertex EmitVertex EndPrimitive EndStreamPrimitive ' + 'abs acos acosh all any asin asinh atan atanh atomicCounter atomicCounterDecrement ' + 'atomicCounterIncrement barrier bitCount bitfieldExtract bitfieldInsert bitfieldReverse ' + 'ceil clamp cos cosh cross dFdx dFdy degrees determinant distance dot equal exp exp2 faceforward ' + 'findLSB findMSB floatBitsToInt floatBitsToUint floor fma fract frexp ftransform fwidth greaterThan ' + 'greaterThanEqual imageAtomicAdd imageAtomicAnd imageAtomicCompSwap imageAtomicExchange ' + 'imageAtomicMax imageAtomicMin imageAtomicOr imageAtomicXor imageLoad imageStore imulExtended ' + 'intBitsToFloat interpolateAtCentroid interpolateAtOffset interpolateAtSample inverse inversesqrt ' + 'isinf isnan ldexp length lessThan lessThanEqual log log2 matrixCompMult max memoryBarrier ' + 'min mix mod modf noise1 noise2 noise3 noise4 normalize not notEqual outerProduct packDouble2x32 ' + 'packHalf2x16 packSnorm2x16 packSnorm4x8 packUnorm2x16 packUnorm4x8 pow radians reflect refract ' + 'round roundEven shadow1D shadow1DLod shadow1DProj shadow1DProjLod shadow2D shadow2DLod shadow2DProj ' + 'shadow2DProjLod sign sin sinh smoothstep sqrt step tan tanh texelFetch texelFetchOffset texture ' + 'texture1D texture1DLod texture1DProj texture1DProjLod texture2D texture2DLod texture2DProj ' + 'texture2DProjLod texture3D texture3DLod texture3DProj texture3DProjLod textureCube textureCubeLod ' + 'textureGather textureGatherOffset textureGatherOffsets textureGrad textureGradOffset textureLod ' + 'textureLodOffset textureOffset textureProj textureProjGrad textureProjGradOffset textureProjLod ' + 'textureProjLodOffset textureProjOffset textureQueryLod textureSize transpose trunc uaddCarry ' + 'uintBitsToFloat umulExtended unpackDouble2x32 unpackHalf2x16 unpackSnorm2x16 unpackSnorm4x8 ' + 'unpackUnorm2x16 unpackUnorm4x8 usubBorrow gl_TextureMatrix gl_TextureMatrixInverse',
	      literal: 'true false'
	    },
	    illegal: '"',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.C_NUMBER_MODE, {
	      className: 'preprocessor',
	      begin: '#', end: '$'
	    }]
	  };
	};

/***/ },
/* 247 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var GO_KEYWORDS = {
	    keyword: 'break default func interface select case map struct chan else goto package switch ' + 'const fallthrough if range type continue for import return var go defer',
	    constant: 'true false iota nil',
	    typename: 'bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 ' + 'uint16 uint32 uint64 int uint uintptr rune',
	    built_in: 'append cap close complex copy imag len make new panic print println real recover delete'
	  };
	  return {
	    aliases: ["golang"],
	    keywords: GO_KEYWORDS,
	    illegal: '</',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      begin: '\'', end: '[^\\\\]\''
	    }, {
	      className: 'string',
	      begin: '`', end: '`'
	    }, {
	      className: 'number',
	      begin: hljs.C_NUMBER_RE + '[dflsi]?',
	      relevance: 0
	    }, hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 248 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    case_insensitive: true,
	    keywords: {
	      keyword: 'task project allprojects subprojects artifacts buildscript configurations ' + 'dependencies repositories sourceSets description delete from into include ' + 'exclude source classpath destinationDir includes options sourceCompatibility ' + 'targetCompatibility group flatDir doLast doFirst flatten todir fromdir ant ' + 'def abstract break case catch continue default do else extends final finally ' + 'for if implements instanceof native new private protected public return static ' + 'switch synchronized throw throws transient try volatile while strictfp package ' + 'import false null super this true antlrtask checkstyle codenarc copy boolean ' + 'byte char class double float int interface long short void compile runTime ' + 'file fileTree abs any append asList asWritable call collect compareTo count ' + 'div dump each eachByte eachFile eachLine every find findAll flatten getAt ' + 'getErr getIn getOut getText grep immutable inject inspect intersect invokeMethods ' + 'isCase join leftShift minus multiply newInputStream newOutputStream newPrintWriter ' + 'newReader newWriter next plus pop power previous print println push putAt read ' + 'readBytes readLines reverse reverseEach round size sort splitEachLine step subMap ' + 'times toInteger toList tokenize upto waitForOrKill withPrintWriter withReader ' + 'withStream withWriter withWriterAppend write writeLine'
	    },
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.NUMBER_MODE, hljs.REGEXP_MODE]
	  };
	};

/***/ },
/* 249 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	    return {
	        keywords: {
	            typename: 'byte short char int long boolean float double void',
	            literal: 'true false null',
	            keyword:
	            // groovy specific keywords
	            'def as in assert trait ' +
	            // common keywords with Java
	            'super this abstract static volatile transient public private protected synchronized final ' + 'class interface enum if else for while switch case break default continue ' + 'throw throws try catch finally implements extends new import package return instanceof'
	        },

	        contains: [hljs.COMMENT('/\\*\\*', '\\*/', {
	            relevance: 0,
	            contains: [{
	                className: 'doctag',
	                begin: '@[A-Za-z]+'
	            }]
	        }), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	            className: 'string',
	            begin: '"""', end: '"""'
	        }, {
	            className: 'string',
	            begin: "'''", end: "'''"
	        }, {
	            className: 'string',
	            begin: "\\$/", end: "/\\$",
	            relevance: 10
	        }, hljs.APOS_STRING_MODE, {
	            className: 'regexp',
	            begin: /~?\/[^\/\n]+\//,
	            contains: [hljs.BACKSLASH_ESCAPE]
	        }, hljs.QUOTE_STRING_MODE, {
	            className: 'shebang',
	            begin: "^#!/usr/bin/env", end: '$',
	            illegal: '\n'
	        }, hljs.BINARY_NUMBER_MODE, {
	            className: 'class',
	            beginKeywords: 'class interface trait enum', end: '{',
	            illegal: ':',
	            contains: [{ beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE]
	        }, hljs.C_NUMBER_MODE, {
	            className: 'annotation', begin: '@[A-Za-z]+'
	        }, {
	            // highlight map keys and named parameters as strings
	            className: 'string', begin: /[^\?]{0}[A-Za-z0-9_$]+ *:/
	        }, {
	            // catch middle element of the ternary operator
	            // to avoid highlight it as a label, named parameter, or map key
	            begin: /\?/, end: /\:/
	        }, {
	            // highlight labeled statements
	            className: 'label', begin: '^\\s*[A-Za-z0-9_$]+:',
	            relevance: 0
	        }],
	        illegal: /#/
	    };
	};

/***/ },
/* 250 */
/***/ function(module, exports) {

	'use strict';

	module.exports = // TODO support filter tags like :javascript, support inline HTML
	function (hljs) {
	  return {
	    case_insensitive: true,
	    contains: [{
	      className: 'doctype',
	      begin: '^!!!( (5|1\\.1|Strict|Frameset|Basic|Mobile|RDFa|XML\\b.*))?$',
	      relevance: 10
	    },
	    // FIXME these comments should be allowed to span indented lines
	    hljs.COMMENT('^\\s*(!=#|=#|-#|/).*$', false, {
	      relevance: 0
	    }), {
	      begin: '^\\s*(-|=|!=)(?!#)',
	      starts: {
	        end: '\\n',
	        subLanguage: 'ruby'
	      }
	    }, {
	      className: 'tag',
	      begin: '^\\s*%',
	      contains: [{
	        className: 'title',
	        begin: '\\w+'
	      }, {
	        className: 'value',
	        begin: '[#\\.][\\w-]+'
	      }, {
	        begin: '{\\s*',
	        end: '\\s*}',
	        excludeEnd: true,
	        contains: [{
	          //className: 'attribute',
	          begin: ':\\w+\\s*=>',
	          end: ',\\s+',
	          returnBegin: true,
	          endsWithParent: true,
	          contains: [{
	            className: 'symbol',
	            begin: ':\\w+'
	          }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	            begin: '\\w+',
	            relevance: 0
	          }]
	        }]
	      }, {
	        begin: '\\(\\s*',
	        end: '\\s*\\)',
	        excludeEnd: true,
	        contains: [{
	          //className: 'attribute',
	          begin: '\\w+\\s*=',
	          end: '\\s+',
	          returnBegin: true,
	          endsWithParent: true,
	          contains: [{
	            className: 'attribute',
	            begin: '\\w+',
	            relevance: 0
	          }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	            begin: '\\w+',
	            relevance: 0
	          }]
	        }]
	      }]
	    }, {
	      className: 'bullet',
	      begin: '^\\s*[=~]\\s*',
	      relevance: 0
	    }, {
	      begin: '#{',
	      starts: {
	        end: '}',
	        subLanguage: 'ruby'
	      }
	    }]
	  };
	};

/***/ },
/* 251 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var EXPRESSION_KEYWORDS = 'each in with if else unless bindattr action collection debugger log outlet template unbound view yield';
	  return {
	    aliases: ['hbs', 'html.hbs', 'html.handlebars'],
	    case_insensitive: true,
	    subLanguage: 'xml',
	    contains: [{
	      className: 'expression',
	      begin: '{{', end: '}}',
	      contains: [{
	        className: 'begin-block', begin: '\#[a-zA-Z\-\ \.]+',
	        keywords: EXPRESSION_KEYWORDS
	      }, {
	        className: 'string',
	        begin: '"', end: '"'
	      }, {
	        className: 'end-block', begin: '\\\/[a-zA-Z\-\ \.]+',
	        keywords: EXPRESSION_KEYWORDS
	      }, {
	        className: 'variable', begin: '[a-zA-Z\-\.]+',
	        keywords: EXPRESSION_KEYWORDS
	      }]
	    }]
	  };
	};

/***/ },
/* 252 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var COMMENT_MODES = [hljs.COMMENT('--', '$'), hljs.COMMENT('{-', '-}', {
	    contains: ['self']
	  })];

	  var PRAGMA = {
	    className: 'pragma',
	    begin: '{-#', end: '#-}'
	  };

	  var PREPROCESSOR = {
	    className: 'preprocessor',
	    begin: '^#', end: '$'
	  };

	  var CONSTRUCTOR = {
	    className: 'type',
	    begin: '\\b[A-Z][\\w\']*', // TODO: other constructors (build-in, infix).
	    relevance: 0
	  };

	  var LIST = {
	    className: 'container',
	    begin: '\\(', end: '\\)',
	    illegal: '"',
	    contains: [PRAGMA, PREPROCESSOR, { className: 'type', begin: '\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?' }, hljs.inherit(hljs.TITLE_MODE, { begin: '[_a-z][\\w\']*' })].concat(COMMENT_MODES)
	  };

	  var RECORD = {
	    className: 'container',
	    begin: '{', end: '}',
	    contains: LIST.contains
	  };

	  return {
	    aliases: ['hs'],
	    keywords: 'let in if then else case of where do module import hiding ' + 'qualified type data newtype deriving class instance as default ' + 'infix infixl infixr foreign export ccall stdcall cplusplus ' + 'jvm dotnet safe unsafe family forall mdo proc rec',
	    contains: [

	    // Top-level constructions.

	    {
	      className: 'module',
	      begin: '\\bmodule\\b', end: 'where',
	      keywords: 'module where',
	      contains: [LIST].concat(COMMENT_MODES),
	      illegal: '\\W\\.|;'
	    }, {
	      className: 'import',
	      begin: '\\bimport\\b', end: '$',
	      keywords: 'import|0 qualified as hiding',
	      contains: [LIST].concat(COMMENT_MODES),
	      illegal: '\\W\\.|;'
	    }, {
	      className: 'class',
	      begin: '^(\\s*)?(class|instance)\\b', end: 'where',
	      keywords: 'class family instance where',
	      contains: [CONSTRUCTOR, LIST].concat(COMMENT_MODES)
	    }, {
	      className: 'typedef',
	      begin: '\\b(data|(new)?type)\\b', end: '$',
	      keywords: 'data family type newtype deriving',
	      contains: [PRAGMA, CONSTRUCTOR, LIST, RECORD].concat(COMMENT_MODES)
	    }, {
	      className: 'default',
	      beginKeywords: 'default', end: '$',
	      contains: [CONSTRUCTOR, LIST].concat(COMMENT_MODES)
	    }, {
	      className: 'infix',
	      beginKeywords: 'infix infixl infixr', end: '$',
	      contains: [hljs.C_NUMBER_MODE].concat(COMMENT_MODES)
	    }, {
	      className: 'foreign',
	      begin: '\\bforeign\\b', end: '$',
	      keywords: 'foreign import export ccall stdcall cplusplus jvm ' + 'dotnet safe unsafe',
	      contains: [CONSTRUCTOR, hljs.QUOTE_STRING_MODE].concat(COMMENT_MODES)
	    }, {
	      className: 'shebang',
	      begin: '#!\\/usr\\/bin\\/env\ runhaskell', end: '$'
	    },

	    // "Whitespaces".

	    PRAGMA, PREPROCESSOR,

	    // Literals and names.

	    // TODO: characters.
	    hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, CONSTRUCTOR, hljs.inherit(hljs.TITLE_MODE, { begin: '^[_a-z][\\w\']*' }), { begin: '->|<-' } // No markup, relevance booster
	    ].concat(COMMENT_MODES)
	  };
	};

/***/ },
/* 253 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
	  var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';

	  return {
	    aliases: ['hx'],
	    keywords: {
	      keyword: 'break callback case cast catch class continue default do dynamic else enum extends extern ' + 'for function here if implements import in inline interface never new override package private ' + 'public return static super switch this throw trace try typedef untyped using var while',
	      literal: 'true false null'
	    },
	    contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.C_NUMBER_MODE, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '{', excludeEnd: true,
	      contains: [{
	        beginKeywords: 'extends implements'
	      }, hljs.TITLE_MODE]
	    }, {
	      className: 'preprocessor',
	      begin: '#', end: '$',
	      keywords: 'if else elseif end error'
	    }, {
	      className: 'function',
	      beginKeywords: 'function', end: '[{;]', excludeEnd: true,
	      illegal: '\\S',
	      contains: [hljs.TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)',
	        contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	      }, {
	        className: 'type',
	        begin: ':',
	        end: IDENT_FUNC_RETURN_TYPE_RE,
	        relevance: 10
	      }]
	    }]
	  };
	};

/***/ },
/* 254 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['https'],
	    illegal: '\\S',
	    contains: [{
	      className: 'status',
	      begin: '^HTTP/[0-9\\.]+', end: '$',
	      contains: [{ className: 'number', begin: '\\b\\d{3}\\b' }]
	    }, {
	      className: 'request',
	      begin: '^[A-Z]+ (.*?) HTTP/[0-9\\.]+$', returnBegin: true, end: '$',
	      contains: [{
	        className: 'string',
	        begin: ' ', end: ' ',
	        excludeBegin: true, excludeEnd: true
	      }]
	    }, {
	      className: 'attribute',
	      begin: '^\\w', end: ': ', excludeEnd: true,
	      illegal: '\\n|\\s|=',
	      starts: { className: 'string', end: '$' }
	    }, {
	      begin: '\\n\\n',
	      starts: { subLanguage: [], endsWithParent: true }
	    }]
	  };
	};

/***/ },
/* 255 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var START_BRACKET = '\\[';
	  var END_BRACKET = '\\]';
	  return {
	    aliases: ['i7'],
	    case_insensitive: true,
	    keywords: {
	      // Some keywords more or less unique to I7, for relevance.
	      keyword:
	      // kind:
	      'thing|10 room|10 person|10 man|10 woman|10 animal|10 container ' + 'supporter|10 backdrop|10 door|10 ' +
	      // characteristic:
	      'scenery|10 open closed|10 locked|10 inside|10 gender|10 ' +
	      // verb:
	      'is are say|10 understand|10 ' +
	      // misc keyword:
	      'kind|10 of rule|10'
	    },
	    contains: [{
	      className: 'string',
	      begin: '"', end: '"',
	      relevance: 0,
	      contains: [{
	        className: 'subst',
	        begin: START_BRACKET, end: END_BRACKET
	      }]
	    }, {
	      className: 'title',
	      beginKeywords: '^Volume ^Book ^Part ^Chapter ^Section',
	      end: '$',
	      relevance: 10
	    }, {
	      // Table
	      className: 'title',
	      beginKeywords: '^Table',
	      end: '$',
	      relevance: 10
	    }, {
	      // Rule definition
	      // This is here for relevance.
	      begin: '^\\b(Check|Carry out|Report|Instead of|To|Rule|When|Before|After)',
	      end: ':',
	      contains: [{
	        //Rule name
	        begin: '\\b\\(This',
	        end: '\\)',
	        relevance: 10
	      }],
	      relevance: 10
	    }, {
	      className: 'comment',
	      begin: START_BRACKET, end: END_BRACKET,
	      contains: ['self']
	    }]
	  };
	};

/***/ },
/* 256 */
/***/ function(module, exports) {

	"use strict";

	module.exports = function (hljs) {
	  var STRING = {
	    className: "string",
	    contains: [hljs.BACKSLASH_ESCAPE],
	    variants: [{
	      begin: "'''", end: "'''",
	      relevance: 10
	    }, {
	      begin: '"""', end: '"""',
	      relevance: 10
	    }, {
	      begin: '"', end: '"'
	    }, {
	      begin: "'", end: "'"
	    }]
	  };
	  return {
	    aliases: ['toml'],
	    case_insensitive: true,
	    illegal: /\S/,
	    contains: [hljs.COMMENT(';', '$'), hljs.HASH_COMMENT_MODE, {
	      className: 'title',
	      begin: /^\s*\[+/, end: /\]+/
	    }, {
	      className: 'setting',
	      begin: /^[a-z0-9\[\]_-]+\s*=\s*/, end: '$',
	      contains: [{
	        className: 'value',
	        endsWithParent: true,
	        keywords: 'on off true false yes no',
	        contains: [{
	          className: 'variable',
	          variants: [{ begin: /\$[\w\d"][\w\d_]*/ }, { begin: /\$\{(.*?)}/ }]
	        }, STRING, {
	          className: 'number',
	          begin: /([\+\-]+)?[\d]+_[\d_]+/
	        }, hljs.NUMBER_MODE],
	        relevance: 0
	      }]
	    }]
	  };
	};

/***/ },
/* 257 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var GENERIC_IDENT_RE = hljs.UNDERSCORE_IDENT_RE + '(<' + hljs.UNDERSCORE_IDENT_RE + '>)?';
	  var KEYWORDS = 'false synchronized int abstract float private char boolean static null if const ' + 'for true while long strictfp finally protected import native final void ' + 'enum else break transient catch instanceof byte super volatile case assert short ' + 'package default double public try this switch continue throws protected public private';

	  // https://docs.oracle.com/javase/7/docs/technotes/guides/language/underscores-literals.html
	  var JAVA_NUMBER_RE = '\\b' + '(' + '0[bB]([01]+[01_]+[01]+|[01]+)' + // 0b...
	  '|' + '0[xX]([a-fA-F0-9]+[a-fA-F0-9_]+[a-fA-F0-9]+|[a-fA-F0-9]+)' + // 0x...
	  '|' + '(' + '([\\d]+[\\d_]+[\\d]+|[\\d]+)(\\.([\\d]+[\\d_]+[\\d]+|[\\d]+))?' + '|' + '\\.([\\d]+[\\d_]+[\\d]+|[\\d]+)' + ')' + '([eE][-+]?\\d+)?' + // octal, decimal, float
	  ')' + '[lLfF]?';
	  var JAVA_NUMBER_MODE = {
	    className: 'number',
	    begin: JAVA_NUMBER_RE,
	    relevance: 0
	  };

	  return {
	    aliases: ['jsp'],
	    keywords: KEYWORDS,
	    illegal: /<\/|#/,
	    contains: [hljs.COMMENT('/\\*\\*', '\\*/', {
	      relevance: 0,
	      contains: [{
	        className: 'doctag',
	        begin: '@[A-Za-z]+'
	      }]
	    }), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'class',
	      beginKeywords: 'class interface', end: /[{;=]/, excludeEnd: true,
	      keywords: 'class interface',
	      illegal: /[:"\[\]]/,
	      contains: [{ beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      // Expression keywords prevent 'keyword Name(...)' from being
	      // recognized as a function definition
	      beginKeywords: 'new throw return else',
	      relevance: 0
	    }, {
	      className: 'function',
	      begin: '(' + GENERIC_IDENT_RE + '\\s+)+' + hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true, end: /[{;=]/,
	      excludeEnd: true,
	      keywords: KEYWORDS,
	      contains: [{
	        begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
	        relevance: 0,
	        contains: [hljs.UNDERSCORE_TITLE_MODE]
	      }, {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        keywords: KEYWORDS,
	        relevance: 0,
	        contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, hljs.C_BLOCK_COMMENT_MODE]
	      }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }, JAVA_NUMBER_MODE, {
	      className: 'annotation', begin: '@[A-Za-z]+'
	    }]
	  };
	};

/***/ },
/* 258 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['js'],
	    keywords: {
	      keyword: 'in of if for while finally var new function do return void else break catch ' + 'instanceof with throw case default try this switch continue typeof delete ' + 'let yield const export super debugger as async await',
	      literal: 'true false null undefined NaN Infinity',
	      built_in: 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' + 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' + 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' + 'TypeError URIError Number Math Date String RegExp Array Float32Array ' + 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' + 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' + 'module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect ' + 'Promise'
	    },
	    contains: [{
	      className: 'pi',
	      relevance: 10,
	      begin: /^\s*['"]use (strict|asm)['"]/
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, { // template string
	      className: 'string',
	      begin: '`', end: '`',
	      contains: [hljs.BACKSLASH_ESCAPE, {
	        className: 'subst',
	        begin: '\\$\\{', end: '\\}'
	      }]
	    }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'number',
	      variants: [{ begin: '\\b(0[bB][01]+)' }, { begin: '\\b(0[oO][0-7]+)' }, { begin: hljs.C_NUMBER_RE }],
	      relevance: 0
	    }, { // "value" container
	      begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
	      keywords: 'return throw case',
	      contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.REGEXP_MODE, { // E4X / JSX
	        begin: /</, end: />\s*[);\]]/,
	        relevance: 0,
	        subLanguage: 'xml'
	      }],
	      relevance: 0
	    }, {
	      className: 'function',
	      beginKeywords: 'function', end: /\{/, excludeEnd: true,
	      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ }), {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        excludeBegin: true,
	        excludeEnd: true,
	        contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE],
	        illegal: /["'\(]/
	      }],
	      illegal: /\[|%/
	    }, {
	      begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
	    }, {
	      begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
	    },
	    // ECMAScript 6 modules import
	    {
	      beginKeywords: 'import', end: '[;$]',
	      keywords: 'import from as',
	      contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE]
	    }, { // ES6 class
	      className: 'class',
	      beginKeywords: 'class', end: /[{;=]/, excludeEnd: true,
	      illegal: /[:"\[\]]/,
	      contains: [{ beginKeywords: 'extends' }, hljs.UNDERSCORE_TITLE_MODE]
	    }],
	    illegal: /#/
	  };
	};

/***/ },
/* 259 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var LITERALS = { literal: 'true false null' };
	  var TYPES = [hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE];
	  var VALUE_CONTAINER = {
	    className: 'value',
	    end: ',', endsWithParent: true, excludeEnd: true,
	    contains: TYPES,
	    keywords: LITERALS
	  };
	  var OBJECT = {
	    begin: '{', end: '}',
	    contains: [{
	      className: 'attribute',
	      begin: '\\s*"', end: '"\\s*:\\s*', excludeBegin: true, excludeEnd: true,
	      contains: [hljs.BACKSLASH_ESCAPE],
	      illegal: '\\n',
	      starts: VALUE_CONTAINER
	    }],
	    illegal: '\\S'
	  };
	  var ARRAY = {
	    begin: '\\[', end: '\\]',
	    contains: [hljs.inherit(VALUE_CONTAINER, { className: null })], // inherit is also a workaround for a bug that makes shared modes with endsWithParent compile only the ending of one of the parents
	    illegal: '\\S'
	  };
	  TYPES.splice(TYPES.length, 0, OBJECT, ARRAY);
	  return {
	    contains: TYPES,
	    keywords: LITERALS,
	    illegal: '\\S'
	  };
	};

/***/ },
/* 260 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  // Since there are numerous special names in Julia, it is too much trouble
	  // to maintain them by hand. Hence these names (i.e. keywords, literals and
	  // built-ins) are automatically generated from Julia (v0.3.0) itself through
	  // following scripts for each.

	  var KEYWORDS = {
	    // # keyword generator
	    // println("\"in\",")
	    // for kw in Base.REPLCompletions.complete_keyword("")
	    //     println("\"$kw\",")
	    // end
	    keyword: 'in abstract baremodule begin bitstype break catch ccall const continue do else elseif end export ' + 'finally for function global if immutable import importall let local macro module quote return try type ' + 'typealias using while',

	    // # literal generator
	    // println("\"true\",\n\"false\"")
	    // for name in Base.REPLCompletions.completions("", 0)[1]
	    //     try
	    //         s = symbol(name)
	    //         v = eval(s)
	    //         if !isa(v, Function) &&
	    //            !isa(v, DataType) &&
	    //            !issubtype(typeof(v), Tuple) &&
	    //            !isa(v, UnionType) &&
	    //            !isa(v, Module) &&
	    //            !isa(v, TypeConstructor) &&
	    //            !isa(v, Colon)
	    //             println("\"$name\",")
	    //         end
	    //     end
	    // end
	    literal: 'true false ANY ARGS CPU_CORES C_NULL DL_LOAD_PATH DevNull ENDIAN_BOM ENV I|0 Inf Inf16 Inf32 ' + 'InsertionSort JULIA_HOME LOAD_PATH MS_ASYNC MS_INVALIDATE MS_SYNC MergeSort NaN NaN16 NaN32 OS_NAME QuickSort ' + 'RTLD_DEEPBIND RTLD_FIRST RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RoundDown ' + 'RoundFromZero RoundNearest RoundToZero RoundUp STDERR STDIN STDOUT VERSION WORD_SIZE catalan cglobal e eu ' + 'eulergamma golden im nothing pi γ π φ',

	    // # built_in generator:
	    // for name in Base.REPLCompletions.completions("", 0)[1]
	    //     try
	    //         v = eval(symbol(name))
	    //         if isa(v, DataType)
	    //             println("\"$name\",")
	    //         end
	    //     end
	    // end
	    built_in: 'ASCIIString AbstractArray AbstractRNG AbstractSparseArray Any ArgumentError Array Associative Base64Pipe ' + 'Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError Box CFILE Cchar Cdouble Cfloat Char ' + 'CharString Cint Clong Clonglong ClusterManager Cmd Coff_t Colon Complex Complex128 Complex32 Complex64 ' + 'Condition Cptrdiff_t Cshort Csize_t Cssize_t Cuchar Cuint Culong Culonglong Cushort Cwchar_t DArray DataType ' + 'DenseArray Diagonal Dict DimensionMismatch DirectIndexString Display DivideError DomainError EOFError ' + 'EachLine Enumerate ErrorException Exception Expr Factorization FileMonitor FileOffset Filter Float16 Float32 ' + 'Float64 FloatRange FloatingPoint Function GetfieldNode GotoNode Hermitian IO IOBuffer IOStream IPv4 IPv6 ' + 'InexactError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException IntrinsicFunction KeyError ' + 'LabelNode LambdaStaticData LineNumberNode LoadError LocalProcess MIME MathConst MemoryError MersenneTwister ' + 'Method MethodError MethodTable Module NTuple NewvarNode Nothing Number ObjectIdDict OrdinalRange ' + 'OverflowError ParseError PollingFileWatcher ProcessExitedException ProcessGroup Ptr QuoteNode Range Range1 ' + 'Ranges Rational RawFD Real Regex RegexMatch RemoteRef RepString RevString RopeString RoundingMode Set ' + 'SharedArray Signed SparseMatrixCSC StackOverflowError Stat StatStruct StepRange String SubArray SubString ' + 'SymTridiagonal Symbol SymbolNode Symmetric SystemError Task TextDisplay Timer TmStruct TopNode Triangular ' + 'Tridiagonal Type TypeConstructor TypeError TypeName TypeVar UTF16String UTF32String UTF8String UdpSocket ' + 'Uint Uint128 Uint16 Uint32 Uint64 Uint8 UndefRefError UndefVarError UniformScaling UnionType UnitRange ' + 'Unsigned Vararg VersionNumber WString WeakKeyDict WeakRef Woodbury Zip'
	  };

	  // ref: http://julia.readthedocs.org/en/latest/manual/variables/#allowed-variable-names
	  var VARIABLE_NAME_RE = '[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*';

	  // placeholder for recursive self-reference
	  var DEFAULT = { lexemes: VARIABLE_NAME_RE, keywords: KEYWORDS };

	  var TYPE_ANNOTATION = {
	    className: "type-annotation",
	    begin: /::/
	  };

	  var SUBTYPE = {
	    className: "subtype",
	    begin: /<:/
	  };

	  // ref: http://julia.readthedocs.org/en/latest/manual/integers-and-floating-point-numbers/
	  var NUMBER = {
	    className: "number",
	    // supported numeric literals:
	    //  * binary literal (e.g. 0x10)
	    //  * octal literal (e.g. 0o76543210)
	    //  * hexadecimal literal (e.g. 0xfedcba876543210)
	    //  * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)
	    //  * decimal literal (e.g. 9876543210, 100_000_000)
	    //  * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)
	    begin: /(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,
	    relevance: 0
	  };

	  var CHAR = {
	    className: "char",
	    begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
	  };

	  var INTERPOLATION = {
	    className: 'subst',
	    begin: /\$\(/, end: /\)/,
	    keywords: KEYWORDS
	  };

	  var INTERPOLATED_VARIABLE = {
	    className: 'variable',
	    begin: "\\$" + VARIABLE_NAME_RE
	  };

	  // TODO: neatly escape normal code in string literal
	  var STRING = {
	    className: "string",
	    contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
	    variants: [{ begin: /\w*"/, end: /"\w*/ }, { begin: /\w*"""/, end: /"""\w*/ }]
	  };

	  var COMMAND = {
	    className: "string",
	    contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
	    begin: '`', end: '`'
	  };

	  var MACROCALL = {
	    className: "macrocall",
	    begin: "@" + VARIABLE_NAME_RE
	  };

	  var COMMENT = {
	    className: "comment",
	    variants: [{ begin: "#=", end: "=#", relevance: 10 }, { begin: '#', end: '$' }]
	  };

	  DEFAULT.contains = [NUMBER, CHAR, TYPE_ANNOTATION, SUBTYPE, STRING, COMMAND, MACROCALL, COMMENT, hljs.HASH_COMMENT_MODE];
	  INTERPOLATION.contains = DEFAULT.contains;

	  return DEFAULT;
	};

/***/ },
/* 261 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = 'val var get set class trait object public open private protected ' + 'final enum if else do while for when break continue throw try catch finally ' + 'import package is as in return fun override default companion reified inline volatile transient native';

	  return {
	    keywords: {
	      typename: 'Byte Short Char Int Long Boolean Float Double Void Unit Nothing',
	      literal: 'true false null',
	      keyword: KEYWORDS
	    },
	    contains: [hljs.COMMENT('/\\*\\*', '\\*/', {
	      relevance: 0,
	      contains: [{
	        className: 'doctag',
	        begin: '@[A-Za-z]+'
	      }]
	    }), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'type',
	      begin: /</, end: />/,
	      returnBegin: true,
	      excludeEnd: false,
	      relevance: 0
	    }, {
	      className: 'function',
	      beginKeywords: 'fun', end: '[(]|$',
	      returnBegin: true,
	      excludeEnd: true,
	      keywords: KEYWORDS,
	      illegal: /fun\s+(<.*>)?[^\s\(]+(\s+[^\s\(]+)\s*=/,
	      relevance: 5,
	      contains: [{
	        begin: hljs.UNDERSCORE_IDENT_RE + '\\s*\\(', returnBegin: true,
	        relevance: 0,
	        contains: [hljs.UNDERSCORE_TITLE_MODE]
	      }, {
	        className: 'type',
	        begin: /</, end: />/, keywords: 'reified',
	        relevance: 0
	      }, {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        keywords: KEYWORDS,
	        relevance: 0,
	        illegal: /\([^\(,\s:]+,/,
	        contains: [{
	          className: 'typename',
	          begin: /:\s*/, end: /\s*[=\)]/, excludeBegin: true, returnEnd: true,
	          relevance: 0
	        }]
	      }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	    }, {
	      className: 'class',
	      beginKeywords: 'class trait', end: /[:\{(]|$/,
	      excludeEnd: true,
	      illegal: 'extends implements',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, {
	        className: 'type',
	        begin: /</, end: />/, excludeBegin: true, excludeEnd: true,
	        relevance: 0
	      }, {
	        className: 'typename',
	        begin: /[,:]\s*/, end: /[<\(,]|$/, excludeBegin: true, returnEnd: true
	      }]
	    }, {
	      className: 'variable', beginKeywords: 'var val', end: /\s*[=:$]/, excludeEnd: true
	    }, hljs.QUOTE_STRING_MODE, {
	      className: 'shebang',
	      begin: "^#!/usr/bin/env", end: '$',
	      illegal: '\n'
	    }, hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 262 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var LASSO_IDENT_RE = '[a-zA-Z_][a-zA-Z0-9_.]*';
	  var LASSO_ANGLE_RE = '<\\?(lasso(script)?|=)';
	  var LASSO_CLOSE_RE = '\\]|\\?>';
	  var LASSO_KEYWORDS = {
	    literal: 'true false none minimal full all void ' + 'bw nbw ew new cn ncn lt lte gt gte eq neq rx nrx ft',
	    built_in: 'array date decimal duration integer map pair string tag xml null ' + 'boolean bytes keyword list locale queue set stack staticarray ' + 'local var variable global data self inherited currentcapture givenblock',
	    keyword: 'error_code error_msg error_pop error_push error_reset cache ' + 'database_names database_schemanames database_tablenames define_tag ' + 'define_type email_batch encode_set html_comment handle handle_error ' + 'header if inline iterate ljax_target link link_currentaction ' + 'link_currentgroup link_currentrecord link_detail link_firstgroup ' + 'link_firstrecord link_lastgroup link_lastrecord link_nextgroup ' + 'link_nextrecord link_prevgroup link_prevrecord log loop ' + 'namespace_using output_none portal private protect records referer ' + 'referrer repeating resultset rows search_args search_arguments ' + 'select sort_args sort_arguments thread_atomic value_list while ' + 'abort case else if_empty if_false if_null if_true loop_abort ' + 'loop_continue loop_count params params_up return return_value ' + 'run_children soap_definetag soap_lastrequest soap_lastresponse ' + 'tag_name ascending average by define descending do equals ' + 'frozen group handle_failure import in into join let match max ' + 'min on order parent protected provide public require returnhome ' + 'skip split_thread sum take thread to trait type where with ' + 'yield yieldhome'
	  };
	  var HTML_COMMENT = hljs.COMMENT('<!--', '-->', {
	    relevance: 0
	  });
	  var LASSO_NOPROCESS = {
	    className: 'preprocessor',
	    begin: '\\[noprocess\\]',
	    starts: {
	      className: 'markup',
	      end: '\\[/noprocess\\]',
	      returnEnd: true,
	      contains: [HTML_COMMENT]
	    }
	  };
	  var LASSO_START = {
	    className: 'preprocessor',
	    begin: '\\[/noprocess|' + LASSO_ANGLE_RE
	  };
	  var LASSO_DATAMEMBER = {
	    className: 'variable',
	    begin: '\'' + LASSO_IDENT_RE + '\''
	  };
	  var LASSO_CODE = [hljs.COMMENT('/\\*\\*!', '\\*/'), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.inherit(hljs.C_NUMBER_MODE, { begin: hljs.C_NUMBER_RE + '|(infinity|nan)\\b' }), hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), {
	    className: 'string',
	    begin: '`', end: '`'
	  }, {
	    className: 'variable',
	    variants: [{
	      begin: '[#$]' + LASSO_IDENT_RE
	    }, {
	      begin: '#', end: '\\d+',
	      illegal: '\\W'
	    }]
	  }, {
	    className: 'tag',
	    begin: '::\\s*', end: LASSO_IDENT_RE,
	    illegal: '\\W'
	  }, {
	    className: 'attribute',
	    variants: [{
	      begin: '-(?!infinity)' + hljs.UNDERSCORE_IDENT_RE,
	      relevance: 0
	    }, {
	      begin: '(\\.\\.\\.)'
	    }]
	  }, {
	    className: 'subst',
	    variants: [{
	      begin: '->\\s*',
	      contains: [LASSO_DATAMEMBER]
	    }, {
	      begin: '->|\\\\|&&?|\\|\\||!(?!=|>)|(and|or|not)\\b',
	      relevance: 0
	    }]
	  }, {
	    className: 'built_in',
	    begin: '\\.\\.?\\s*',
	    relevance: 0,
	    contains: [LASSO_DATAMEMBER]
	  }, {
	    className: 'class',
	    beginKeywords: 'define',
	    returnEnd: true, end: '\\(|=>',
	    contains: [hljs.inherit(hljs.TITLE_MODE, { begin: hljs.UNDERSCORE_IDENT_RE + '(=(?!>))?' })]
	  }];
	  return {
	    aliases: ['ls', 'lassoscript'],
	    case_insensitive: true,
	    lexemes: LASSO_IDENT_RE + '|&[lg]t;',
	    keywords: LASSO_KEYWORDS,
	    contains: [{
	      className: 'preprocessor',
	      begin: LASSO_CLOSE_RE,
	      relevance: 0,
	      starts: {
	        className: 'markup',
	        end: '\\[|' + LASSO_ANGLE_RE,
	        returnEnd: true,
	        relevance: 0,
	        contains: [HTML_COMMENT]
	      }
	    }, LASSO_NOPROCESS, LASSO_START, {
	      className: 'preprocessor',
	      begin: '\\[no_square_brackets',
	      starts: {
	        end: '\\[/no_square_brackets\\]', // not implemented in the language
	        lexemes: LASSO_IDENT_RE + '|&[lg]t;',
	        keywords: LASSO_KEYWORDS,
	        contains: [{
	          className: 'preprocessor',
	          begin: LASSO_CLOSE_RE,
	          relevance: 0,
	          starts: {
	            className: 'markup',
	            end: '\\[noprocess\\]|' + LASSO_ANGLE_RE,
	            returnEnd: true,
	            contains: [HTML_COMMENT]
	          }
	        }, LASSO_NOPROCESS, LASSO_START].concat(LASSO_CODE)
	      }
	    }, {
	      className: 'preprocessor',
	      begin: '\\[',
	      relevance: 0
	    }, {
	      className: 'shebang',
	      begin: '^#!.+lasso9\\b',
	      relevance: 10
	    }].concat(LASSO_CODE)
	  };
	};

/***/ },
/* 263 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE = '[\\w-]+'; // yes, Less identifiers may begin with a digit
	  var INTERP_IDENT_RE = '(' + IDENT_RE + '|@{' + IDENT_RE + '})';

	  /* Generic Modes */

	  var RULES = [],
	      VALUE = []; // forward def. for recursive modes

	  var STRING_MODE = function STRING_MODE(c) {
	    return {
	      // Less strings are not multiline (also include '~' for more consistent coloring of "escaped" strings)
	      className: 'string', begin: '~?' + c + '.*?' + c
	    };
	  };

	  var IDENT_MODE = function IDENT_MODE(name, begin, relevance) {
	    return {
	      className: name, begin: begin, relevance: relevance
	    };
	  };

	  var FUNCT_MODE = function FUNCT_MODE(name, ident, obj) {
	    return hljs.inherit({
	      className: name, begin: ident + '\\(', end: '\\(',
	      returnBegin: true, excludeEnd: true, relevance: 0
	    }, obj);
	  };

	  var PARENS_MODE = {
	    // used only to properly balance nested parens inside mixin call, def. arg list
	    begin: '\\(', end: '\\)', contains: VALUE, relevance: 0
	  };

	  // generic Less highlighter (used almost everywhere except selectors):
	  VALUE.push(hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, STRING_MODE("'"), STRING_MODE('"'), hljs.CSS_NUMBER_MODE, // fixme: it does not include dot for numbers like .5em :(
	  IDENT_MODE('hexcolor', '#[0-9A-Fa-f]+\\b'), FUNCT_MODE('function', '(url|data-uri)', {
	    starts: { className: 'string', end: '[\\)\\n]', excludeEnd: true }
	  }), FUNCT_MODE('function', IDENT_RE), PARENS_MODE, IDENT_MODE('variable', '@@?' + IDENT_RE, 10), IDENT_MODE('variable', '@{' + IDENT_RE + '}'), IDENT_MODE('built_in', '~?`[^`]*?`'), // inline javascript (or whatever host language) *multiline* string
	  { // @media features (it’s here to not duplicate things in AT_RULE_MODE with extra PARENS_MODE overriding):
	    className: 'attribute', begin: IDENT_RE + '\\s*:', end: ':', returnBegin: true, excludeEnd: true
	  });

	  var VALUE_WITH_RULESETS = VALUE.concat({
	    begin: '{', end: '}', contains: RULES
	  });

	  var MIXIN_GUARD_MODE = {
	    beginKeywords: 'when', endsWithParent: true,
	    contains: [{ beginKeywords: 'and not' }].concat(VALUE) // using this form to override VALUE’s 'function' match
	  };

	  /* Rule-Level Modes */

	  var RULE_MODE = {
	    className: 'attribute',
	    begin: INTERP_IDENT_RE, end: ':', excludeEnd: true,
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE],
	    illegal: /\S/,
	    starts: { end: '[;}]', returnEnd: true, contains: VALUE, illegal: '[<=$]' }
	  };

	  var AT_RULE_MODE = {
	    className: 'at_rule', // highlight only at-rule keyword
	    begin: '@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b',
	    starts: { end: '[;{}]', returnEnd: true, contains: VALUE, relevance: 0 }
	  };

	  // variable definitions and calls
	  var VAR_RULE_MODE = {
	    className: 'variable',
	    variants: [
	    // using more strict pattern for higher relevance to increase chances of Less detection.
	    // this is *the only* Less specific statement used in most of the sources, so...
	    // (we’ll still often loose to the css-parser unless there's '//' comment,
	    // simply because 1 variable just can't beat 99 properties :)
	    { begin: '@' + IDENT_RE + '\\s*:', relevance: 15 }, { begin: '@' + IDENT_RE }],
	    starts: { end: '[;}]', returnEnd: true, contains: VALUE_WITH_RULESETS }
	  };

	  var SELECTOR_MODE = {
	    // first parse unambiguous selectors (i.e. those not starting with tag)
	    // then fall into the scary lookahead-discriminator variant.
	    // this mode also handles mixin definitions and calls
	    variants: [{
	      begin: '[\\.#:&\\[]', end: '[;{}]' // mixin calls end with ';'
	    }, {
	      begin: INTERP_IDENT_RE + '[^;]*{',
	      end: '{'
	    }],
	    returnBegin: true,
	    returnEnd: true,
	    illegal: '[<=\'$"]',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, MIXIN_GUARD_MODE, IDENT_MODE('keyword', 'all\\b'), IDENT_MODE('variable', '@{' + IDENT_RE + '}'), // otherwise it’s identified as tag
	    IDENT_MODE('tag', INTERP_IDENT_RE + '%?', 0), // '%' for more consistent coloring of @keyframes "tags"
	    IDENT_MODE('id', '#' + INTERP_IDENT_RE), IDENT_MODE('class', '\\.' + INTERP_IDENT_RE, 0), IDENT_MODE('keyword', '&', 0), FUNCT_MODE('pseudo', ':not'), FUNCT_MODE('keyword', ':extend'), IDENT_MODE('pseudo', '::?' + INTERP_IDENT_RE), { className: 'attr_selector', begin: '\\[', end: '\\]' }, { begin: '\\(', end: '\\)', contains: VALUE_WITH_RULESETS }, // argument list of parametric mixins
	    { begin: '!important' } // eat !important after mixin call or it will be colored as tag
	    ]
	  };

	  RULES.push(hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, AT_RULE_MODE, VAR_RULE_MODE, SELECTOR_MODE, RULE_MODE);

	  return {
	    case_insensitive: true,
	    illegal: '[=>\'/<($"]',
	    contains: RULES
	  };
	};

/***/ },
/* 264 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var LISP_IDENT_RE = '[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*';
	  var MEC_RE = '\\|[^]*?\\|';
	  var LISP_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?';
	  var SHEBANG = {
	    className: 'shebang',
	    begin: '^#!', end: '$'
	  };
	  var LITERAL = {
	    className: 'literal',
	    begin: '\\b(t{1}|nil)\\b'
	  };
	  var NUMBER = {
	    className: 'number',
	    variants: [{ begin: LISP_SIMPLE_NUMBER_RE, relevance: 0 }, { begin: '#(b|B)[0-1]+(/[0-1]+)?' }, { begin: '#(o|O)[0-7]+(/[0-7]+)?' }, { begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?' }, { begin: '#(c|C)\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE, end: '\\)' }]
	  };
	  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null });
	  var COMMENT = hljs.COMMENT(';', '$', {
	    relevance: 0
	  });
	  var VARIABLE = {
	    className: 'variable',
	    begin: '\\*', end: '\\*'
	  };
	  var KEYWORD = {
	    className: 'keyword',
	    begin: '[:&]' + LISP_IDENT_RE
	  };
	  var IDENT = {
	    begin: LISP_IDENT_RE,
	    relevance: 0
	  };
	  var MEC = {
	    begin: MEC_RE
	  };
	  var QUOTED_LIST = {
	    begin: '\\(', end: '\\)',
	    contains: ['self', LITERAL, STRING, NUMBER, IDENT]
	  };
	  var QUOTED = {
	    className: 'quoted',
	    contains: [NUMBER, STRING, VARIABLE, KEYWORD, QUOTED_LIST, IDENT],
	    variants: [{
	      begin: '[\'`]\\(', end: '\\)'
	    }, {
	      begin: '\\(quote ', end: '\\)',
	      keywords: 'quote'
	    }, {
	      begin: '\'' + MEC_RE
	    }]
	  };
	  var QUOTED_ATOM = {
	    className: 'quoted',
	    variants: [{ begin: '\'' + LISP_IDENT_RE }, { begin: '#\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*' }]
	  };
	  var LIST = {
	    className: 'list',
	    begin: '\\(\\s*', end: '\\)'
	  };
	  var BODY = {
	    endsWithParent: true,
	    relevance: 0
	  };
	  LIST.contains = [{
	    className: 'keyword',
	    variants: [{ begin: LISP_IDENT_RE }, { begin: MEC_RE }]
	  }, BODY];
	  BODY.contains = [QUOTED, QUOTED_ATOM, LIST, LITERAL, NUMBER, STRING, COMMENT, VARIABLE, KEYWORD, MEC, IDENT];

	  return {
	    illegal: /\S/,
	    contains: [NUMBER, SHEBANG, LITERAL, STRING, COMMENT, QUOTED, QUOTED_ATOM, LIST, IDENT]
	  };
	};

/***/ },
/* 265 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var VARIABLE = {
	    className: 'variable', begin: '\\b[gtps][A-Z]+[A-Za-z0-9_\\-]*\\b|\\$_[A-Z]+',
	    relevance: 0
	  };
	  var COMMENT_MODES = [hljs.C_BLOCK_COMMENT_MODE, hljs.HASH_COMMENT_MODE, hljs.COMMENT('--', '$'), hljs.COMMENT('[^:]//', '$')];
	  var TITLE1 = hljs.inherit(hljs.TITLE_MODE, {
	    variants: [{ begin: '\\b_*rig[A-Z]+[A-Za-z0-9_\\-]*' }, { begin: '\\b_[a-z0-9\\-]+' }]
	  });
	  var TITLE2 = hljs.inherit(hljs.TITLE_MODE, { begin: '\\b([A-Za-z0-9_\\-]+)\\b' });
	  return {
	    case_insensitive: false,
	    keywords: {
	      keyword: '$_COOKIE $_FILES $_GET $_GET_BINARY $_GET_RAW $_POST $_POST_BINARY $_POST_RAW $_SESSION $_SERVER ' + 'codepoint codepoints segment segments codeunit codeunits sentence sentences trueWord trueWords paragraph ' + 'after byte bytes english the until http forever descending using line real8 with seventh ' + 'for stdout finally element word words fourth before black ninth sixth characters chars stderr ' + 'uInt1 uInt1s uInt2 uInt2s stdin string lines relative rel any fifth items from middle mid ' + 'at else of catch then third it file milliseconds seconds second secs sec int1 int1s int4 ' + 'int4s internet int2 int2s normal text item last long detailed effective uInt4 uInt4s repeat ' + 'end repeat URL in try into switch to words https token binfile each tenth as ticks tick ' + 'system real4 by dateItems without char character ascending eighth whole dateTime numeric short ' + 'first ftp integer abbreviated abbr abbrev private case while if',
	      constant: 'SIX TEN FORMFEED NINE ZERO NONE SPACE FOUR FALSE COLON CRLF PI COMMA ENDOFFILE EOF EIGHT FIVE ' + 'QUOTE EMPTY ONE TRUE RETURN CR LINEFEED RIGHT BACKSLASH NULL SEVEN TAB THREE TWO ' + 'six ten formfeed nine zero none space four false colon crlf pi comma endoffile eof eight five ' + 'quote empty one true return cr linefeed right backslash null seven tab three two ' + 'RIVERSION RISTATE FILE_READ_MODE FILE_WRITE_MODE FILE_WRITE_MODE DIR_WRITE_MODE FILE_READ_UMASK ' + 'FILE_WRITE_UMASK DIR_READ_UMASK DIR_WRITE_UMASK',
	      operator: 'div mod wrap and or bitAnd bitNot bitOr bitXor among not in a an within ' + 'contains ends with begins the keys of keys',
	      built_in: 'put abs acos aliasReference annuity arrayDecode arrayEncode asin atan atan2 average avg avgDev base64Decode ' + 'base64Encode baseConvert binaryDecode binaryEncode byteOffset byteToNum cachedURL cachedURLs charToNum ' + 'cipherNames codepointOffset codepointProperty codepointToNum codeunitOffset commandNames compound compress ' + 'constantNames cos date dateFormat decompress directories ' + 'diskSpace DNSServers exp exp1 exp2 exp10 extents files flushEvents folders format functionNames geometricMean global ' + 'globals hasMemory harmonicMean hostAddress hostAddressToName hostName hostNameToAddress isNumber ISOToMac itemOffset ' + 'keys len length libURLErrorData libUrlFormData libURLftpCommand libURLLastHTTPHeaders libURLLastRHHeaders ' + 'libUrlMultipartFormAddPart libUrlMultipartFormData libURLVersion lineOffset ln ln1 localNames log log2 log10 ' + 'longFilePath lower macToISO matchChunk matchText matrixMultiply max md5Digest median merge millisec ' + 'millisecs millisecond milliseconds min monthNames nativeCharToNum normalizeText num number numToByte numToChar ' + 'numToCodepoint numToNativeChar offset open openfiles openProcesses openProcessIDs openSockets ' + 'paragraphOffset paramCount param params peerAddress pendingMessages platform popStdDev populationStandardDeviation ' + 'populationVariance popVariance processID random randomBytes replaceText result revCreateXMLTree revCreateXMLTreeFromFile ' + 'revCurrentRecord revCurrentRecordIsFirst revCurrentRecordIsLast revDatabaseColumnCount revDatabaseColumnIsNull ' + 'revDatabaseColumnLengths revDatabaseColumnNames revDatabaseColumnNamed revDatabaseColumnNumbered ' + 'revDatabaseColumnTypes revDatabaseConnectResult revDatabaseCursors revDatabaseID revDatabaseTableNames ' + 'revDatabaseType revDataFromQuery revdb_closeCursor revdb_columnbynumber revdb_columncount revdb_columnisnull ' + 'revdb_columnlengths revdb_columnnames revdb_columntypes revdb_commit revdb_connect revdb_connections ' + 'revdb_connectionerr revdb_currentrecord revdb_cursorconnection revdb_cursorerr revdb_cursors revdb_dbtype ' + 'revdb_disconnect revdb_execute revdb_iseof revdb_isbof revdb_movefirst revdb_movelast revdb_movenext ' + 'revdb_moveprev revdb_query revdb_querylist revdb_recordcount revdb_rollback revdb_tablenames ' + 'revGetDatabaseDriverPath revNumberOfRecords revOpenDatabase revOpenDatabases revQueryDatabase ' + 'revQueryDatabaseBlob revQueryResult revQueryIsAtStart revQueryIsAtEnd revUnixFromMacPath revXMLAttribute ' + 'revXMLAttributes revXMLAttributeValues revXMLChildContents revXMLChildNames revXMLCreateTreeFromFileWithNamespaces ' + 'revXMLCreateTreeWithNamespaces revXMLDataFromXPathQuery revXMLEvaluateXPath revXMLFirstChild revXMLMatchingNode ' + 'revXMLNextSibling revXMLNodeContents revXMLNumberOfChildren revXMLParent revXMLPreviousSibling ' + 'revXMLRootNode revXMLRPC_CreateRequest revXMLRPC_Documents revXMLRPC_Error ' + 'revXMLRPC_GetHost revXMLRPC_GetMethod revXMLRPC_GetParam revXMLText revXMLRPC_Execute ' + 'revXMLRPC_GetParamCount revXMLRPC_GetParamNode revXMLRPC_GetParamType revXMLRPC_GetPath revXMLRPC_GetPort ' + 'revXMLRPC_GetProtocol revXMLRPC_GetRequest revXMLRPC_GetResponse revXMLRPC_GetSocket revXMLTree ' + 'revXMLTrees revXMLValidateDTD revZipDescribeItem revZipEnumerateItems revZipOpenArchives round sampVariance ' + 'sec secs seconds sentenceOffset sha1Digest shell shortFilePath sin specialFolderPath sqrt standardDeviation statRound ' + 'stdDev sum sysError systemVersion tan tempName textDecode textEncode tick ticks time to tokenOffset toLower toUpper ' + 'transpose truewordOffset trunc uniDecode uniEncode upper URLDecode URLEncode URLStatus uuid value variableNames ' + 'variance version waitDepth weekdayNames wordOffset xsltApplyStylesheet xsltApplyStylesheetFromFile xsltLoadStylesheet ' + 'xsltLoadStylesheetFromFile add breakpoint cancel clear local variable file word line folder directory URL close socket process ' + 'combine constant convert create new alias folder directory decrypt delete variable word line folder ' + 'directory URL dispatch divide do encrypt filter get include intersect kill libURLDownloadToFile ' + 'libURLFollowHttpRedirects libURLftpUpload libURLftpUploadFile libURLresetAll libUrlSetAuthCallback ' + 'libURLSetCustomHTTPHeaders libUrlSetExpect100 libURLSetFTPListCommand libURLSetFTPMode libURLSetFTPStopTime ' + 'libURLSetStatusCallback load multiply socket prepare process post seek rel relative read from process rename ' + 'replace require resetAll resolve revAddXMLNode revAppendXML revCloseCursor revCloseDatabase revCommitDatabase ' + 'revCopyFile revCopyFolder revCopyXMLNode revDeleteFolder revDeleteXMLNode revDeleteAllXMLTrees ' + 'revDeleteXMLTree revExecuteSQL revGoURL revInsertXMLNode revMoveFolder revMoveToFirstRecord revMoveToLastRecord ' + 'revMoveToNextRecord revMoveToPreviousRecord revMoveToRecord revMoveXMLNode revPutIntoXMLNode revRollBackDatabase ' + 'revSetDatabaseDriverPath revSetXMLAttribute revXMLRPC_AddParam revXMLRPC_DeleteAllDocuments revXMLAddDTD ' + 'revXMLRPC_Free revXMLRPC_FreeAll revXMLRPC_DeleteDocument revXMLRPC_DeleteParam revXMLRPC_SetHost ' + 'revXMLRPC_SetMethod revXMLRPC_SetPort revXMLRPC_SetProtocol revXMLRPC_SetSocket revZipAddItemWithData ' + 'revZipAddItemWithFile revZipAddUncompressedItemWithData revZipAddUncompressedItemWithFile revZipCancel ' + 'revZipCloseArchive revZipDeleteItem revZipExtractItemToFile revZipExtractItemToVariable revZipSetProgressCallback ' + 'revZipRenameItem revZipReplaceItemWithData revZipReplaceItemWithFile revZipOpenArchive send set sort split start stop ' + 'subtract union unload wait write'
	    },
	    contains: [VARIABLE, {
	      className: 'keyword',
	      begin: '\\bend\\sif\\b'
	    }, {
	      className: 'function',
	      beginKeywords: 'function', end: '$',
	      contains: [VARIABLE, TITLE2, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE, TITLE1]
	    }, {
	      className: 'function',
	      begin: '\\bend\\s+', end: '$',
	      keywords: 'end',
	      contains: [TITLE2, TITLE1]
	    }, {
	      className: 'command',
	      beginKeywords: 'command on', end: '$',
	      contains: [VARIABLE, TITLE2, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE, TITLE1]
	    }, {
	      className: 'preprocessor',
	      variants: [{
	        begin: '<\\?(rev|lc|livecode)',
	        relevance: 10
	      }, { begin: '<\\?' }, { begin: '\\?>' }]
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE, TITLE1].concat(COMMENT_MODES),
	    illegal: ';$|^\\[|^='
	  };
	};

/***/ },
/* 266 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = {
	    keyword:
	    // JS keywords
	    'in if for while finally new do return else break catch instanceof throw try this ' + 'switch continue typeof delete debugger case default function var with ' +
	    // LiveScript keywords
	    'then unless until loop of by when and or is isnt not it that otherwise from to til fallthrough super ' + 'case default function var void const let enum export import native ' + '__hasProp __extends __slice __bind __indexOf',
	    literal:
	    // JS literals
	    'true false null undefined ' +
	    // LiveScript literals
	    'yes no on off it that void',
	    built_in: 'npm require console print module global window document'
	  };
	  var JS_IDENT_RE = '[A-Za-z$_](?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*';
	  var TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: JS_IDENT_RE });
	  var SUBST = {
	    className: 'subst',
	    begin: /#\{/, end: /}/,
	    keywords: KEYWORDS
	  };
	  var SUBST_SIMPLE = {
	    className: 'subst',
	    begin: /#[A-Za-z$_]/, end: /(?:\-[0-9A-Za-z$_]|[0-9A-Za-z$_])*/,
	    keywords: KEYWORDS
	  };
	  var EXPRESSIONS = [hljs.BINARY_NUMBER_MODE, {
	    className: 'number',
	    begin: '(\\b0[xX][a-fA-F0-9_]+)|(\\b\\d(\\d|_\\d)*(\\.(\\d(\\d|_\\d)*)?)?(_*[eE]([-+]\\d(_\\d|\\d)*)?)?[_a-z]*)',
	    relevance: 0,
	    starts: { end: '(\\s*/)?', relevance: 0 } // a number tries to eat the following slash to prevent treating it as a regexp
	  }, {
	    className: 'string',
	    variants: [{
	      begin: /'''/, end: /'''/,
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: /'/, end: /'/,
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: /"""/, end: /"""/,
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]
	    }, {
	      begin: /"/, end: /"/,
	      contains: [hljs.BACKSLASH_ESCAPE, SUBST, SUBST_SIMPLE]
	    }, {
	      begin: /\\/, end: /(\s|$)/,
	      excludeEnd: true
	    }]
	  }, {
	    className: 'pi',
	    variants: [{
	      begin: '//', end: '//[gim]*',
	      contains: [SUBST, hljs.HASH_COMMENT_MODE]
	    }, {
	      // regex can't start with space to parse x / 2 / 3 as two divisions
	      // regex can't start with *, and it supports an "illegal" in the main mode
	      begin: /\/(?![ *])(\\\/|.)*?\/[gim]*(?=\W|$)/
	    }]
	  }, {
	    className: 'property',
	    begin: '@' + JS_IDENT_RE
	  }, {
	    begin: '``', end: '``',
	    excludeBegin: true, excludeEnd: true,
	    subLanguage: 'javascript'
	  }];
	  SUBST.contains = EXPRESSIONS;

	  var PARAMS = {
	    className: 'params',
	    begin: '\\(', returnBegin: true,
	    /* We need another contained nameless mode to not have every nested
	    pair of parens to be called "params" */
	    contains: [{
	      begin: /\(/, end: /\)/,
	      keywords: KEYWORDS,
	      contains: ['self'].concat(EXPRESSIONS)
	    }]
	  };

	  return {
	    aliases: ['ls'],
	    keywords: KEYWORDS,
	    illegal: /\/\*/,
	    contains: EXPRESSIONS.concat([hljs.COMMENT('\\/\\*', '\\*\\/'), hljs.HASH_COMMENT_MODE, {
	      className: 'function',
	      contains: [TITLE, PARAMS],
	      returnBegin: true,
	      variants: [{
	        begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B\\->\\*?', end: '\\->\\*?'
	      }, {
	        begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?!?(\\(.*\\))?\\s*\\B[-~]{1,2}>\\*?', end: '[-~]{1,2}>\\*?'
	      }, {
	        begin: '(' + JS_IDENT_RE + '\\s*(?:=|:=)\\s*)?(\\(.*\\))?\\s*\\B!?[-~]{1,2}>\\*?', end: '!?[-~]{1,2}>\\*?'
	      }]
	    }, {
	      className: 'class',
	      beginKeywords: 'class',
	      end: '$',
	      illegal: /[:="\[\]]/,
	      contains: [{
	        beginKeywords: 'extends',
	        endsWithParent: true,
	        illegal: /[:="\[\]]/,
	        contains: [TITLE]
	      }, TITLE]
	    }, {
	      className: 'attribute',
	      begin: JS_IDENT_RE + ':', end: ':',
	      returnBegin: true, returnEnd: true,
	      relevance: 0
	    }])
	  };
	};

/***/ },
/* 267 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var OPENING_LONG_BRACKET = '\\[=*\\[';
	  var CLOSING_LONG_BRACKET = '\\]=*\\]';
	  var LONG_BRACKETS = {
	    begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,
	    contains: ['self']
	  };
	  var COMMENTS = [hljs.COMMENT('--(?!' + OPENING_LONG_BRACKET + ')', '$'), hljs.COMMENT('--' + OPENING_LONG_BRACKET, CLOSING_LONG_BRACKET, {
	    contains: [LONG_BRACKETS],
	    relevance: 10
	  })];
	  return {
	    lexemes: hljs.UNDERSCORE_IDENT_RE,
	    keywords: {
	      keyword: 'and break do else elseif end false for if in local nil not or repeat return then ' + 'true until while',
	      built_in: '_G _VERSION assert collectgarbage dofile error getfenv getmetatable ipairs load ' + 'loadfile loadstring module next pairs pcall print rawequal rawget rawset require ' + 'select setfenv setmetatable tonumber tostring type unpack xpcall coroutine debug ' + 'io math os package string table'
	    },
	    contains: COMMENTS.concat([{
	      className: 'function',
	      beginKeywords: 'function', end: '\\)',
	      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: '([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*' }), {
	        className: 'params',
	        begin: '\\(', endsWithParent: true,
	        contains: COMMENTS
	      }].concat(COMMENTS)
	    }, hljs.C_NUMBER_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      begin: OPENING_LONG_BRACKET, end: CLOSING_LONG_BRACKET,
	      contains: [LONG_BRACKETS],
	      relevance: 5
	    }])
	  };
	};

/***/ },
/* 268 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var VARIABLE = {
	    className: 'variable',
	    begin: /\$\(/, end: /\)/,
	    contains: [hljs.BACKSLASH_ESCAPE]
	  };
	  return {
	    aliases: ['mk', 'mak'],
	    contains: [hljs.HASH_COMMENT_MODE, {
	      begin: /^\w+\s*\W*=/, returnBegin: true,
	      relevance: 0,
	      starts: {
	        className: 'constant',
	        end: /\s*\W*=/, excludeEnd: true,
	        starts: {
	          end: /$/,
	          relevance: 0,
	          contains: [VARIABLE]
	        }
	      }
	    }, {
	      className: 'title',
	      begin: /^[\w]+:\s*$/
	    }, {
	      className: 'phony',
	      begin: /^\.PHONY:/, end: /$/,
	      keywords: '.PHONY', lexemes: /[\.\w]+/
	    }, {
	      begin: /^\t+/, end: /$/,
	      relevance: 0,
	      contains: [hljs.QUOTE_STRING_MODE, VARIABLE]
	    }]
	  };
	};

/***/ },
/* 269 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['mma'],
	    lexemes: '(\\$|\\b)' + hljs.IDENT_RE + '\\b',
	    keywords: 'AbelianGroup Abort AbortKernels AbortProtect Above Abs Absolute AbsoluteCorrelation AbsoluteCorrelationFunction AbsoluteCurrentValue AbsoluteDashing AbsoluteFileName AbsoluteOptions AbsolutePointSize AbsoluteThickness AbsoluteTime AbsoluteTiming AccountingForm Accumulate Accuracy AccuracyGoal ActionDelay ActionMenu ActionMenuBox ActionMenuBoxOptions Active ActiveItem ActiveStyle AcyclicGraphQ AddOnHelpPath AddTo AdjacencyGraph AdjacencyList AdjacencyMatrix AdjustmentBox AdjustmentBoxOptions AdjustTimeSeriesForecast AffineTransform After AiryAi AiryAiPrime AiryAiZero AiryBi AiryBiPrime AiryBiZero AlgebraicIntegerQ AlgebraicNumber AlgebraicNumberDenominator AlgebraicNumberNorm AlgebraicNumberPolynomial AlgebraicNumberTrace AlgebraicRules AlgebraicRulesData Algebraics AlgebraicUnitQ Alignment AlignmentMarker AlignmentPoint All AllowedDimensions AllowGroupClose AllowInlineCells AllowKernelInitialization AllowReverseGroupClose AllowScriptLevelChange AlphaChannel AlternatingGroup AlternativeHypothesis Alternatives AmbientLight Analytic AnchoredSearch And AndersonDarlingTest AngerJ AngleBracket AngularGauge Animate AnimationCycleOffset AnimationCycleRepetitions AnimationDirection AnimationDisplayTime AnimationRate AnimationRepetitions AnimationRunning Animator AnimatorBox AnimatorBoxOptions AnimatorElements Annotation Annuity AnnuityDue Antialiasing Antisymmetric Apart ApartSquareFree Appearance AppearanceElements AppellF1 Append AppendTo Apply ArcCos ArcCosh ArcCot ArcCoth ArcCsc ArcCsch ArcSec ArcSech ArcSin ArcSinDistribution ArcSinh ArcTan ArcTanh Arg ArgMax ArgMin ArgumentCountQ ARIMAProcess ArithmeticGeometricMean ARMAProcess ARProcess Array ArrayComponents ArrayDepth ArrayFlatten ArrayPad ArrayPlot ArrayQ ArrayReshape ArrayRules Arrays Arrow Arrow3DBox ArrowBox Arrowheads AspectRatio AspectRatioFixed Assert Assuming Assumptions AstronomicalData Asynchronous AsynchronousTaskObject AsynchronousTasks AtomQ Attributes AugmentedSymmetricPolynomial AutoAction AutoDelete AutoEvaluateEvents AutoGeneratedPackage AutoIndent AutoIndentSpacings AutoItalicWords AutoloadPath AutoMatch Automatic AutomaticImageSize AutoMultiplicationSymbol AutoNumberFormatting AutoOpenNotebooks AutoOpenPalettes AutorunSequencing AutoScaling AutoScroll AutoSpacing AutoStyleOptions AutoStyleWords Axes AxesEdge AxesLabel AxesOrigin AxesStyle Axis ' + 'BabyMonsterGroupB Back Background BackgroundTasksSettings Backslash Backsubstitution Backward Band BandpassFilter BandstopFilter BarabasiAlbertGraphDistribution BarChart BarChart3D BarLegend BarlowProschanImportance BarnesG BarOrigin BarSpacing BartlettHannWindow BartlettWindow BaseForm Baseline BaselinePosition BaseStyle BatesDistribution BattleLemarieWavelet Because BeckmannDistribution Beep Before Begin BeginDialogPacket BeginFrontEndInteractionPacket BeginPackage BellB BellY Below BenfordDistribution BeniniDistribution BenktanderGibratDistribution BenktanderWeibullDistribution BernoulliB BernoulliDistribution BernoulliGraphDistribution BernoulliProcess BernsteinBasis BesselFilterModel BesselI BesselJ BesselJZero BesselK BesselY BesselYZero Beta BetaBinomialDistribution BetaDistribution BetaNegativeBinomialDistribution BetaPrimeDistribution BetaRegularized BetweennessCentrality BezierCurve BezierCurve3DBox BezierCurve3DBoxOptions BezierCurveBox BezierCurveBoxOptions BezierFunction BilateralFilter Binarize BinaryFormat BinaryImageQ BinaryRead BinaryReadList BinaryWrite BinCounts BinLists Binomial BinomialDistribution BinomialProcess BinormalDistribution BiorthogonalSplineWavelet BipartiteGraphQ BirnbaumImportance BirnbaumSaundersDistribution BitAnd BitClear BitGet BitLength BitNot BitOr BitSet BitShiftLeft BitShiftRight BitXor Black BlackmanHarrisWindow BlackmanNuttallWindow BlackmanWindow Blank BlankForm BlankNullSequence BlankSequence Blend Block BlockRandom BlomqvistBeta BlomqvistBetaTest Blue Blur BodePlot BohmanWindow Bold Bookmarks Boole BooleanConsecutiveFunction BooleanConvert BooleanCountingFunction BooleanFunction BooleanGraph BooleanMaxterms BooleanMinimize BooleanMinterms Booleans BooleanTable BooleanVariables BorderDimensions BorelTannerDistribution Bottom BottomHatTransform BoundaryStyle Bounds Box BoxBaselineShift BoxData BoxDimensions Boxed Boxes BoxForm BoxFormFormatTypes BoxFrame BoxID BoxMargins BoxMatrix BoxRatios BoxRotation BoxRotationPoint BoxStyle BoxWhiskerChart Bra BracketingBar BraKet BrayCurtisDistance BreadthFirstScan Break Brown BrownForsytheTest BrownianBridgeProcess BrowserCategory BSplineBasis BSplineCurve BSplineCurve3DBox BSplineCurveBox BSplineCurveBoxOptions BSplineFunction BSplineSurface BSplineSurface3DBox BubbleChart BubbleChart3D BubbleScale BubbleSizes BulletGauge BusinessDayQ ButterflyGraph ButterworthFilterModel Button ButtonBar ButtonBox ButtonBoxOptions ButtonCell ButtonContents ButtonData ButtonEvaluator ButtonExpandable ButtonFrame ButtonFunction ButtonMargins ButtonMinHeight ButtonNote ButtonNotebook ButtonSource ButtonStyle ButtonStyleMenuListing Byte ByteCount ByteOrdering ' + 'C CachedValue CacheGraphics CalendarData CalendarType CallPacket CanberraDistance Cancel CancelButton CandlestickChart Cap CapForm CapitalDifferentialD CardinalBSplineBasis CarmichaelLambda Cases Cashflow Casoratian Catalan CatalanNumber Catch CauchyDistribution CauchyWindow CayleyGraph CDF CDFDeploy CDFInformation CDFWavelet Ceiling Cell CellAutoOverwrite CellBaseline CellBoundingBox CellBracketOptions CellChangeTimes CellContents CellContext CellDingbat CellDynamicExpression CellEditDuplicate CellElementsBoundingBox CellElementSpacings CellEpilog CellEvaluationDuplicate CellEvaluationFunction CellEventActions CellFrame CellFrameColor CellFrameLabelMargins CellFrameLabels CellFrameMargins CellGroup CellGroupData CellGrouping CellGroupingRules CellHorizontalScrolling CellID CellLabel CellLabelAutoDelete CellLabelMargins CellLabelPositioning CellMargins CellObject CellOpen CellPrint CellProlog Cells CellSize CellStyle CellTags CellularAutomaton CensoredDistribution Censoring Center CenterDot CentralMoment CentralMomentGeneratingFunction CForm ChampernowneNumber ChanVeseBinarize Character CharacterEncoding CharacterEncodingsPath CharacteristicFunction CharacteristicPolynomial CharacterRange Characters ChartBaseStyle ChartElementData ChartElementDataFunction ChartElementFunction ChartElements ChartLabels ChartLayout ChartLegends ChartStyle Chebyshev1FilterModel Chebyshev2FilterModel ChebyshevDistance ChebyshevT ChebyshevU Check CheckAbort CheckAll Checkbox CheckboxBar CheckboxBox CheckboxBoxOptions ChemicalData ChessboardDistance ChiDistribution ChineseRemainder ChiSquareDistribution ChoiceButtons ChoiceDialog CholeskyDecomposition Chop Circle CircleBox CircleDot CircleMinus CirclePlus CircleTimes CirculantGraph CityData Clear ClearAll ClearAttributes ClearSystemCache ClebschGordan ClickPane Clip ClipboardNotebook ClipFill ClippingStyle ClipPlanes ClipRange Clock ClockGauge ClockwiseContourIntegral Close Closed CloseKernels ClosenessCentrality Closing ClosingAutoSave ClosingEvent ClusteringComponents CMYKColor Coarse Coefficient CoefficientArrays CoefficientDomain CoefficientList CoefficientRules CoifletWavelet Collect Colon ColonForm ColorCombine ColorConvert ColorData ColorDataFunction ColorFunction ColorFunctionScaling Colorize ColorNegate ColorOutput ColorProfileData ColorQuantize ColorReplace ColorRules ColorSelectorSettings ColorSeparate ColorSetter ColorSetterBox ColorSetterBoxOptions ColorSlider ColorSpace Column ColumnAlignments ColumnBackgrounds ColumnForm ColumnLines ColumnsEqual ColumnSpacings ColumnWidths CommonDefaultFormatTypes Commonest CommonestFilter CommonUnits CommunityBoundaryStyle CommunityGraphPlot CommunityLabels CommunityRegionStyle CompatibleUnitQ CompilationOptions CompilationTarget Compile Compiled CompiledFunction Complement CompleteGraph CompleteGraphQ CompleteKaryTree CompletionsListPacket Complex Complexes ComplexExpand ComplexInfinity ComplexityFunction ComponentMeasurements ' + 'ComponentwiseContextMenu Compose ComposeList ComposeSeries Composition CompoundExpression CompoundPoissonDistribution CompoundPoissonProcess CompoundRenewalProcess Compress CompressedData Condition ConditionalExpression Conditioned Cone ConeBox ConfidenceLevel ConfidenceRange ConfidenceTransform ConfigurationPath Congruent Conjugate ConjugateTranspose Conjunction Connect ConnectedComponents ConnectedGraphQ ConnesWindow ConoverTest ConsoleMessage ConsoleMessagePacket ConsolePrint Constant ConstantArray Constants ConstrainedMax ConstrainedMin ContentPadding ContentsBoundingBox ContentSelectable ContentSize Context ContextMenu Contexts ContextToFilename ContextToFileName Continuation Continue ContinuedFraction ContinuedFractionK ContinuousAction ContinuousMarkovProcess ContinuousTimeModelQ ContinuousWaveletData ContinuousWaveletTransform ContourDetect ContourGraphics ContourIntegral ContourLabels ContourLines ContourPlot ContourPlot3D Contours ContourShading ContourSmoothing ContourStyle ContraharmonicMean Control ControlActive ControlAlignment ControllabilityGramian ControllabilityMatrix ControllableDecomposition ControllableModelQ ControllerDuration ControllerInformation ControllerInformationData ControllerLinking ControllerManipulate ControllerMethod ControllerPath ControllerState ControlPlacement ControlsRendering ControlType Convergents ConversionOptions ConversionRules ConvertToBitmapPacket ConvertToPostScript ConvertToPostScriptPacket Convolve ConwayGroupCo1 ConwayGroupCo2 ConwayGroupCo3 CoordinateChartData CoordinatesToolOptions CoordinateTransform CoordinateTransformData CoprimeQ Coproduct CopulaDistribution Copyable CopyDirectory CopyFile CopyTag CopyToClipboard CornerFilter CornerNeighbors Correlation CorrelationDistance CorrelationFunction CorrelationTest Cos Cosh CoshIntegral CosineDistance CosineWindow CosIntegral Cot Coth Count CounterAssignments CounterBox CounterBoxOptions CounterClockwiseContourIntegral CounterEvaluator CounterFunction CounterIncrements CounterStyle CounterStyleMenuListing CountRoots CountryData Covariance CovarianceEstimatorFunction CovarianceFunction CoxianDistribution CoxIngersollRossProcess CoxModel CoxModelFit CramerVonMisesTest CreateArchive CreateDialog CreateDirectory CreateDocument CreateIntermediateDirectories CreatePalette CreatePalettePacket CreateScheduledTask CreateTemporary CreateWindow CriticalityFailureImportance CriticalitySuccessImportance CriticalSection Cross CrossingDetect CrossMatrix Csc Csch CubeRoot Cubics Cuboid CuboidBox Cumulant CumulantGeneratingFunction Cup CupCap Curl CurlyDoubleQuote CurlyQuote CurrentImage CurrentlySpeakingPacket CurrentValue CurvatureFlowFilter CurveClosed Cyan CycleGraph CycleIndexPolynomial Cycles CyclicGroup Cyclotomic Cylinder CylinderBox CylindricalDecomposition ' + 'D DagumDistribution DamerauLevenshteinDistance DampingFactor Darker Dashed Dashing DataCompression DataDistribution DataRange DataReversed Date DateDelimiters DateDifference DateFunction DateList DateListLogPlot DateListPlot DatePattern DatePlus DateRange DateString DateTicksFormat DaubechiesWavelet DavisDistribution DawsonF DayCount DayCountConvention DayMatchQ DayName DayPlus DayRange DayRound DeBruijnGraph Debug DebugTag Decimal DeclareKnownSymbols DeclarePackage Decompose Decrement DedekindEta Default DefaultAxesStyle DefaultBaseStyle DefaultBoxStyle DefaultButton DefaultColor DefaultControlPlacement DefaultDuplicateCellStyle DefaultDuration DefaultElement DefaultFaceGridsStyle DefaultFieldHintStyle DefaultFont DefaultFontProperties DefaultFormatType DefaultFormatTypeForStyle DefaultFrameStyle DefaultFrameTicksStyle DefaultGridLinesStyle DefaultInlineFormatType DefaultInputFormatType DefaultLabelStyle DefaultMenuStyle DefaultNaturalLanguage DefaultNewCellStyle DefaultNewInlineCellStyle DefaultNotebook DefaultOptions DefaultOutputFormatType DefaultStyle DefaultStyleDefinitions DefaultTextFormatType DefaultTextInlineFormatType DefaultTicksStyle DefaultTooltipStyle DefaultValues Defer DefineExternal DefineInputStreamMethod DefineOutputStreamMethod Definition Degree DegreeCentrality DegreeGraphDistribution DegreeLexicographic DegreeReverseLexicographic Deinitialization Del Deletable Delete DeleteBorderComponents DeleteCases DeleteContents DeleteDirectory DeleteDuplicates DeleteFile DeleteSmallComponents DeleteWithContents DeletionWarning Delimiter DelimiterFlashTime DelimiterMatching Delimiters Denominator DensityGraphics DensityHistogram DensityPlot DependentVariables Deploy Deployed Depth DepthFirstScan Derivative DerivativeFilter DescriptorStateSpace DesignMatrix Det DGaussianWavelet DiacriticalPositioning Diagonal DiagonalMatrix Dialog DialogIndent DialogInput DialogLevel DialogNotebook DialogProlog DialogReturn DialogSymbols Diamond DiamondMatrix DiceDissimilarity DictionaryLookup DifferenceDelta DifferenceOrder DifferenceRoot DifferenceRootReduce Differences DifferentialD DifferentialRoot DifferentialRootReduce DifferentiatorFilter DigitBlock DigitBlockMinimum DigitCharacter DigitCount DigitQ DihedralGroup Dilation Dimensions DiracComb DiracDelta DirectedEdge DirectedEdges DirectedGraph DirectedGraphQ DirectedInfinity Direction Directive Directory DirectoryName DirectoryQ DirectoryStack DirichletCharacter DirichletConvolve DirichletDistribution DirichletL DirichletTransform DirichletWindow DisableConsolePrintPacket DiscreteChirpZTransform DiscreteConvolve DiscreteDelta DiscreteHadamardTransform DiscreteIndicator DiscreteLQEstimatorGains DiscreteLQRegulatorGains DiscreteLyapunovSolve DiscreteMarkovProcess DiscretePlot DiscretePlot3D DiscreteRatio DiscreteRiccatiSolve DiscreteShift DiscreteTimeModelQ DiscreteUniformDistribution DiscreteVariables DiscreteWaveletData DiscreteWaveletPacketTransform ' + 'DiscreteWaveletTransform Discriminant Disjunction Disk DiskBox DiskMatrix Dispatch DispersionEstimatorFunction Display DisplayAllSteps DisplayEndPacket DisplayFlushImagePacket DisplayForm DisplayFunction DisplayPacket DisplayRules DisplaySetSizePacket DisplayString DisplayTemporary DisplayWith DisplayWithRef DisplayWithVariable DistanceFunction DistanceTransform Distribute Distributed DistributedContexts DistributeDefinitions DistributionChart DistributionDomain DistributionFitTest DistributionParameterAssumptions DistributionParameterQ Dithering Div Divergence Divide DivideBy Dividers Divisible Divisors DivisorSigma DivisorSum DMSList DMSString Do DockedCells DocumentNotebook DominantColors DOSTextFormat Dot DotDashed DotEqual Dotted DoubleBracketingBar DoubleContourIntegral DoubleDownArrow DoubleLeftArrow DoubleLeftRightArrow DoubleLeftTee DoubleLongLeftArrow DoubleLongLeftRightArrow DoubleLongRightArrow DoubleRightArrow DoubleRightTee DoubleUpArrow DoubleUpDownArrow DoubleVerticalBar DoublyInfinite Down DownArrow DownArrowBar DownArrowUpArrow DownLeftRightVector DownLeftTeeVector DownLeftVector DownLeftVectorBar DownRightTeeVector DownRightVector DownRightVectorBar Downsample DownTee DownTeeArrow DownValues DragAndDrop DrawEdges DrawFrontFaces DrawHighlighted Drop DSolve Dt DualLinearProgramming DualSystemsModel DumpGet DumpSave DuplicateFreeQ Dynamic DynamicBox DynamicBoxOptions DynamicEvaluationTimeout DynamicLocation DynamicModule DynamicModuleBox DynamicModuleBoxOptions DynamicModuleParent DynamicModuleValues DynamicName DynamicNamespace DynamicReference DynamicSetting DynamicUpdating DynamicWrapper DynamicWrapperBox DynamicWrapperBoxOptions ' + 'E EccentricityCentrality EdgeAdd EdgeBetweennessCentrality EdgeCapacity EdgeCapForm EdgeColor EdgeConnectivity EdgeCost EdgeCount EdgeCoverQ EdgeDashing EdgeDelete EdgeDetect EdgeForm EdgeIndex EdgeJoinForm EdgeLabeling EdgeLabels EdgeLabelStyle EdgeList EdgeOpacity EdgeQ EdgeRenderingFunction EdgeRules EdgeShapeFunction EdgeStyle EdgeThickness EdgeWeight Editable EditButtonSettings EditCellTagsSettings EditDistance EffectiveInterest Eigensystem Eigenvalues EigenvectorCentrality Eigenvectors Element ElementData Eliminate EliminationOrder EllipticE EllipticExp EllipticExpPrime EllipticF EllipticFilterModel EllipticK EllipticLog EllipticNomeQ EllipticPi EllipticReducedHalfPeriods EllipticTheta EllipticThetaPrime EmitSound EmphasizeSyntaxErrors EmpiricalDistribution Empty EmptyGraphQ EnableConsolePrintPacket Enabled Encode End EndAdd EndDialogPacket EndFrontEndInteractionPacket EndOfFile EndOfLine EndOfString EndPackage EngineeringForm Enter EnterExpressionPacket EnterTextPacket Entropy EntropyFilter Environment Epilog Equal EqualColumns EqualRows EqualTilde EquatedTo Equilibrium EquirippleFilterKernel Equivalent Erf Erfc Erfi ErlangB ErlangC ErlangDistribution Erosion ErrorBox ErrorBoxOptions ErrorNorm ErrorPacket ErrorsDialogSettings EstimatedDistribution EstimatedProcess EstimatorGains EstimatorRegulator EuclideanDistance EulerE EulerGamma EulerianGraphQ EulerPhi Evaluatable Evaluate Evaluated EvaluatePacket EvaluationCell EvaluationCompletionAction EvaluationElements EvaluationMode EvaluationMonitor EvaluationNotebook EvaluationObject EvaluationOrder Evaluator EvaluatorNames EvenQ EventData EventEvaluator EventHandler EventHandlerTag EventLabels ExactBlackmanWindow ExactNumberQ ExactRootIsolation ExampleData Except ExcludedForms ExcludePods Exclusions ExclusionsStyle Exists Exit ExitDialog Exp Expand ExpandAll ExpandDenominator ExpandFileName ExpandNumerator Expectation ExpectationE ExpectedValue ExpGammaDistribution ExpIntegralE ExpIntegralEi Exponent ExponentFunction ExponentialDistribution ExponentialFamily ExponentialGeneratingFunction ExponentialMovingAverage ExponentialPowerDistribution ExponentPosition ExponentStep Export ExportAutoReplacements ExportPacket ExportString Expression ExpressionCell ExpressionPacket ExpToTrig ExtendedGCD Extension ExtentElementFunction ExtentMarkers ExtentSize ExternalCall ExternalDataCharacterEncoding Extract ExtractArchive ExtremeValueDistribution ' + 'FaceForm FaceGrids FaceGridsStyle Factor FactorComplete Factorial Factorial2 FactorialMoment FactorialMomentGeneratingFunction FactorialPower FactorInteger FactorList FactorSquareFree FactorSquareFreeList FactorTerms FactorTermsList Fail FailureDistribution False FARIMAProcess FEDisableConsolePrintPacket FeedbackSector FeedbackSectorStyle FeedbackType FEEnableConsolePrintPacket Fibonacci FieldHint FieldHintStyle FieldMasked FieldSize File FileBaseName FileByteCount FileDate FileExistsQ FileExtension FileFormat FileHash FileInformation FileName FileNameDepth FileNameDialogSettings FileNameDrop FileNameJoin FileNames FileNameSetter FileNameSplit FileNameTake FilePrint FileType FilledCurve FilledCurveBox Filling FillingStyle FillingTransform FilterRules FinancialBond FinancialData FinancialDerivative FinancialIndicator Find FindArgMax FindArgMin FindClique FindClusters FindCurvePath FindDistributionParameters FindDivisions FindEdgeCover FindEdgeCut FindEulerianCycle FindFaces FindFile FindFit FindGeneratingFunction FindGeoLocation FindGeometricTransform FindGraphCommunities FindGraphIsomorphism FindGraphPartition FindHamiltonianCycle FindIndependentEdgeSet FindIndependentVertexSet FindInstance FindIntegerNullVector FindKClan FindKClique FindKClub FindKPlex FindLibrary FindLinearRecurrence FindList FindMaximum FindMaximumFlow FindMaxValue FindMinimum FindMinimumCostFlow FindMinimumCut FindMinValue FindPermutation FindPostmanTour FindProcessParameters FindRoot FindSequenceFunction FindSettings FindShortestPath FindShortestTour FindThreshold FindVertexCover FindVertexCut Fine FinishDynamic FiniteAbelianGroupCount FiniteGroupCount FiniteGroupData First FirstPassageTimeDistribution FischerGroupFi22 FischerGroupFi23 FischerGroupFi24Prime FisherHypergeometricDistribution FisherRatioTest FisherZDistribution Fit FitAll FittedModel FixedPoint FixedPointList FlashSelection Flat Flatten FlattenAt FlatTopWindow FlipView Floor FlushPrintOutputPacket Fold FoldList Font FontColor FontFamily FontForm FontName FontOpacity FontPostScriptName FontProperties FontReencoding FontSize FontSlant FontSubstitutions FontTracking FontVariations FontWeight For ForAll Format FormatRules FormatType FormatTypeAutoConvert FormatValues FormBox FormBoxOptions FortranForm Forward ForwardBackward Fourier FourierCoefficient FourierCosCoefficient FourierCosSeries FourierCosTransform FourierDCT FourierDCTFilter FourierDCTMatrix FourierDST FourierDSTMatrix FourierMatrix FourierParameters FourierSequenceTransform FourierSeries FourierSinCoefficient FourierSinSeries FourierSinTransform FourierTransform FourierTrigSeries FractionalBrownianMotionProcess FractionalPart FractionBox FractionBoxOptions FractionLine Frame FrameBox FrameBoxOptions Framed FrameInset FrameLabel Frameless FrameMargins FrameStyle FrameTicks FrameTicksStyle FRatioDistribution FrechetDistribution FreeQ FrequencySamplingFilterKernel FresnelC FresnelS Friday FrobeniusNumber FrobeniusSolve ' + 'FromCharacterCode FromCoefficientRules FromContinuedFraction FromDate FromDigits FromDMS Front FrontEndDynamicExpression FrontEndEventActions FrontEndExecute FrontEndObject FrontEndResource FrontEndResourceString FrontEndStackSize FrontEndToken FrontEndTokenExecute FrontEndValueCache FrontEndVersion FrontFaceColor FrontFaceOpacity Full FullAxes FullDefinition FullForm FullGraphics FullOptions FullSimplify Function FunctionExpand FunctionInterpolation FunctionSpace FussellVeselyImportance ' + 'GaborFilter GaborMatrix GaborWavelet GainMargins GainPhaseMargins Gamma GammaDistribution GammaRegularized GapPenalty Gather GatherBy GaugeFaceElementFunction GaugeFaceStyle GaugeFrameElementFunction GaugeFrameSize GaugeFrameStyle GaugeLabels GaugeMarkers GaugeStyle GaussianFilter GaussianIntegers GaussianMatrix GaussianWindow GCD GegenbauerC General GeneralizedLinearModelFit GenerateConditions GeneratedCell GeneratedParameters GeneratingFunction Generic GenericCylindricalDecomposition GenomeData GenomeLookup GeodesicClosing GeodesicDilation GeodesicErosion GeodesicOpening GeoDestination GeodesyData GeoDirection GeoDistance GeoGridPosition GeometricBrownianMotionProcess GeometricDistribution GeometricMean GeometricMeanFilter GeometricTransformation GeometricTransformation3DBox GeometricTransformation3DBoxOptions GeometricTransformationBox GeometricTransformationBoxOptions GeoPosition GeoPositionENU GeoPositionXYZ GeoProjectionData GestureHandler GestureHandlerTag Get GetBoundingBoxSizePacket GetContext GetEnvironment GetFileName GetFrontEndOptionsDataPacket GetLinebreakInformationPacket GetMenusPacket GetPageBreakInformationPacket Glaisher GlobalClusteringCoefficient GlobalPreferences GlobalSession Glow GoldenRatio GompertzMakehamDistribution GoodmanKruskalGamma GoodmanKruskalGammaTest Goto Grad Gradient GradientFilter GradientOrientationFilter Graph GraphAssortativity GraphCenter GraphComplement GraphData GraphDensity GraphDiameter GraphDifference GraphDisjointUnion ' + 'GraphDistance GraphDistanceMatrix GraphElementData GraphEmbedding GraphHighlight GraphHighlightStyle GraphHub Graphics Graphics3D Graphics3DBox Graphics3DBoxOptions GraphicsArray GraphicsBaseline GraphicsBox GraphicsBoxOptions GraphicsColor GraphicsColumn GraphicsComplex GraphicsComplex3DBox GraphicsComplex3DBoxOptions GraphicsComplexBox GraphicsComplexBoxOptions GraphicsContents GraphicsData GraphicsGrid GraphicsGridBox GraphicsGroup GraphicsGroup3DBox GraphicsGroup3DBoxOptions GraphicsGroupBox GraphicsGroupBoxOptions GraphicsGrouping GraphicsHighlightColor GraphicsRow GraphicsSpacing GraphicsStyle GraphIntersection GraphLayout GraphLinkEfficiency GraphPeriphery GraphPlot GraphPlot3D GraphPower GraphPropertyDistribution GraphQ GraphRadius GraphReciprocity GraphRoot GraphStyle GraphUnion Gray GrayLevel GreatCircleDistance Greater GreaterEqual GreaterEqualLess GreaterFullEqual GreaterGreater GreaterLess GreaterSlantEqual GreaterTilde Green Grid GridBaseline GridBox GridBoxAlignment GridBoxBackground GridBoxDividers GridBoxFrame GridBoxItemSize GridBoxItemStyle GridBoxOptions GridBoxSpacings GridCreationSettings GridDefaultElement GridElementStyleOptions GridFrame GridFrameMargins GridGraph GridLines GridLinesStyle GroebnerBasis GroupActionBase GroupCentralizer GroupElementFromWord GroupElementPosition GroupElementQ GroupElements GroupElementToWord GroupGenerators GroupMultiplicationTable GroupOrbits GroupOrder GroupPageBreakWithin GroupSetwiseStabilizer GroupStabilizer GroupStabilizerChain Gudermannian GumbelDistribution ' + 'HaarWavelet HadamardMatrix HalfNormalDistribution HamiltonianGraphQ HammingDistance HammingWindow HankelH1 HankelH2 HankelMatrix HannPoissonWindow HannWindow HaradaNortonGroupHN HararyGraph HarmonicMean HarmonicMeanFilter HarmonicNumber Hash HashTable Haversine HazardFunction Head HeadCompose Heads HeavisideLambda HeavisidePi HeavisideTheta HeldGroupHe HeldPart HelpBrowserLookup HelpBrowserNotebook HelpBrowserSettings HermiteDecomposition HermiteH HermitianMatrixQ HessenbergDecomposition Hessian HexadecimalCharacter Hexahedron HexahedronBox HexahedronBoxOptions HiddenSurface HighlightGraph HighlightImage HighpassFilter HigmanSimsGroupHS HilbertFilter HilbertMatrix Histogram Histogram3D HistogramDistribution HistogramList HistogramTransform HistogramTransformInterpolation HitMissTransform HITSCentrality HodgeDual HoeffdingD HoeffdingDTest Hold HoldAll HoldAllComplete HoldComplete HoldFirst HoldForm HoldPattern HoldRest HolidayCalendar HomeDirectory HomePage Horizontal HorizontalForm HorizontalGauge HorizontalScrollPosition HornerForm HotellingTSquareDistribution HoytDistribution HTMLSave Hue HumpDownHump HumpEqual HurwitzLerchPhi HurwitzZeta HyperbolicDistribution HypercubeGraph HyperexponentialDistribution Hyperfactorial Hypergeometric0F1 Hypergeometric0F1Regularized Hypergeometric1F1 Hypergeometric1F1Regularized Hypergeometric2F1 Hypergeometric2F1Regularized HypergeometricDistribution HypergeometricPFQ HypergeometricPFQRegularized HypergeometricU Hyperlink HyperlinkCreationSettings Hyphenation HyphenationOptions HypoexponentialDistribution HypothesisTestData ' + 'I Identity IdentityMatrix If IgnoreCase Im Image Image3D Image3DSlices ImageAccumulate ImageAdd ImageAdjust ImageAlign ImageApply ImageAspectRatio ImageAssemble ImageCache ImageCacheValid ImageCapture ImageChannels ImageClip ImageColorSpace ImageCompose ImageConvolve ImageCooccurrence ImageCorners ImageCorrelate ImageCorrespondingPoints ImageCrop ImageData ImageDataPacket ImageDeconvolve ImageDemosaic ImageDifference ImageDimensions ImageDistance ImageEffect ImageFeatureTrack ImageFileApply ImageFileFilter ImageFileScan ImageFilter ImageForestingComponents ImageForwardTransformation ImageHistogram ImageKeypoints ImageLevels ImageLines ImageMargins ImageMarkers ImageMeasurements ImageMultiply ImageOffset ImagePad ImagePadding ImagePartition ImagePeriodogram ImagePerspectiveTransformation ImageQ ImageRangeCache ImageReflect ImageRegion ImageResize ImageResolution ImageRotate ImageRotated ImageScaled ImageScan ImageSize ImageSizeAction ImageSizeCache ImageSizeMultipliers ImageSizeRaw ImageSubtract ImageTake ImageTransformation ImageTrim ImageType ImageValue ImageValuePositions Implies Import ImportAutoReplacements ImportString ImprovementImportance In IncidenceGraph IncidenceList IncidenceMatrix IncludeConstantBasis IncludeFileExtension IncludePods IncludeSingularTerm Increment Indent IndentingNewlineSpacings IndentMaxFraction IndependenceTest IndependentEdgeSetQ IndependentUnit IndependentVertexSetQ Indeterminate IndexCreationOptions Indexed IndexGraph IndexTag Inequality InexactNumberQ InexactNumbers Infinity Infix Information Inherited InheritScope Initialization InitializationCell InitializationCellEvaluation InitializationCellWarning InlineCounterAssignments InlineCounterIncrements InlineRules Inner Inpaint Input InputAliases InputAssumptions InputAutoReplacements InputField InputFieldBox InputFieldBoxOptions InputForm InputGrouping InputNamePacket InputNotebook InputPacket InputSettings InputStream InputString InputStringPacket InputToBoxFormPacket Insert InsertionPointObject InsertResults Inset Inset3DBox Inset3DBoxOptions InsetBox InsetBoxOptions Install InstallService InString Integer IntegerDigits IntegerExponent IntegerLength IntegerPart IntegerPartitions IntegerQ Integers IntegerString Integral Integrate Interactive InteractiveTradingChart Interlaced Interleaving InternallyBalancedDecomposition InterpolatingFunction InterpolatingPolynomial Interpolation InterpolationOrder InterpolationPoints InterpolationPrecision Interpretation InterpretationBox InterpretationBoxOptions InterpretationFunction ' + 'InterpretTemplate InterquartileRange Interrupt InterruptSettings Intersection Interval IntervalIntersection IntervalMemberQ IntervalUnion Inverse InverseBetaRegularized InverseCDF InverseChiSquareDistribution InverseContinuousWaveletTransform InverseDistanceTransform InverseEllipticNomeQ InverseErf InverseErfc InverseFourier InverseFourierCosTransform InverseFourierSequenceTransform InverseFourierSinTransform InverseFourierTransform InverseFunction InverseFunctions InverseGammaDistribution InverseGammaRegularized InverseGaussianDistribution InverseGudermannian InverseHaversine InverseJacobiCD InverseJacobiCN InverseJacobiCS InverseJacobiDC InverseJacobiDN InverseJacobiDS InverseJacobiNC InverseJacobiND InverseJacobiNS InverseJacobiSC InverseJacobiSD InverseJacobiSN InverseLaplaceTransform InversePermutation InverseRadon InverseSeries InverseSurvivalFunction InverseWaveletTransform InverseWeierstrassP InverseZTransform Invisible InvisibleApplication InvisibleTimes IrreduciblePolynomialQ IsolatingInterval IsomorphicGraphQ IsotopeData Italic Item ItemBox ItemBoxOptions ItemSize ItemStyle ItoProcess ' + 'JaccardDissimilarity JacobiAmplitude Jacobian JacobiCD JacobiCN JacobiCS JacobiDC JacobiDN JacobiDS JacobiNC JacobiND JacobiNS JacobiP JacobiSC JacobiSD JacobiSN JacobiSymbol JacobiZeta JankoGroupJ1 JankoGroupJ2 JankoGroupJ3 JankoGroupJ4 JarqueBeraALMTest JohnsonDistribution Join Joined JoinedCurve JoinedCurveBox JoinForm JordanDecomposition JordanModelDecomposition ' + 'K KagiChart KaiserBesselWindow KaiserWindow KalmanEstimator KalmanFilter KarhunenLoeveDecomposition KaryTree KatzCentrality KCoreComponents KDistribution KelvinBei KelvinBer KelvinKei KelvinKer KendallTau KendallTauTest KernelExecute KernelMixtureDistribution KernelObject Kernels Ket Khinchin KirchhoffGraph KirchhoffMatrix KleinInvariantJ KnightTourGraph KnotData KnownUnitQ KolmogorovSmirnovTest KroneckerDelta KroneckerModelDecomposition KroneckerProduct KroneckerSymbol KuiperTest KumaraswamyDistribution Kurtosis KuwaharaFilter ' + 'Label Labeled LabeledSlider LabelingFunction LabelStyle LaguerreL LambdaComponents LambertW LanczosWindow LandauDistribution Language LanguageCategory LaplaceDistribution LaplaceTransform Laplacian LaplacianFilter LaplacianGaussianFilter Large Larger Last Latitude LatitudeLongitude LatticeData LatticeReduce Launch LaunchKernels LayeredGraphPlot LayerSizeFunction LayoutInformation LCM LeafCount LeapYearQ LeastSquares LeastSquaresFilterKernel Left LeftArrow LeftArrowBar LeftArrowRightArrow LeftDownTeeVector LeftDownVector LeftDownVectorBar LeftRightArrow LeftRightVector LeftTee LeftTeeArrow LeftTeeVector LeftTriangle LeftTriangleBar LeftTriangleEqual LeftUpDownVector LeftUpTeeVector LeftUpVector LeftUpVectorBar LeftVector LeftVectorBar LegendAppearance Legended LegendFunction LegendLabel LegendLayout LegendMargins LegendMarkers LegendMarkerSize LegendreP LegendreQ LegendreType Length LengthWhile LerchPhi Less LessEqual LessEqualGreater LessFullEqual LessGreater LessLess LessSlantEqual LessTilde LetterCharacter LetterQ Level LeveneTest LeviCivitaTensor LevyDistribution Lexicographic LibraryFunction LibraryFunctionError LibraryFunctionInformation LibraryFunctionLoad LibraryFunctionUnload LibraryLoad LibraryUnload LicenseID LiftingFilterData LiftingWaveletTransform LightBlue LightBrown LightCyan Lighter LightGray LightGreen Lighting LightingAngle LightMagenta LightOrange LightPink LightPurple LightRed LightSources LightYellow Likelihood Limit LimitsPositioning LimitsPositioningTokens LindleyDistribution Line Line3DBox LinearFilter LinearFractionalTransform LinearModelFit LinearOffsetFunction LinearProgramming LinearRecurrence LinearSolve LinearSolveFunction LineBox LineBreak LinebreakAdjustments LineBreakChart LineBreakWithin LineColor LineForm LineGraph LineIndent LineIndentMaxFraction LineIntegralConvolutionPlot LineIntegralConvolutionScale LineLegend LineOpacity LineSpacing LineWrapParts LinkActivate LinkClose LinkConnect LinkConnectedQ LinkCreate LinkError LinkFlush LinkFunction LinkHost LinkInterrupt LinkLaunch LinkMode LinkObject LinkOpen LinkOptions LinkPatterns LinkProtocol LinkRead LinkReadHeld LinkReadyQ Links LinkWrite LinkWriteHeld LiouvilleLambda List Listable ListAnimate ListContourPlot ListContourPlot3D ListConvolve ListCorrelate ListCurvePathPlot ListDeconvolve ListDensityPlot Listen ListFourierSequenceTransform ListInterpolation ListLineIntegralConvolutionPlot ListLinePlot ListLogLinearPlot ListLogLogPlot ListLogPlot ListPicker ListPickerBox ListPickerBoxBackground ListPickerBoxOptions ListPlay ListPlot ListPlot3D ListPointPlot3D ListPolarPlot ListQ ListStreamDensityPlot ListStreamPlot ListSurfacePlot3D ListVectorDensityPlot ListVectorPlot ListVectorPlot3D ListZTransform Literal LiteralSearch LocalClusteringCoefficient LocalizeVariables LocationEquivalenceTest LocationTest Locator LocatorAutoCreate LocatorBox LocatorBoxOptions LocatorCentering LocatorPane LocatorPaneBox LocatorPaneBoxOptions ' + 'LocatorRegion Locked Log Log10 Log2 LogBarnesG LogGamma LogGammaDistribution LogicalExpand LogIntegral LogisticDistribution LogitModelFit LogLikelihood LogLinearPlot LogLogisticDistribution LogLogPlot LogMultinormalDistribution LogNormalDistribution LogPlot LogRankTest LogSeriesDistribution LongEqual Longest LongestAscendingSequence LongestCommonSequence LongestCommonSequencePositions LongestCommonSubsequence LongestCommonSubsequencePositions LongestMatch LongForm Longitude LongLeftArrow LongLeftRightArrow LongRightArrow Loopback LoopFreeGraphQ LowerCaseQ LowerLeftArrow LowerRightArrow LowerTriangularize LowpassFilter LQEstimatorGains LQGRegulator LQOutputRegulatorGains LQRegulatorGains LUBackSubstitution LucasL LuccioSamiComponents LUDecomposition LyapunovSolve LyonsGroupLy ' + 'MachineID MachineName MachineNumberQ MachinePrecision MacintoshSystemPageSetup Magenta Magnification Magnify MainSolve MaintainDynamicCaches Majority MakeBoxes MakeExpression MakeRules MangoldtLambda ManhattanDistance Manipulate Manipulator MannWhitneyTest MantissaExponent Manual Map MapAll MapAt MapIndexed MAProcess MapThread MarcumQ MardiaCombinedTest MardiaKurtosisTest MardiaSkewnessTest MarginalDistribution MarkovProcessProperties Masking MatchingDissimilarity MatchLocalNameQ MatchLocalNames MatchQ Material MathematicaNotation MathieuC MathieuCharacteristicA MathieuCharacteristicB MathieuCharacteristicExponent MathieuCPrime MathieuGroupM11 MathieuGroupM12 MathieuGroupM22 MathieuGroupM23 MathieuGroupM24 MathieuS MathieuSPrime MathMLForm MathMLText Matrices MatrixExp MatrixForm MatrixFunction MatrixLog MatrixPlot MatrixPower MatrixQ MatrixRank Max MaxBend MaxDetect MaxExtraBandwidths MaxExtraConditions MaxFeatures MaxFilter Maximize MaxIterations MaxMemoryUsed MaxMixtureKernels MaxPlotPoints MaxPoints MaxRecursion MaxStableDistribution MaxStepFraction MaxSteps MaxStepSize MaxValue MaxwellDistribution McLaughlinGroupMcL Mean MeanClusteringCoefficient MeanDegreeConnectivity MeanDeviation MeanFilter MeanGraphDistance MeanNeighborDegree MeanShift MeanShiftFilter Median MedianDeviation MedianFilter Medium MeijerG MeixnerDistribution MemberQ MemoryConstrained MemoryInUse Menu MenuAppearance MenuCommandKey MenuEvaluator MenuItem MenuPacket MenuSortingValue MenuStyle MenuView MergeDifferences Mesh MeshFunctions MeshRange MeshShading MeshStyle Message MessageDialog MessageList MessageName MessageOptions MessagePacket Messages MessagesNotebook MetaCharacters MetaInformation Method MethodOptions MexicanHatWavelet MeyerWavelet Min MinDetect MinFilter MinimalPolynomial MinimalStateSpaceModel Minimize Minors MinRecursion MinSize MinStableDistribution Minus MinusPlus MinValue Missing MissingDataMethod MittagLefflerE MixedRadix MixedRadixQuantity MixtureDistribution Mod Modal Mode Modular ModularLambda Module Modulus MoebiusMu Moment Momentary MomentConvert MomentEvaluate MomentGeneratingFunction Monday Monitor MonomialList MonomialOrder MonsterGroupM MorletWavelet MorphologicalBinarize MorphologicalBranchPoints MorphologicalComponents MorphologicalEulerNumber MorphologicalGraph MorphologicalPerimeter MorphologicalTransform Most MouseAnnotation MouseAppearance MouseAppearanceTag MouseButtons Mouseover MousePointerNote MousePosition MovingAverage MovingMedian MoyalDistribution MultiedgeStyle MultilaunchWarning MultiLetterItalics MultiLetterStyle MultilineFunction Multinomial MultinomialDistribution MultinormalDistribution MultiplicativeOrder Multiplicity Multiselection MultivariateHypergeometricDistribution MultivariatePoissonDistribution MultivariateTDistribution ' + 'N NakagamiDistribution NameQ Names NamespaceBox Nand NArgMax NArgMin NBernoulliB NCache NDSolve NDSolveValue Nearest NearestFunction NeedCurrentFrontEndPackagePacket NeedCurrentFrontEndSymbolsPacket NeedlemanWunschSimilarity Needs Negative NegativeBinomialDistribution NegativeMultinomialDistribution NeighborhoodGraph Nest NestedGreaterGreater NestedLessLess NestedScriptRules NestList NestWhile NestWhileList NevilleThetaC NevilleThetaD NevilleThetaN NevilleThetaS NewPrimitiveStyle NExpectation Next NextPrime NHoldAll NHoldFirst NHoldRest NicholsGridLines NicholsPlot NIntegrate NMaximize NMaxValue NMinimize NMinValue NominalVariables NonAssociative NoncentralBetaDistribution NoncentralChiSquareDistribution NoncentralFRatioDistribution NoncentralStudentTDistribution NonCommutativeMultiply NonConstants None NonlinearModelFit NonlocalMeansFilter NonNegative NonPositive Nor NorlundB Norm Normal NormalDistribution NormalGrouping Normalize NormalizedSquaredEuclideanDistance NormalsFunction NormFunction Not NotCongruent NotCupCap NotDoubleVerticalBar Notebook NotebookApply NotebookAutoSave NotebookClose NotebookConvertSettings NotebookCreate NotebookCreateReturnObject NotebookDefault NotebookDelete NotebookDirectory NotebookDynamicExpression NotebookEvaluate NotebookEventActions NotebookFileName NotebookFind NotebookFindReturnObject NotebookGet NotebookGetLayoutInformationPacket NotebookGetMisspellingsPacket NotebookInformation NotebookInterfaceObject NotebookLocate NotebookObject NotebookOpen NotebookOpenReturnObject NotebookPath NotebookPrint NotebookPut NotebookPutReturnObject NotebookRead NotebookResetGeneratedCells Notebooks NotebookSave NotebookSaveAs NotebookSelection NotebookSetupLayoutInformationPacket NotebooksMenu NotebookWrite NotElement NotEqualTilde NotExists NotGreater NotGreaterEqual NotGreaterFullEqual NotGreaterGreater NotGreaterLess NotGreaterSlantEqual NotGreaterTilde NotHumpDownHump NotHumpEqual NotLeftTriangle NotLeftTriangleBar NotLeftTriangleEqual NotLess NotLessEqual NotLessFullEqual NotLessGreater NotLessLess NotLessSlantEqual NotLessTilde NotNestedGreaterGreater NotNestedLessLess NotPrecedes NotPrecedesEqual NotPrecedesSlantEqual NotPrecedesTilde NotReverseElement NotRightTriangle NotRightTriangleBar NotRightTriangleEqual NotSquareSubset NotSquareSubsetEqual NotSquareSuperset NotSquareSupersetEqual NotSubset NotSubsetEqual NotSucceeds NotSucceedsEqual NotSucceedsSlantEqual NotSucceedsTilde NotSuperset NotSupersetEqual NotTilde NotTildeEqual NotTildeFullEqual NotTildeTilde NotVerticalBar NProbability NProduct NProductFactors NRoots NSolve NSum NSumTerms Null NullRecords NullSpace NullWords Number NumberFieldClassNumber NumberFieldDiscriminant NumberFieldFundamentalUnits NumberFieldIntegralBasis NumberFieldNormRepresentatives NumberFieldRegulator NumberFieldRootsOfUnity NumberFieldSignature NumberForm NumberFormat NumberMarks NumberMultiplier NumberPadding NumberPoint NumberQ NumberSeparator ' + 'NumberSigns NumberString Numerator NumericFunction NumericQ NuttallWindow NValues NyquistGridLines NyquistPlot ' + 'O ObservabilityGramian ObservabilityMatrix ObservableDecomposition ObservableModelQ OddQ Off Offset OLEData On ONanGroupON OneIdentity Opacity Open OpenAppend Opener OpenerBox OpenerBoxOptions OpenerView OpenFunctionInspectorPacket Opening OpenRead OpenSpecialOptions OpenTemporary OpenWrite Operate OperatingSystem OptimumFlowData Optional OptionInspectorSettings OptionQ Options OptionsPacket OptionsPattern OptionValue OptionValueBox OptionValueBoxOptions Or Orange Order OrderDistribution OrderedQ Ordering Orderless OrnsteinUhlenbeckProcess Orthogonalize Out Outer OutputAutoOverwrite OutputControllabilityMatrix OutputControllableModelQ OutputForm OutputFormData OutputGrouping OutputMathEditExpression OutputNamePacket OutputResponse OutputSizeLimit OutputStream Over OverBar OverDot Overflow OverHat Overlaps Overlay OverlayBox OverlayBoxOptions Overscript OverscriptBox OverscriptBoxOptions OverTilde OverVector OwenT OwnValues ' + 'PackingMethod PaddedForm Padding PadeApproximant PadLeft PadRight PageBreakAbove PageBreakBelow PageBreakWithin PageFooterLines PageFooters PageHeaderLines PageHeaders PageHeight PageRankCentrality PageWidth PairedBarChart PairedHistogram PairedSmoothHistogram PairedTTest PairedZTest PaletteNotebook PalettePath Pane PaneBox PaneBoxOptions Panel PanelBox PanelBoxOptions Paneled PaneSelector PaneSelectorBox PaneSelectorBoxOptions PaperWidth ParabolicCylinderD ParagraphIndent ParagraphSpacing ParallelArray ParallelCombine ParallelDo ParallelEvaluate Parallelization Parallelize ParallelMap ParallelNeeds ParallelProduct ParallelSubmit ParallelSum ParallelTable ParallelTry Parameter ParameterEstimator ParameterMixtureDistribution ParameterVariables ParametricFunction ParametricNDSolve ParametricNDSolveValue ParametricPlot ParametricPlot3D ParentConnect ParentDirectory ParentForm Parenthesize ParentList ParetoDistribution Part PartialCorrelationFunction PartialD ParticleData Partition PartitionsP PartitionsQ ParzenWindow PascalDistribution PassEventsDown PassEventsUp Paste PasteBoxFormInlineCells PasteButton Path PathGraph PathGraphQ Pattern PatternSequence PatternTest PauliMatrix PaulWavelet Pause PausedTime PDF PearsonChiSquareTest PearsonCorrelationTest PearsonDistribution PerformanceGoal PeriodicInterpolation Periodogram PeriodogramArray PermutationCycles PermutationCyclesQ PermutationGroup PermutationLength PermutationList PermutationListQ PermutationMax PermutationMin PermutationOrder PermutationPower PermutationProduct PermutationReplace Permutations PermutationSupport Permute PeronaMalikFilter Perpendicular PERTDistribution PetersenGraph PhaseMargins Pi Pick PIDData PIDDerivativeFilter PIDFeedforward PIDTune Piecewise PiecewiseExpand PieChart PieChart3D PillaiTrace PillaiTraceTest Pink Pivoting PixelConstrained PixelValue PixelValuePositions Placed Placeholder PlaceholderReplace Plain PlanarGraphQ Play PlayRange Plot Plot3D Plot3Matrix PlotDivision PlotJoined PlotLabel PlotLayout PlotLegends PlotMarkers PlotPoints PlotRange PlotRangeClipping PlotRangePadding PlotRegion PlotStyle Plus PlusMinus Pochhammer PodStates PodWidth Point Point3DBox PointBox PointFigureChart PointForm PointLegend PointSize PoissonConsulDistribution PoissonDistribution PoissonProcess PoissonWindow PolarAxes PolarAxesOrigin PolarGridLines PolarPlot PolarTicks PoleZeroMarkers PolyaAeppliDistribution PolyGamma Polygon Polygon3DBox Polygon3DBoxOptions PolygonBox PolygonBoxOptions PolygonHoleScale PolygonIntersections PolygonScale PolyhedronData PolyLog PolynomialExtendedGCD PolynomialForm PolynomialGCD PolynomialLCM PolynomialMod PolynomialQ PolynomialQuotient PolynomialQuotientRemainder PolynomialReduce PolynomialRemainder Polynomials PopupMenu PopupMenuBox PopupMenuBoxOptions PopupView PopupWindow Position Positive PositiveDefiniteMatrixQ PossibleZeroQ Postfix PostScript Power PowerDistribution PowerExpand PowerMod PowerModList ' + 'PowerSpectralDensity PowersRepresentations PowerSymmetricPolynomial Precedence PrecedenceForm Precedes PrecedesEqual PrecedesSlantEqual PrecedesTilde Precision PrecisionGoal PreDecrement PredictionRoot PreemptProtect PreferencesPath Prefix PreIncrement Prepend PrependTo PreserveImageOptions Previous PriceGraphDistribution PrimaryPlaceholder Prime PrimeNu PrimeOmega PrimePi PrimePowerQ PrimeQ Primes PrimeZetaP PrimitiveRoot PrincipalComponents PrincipalValue Print PrintAction PrintForm PrintingCopies PrintingOptions PrintingPageRange PrintingStartingPageNumber PrintingStyleEnvironment PrintPrecision PrintTemporary Prism PrismBox PrismBoxOptions PrivateCellOptions PrivateEvaluationOptions PrivateFontOptions PrivateFrontEndOptions PrivateNotebookOptions PrivatePaths Probability ProbabilityDistribution ProbabilityPlot ProbabilityPr ProbabilityScalePlot ProbitModelFit ProcessEstimator ProcessParameterAssumptions ProcessParameterQ ProcessStateDomain ProcessTimeDomain Product ProductDistribution ProductLog ProgressIndicator ProgressIndicatorBox ProgressIndicatorBoxOptions Projection Prolog PromptForm Properties Property PropertyList PropertyValue Proportion Proportional Protect Protected ProteinData Pruning PseudoInverse Purple Put PutAppend Pyramid PyramidBox PyramidBoxOptions ' + 'QBinomial QFactorial QGamma QHypergeometricPFQ QPochhammer QPolyGamma QRDecomposition QuadraticIrrationalQ Quantile QuantilePlot Quantity QuantityForm QuantityMagnitude QuantityQ QuantityUnit Quartics QuartileDeviation Quartiles QuartileSkewness QueueingNetworkProcess QueueingProcess QueueProperties Quiet Quit Quotient QuotientRemainder ' + 'RadialityCentrality RadicalBox RadicalBoxOptions RadioButton RadioButtonBar RadioButtonBox RadioButtonBoxOptions Radon RamanujanTau RamanujanTauL RamanujanTauTheta RamanujanTauZ Random RandomChoice RandomComplex RandomFunction RandomGraph RandomImage RandomInteger RandomPermutation RandomPrime RandomReal RandomSample RandomSeed RandomVariate RandomWalkProcess Range RangeFilter RangeSpecification RankedMax RankedMin Raster Raster3D Raster3DBox Raster3DBoxOptions RasterArray RasterBox RasterBoxOptions Rasterize RasterSize Rational RationalFunctions Rationalize Rationals Ratios Raw RawArray RawBoxes RawData RawMedium RayleighDistribution Re Read ReadList ReadProtected Real RealBlockDiagonalForm RealDigits RealExponent Reals Reap Record RecordLists RecordSeparators Rectangle RectangleBox RectangleBoxOptions RectangleChart RectangleChart3D RecurrenceFilter RecurrenceTable RecurringDigitsForm Red Reduce RefBox ReferenceLineStyle ReferenceMarkers ReferenceMarkerStyle Refine ReflectionMatrix ReflectionTransform Refresh RefreshRate RegionBinarize RegionFunction RegionPlot RegionPlot3D RegularExpression Regularization Reinstall Release ReleaseHold ReliabilityDistribution ReliefImage ReliefPlot Remove RemoveAlphaChannel RemoveAsynchronousTask Removed RemoveInputStreamMethod RemoveOutputStreamMethod RemoveProperty RemoveScheduledTask RenameDirectory RenameFile RenderAll RenderingOptions RenewalProcess RenkoChart Repeated RepeatedNull RepeatedString Replace ReplaceAll ReplaceHeldPart ReplaceImageValue ReplaceList ReplacePart ReplacePixelValue ReplaceRepeated Resampling Rescale RescalingTransform ResetDirectory ResetMenusPacket ResetScheduledTask Residue Resolve Rest Resultant ResumePacket Return ReturnExpressionPacket ReturnInputFormPacket ReturnPacket ReturnTextPacket Reverse ReverseBiorthogonalSplineWavelet ReverseElement ReverseEquilibrium ReverseGraph ReverseUpEquilibrium RevolutionAxis RevolutionPlot3D RGBColor RiccatiSolve RiceDistribution RidgeFilter RiemannR RiemannSiegelTheta RiemannSiegelZ Riffle Right RightArrow RightArrowBar RightArrowLeftArrow RightCosetRepresentative RightDownTeeVector RightDownVector RightDownVectorBar RightTee RightTeeArrow RightTeeVector RightTriangle RightTriangleBar RightTriangleEqual RightUpDownVector RightUpTeeVector RightUpVector RightUpVectorBar RightVector RightVectorBar RiskAchievementImportance RiskReductionImportance RogersTanimotoDissimilarity Root RootApproximant RootIntervals RootLocusPlot RootMeanSquare RootOfUnityQ RootReduce Roots RootSum Rotate RotateLabel RotateLeft RotateRight RotationAction RotationBox RotationBoxOptions RotationMatrix RotationTransform Round RoundImplies RoundingRadius Row RowAlignments RowBackgrounds RowBox RowHeights RowLines RowMinHeight RowReduce RowsEqual RowSpacings RSolve RudvalisGroupRu Rule RuleCondition RuleDelayed RuleForm RulerUnits Run RunScheduledTask RunThrough RuntimeAttributes RuntimeOptions RussellRaoDissimilarity ' + 'SameQ SameTest SampleDepth SampledSoundFunction SampledSoundList SampleRate SamplingPeriod SARIMAProcess SARMAProcess SatisfiabilityCount SatisfiabilityInstances SatisfiableQ Saturday Save Saveable SaveAutoDelete SaveDefinitions SawtoothWave Scale Scaled ScaleDivisions ScaledMousePosition ScaleOrigin ScalePadding ScaleRanges ScaleRangeStyle ScalingFunctions ScalingMatrix ScalingTransform Scan ScheduledTaskActiveQ ScheduledTaskData ScheduledTaskObject ScheduledTasks SchurDecomposition ScientificForm ScreenRectangle ScreenStyleEnvironment ScriptBaselineShifts ScriptLevel ScriptMinSize ScriptRules ScriptSizeMultipliers Scrollbars ScrollingOptions ScrollPosition Sec Sech SechDistribution SectionGrouping SectorChart SectorChart3D SectorOrigin SectorSpacing SeedRandom Select Selectable SelectComponents SelectedCells SelectedNotebook Selection SelectionAnimate SelectionCell SelectionCellCreateCell SelectionCellDefaultStyle SelectionCellParentStyle SelectionCreateCell SelectionDebuggerTag SelectionDuplicateCell SelectionEvaluate SelectionEvaluateCreateCell SelectionMove SelectionPlaceholder SelectionSetStyle SelectWithContents SelfLoops SelfLoopStyle SemialgebraicComponentInstances SendMail Sequence SequenceAlignment SequenceForm SequenceHold SequenceLimit Series SeriesCoefficient SeriesData SessionTime Set SetAccuracy SetAlphaChannel SetAttributes Setbacks SetBoxFormNamesPacket SetDelayed SetDirectory SetEnvironment SetEvaluationNotebook SetFileDate SetFileLoadingContext SetNotebookStatusLine SetOptions SetOptionsPacket SetPrecision SetProperty SetSelectedNotebook SetSharedFunction SetSharedVariable SetSpeechParametersPacket SetStreamPosition SetSystemOptions Setter SetterBar SetterBox SetterBoxOptions Setting SetValue Shading Shallow ShannonWavelet ShapiroWilkTest Share Sharpen ShearingMatrix ShearingTransform ShenCastanMatrix Short ShortDownArrow Shortest ShortestMatch ShortestPathFunction ShortLeftArrow ShortRightArrow ShortUpArrow Show ShowAutoStyles ShowCellBracket ShowCellLabel ShowCellTags ShowClosedCellArea ShowContents ShowControls ShowCursorTracker ShowGroupOpenCloseIcon ShowGroupOpener ShowInvisibleCharacters ShowPageBreaks ShowPredictiveInterface ShowSelection ShowShortBoxForm ShowSpecialCharacters ShowStringCharacters ShowSyntaxStyles ShrinkingDelay ShrinkWrapBoundingBox SiegelTheta SiegelTukeyTest Sign Signature SignedRankTest SignificanceLevel SignPadding SignTest SimilarityRules SimpleGraph SimpleGraphQ Simplify Sin Sinc SinghMaddalaDistribution SingleEvaluation SingleLetterItalics SingleLetterStyle SingularValueDecomposition SingularValueList SingularValuePlot SingularValues Sinh SinhIntegral SinIntegral SixJSymbol Skeleton SkeletonTransform SkellamDistribution Skewness SkewNormalDistribution Skip SliceDistribution Slider Slider2D Slider2DBox Slider2DBoxOptions SliderBox SliderBoxOptions SlideView Slot SlotSequence Small SmallCircle Smaller SmithDelayCompensator SmithWatermanSimilarity ' + 'SmoothDensityHistogram SmoothHistogram SmoothHistogram3D SmoothKernelDistribution SocialMediaData Socket SokalSneathDissimilarity Solve SolveAlways SolveDelayed Sort SortBy Sound SoundAndGraphics SoundNote SoundVolume Sow Space SpaceForm Spacer Spacings Span SpanAdjustments SpanCharacterRounding SpanFromAbove SpanFromBoth SpanFromLeft SpanLineThickness SpanMaxSize SpanMinSize SpanningCharacters SpanSymmetric SparseArray SpatialGraphDistribution Speak SpeakTextPacket SpearmanRankTest SpearmanRho Spectrogram SpectrogramArray Specularity SpellingCorrection SpellingDictionaries SpellingDictionariesPath SpellingOptions SpellingSuggestionsPacket Sphere SphereBox SphericalBesselJ SphericalBesselY SphericalHankelH1 SphericalHankelH2 SphericalHarmonicY SphericalPlot3D SphericalRegion SpheroidalEigenvalue SpheroidalJoiningFactor SpheroidalPS SpheroidalPSPrime SpheroidalQS SpheroidalQSPrime SpheroidalRadialFactor SpheroidalS1 SpheroidalS1Prime SpheroidalS2 SpheroidalS2Prime Splice SplicedDistribution SplineClosed SplineDegree SplineKnots SplineWeights Split SplitBy SpokenString Sqrt SqrtBox SqrtBoxOptions Square SquaredEuclideanDistance SquareFreeQ SquareIntersection SquaresR SquareSubset SquareSubsetEqual SquareSuperset SquareSupersetEqual SquareUnion SquareWave StabilityMargins StabilityMarginsStyle StableDistribution Stack StackBegin StackComplete StackInhibit StandardDeviation StandardDeviationFilter StandardForm Standardize StandbyDistribution Star StarGraph StartAsynchronousTask StartingStepSize StartOfLine StartOfString StartScheduledTask StartupSound StateDimensions StateFeedbackGains StateOutputEstimator StateResponse StateSpaceModel StateSpaceRealization StateSpaceTransform StationaryDistribution StationaryWaveletPacketTransform StationaryWaveletTransform StatusArea StatusCentrality StepMonitor StieltjesGamma StirlingS1 StirlingS2 StopAsynchronousTask StopScheduledTask StrataVariables StratonovichProcess StreamColorFunction StreamColorFunctionScaling StreamDensityPlot StreamPlot StreamPoints StreamPosition Streams StreamScale StreamStyle String StringBreak StringByteCount StringCases StringCount StringDrop StringExpression StringForm StringFormat StringFreeQ StringInsert StringJoin StringLength StringMatchQ StringPosition StringQ StringReplace StringReplaceList StringReplacePart StringReverse StringRotateLeft StringRotateRight StringSkeleton StringSplit StringTake StringToStream StringTrim StripBoxes StripOnInput StripWrapperBoxes StrokeForm StructuralImportance StructuredArray StructuredSelection StruveH StruveL Stub StudentTDistribution Style StyleBox StyleBoxAutoDelete StyleBoxOptions StyleData StyleDefinitions StyleForm StyleKeyMapping StyleMenuListing StyleNameDialogSettings StyleNames StylePrint StyleSheetPath Subfactorial Subgraph SubMinus SubPlus SubresultantPolynomialRemainders ' + 'SubresultantPolynomials Subresultants Subscript SubscriptBox SubscriptBoxOptions Subscripted Subset SubsetEqual Subsets SubStar Subsuperscript SubsuperscriptBox SubsuperscriptBoxOptions Subtract SubtractFrom SubValues Succeeds SucceedsEqual SucceedsSlantEqual SucceedsTilde SuchThat Sum SumConvergence Sunday SuperDagger SuperMinus SuperPlus Superscript SuperscriptBox SuperscriptBoxOptions Superset SupersetEqual SuperStar Surd SurdForm SurfaceColor SurfaceGraphics SurvivalDistribution SurvivalFunction SurvivalModel SurvivalModelFit SuspendPacket SuzukiDistribution SuzukiGroupSuz SwatchLegend Switch Symbol SymbolName SymletWavelet Symmetric SymmetricGroup SymmetricMatrixQ SymmetricPolynomial SymmetricReduction Symmetrize SymmetrizedArray SymmetrizedArrayRules SymmetrizedDependentComponents SymmetrizedIndependentComponents SymmetrizedReplacePart SynchronousInitialization SynchronousUpdating Syntax SyntaxForm SyntaxInformation SyntaxLength SyntaxPacket SyntaxQ SystemDialogInput SystemException SystemHelpPath SystemInformation SystemInformationData SystemOpen SystemOptions SystemsModelDelay SystemsModelDelayApproximate SystemsModelDelete SystemsModelDimensions SystemsModelExtract SystemsModelFeedbackConnect SystemsModelLabels SystemsModelOrder SystemsModelParallelConnect SystemsModelSeriesConnect SystemsModelStateFeedbackConnect SystemStub ' + 'Tab TabFilling Table TableAlignments TableDepth TableDirections TableForm TableHeadings TableSpacing TableView TableViewBox TabSpacings TabView TabViewBox TabViewBoxOptions TagBox TagBoxNote TagBoxOptions TaggingRules TagSet TagSetDelayed TagStyle TagUnset Take TakeWhile Tally Tan Tanh TargetFunctions TargetUnits TautologyQ TelegraphProcess TemplateBox TemplateBoxOptions TemplateSlotSequence TemporalData Temporary TemporaryVariable TensorContract TensorDimensions TensorExpand TensorProduct TensorQ TensorRank TensorReduce TensorSymmetry TensorTranspose TensorWedge Tetrahedron TetrahedronBox TetrahedronBoxOptions TeXForm TeXSave Text Text3DBox Text3DBoxOptions TextAlignment TextBand TextBoundingBox TextBox TextCell TextClipboardType TextData TextForm TextJustification TextLine TextPacket TextParagraph TextRecognize TextRendering TextStyle Texture TextureCoordinateFunction TextureCoordinateScaling Therefore ThermometerGauge Thick Thickness Thin Thinning ThisLink ThompsonGroupTh Thread ThreeJSymbol Threshold Through Throw Thumbnail Thursday Ticks TicksStyle Tilde TildeEqual TildeFullEqual TildeTilde TimeConstrained TimeConstraint Times TimesBy TimeSeriesForecast TimeSeriesInvertibility TimeUsed TimeValue TimeZone Timing Tiny TitleGrouping TitsGroupT ToBoxes ToCharacterCode ToColor ToContinuousTimeModel ToDate ToDiscreteTimeModel ToeplitzMatrix ToExpression ToFileName Together Toggle ToggleFalse Toggler TogglerBar TogglerBox TogglerBoxOptions ToHeldExpression ToInvertibleTimeSeries TokenWords Tolerance ToLowerCase ToNumberField TooBig Tooltip TooltipBox TooltipBoxOptions TooltipDelay TooltipStyle Top TopHatTransform TopologicalSort ToRadicals ToRules ToString Total TotalHeight TotalVariationFilter TotalWidth TouchscreenAutoZoom TouchscreenControlPlacement ToUpperCase Tr Trace TraceAbove TraceAction TraceBackward TraceDepth TraceDialog TraceForward TraceInternal TraceLevel TraceOff TraceOn TraceOriginal TracePrint TraceScan TrackedSymbols TradingChart TraditionalForm TraditionalFunctionNotation TraditionalNotation TraditionalOrder TransferFunctionCancel TransferFunctionExpand TransferFunctionFactor TransferFunctionModel TransferFunctionPoles TransferFunctionTransform TransferFunctionZeros TransformationFunction TransformationFunctions TransformationMatrix TransformedDistribution TransformedField Translate TranslationTransform TransparentColor Transpose TreeForm TreeGraph TreeGraphQ TreePlot TrendStyle TriangleWave TriangularDistribution Trig TrigExpand TrigFactor TrigFactorList Trigger TrigReduce TrigToExp TrimmedMean True TrueQ TruncatedDistribution TsallisQExponentialDistribution TsallisQGaussianDistribution TTest Tube TubeBezierCurveBox TubeBezierCurveBoxOptions TubeBox TubeBSplineCurveBox TubeBSplineCurveBoxOptions Tuesday TukeyLambdaDistribution TukeyWindow Tuples TuranGraph TuringMachine ' + 'Transparent ' + 'UnateQ Uncompress Undefined UnderBar Underflow Underlined Underoverscript UnderoverscriptBox UnderoverscriptBoxOptions Underscript UnderscriptBox UnderscriptBoxOptions UndirectedEdge UndirectedGraph UndirectedGraphQ UndocumentedTestFEParserPacket UndocumentedTestGetSelectionPacket Unequal Unevaluated UniformDistribution UniformGraphDistribution UniformSumDistribution Uninstall Union UnionPlus Unique UnitBox UnitConvert UnitDimensions Unitize UnitRootTest UnitSimplify UnitStep UnitTriangle UnitVector Unprotect UnsameQ UnsavedVariables Unset UnsetShared UntrackedVariables Up UpArrow UpArrowBar UpArrowDownArrow Update UpdateDynamicObjects UpdateDynamicObjectsSynchronous UpdateInterval UpDownArrow UpEquilibrium UpperCaseQ UpperLeftArrow UpperRightArrow UpperTriangularize Upsample UpSet UpSetDelayed UpTee UpTeeArrow UpValues URL URLFetch URLFetchAsynchronous URLSave URLSaveAsynchronous UseGraphicsRange Using UsingFrontEnd ' + 'V2Get ValidationLength Value ValueBox ValueBoxOptions ValueForm ValueQ ValuesData Variables Variance VarianceEquivalenceTest VarianceEstimatorFunction VarianceGammaDistribution VarianceTest VectorAngle VectorColorFunction VectorColorFunctionScaling VectorDensityPlot VectorGlyphData VectorPlot VectorPlot3D VectorPoints VectorQ Vectors VectorScale VectorStyle Vee Verbatim Verbose VerboseConvertToPostScriptPacket VerifyConvergence VerifySolutions VerifyTestAssumptions Version VersionNumber VertexAdd VertexCapacity VertexColors VertexComponent VertexConnectivity VertexCoordinateRules VertexCoordinates VertexCorrelationSimilarity VertexCosineSimilarity VertexCount VertexCoverQ VertexDataCoordinates VertexDegree VertexDelete VertexDiceSimilarity VertexEccentricity VertexInComponent VertexInDegree VertexIndex VertexJaccardSimilarity VertexLabeling VertexLabels VertexLabelStyle VertexList VertexNormals VertexOutComponent VertexOutDegree VertexQ VertexRenderingFunction VertexReplace VertexShape VertexShapeFunction VertexSize VertexStyle VertexTextureCoordinates VertexWeight Vertical VerticalBar VerticalForm VerticalGauge VerticalSeparator VerticalSlider VerticalTilde ViewAngle ViewCenter ViewMatrix ViewPoint ViewPointSelectorSettings ViewPort ViewRange ViewVector ViewVertical VirtualGroupData Visible VisibleCell VoigtDistribution VonMisesDistribution ' + 'WaitAll WaitAsynchronousTask WaitNext WaitUntil WakebyDistribution WalleniusHypergeometricDistribution WaringYuleDistribution WatershedComponents WatsonUSquareTest WattsStrogatzGraphDistribution WaveletBestBasis WaveletFilterCoefficients WaveletImagePlot WaveletListPlot WaveletMapIndexed WaveletMatrixPlot WaveletPhi WaveletPsi WaveletScale WaveletScalogram WaveletThreshold WeaklyConnectedComponents WeaklyConnectedGraphQ WeakStationarity WeatherData WeberE Wedge Wednesday WeibullDistribution WeierstrassHalfPeriods WeierstrassInvariants WeierstrassP WeierstrassPPrime WeierstrassSigma WeierstrassZeta WeightedAdjacencyGraph WeightedAdjacencyMatrix WeightedData WeightedGraphQ Weights WelchWindow WheelGraph WhenEvent Which While White Whitespace WhitespaceCharacter WhittakerM WhittakerW WienerFilter WienerProcess WignerD WignerSemicircleDistribution WilksW WilksWTest WindowClickSelect WindowElements WindowFloating WindowFrame WindowFrameElements WindowMargins WindowMovable WindowOpacity WindowSelected WindowSize WindowStatusArea WindowTitle WindowToolbars WindowWidth With WolframAlpha WolframAlphaDate WolframAlphaQuantity WolframAlphaResult Word WordBoundary WordCharacter WordData WordSearch WordSeparators WorkingPrecision Write WriteString Wronskian ' + 'XMLElement XMLObject Xnor Xor ' + 'Yellow YuleDissimilarity ' + 'ZernikeR ZeroSymmetric ZeroTest ZeroWidthTimes Zeta ZetaZero ZipfDistribution ZTest ZTransform ' + '$Aborted $ActivationGroupID $ActivationKey $ActivationUserRegistered $AddOnsDirectory $AssertFunction $Assumptions $AsynchronousTask $BaseDirectory $BatchInput $BatchOutput $BoxForms $ByteOrdering $Canceled $CharacterEncoding $CharacterEncodings $CommandLine $CompilationTarget $ConditionHold $ConfiguredKernels $Context $ContextPath $ControlActiveSetting $CreationDate $CurrentLink $DateStringFormat $DefaultFont $DefaultFrontEnd $DefaultImagingDevice $DefaultPath $Display $DisplayFunction $DistributedContexts $DynamicEvaluation $Echo $Epilog $ExportFormats $Failed $FinancialDataSource $FormatType $FrontEnd $FrontEndSession $GeoLocation $HistoryLength $HomeDirectory $HTTPCookies $IgnoreEOF $ImagingDevices $ImportFormats $InitialDirectory $Input $InputFileName $InputStreamMethods $Inspector $InstallationDate $InstallationDirectory $InterfaceEnvironment $IterationLimit $KernelCount $KernelID $Language $LaunchDirectory $LibraryPath $LicenseExpirationDate $LicenseID $LicenseProcesses $LicenseServer $LicenseSubprocesses $LicenseType $Line $Linked $LinkSupported $LoadedFiles $MachineAddresses $MachineDomain $MachineDomains $MachineEpsilon $MachineID $MachineName $MachinePrecision $MachineType $MaxExtraPrecision $MaxLicenseProcesses $MaxLicenseSubprocesses $MaxMachineNumber $MaxNumber $MaxPiecewiseCases $MaxPrecision $MaxRootDegree $MessageGroups $MessageList $MessagePrePrint $Messages $MinMachineNumber $MinNumber $MinorReleaseNumber $MinPrecision $ModuleNumber $NetworkLicense $NewMessage $NewSymbol $Notebooks $NumberMarks $Off $OperatingSystem $Output $OutputForms $OutputSizeLimit $OutputStreamMethods $Packages $ParentLink $ParentProcessID $PasswordFile $PatchLevelID $Path $PathnameSeparator $PerformanceGoal $PipeSupported $Post $Pre $PreferencesDirectory $PrePrint $PreRead $PrintForms $PrintLiteral $ProcessID $ProcessorCount $ProcessorType $ProductInformation $ProgramName $RandomState $RecursionLimit $ReleaseNumber $RootDirectory $ScheduledTask $ScriptCommandLine $SessionID $SetParentLink $SharedFunctions $SharedVariables $SoundDisplay $SoundDisplayFunction $SuppressInputFormHeads $SynchronousEvaluation $SyntaxHandler $System $SystemCharacterEncoding $SystemID $SystemWordLength $TemporaryDirectory $TemporaryPrefix $TextStyle $TimedOut $TimeUnit $TimeZone $TopDirectory $TraceOff $TraceOn $TracePattern $TracePostAction $TracePreAction $Urgent $UserAddOnsDirectory $UserBaseDirectory $UserDocumentsDirectory $UserName $Version $VersionNumber',
	    contains: [{
	      className: "comment",
	      begin: /\(\*/, end: /\*\)/
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, {
	      className: 'list',
	      begin: /\{/, end: /\}/,
	      illegal: /:/
	    }]
	  };
	};

/***/ },
/* 270 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var COMMON_CONTAINS = [hljs.C_NUMBER_MODE, {
	    className: 'string',
	    begin: '\'', end: '\'',
	    contains: [hljs.BACKSLASH_ESCAPE, { begin: '\'\'' }]
	  }];
	  var TRANSPOSE = {
	    relevance: 0,
	    contains: [{
	      className: 'operator', begin: /'['\.]*/
	    }]
	  };

	  return {
	    keywords: {
	      keyword: 'break case catch classdef continue else elseif end enumerated events for function ' + 'global if methods otherwise parfor persistent properties return spmd switch try while',
	      built_in: 'sin sind sinh asin asind asinh cos cosd cosh acos acosd acosh tan tand tanh atan ' + 'atand atan2 atanh sec secd sech asec asecd asech csc cscd csch acsc acscd acsch cot ' + 'cotd coth acot acotd acoth hypot exp expm1 log log1p log10 log2 pow2 realpow reallog ' + 'realsqrt sqrt nthroot nextpow2 abs angle complex conj imag real unwrap isreal ' + 'cplxpair fix floor ceil round mod rem sign airy besselj bessely besselh besseli ' + 'besselk beta betainc betaln ellipj ellipke erf erfc erfcx erfinv expint gamma ' + 'gammainc gammaln psi legendre cross dot factor isprime primes gcd lcm rat rats perms ' + 'nchoosek factorial cart2sph cart2pol pol2cart sph2cart hsv2rgb rgb2hsv zeros ones ' + 'eye repmat rand randn linspace logspace freqspace meshgrid accumarray size length ' + 'ndims numel disp isempty isequal isequalwithequalnans cat reshape diag blkdiag tril ' + 'triu fliplr flipud flipdim rot90 find sub2ind ind2sub bsxfun ndgrid permute ipermute ' + 'shiftdim circshift squeeze isscalar isvector ans eps realmax realmin pi i inf nan ' + 'isnan isinf isfinite j why compan gallery hadamard hankel hilb invhilb magic pascal ' + 'rosser toeplitz vander wilkinson'
	    },
	    illegal: '(//|"|#|/\\*|\\s+/\\w+)',
	    contains: [{
	      className: 'function',
	      beginKeywords: 'function', end: '$',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)'
	      }, {
	        className: 'params',
	        begin: '\\[', end: '\\]'
	      }]
	    }, {
	      begin: /[a-zA-Z_][a-zA-Z_0-9]*'['\.]*/,
	      returnBegin: true,
	      relevance: 0,
	      contains: [{ begin: /[a-zA-Z_][a-zA-Z_0-9]*/, relevance: 0 }, TRANSPOSE.contains[0]]
	    }, {
	      className: 'matrix',
	      begin: '\\[', end: '\\]',
	      contains: COMMON_CONTAINS,
	      relevance: 0,
	      starts: TRANSPOSE
	    }, {
	      className: 'cell',
	      begin: '\\{', end: /}/,
	      contains: COMMON_CONTAINS,
	      relevance: 0,
	      starts: TRANSPOSE
	    }, {
	      // transpose operators at the end of a function call
	      begin: /\)/,
	      relevance: 0,
	      starts: TRANSPOSE
	    }, hljs.COMMENT('^\\s*\\%\\{\\s*$', '^\\s*\\%\\}\\s*$'), hljs.COMMENT('\\%', '$')].concat(COMMON_CONTAINS)
	  };
	};

/***/ },
/* 271 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: 'int float string vector matrix if else switch case default while do for in break ' + 'continue global proc return about abs addAttr addAttributeEditorNodeHelp addDynamic ' + 'addNewShelfTab addPP addPanelCategory addPrefixToName advanceToNextDrivenKey ' + 'affectedNet affects aimConstraint air alias aliasAttr align alignCtx alignCurve ' + 'alignSurface allViewFit ambientLight angle angleBetween animCone animCurveEditor ' + 'animDisplay animView annotate appendStringArray applicationName applyAttrPreset ' + 'applyTake arcLenDimContext arcLengthDimension arclen arrayMapper art3dPaintCtx ' + 'artAttrCtx artAttrPaintVertexCtx artAttrSkinPaintCtx artAttrTool artBuildPaintMenu ' + 'artFluidAttrCtx artPuttyCtx artSelectCtx artSetPaintCtx artUserPaintCtx assignCommand ' + 'assignInputDevice assignViewportFactories attachCurve attachDeviceAttr attachSurface ' + 'attrColorSliderGrp attrCompatibility attrControlGrp attrEnumOptionMenu ' + 'attrEnumOptionMenuGrp attrFieldGrp attrFieldSliderGrp attrNavigationControlGrp ' + 'attrPresetEditWin attributeExists attributeInfo attributeMenu attributeQuery ' + 'autoKeyframe autoPlace bakeClip bakeFluidShading bakePartialHistory bakeResults ' + 'bakeSimulation basename basenameEx batchRender bessel bevel bevelPlus binMembership ' + 'bindSkin blend2 blendShape blendShapeEditor blendShapePanel blendTwoAttr blindDataType ' + 'boneLattice boundary boxDollyCtx boxZoomCtx bufferCurve buildBookmarkMenu ' + 'buildKeyframeMenu button buttonManip CBG cacheFile cacheFileCombine cacheFileMerge ' + 'cacheFileTrack camera cameraView canCreateManip canvas capitalizeString catch ' + 'catchQuiet ceil changeSubdivComponentDisplayLevel changeSubdivRegion channelBox ' + 'character characterMap characterOutlineEditor characterize chdir checkBox checkBoxGrp ' + 'checkDefaultRenderGlobals choice circle circularFillet clamp clear clearCache clip ' + 'clipEditor clipEditorCurrentTimeCtx clipSchedule clipSchedulerOutliner clipTrimBefore ' + 'closeCurve closeSurface cluster cmdFileOutput cmdScrollFieldExecuter ' + 'cmdScrollFieldReporter cmdShell coarsenSubdivSelectionList collision color ' + 'colorAtPoint colorEditor colorIndex colorIndexSliderGrp colorSliderButtonGrp ' + 'colorSliderGrp columnLayout commandEcho commandLine commandPort compactHairSystem ' + 'componentEditor compositingInterop computePolysetVolume condition cone confirmDialog ' + 'connectAttr connectControl connectDynamic connectJoint connectionInfo constrain ' + 'constrainValue constructionHistory container containsMultibyte contextInfo control ' + 'convertFromOldLayers convertIffToPsd convertLightmap convertSolidTx convertTessellation ' + 'convertUnit copyArray copyFlexor copyKey copySkinWeights cos cpButton cpCache ' + 'cpClothSet cpCollision cpConstraint cpConvClothToMesh cpForces cpGetSolverAttr cpPanel ' + 'cpProperty cpRigidCollisionFilter cpSeam cpSetEdit cpSetSolverAttr cpSolver ' + 'cpSolverTypes cpTool cpUpdateClothUVs createDisplayLayer createDrawCtx createEditor ' + 'createLayeredPsdFile createMotionField createNewShelf createNode createRenderLayer ' + 'createSubdivRegion cross crossProduct ctxAbort ctxCompletion ctxEditMode ctxTraverse ' + 'currentCtx currentTime currentTimeCtx currentUnit curve curveAddPtCtx ' + 'curveCVCtx curveEPCtx curveEditorCtx curveIntersect curveMoveEPCtx curveOnSurface ' + 'curveSketchCtx cutKey cycleCheck cylinder dagPose date defaultLightListCheckBox ' + 'defaultNavigation defineDataServer defineVirtualDevice deformer deg_to_rad delete ' + 'deleteAttr deleteShadingGroupsAndMaterials deleteShelfTab deleteUI deleteUnusedBrushes ' + 'delrandstr detachCurve detachDeviceAttr detachSurface deviceEditor devicePanel dgInfo ' + 'dgdirty dgeval dgtimer dimWhen directKeyCtx directionalLight dirmap dirname disable ' + 'disconnectAttr disconnectJoint diskCache displacementToPoly displayAffected ' + 'displayColor displayCull displayLevelOfDetail displayPref displayRGBColor ' + 'displaySmoothness displayStats displayString displaySurface distanceDimContext ' + 'distanceDimension doBlur dolly dollyCtx dopeSheetEditor dot dotProduct ' + 'doubleProfileBirailSurface drag dragAttrContext draggerContext dropoffLocator ' + 'duplicate duplicateCurve duplicateSurface dynCache dynControl dynExport dynExpression ' + 'dynGlobals dynPaintEditor dynParticleCtx dynPref dynRelEdPanel dynRelEditor ' + 'dynamicLoad editAttrLimits editDisplayLayerGlobals editDisplayLayerMembers ' + 'editRenderLayerAdjustment editRenderLayerGlobals editRenderLayerMembers editor ' + 'editorTemplate effector emit emitter enableDevice encodeString endString endsWith env ' + 'equivalent equivalentTol erf error eval evalDeferred evalEcho event ' + 'exactWorldBoundingBox exclusiveLightCheckBox exec executeForEachObject exists exp ' + 'expression expressionEditorListen extendCurve extendSurface extrude fcheck fclose feof ' + 'fflush fgetline fgetword file fileBrowserDialog fileDialog fileExtension fileInfo ' + 'filetest filletCurve filter filterCurve filterExpand filterStudioImport ' + 'findAllIntersections findAnimCurves findKeyframe findMenuItem findRelatedSkinCluster ' + 'finder firstParentOf fitBspline flexor floatEq floatField floatFieldGrp floatScrollBar ' + 'floatSlider floatSlider2 floatSliderButtonGrp floatSliderGrp floor flow fluidCacheInfo ' + 'fluidEmitter fluidVoxelInfo flushUndo fmod fontDialog fopen formLayout format fprint ' + 'frameLayout fread freeFormFillet frewind fromNativePath fwrite gamma gauss ' + 'geometryConstraint getApplicationVersionAsFloat getAttr getClassification ' + 'getDefaultBrush getFileList getFluidAttr getInputDeviceRange getMayaPanelTypes ' + 'getModifiers getPanel getParticleAttr getPluginResource getenv getpid glRender ' + 'glRenderEditor globalStitch gmatch goal gotoBindPose grabColor gradientControl ' + 'gradientControlNoAttr graphDollyCtx graphSelectContext graphTrackCtx gravity grid ' + 'gridLayout group groupObjectsByName HfAddAttractorToAS HfAssignAS HfBuildEqualMap ' + 'HfBuildFurFiles HfBuildFurImages HfCancelAFR HfConnectASToHF HfCreateAttractor ' + 'HfDeleteAS HfEditAS HfPerformCreateAS HfRemoveAttractorFromAS HfSelectAttached ' + 'HfSelectAttractors HfUnAssignAS hardenPointCurve hardware hardwareRenderPanel ' + 'headsUpDisplay headsUpMessage help helpLine hermite hide hilite hitTest hotBox hotkey ' + 'hotkeyCheck hsv_to_rgb hudButton hudSlider hudSliderButton hwReflectionMap hwRender ' + 'hwRenderLoad hyperGraph hyperPanel hyperShade hypot iconTextButton iconTextCheckBox ' + 'iconTextRadioButton iconTextRadioCollection iconTextScrollList iconTextStaticLabel ' + 'ikHandle ikHandleCtx ikHandleDisplayScale ikSolver ikSplineHandleCtx ikSystem ' + 'ikSystemInfo ikfkDisplayMethod illustratorCurves image imfPlugins inheritTransform ' + 'insertJoint insertJointCtx insertKeyCtx insertKnotCurve insertKnotSurface instance ' + 'instanceable instancer intField intFieldGrp intScrollBar intSlider intSliderGrp ' + 'interToUI internalVar intersect iprEngine isAnimCurve isConnected isDirty isParentOf ' + 'isSameObject isTrue isValidObjectName isValidString isValidUiName isolateSelect ' + 'itemFilter itemFilterAttr itemFilterRender itemFilterType joint jointCluster jointCtx ' + 'jointDisplayScale jointLattice keyTangent keyframe keyframeOutliner ' + 'keyframeRegionCurrentTimeCtx keyframeRegionDirectKeyCtx keyframeRegionDollyCtx ' + 'keyframeRegionInsertKeyCtx keyframeRegionMoveKeyCtx keyframeRegionScaleKeyCtx ' + 'keyframeRegionSelectKeyCtx keyframeRegionSetKeyCtx keyframeRegionTrackCtx ' + 'keyframeStats lassoContext lattice latticeDeformKeyCtx launch launchImageEditor ' + 'layerButton layeredShaderPort layeredTexturePort layout layoutDialog lightList ' + 'lightListEditor lightListPanel lightlink lineIntersection linearPrecision linstep ' + 'listAnimatable listAttr listCameras listConnections listDeviceAttachments listHistory ' + 'listInputDeviceAxes listInputDeviceButtons listInputDevices listMenuAnnotation ' + 'listNodeTypes listPanelCategories listRelatives listSets listTransforms ' + 'listUnselected listerEditor loadFluid loadNewShelf loadPlugin ' + 'loadPluginLanguageResources loadPrefObjects localizedPanelLabel lockNode loft log ' + 'longNameOf lookThru ls lsThroughFilter lsType lsUI Mayatomr mag makeIdentity makeLive ' + 'makePaintable makeRoll makeSingleSurface makeTubeOn makebot manipMoveContext ' + 'manipMoveLimitsCtx manipOptions manipRotateContext manipRotateLimitsCtx ' + 'manipScaleContext manipScaleLimitsCtx marker match max memory menu menuBarLayout ' + 'menuEditor menuItem menuItemToShelf menuSet menuSetPref messageLine min minimizeApp ' + 'mirrorJoint modelCurrentTimeCtx modelEditor modelPanel mouse movIn movOut move ' + 'moveIKtoFK moveKeyCtx moveVertexAlongDirection multiProfileBirailSurface mute ' + 'nParticle nameCommand nameField namespace namespaceInfo newPanelItems newton nodeCast ' + 'nodeIconButton nodeOutliner nodePreset nodeType noise nonLinear normalConstraint ' + 'normalize nurbsBoolean nurbsCopyUVSet nurbsCube nurbsEditUV nurbsPlane nurbsSelect ' + 'nurbsSquare nurbsToPoly nurbsToPolygonsPref nurbsToSubdiv nurbsToSubdivPref ' + 'nurbsUVSet nurbsViewDirectionVector objExists objectCenter objectLayer objectType ' + 'objectTypeUI obsoleteProc oceanNurbsPreviewPlane offsetCurve offsetCurveOnSurface ' + 'offsetSurface openGLExtension openMayaPref optionMenu optionMenuGrp optionVar orbit ' + 'orbitCtx orientConstraint outlinerEditor outlinerPanel overrideModifier ' + 'paintEffectsDisplay pairBlend palettePort paneLayout panel panelConfiguration ' + 'panelHistory paramDimContext paramDimension paramLocator parent parentConstraint ' + 'particle particleExists particleInstancer particleRenderInfo partition pasteKey ' + 'pathAnimation pause pclose percent performanceOptions pfxstrokes pickWalk picture ' + 'pixelMove planarSrf plane play playbackOptions playblast plugAttr plugNode pluginInfo ' + 'pluginResourceUtil pointConstraint pointCurveConstraint pointLight pointMatrixMult ' + 'pointOnCurve pointOnSurface pointPosition poleVectorConstraint polyAppend ' + 'polyAppendFacetCtx polyAppendVertex polyAutoProjection polyAverageNormal ' + 'polyAverageVertex polyBevel polyBlendColor polyBlindData polyBoolOp polyBridgeEdge ' + 'polyCacheMonitor polyCheck polyChipOff polyClipboard polyCloseBorder polyCollapseEdge ' + 'polyCollapseFacet polyColorBlindData polyColorDel polyColorPerVertex polyColorSet ' + 'polyCompare polyCone polyCopyUV polyCrease polyCreaseCtx polyCreateFacet ' + 'polyCreateFacetCtx polyCube polyCut polyCutCtx polyCylinder polyCylindricalProjection ' + 'polyDelEdge polyDelFacet polyDelVertex polyDuplicateAndConnect polyDuplicateEdge ' + 'polyEditUV polyEditUVShell polyEvaluate polyExtrudeEdge polyExtrudeFacet ' + 'polyExtrudeVertex polyFlipEdge polyFlipUV polyForceUV polyGeoSampler polyHelix ' + 'polyInfo polyInstallAction polyLayoutUV polyListComponentConversion polyMapCut ' + 'polyMapDel polyMapSew polyMapSewMove polyMergeEdge polyMergeEdgeCtx polyMergeFacet ' + 'polyMergeFacetCtx polyMergeUV polyMergeVertex polyMirrorFace polyMoveEdge ' + 'polyMoveFacet polyMoveFacetUV polyMoveUV polyMoveVertex polyNormal polyNormalPerVertex ' + 'polyNormalizeUV polyOptUvs polyOptions polyOutput polyPipe polyPlanarProjection ' + 'polyPlane polyPlatonicSolid polyPoke polyPrimitive polyPrism polyProjection ' + 'polyPyramid polyQuad polyQueryBlindData polyReduce polySelect polySelectConstraint ' + 'polySelectConstraintMonitor polySelectCtx polySelectEditCtx polySeparate ' + 'polySetToFaceNormal polySewEdge polyShortestPathCtx polySmooth polySoftEdge ' + 'polySphere polySphericalProjection polySplit polySplitCtx polySplitEdge polySplitRing ' + 'polySplitVertex polyStraightenUVBorder polySubdivideEdge polySubdivideFacet ' + 'polyToSubdiv polyTorus polyTransfer polyTriangulate polyUVSet polyUnite polyWedgeFace ' + 'popen popupMenu pose pow preloadRefEd print progressBar progressWindow projFileViewer ' + 'projectCurve projectTangent projectionContext projectionManip promptDialog propModCtx ' + 'propMove psdChannelOutliner psdEditTextureFile psdExport psdTextureFile putenv pwd ' + 'python querySubdiv quit rad_to_deg radial radioButton radioButtonGrp radioCollection ' + 'radioMenuItemCollection rampColorPort rand randomizeFollicles randstate rangeControl ' + 'readTake rebuildCurve rebuildSurface recordAttr recordDevice redo reference ' + 'referenceEdit referenceQuery refineSubdivSelectionList refresh refreshAE ' + 'registerPluginResource rehash reloadImage removeJoint removeMultiInstance ' + 'removePanelCategory rename renameAttr renameSelectionList renameUI render ' + 'renderGlobalsNode renderInfo renderLayerButton renderLayerParent ' + 'renderLayerPostProcess renderLayerUnparent renderManip renderPartition ' + 'renderQualityNode renderSettings renderThumbnailUpdate renderWindowEditor ' + 'renderWindowSelectContext renderer reorder reorderDeformers requires reroot ' + 'resampleFluid resetAE resetPfxToPolyCamera resetTool resolutionNode retarget ' + 'reverseCurve reverseSurface revolve rgb_to_hsv rigidBody rigidSolver roll rollCtx ' + 'rootOf rot rotate rotationInterpolation roundConstantRadius rowColumnLayout rowLayout ' + 'runTimeCommand runup sampleImage saveAllShelves saveAttrPreset saveFluid saveImage ' + 'saveInitialState saveMenu savePrefObjects savePrefs saveShelf saveToolSettings scale ' + 'scaleBrushBrightness scaleComponents scaleConstraint scaleKey scaleKeyCtx sceneEditor ' + 'sceneUIReplacement scmh scriptCtx scriptEditorInfo scriptJob scriptNode scriptTable ' + 'scriptToShelf scriptedPanel scriptedPanelType scrollField scrollLayout sculpt ' + 'searchPathArray seed selLoadSettings select selectContext selectCurveCV selectKey ' + 'selectKeyCtx selectKeyframeRegionCtx selectMode selectPref selectPriority selectType ' + 'selectedNodes selectionConnection separator setAttr setAttrEnumResource ' + 'setAttrMapping setAttrNiceNameResource setConstraintRestPosition ' + 'setDefaultShadingGroup setDrivenKeyframe setDynamic setEditCtx setEditor setFluidAttr ' + 'setFocus setInfinity setInputDeviceMapping setKeyCtx setKeyPath setKeyframe ' + 'setKeyframeBlendshapeTargetWts setMenuMode setNodeNiceNameResource setNodeTypeFlag ' + 'setParent setParticleAttr setPfxToPolyCamera setPluginResource setProject ' + 'setStampDensity setStartupMessage setState setToolTo setUITemplate setXformManip sets ' + 'shadingConnection shadingGeometryRelCtx shadingLightRelCtx shadingNetworkCompare ' + 'shadingNode shapeCompare shelfButton shelfLayout shelfTabLayout shellField ' + 'shortNameOf showHelp showHidden showManipCtx showSelectionInTitle ' + 'showShadingGroupAttrEditor showWindow sign simplify sin singleProfileBirailSurface ' + 'size sizeBytes skinCluster skinPercent smoothCurve smoothTangentSurface smoothstep ' + 'snap2to2 snapKey snapMode snapTogetherCtx snapshot soft softMod softModCtx sort sound ' + 'soundControl source spaceLocator sphere sphrand spotLight spotLightPreviewPort ' + 'spreadSheetEditor spring sqrt squareSurface srtContext stackTrace startString ' + 'startsWith stitchAndExplodeShell stitchSurface stitchSurfacePoints strcmp ' + 'stringArrayCatenate stringArrayContains stringArrayCount stringArrayInsertAtIndex ' + 'stringArrayIntersector stringArrayRemove stringArrayRemoveAtIndex ' + 'stringArrayRemoveDuplicates stringArrayRemoveExact stringArrayToString ' + 'stringToStringArray strip stripPrefixFromName stroke subdAutoProjection ' + 'subdCleanTopology subdCollapse subdDuplicateAndConnect subdEditUV ' + 'subdListComponentConversion subdMapCut subdMapSewMove subdMatchTopology subdMirror ' + 'subdToBlind subdToPoly subdTransferUVsToCache subdiv subdivCrease ' + 'subdivDisplaySmoothness substitute substituteAllString substituteGeometry substring ' + 'surface surfaceSampler surfaceShaderList swatchDisplayPort switchTable symbolButton ' + 'symbolCheckBox sysFile system tabLayout tan tangentConstraint texLatticeDeformContext ' + 'texManipContext texMoveContext texMoveUVShellContext texRotateContext texScaleContext ' + 'texSelectContext texSelectShortestPathCtx texSmudgeUVContext texWinToolCtx text ' + 'textCurves textField textFieldButtonGrp textFieldGrp textManip textScrollList ' + 'textToShelf textureDisplacePlane textureHairColor texturePlacementContext ' + 'textureWindow threadCount threePointArcCtx timeControl timePort timerX toNativePath ' + 'toggle toggleAxis toggleWindowVisibility tokenize tokenizeList tolerance tolower ' + 'toolButton toolCollection toolDropped toolHasOptions toolPropertyWindow torus toupper ' + 'trace track trackCtx transferAttributes transformCompare transformLimits translator ' + 'trim trunc truncateFluidCache truncateHairCache tumble tumbleCtx turbulence ' + 'twoPointArcCtx uiRes uiTemplate unassignInputDevice undo undoInfo ungroup uniform unit ' + 'unloadPlugin untangleUV untitledFileName untrim upAxis updateAE userCtx uvLink ' + 'uvSnapshot validateShelfName vectorize view2dToolCtx viewCamera viewClipPlane ' + 'viewFit viewHeadOn viewLookAt viewManip viewPlace viewSet visor volumeAxis vortex ' + 'waitCursor warning webBrowser webBrowserPrefs whatIs window windowPref wire ' + 'wireContext workspace wrinkle wrinkleContext writeTake xbmLangPathList xform',
	    illegal: '</',
	    contains: [hljs.C_NUMBER_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      begin: '`', end: '`',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      className: 'variable',
	      variants: [{ begin: '\\$\\d' }, { begin: '[\\$\\%\\@](\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)' }, { begin: '\\*(\\^\\w\\b|#\\w+|[^\\s\\w{]|{\\w+}|\\w+)', relevance: 0 }]
	    }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	  };
	};

/***/ },
/* 272 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = {
	    keyword: 'module use_module import_module include_module end_module initialise ' + 'mutable initialize finalize finalise interface implementation pred ' + 'mode func type inst solver any_pred any_func is semidet det nondet ' + 'multi erroneous failure cc_nondet cc_multi typeclass instance where ' + 'pragma promise external trace atomic or_else require_complete_switch ' + 'require_det require_semidet require_multi require_nondet ' + 'require_cc_multi require_cc_nondet require_erroneous require_failure',
	    pragma: 'inline no_inline type_spec source_file fact_table obsolete memo ' + 'loop_check minimal_model terminates does_not_terminate ' + 'check_termination promise_equivalent_clauses',
	    preprocessor: 'foreign_proc foreign_decl foreign_code foreign_type ' + 'foreign_import_module foreign_export_enum foreign_export ' + 'foreign_enum may_call_mercury will_not_call_mercury thread_safe ' + 'not_thread_safe maybe_thread_safe promise_pure promise_semipure ' + 'tabled_for_io local untrailed trailed attach_to_io_state ' + 'can_pass_as_mercury_type stable will_not_throw_exception ' + 'may_modify_trail will_not_modify_trail may_duplicate ' + 'may_not_duplicate affects_liveness does_not_affect_liveness ' + 'doesnt_affect_liveness no_sharing unknown_sharing sharing',
	    built_in: 'some all not if then else true fail false try catch catch_any ' + 'semidet_true semidet_false semidet_fail impure_true impure semipure'
	  };

	  var TODO = {
	    className: 'label',
	    begin: 'XXX', end: '$', endsWithParent: true,
	    relevance: 0
	  };
	  var COMMENT = hljs.inherit(hljs.C_LINE_COMMENT_MODE, { begin: '%' });
	  var CCOMMENT = hljs.inherit(hljs.C_BLOCK_COMMENT_MODE, { relevance: 0 });
	  COMMENT.contains.push(TODO);
	  CCOMMENT.contains.push(TODO);

	  var NUMCODE = {
	    className: 'number',
	    begin: "0'.\\|0[box][0-9a-fA-F]*"
	  };

	  var ATOM = hljs.inherit(hljs.APOS_STRING_MODE, { relevance: 0 });
	  var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { relevance: 0 });
	  var STRING_FMT = {
	    className: 'constant',
	    begin: '\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',
	    relevance: 0
	  };
	  STRING.contains.push(STRING_FMT);

	  var IMPLICATION = {
	    className: 'built_in',
	    variants: [{ begin: '<=>' }, { begin: '<=', relevance: 0 }, { begin: '=>', relevance: 0 }, { begin: '/\\\\' }, { begin: '\\\\/' }]
	  };

	  var HEAD_BODY_CONJUNCTION = {
	    className: 'built_in',
	    variants: [{ begin: ':-\\|-->' }, { begin: '=', relevance: 0 }]
	  };

	  return {
	    aliases: ['m', 'moo'],
	    keywords: KEYWORDS,
	    contains: [IMPLICATION, HEAD_BODY_CONJUNCTION, COMMENT, CCOMMENT, NUMCODE, hljs.NUMBER_MODE, ATOM, STRING, { begin: /:-/ } // relevance booster
	    ]
	  };
	};

/***/ },
/* 273 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: 'environ vocabularies notations constructors definitions ' + 'registrations theorems schemes requirements begin end definition ' + 'registration cluster existence pred func defpred deffunc theorem ' + 'proof let take assume then thus hence ex for st holds consider ' + 'reconsider such that and in provided of as from be being by means ' + 'equals implies iff redefine define now not or attr is mode ' + 'suppose per cases set thesis contradiction scheme reserve struct ' + 'correctness compatibility coherence symmetry assymetry ' + 'reflexivity irreflexivity connectedness uniqueness commutativity ' + 'idempotence involutiveness projectivity',
	    contains: [hljs.COMMENT('::', '$')]
	  };
	};

/***/ },
/* 274 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var PERL_KEYWORDS = 'getpwent getservent quotemeta msgrcv scalar kill dbmclose undef lc ' + 'ma syswrite tr send umask sysopen shmwrite vec qx utime local oct semctl localtime ' + 'readpipe do return format read sprintf dbmopen pop getpgrp not getpwnam rewinddir qq' + 'fileno qw endprotoent wait sethostent bless s|0 opendir continue each sleep endgrent ' + 'shutdown dump chomp connect getsockname die socketpair close flock exists index shmget' + 'sub for endpwent redo lstat msgctl setpgrp abs exit select print ref gethostbyaddr ' + 'unshift fcntl syscall goto getnetbyaddr join gmtime symlink semget splice x|0 ' + 'getpeername recv log setsockopt cos last reverse gethostbyname getgrnam study formline ' + 'endhostent times chop length gethostent getnetent pack getprotoent getservbyname rand ' + 'mkdir pos chmod y|0 substr endnetent printf next open msgsnd readdir use unlink ' + 'getsockopt getpriority rindex wantarray hex system getservbyport endservent int chr ' + 'untie rmdir prototype tell listen fork shmread ucfirst setprotoent else sysseek link ' + 'getgrgid shmctl waitpid unpack getnetbyname reset chdir grep split require caller ' + 'lcfirst until warn while values shift telldir getpwuid my getprotobynumber delete and ' + 'sort uc defined srand accept package seekdir getprotobyname semop our rename seek if q|0 ' + 'chroot sysread setpwent no crypt getc chown sqrt write setnetent setpriority foreach ' + 'tie sin msgget map stat getlogin unless elsif truncate exec keys glob tied closedir' + 'ioctl socket readlink eval xor readline binmode setservent eof ord bind alarm pipe ' + 'atan2 getgrent exp time push setgrent gt lt or ne m|0 break given say state when';
	  var SUBST = {
	    className: 'subst',
	    begin: '[$@]\\{', end: '\\}',
	    keywords: PERL_KEYWORDS
	  };
	  var METHOD = {
	    begin: '->{', end: '}'
	    // contains defined later
	  };
	  var VAR = {
	    className: 'variable',
	    variants: [{ begin: /\$\d/ }, { begin: /[\$%@](\^\w\b|#\w+(::\w+)*|{\w+}|\w+(::\w*)*)/ }, { begin: /[\$%@][^\s\w{]/, relevance: 0 }]
	  };
	  var STRING_CONTAINS = [hljs.BACKSLASH_ESCAPE, SUBST, VAR];
	  var PERL_DEFAULT_CONTAINS = [VAR, hljs.HASH_COMMENT_MODE, hljs.COMMENT('^\\=\\w', '\\=cut', {
	    endsWithParent: true
	  }), METHOD, {
	    className: 'string',
	    contains: STRING_CONTAINS,
	    variants: [{
	      begin: 'q[qwxr]?\\s*\\(', end: '\\)',
	      relevance: 5
	    }, {
	      begin: 'q[qwxr]?\\s*\\[', end: '\\]',
	      relevance: 5
	    }, {
	      begin: 'q[qwxr]?\\s*\\{', end: '\\}',
	      relevance: 5
	    }, {
	      begin: 'q[qwxr]?\\s*\\|', end: '\\|',
	      relevance: 5
	    }, {
	      begin: 'q[qwxr]?\\s*\\<', end: '\\>',
	      relevance: 5
	    }, {
	      begin: 'qw\\s+q', end: 'q',
	      relevance: 5
	    }, {
	      begin: '\'', end: '\'',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: '"', end: '"'
	    }, {
	      begin: '`', end: '`',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      begin: '{\\w+}',
	      contains: [],
	      relevance: 0
	    }, {
	      begin: '\-?\\w+\\s*\\=\\>',
	      contains: [],
	      relevance: 0
	    }]
	  }, {
	    className: 'number',
	    begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
	    relevance: 0
	  }, { // regexp container
	    begin: '(\\/\\/|' + hljs.RE_STARTERS_RE + '|\\b(split|return|print|reverse|grep)\\b)\\s*',
	    keywords: 'split return print reverse grep',
	    relevance: 0,
	    contains: [hljs.HASH_COMMENT_MODE, {
	      className: 'regexp',
	      begin: '(s|tr|y)/(\\\\.|[^/])*/(\\\\.|[^/])*/[a-z]*',
	      relevance: 10
	    }, {
	      className: 'regexp',
	      begin: '(m|qr)?/', end: '/[a-z]*',
	      contains: [hljs.BACKSLASH_ESCAPE],
	      relevance: 0 // allows empty "//" which is a common comment delimiter in other languages
	    }]
	  }, {
	    className: 'sub',
	    beginKeywords: 'sub', end: '(\\s*\\(.*?\\))?[;{]',
	    relevance: 5
	  }, {
	    className: 'operator',
	    begin: '-\\w\\b',
	    relevance: 0
	  }, {
	    begin: "^__DATA__$",
	    end: "^__END__$",
	    subLanguage: 'mojolicious',
	    contains: [{
	      begin: "^@@.*",
	      end: "$",
	      className: "comment"
	    }]
	  }];
	  SUBST.contains = PERL_DEFAULT_CONTAINS;
	  METHOD.contains = PERL_DEFAULT_CONTAINS;

	  return {
	    aliases: ['pl'],
	    keywords: PERL_KEYWORDS,
	    contains: PERL_DEFAULT_CONTAINS
	  };
	};

/***/ },
/* 275 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    subLanguage: 'xml',
	    contains: [{
	      className: 'preprocessor',
	      begin: '^__(END|DATA)__$'
	    },
	    // mojolicious line
	    {
	      begin: "^\\s*%{1,2}={0,2}", end: '$',
	      subLanguage: 'perl'
	    },
	    // mojolicious block
	    {
	      begin: "<%{1,2}={0,2}",
	      end: "={0,1}%>",
	      subLanguage: 'perl',
	      excludeBegin: true,
	      excludeEnd: true
	    }]
	  };
	};

/***/ },
/* 276 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var NUMBER = {
	    className: 'number', relevance: 0,
	    variants: [{
	      begin: '[$][a-fA-F0-9]+'
	    }, hljs.NUMBER_MODE]
	  };

	  return {
	    case_insensitive: true,
	    keywords: {
	      keyword: 'public private property continue exit extern new try catch ' + 'eachin not abstract final select case default const local global field ' + 'end if then else elseif endif while wend repeat until forever for to step next return module inline throw',

	      built_in: 'DebugLog DebugStop Error Print ACos ACosr ASin ASinr ATan ATan2 ATan2r ATanr Abs Abs Ceil ' + 'Clamp Clamp Cos Cosr Exp Floor Log Max Max Min Min Pow Sgn Sgn Sin Sinr Sqrt Tan Tanr Seed PI HALFPI TWOPI',

	      literal: 'true false null and or shl shr mod'
	    },
	    contains: [hljs.COMMENT('#rem', '#end'), hljs.COMMENT("'", '$', {
	      relevance: 0
	    }), {
	      className: 'function',
	      beginKeywords: 'function method', end: '[(=:]|$',
	      illegal: /\n/,
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '$',
	      contains: [{
	        beginKeywords: 'extends implements'
	      }, hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      className: 'variable',
	      begin: '\\b(self|super)\\b'
	    }, {
	      className: 'preprocessor',
	      beginKeywords: 'import',
	      end: '$'
	    }, {
	      className: 'preprocessor',
	      begin: '\\s*#', end: '$',
	      keywords: 'if else elseif endif end then'
	    }, {
	      className: 'pi',
	      begin: '^\\s*strict\\b'
	    }, {
	      beginKeywords: 'alias', end: '=',
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, hljs.QUOTE_STRING_MODE, NUMBER]
	  };
	};

/***/ },
/* 277 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var VAR = {
	    className: 'variable',
	    variants: [{ begin: /\$\d+/ }, { begin: /\$\{/, end: /}/ }, { begin: '[\\$\\@]' + hljs.UNDERSCORE_IDENT_RE }]
	  };
	  var DEFAULT = {
	    endsWithParent: true,
	    lexemes: '[a-z/_]+',
	    keywords: {
	      built_in: 'on off yes no true false none blocked debug info notice warn error crit ' + 'select break last permanent redirect kqueue rtsig epoll poll /dev/poll'
	    },
	    relevance: 0,
	    illegal: '=>',
	    contains: [hljs.HASH_COMMENT_MODE, {
	      className: 'string',
	      contains: [hljs.BACKSLASH_ESCAPE, VAR],
	      variants: [{ begin: /"/, end: /"/ }, { begin: /'/, end: /'/ }]
	    }, {
	      className: 'url',
	      begin: '([a-z]+):/', end: '\\s', endsWithParent: true, excludeEnd: true,
	      contains: [VAR]
	    }, {
	      className: 'regexp',
	      contains: [hljs.BACKSLASH_ESCAPE, VAR],
	      variants: [{ begin: "\\s\\^", end: "\\s|{|;", returnEnd: true },
	      // regexp locations (~, ~*)
	      { begin: "~\\*?\\s+", end: "\\s|{|;", returnEnd: true },
	      // *.example.com
	      { begin: "\\*(\\.[a-z\\-]+)+" },
	      // sub.example.*
	      { begin: "([a-z\\-]+\\.)+\\*" }]
	    },
	    // IP
	    {
	      className: 'number',
	      begin: '\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}(:\\d{1,5})?\\b'
	    },
	    // units
	    {
	      className: 'number',
	      begin: '\\b\\d+[kKmMgGdshdwy]*\\b',
	      relevance: 0
	    }, VAR]
	  };

	  return {
	    aliases: ['nginxconf'],
	    contains: [hljs.HASH_COMMENT_MODE, {
	      begin: hljs.UNDERSCORE_IDENT_RE + '\\s', end: ';|{', returnBegin: true,
	      contains: [{
	        className: 'title',
	        begin: hljs.UNDERSCORE_IDENT_RE,
	        starts: DEFAULT
	      }],
	      relevance: 0
	    }],
	    illegal: '[^\\s\\}]'
	  };
	};

/***/ },
/* 278 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['nim'],
	    keywords: {
	      keyword: 'addr and as asm bind block break|0 case|0 cast const|0 continue|0 converter discard distinct|10 div do elif else|0 end|0 enum|0 except export finally for from generic if|0 import|0 in include|0 interface is isnot|10 iterator|10 let|0 macro method|10 mixin mod nil not notin|10 object|0 of or out proc|10 ptr raise ref|10 return shl shr static template|10 try|0 tuple type|0 using|0 var|0 when while|0 with without xor yield',
	      literal: 'shared guarded stdin stdout stderr result|10 true false'
	    },
	    contains: [{
	      className: 'decorator', // Actually pragma
	      begin: /{\./,
	      end: /\.}/,
	      relevance: 10
	    }, {
	      className: 'string',
	      begin: /[a-zA-Z]\w*"/,
	      end: /"/,
	      contains: [{ begin: /""/ }]
	    }, {
	      className: 'string',
	      begin: /([a-zA-Z]\w*)?"""/,
	      end: /"""/
	    }, hljs.QUOTE_STRING_MODE, {
	      className: 'type',
	      begin: /\b[A-Z]\w+\b/,
	      relevance: 0
	    }, {
	      className: 'type',
	      begin: /\b(int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|float|float32|float64|bool|char|string|cstring|pointer|expr|stmt|void|auto|any|range|array|openarray|varargs|seq|set|clong|culong|cchar|cschar|cshort|cint|csize|clonglong|cfloat|cdouble|clongdouble|cuchar|cushort|cuint|culonglong|cstringarray|semistatic)\b/
	    }, {
	      className: 'number',
	      begin: /\b(0[xX][0-9a-fA-F][_0-9a-fA-F]*)('?[iIuU](8|16|32|64))?/,
	      relevance: 0
	    }, {
	      className: 'number',
	      begin: /\b(0o[0-7][_0-7]*)('?[iIuUfF](8|16|32|64))?/,
	      relevance: 0
	    }, {
	      className: 'number',
	      begin: /\b(0(b|B)[01][_01]*)('?[iIuUfF](8|16|32|64))?/,
	      relevance: 0
	    }, {
	      className: 'number',
	      begin: /\b(\d[_\d]*)('?[iIuUfF](8|16|32|64))?/,
	      relevance: 0
	    }, hljs.HASH_COMMENT_MODE]
	  };
	};

/***/ },
/* 279 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var NIX_KEYWORDS = {
	    keyword: 'rec with let in inherit assert if else then',
	    constant: 'true false or and null',
	    built_in: 'import abort baseNameOf dirOf isNull builtins map removeAttrs throw toString derivation'
	  };
	  var ANTIQUOTE = {
	    className: 'subst',
	    begin: /\$\{/,
	    end: /}/,
	    keywords: NIX_KEYWORDS
	  };
	  var ATTRS = {
	    className: 'variable',
	    // TODO: we have to figure out a way how to exclude \s*=
	    begin: /[a-zA-Z0-9-_]+(\s*=)/,
	    relevance: 0
	  };
	  var SINGLE_QUOTE = {
	    className: 'string',
	    begin: "''",
	    end: "''",
	    contains: [ANTIQUOTE]
	  };
	  var DOUBLE_QUOTE = {
	    className: 'string',
	    begin: '"',
	    end: '"',
	    contains: [ANTIQUOTE]
	  };
	  var EXPRESSIONS = [hljs.NUMBER_MODE, hljs.HASH_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, SINGLE_QUOTE, DOUBLE_QUOTE, ATTRS];
	  ANTIQUOTE.contains = EXPRESSIONS;
	  return {
	    aliases: ["nixos"],
	    keywords: NIX_KEYWORDS,
	    contains: EXPRESSIONS
	  };
	};

/***/ },
/* 280 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var CONSTANTS = {
	    className: 'symbol',
	    begin: '\\$(ADMINTOOLS|APPDATA|CDBURN_AREA|CMDLINE|COMMONFILES32|COMMONFILES64|COMMONFILES|COOKIES|DESKTOP|DOCUMENTS|EXEDIR|EXEFILE|EXEPATH|FAVORITES|FONTS|HISTORY|HWNDPARENT|INSTDIR|INTERNET_CACHE|LANGUAGE|LOCALAPPDATA|MUSIC|NETHOOD|OUTDIR|PICTURES|PLUGINSDIR|PRINTHOOD|PROFILE|PROGRAMFILES32|PROGRAMFILES64|PROGRAMFILES|QUICKLAUNCH|RECENT|RESOURCES_LOCALIZED|RESOURCES|SENDTO|SMPROGRAMS|SMSTARTUP|STARTMENU|SYSDIR|TEMP|TEMPLATES|VIDEOS|WINDIR)'
	  };

	  var DEFINES = {
	    // ${defines}
	    className: 'constant',
	    begin: '\\$+{[a-zA-Z0-9_]+}'
	  };

	  var VARIABLES = {
	    // $variables
	    className: 'variable',
	    begin: '\\$+[a-zA-Z0-9_]+',
	    illegal: '\\(\\){}'
	  };

	  var LANGUAGES = {
	    // $(language_strings)
	    className: 'constant',
	    begin: '\\$+\\([a-zA-Z0-9_]+\\)'
	  };

	  var PARAMETERS = {
	    // command parameters
	    className: 'params',
	    begin: '(ARCHIVE|FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_OFFLINE|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY|HKCR|HKCU|HKDD|HKEY_CLASSES_ROOT|HKEY_CURRENT_CONFIG|HKEY_CURRENT_USER|HKEY_DYN_DATA|HKEY_LOCAL_MACHINE|HKEY_PERFORMANCE_DATA|HKEY_USERS|HKLM|HKPD|HKU|IDABORT|IDCANCEL|IDIGNORE|IDNO|IDOK|IDRETRY|IDYES|MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_DEFBUTTON2|MB_DEFBUTTON3|MB_DEFBUTTON4|MB_ICONEXCLAMATION|MB_ICONINFORMATION|MB_ICONQUESTION|MB_ICONSTOP|MB_OK|MB_OKCANCEL|MB_RETRYCANCEL|MB_RIGHT|MB_RTLREADING|MB_SETFOREGROUND|MB_TOPMOST|MB_USERICON|MB_YESNO|NORMAL|OFFLINE|READONLY|SHCTX|SHELL_CONTEXT|SYSTEM|TEMPORARY)'
	  };

	  var COMPILER = {
	    // !compiler_flags
	    className: 'constant',
	    begin: '\\!(addincludedir|addplugindir|appendfile|cd|define|delfile|echo|else|endif|error|execute|finalize|getdllversionsystem|ifdef|ifmacrodef|ifmacrondef|ifndef|if|include|insertmacro|macroend|macro|makensis|packhdr|searchparse|searchreplace|tempfile|undef|verbose|warning)'
	  };

	  return {
	    case_insensitive: false,
	    keywords: {
	      keyword: 'Abort AddBrandingImage AddSize AllowRootDirInstall AllowSkipFiles AutoCloseWindow BGFont BGGradient BrandingText BringToFront Call CallInstDLL Caption ChangeUI CheckBitmap ClearErrors CompletedText ComponentText CopyFiles CRCCheck CreateDirectory CreateFont CreateShortCut Delete DeleteINISec DeleteINIStr DeleteRegKey DeleteRegValue DetailPrint DetailsButtonText DirText DirVar DirVerify EnableWindow EnumRegKey EnumRegValue Exch Exec ExecShell ExecWait ExpandEnvStrings File FileBufSize FileClose FileErrorText FileOpen FileRead FileReadByte FileReadUTF16LE FileReadWord FileSeek FileWrite FileWriteByte FileWriteUTF16LE FileWriteWord FindClose FindFirst FindNext FindWindow FlushINI FunctionEnd GetCurInstType GetCurrentAddress GetDlgItem GetDLLVersion GetDLLVersionLocal GetErrorLevel GetFileTime GetFileTimeLocal GetFullPathName GetFunctionAddress GetInstDirError GetLabelAddress GetTempFileName Goto HideWindow Icon IfAbort IfErrors IfFileExists IfRebootFlag IfSilent InitPluginsDir InstallButtonText InstallColors InstallDir InstallDirRegKey InstProgressFlags InstType InstTypeGetText InstTypeSetText IntCmp IntCmpU IntFmt IntOp IsWindow LangString LicenseBkColor LicenseData LicenseForceSelection LicenseLangString LicenseText LoadLanguageFile LockWindow LogSet LogText ManifestDPIAware ManifestSupportedOS MessageBox MiscButtonText Name Nop OutFile Page PageCallbacks PageExEnd Pop Push Quit ReadEnvStr ReadINIStr ReadRegDWORD ReadRegStr Reboot RegDLL Rename RequestExecutionLevel ReserveFile Return RMDir SearchPath SectionEnd SectionGetFlags SectionGetInstTypes SectionGetSize SectionGetText SectionGroupEnd SectionIn SectionSetFlags SectionSetInstTypes SectionSetSize SectionSetText SendMessage SetAutoClose SetBrandingImage SetCompress SetCompressor SetCompressorDictSize SetCtlColors SetCurInstType SetDatablockOptimize SetDateSave SetDetailsPrint SetDetailsView SetErrorLevel SetErrors SetFileAttributes SetFont SetOutPath SetOverwrite SetPluginUnload SetRebootFlag SetRegView SetShellVarContext SetSilent ShowInstDetails ShowUninstDetails ShowWindow SilentInstall SilentUnInstall Sleep SpaceTexts StrCmp StrCmpS StrCpy StrLen SubCaption SubSectionEnd Unicode UninstallButtonText UninstallCaption UninstallIcon UninstallSubCaption UninstallText UninstPage UnRegDLL Var VIAddVersionKey VIFileVersion VIProductVersion WindowIcon WriteINIStr WriteRegBin WriteRegDWORD WriteRegExpandStr WriteRegStr WriteUninstaller XPStyle',
	      literal: 'admin all auto both colored current false force hide highest lastused leave listonly none normal notset off on open print show silent silentlog smooth textonly true user '
	    },
	    contains: [hljs.HASH_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'string',
	      begin: '"', end: '"',
	      illegal: '\\n',
	      contains: [{ // $\n, $\r, $\t, $$
	        className: 'symbol',
	        begin: '\\$(\\\\(n|r|t)|\\$)'
	      }, CONSTANTS, DEFINES, VARIABLES, LANGUAGES]
	    }, hljs.COMMENT(';', '$', {
	      relevance: 0
	    }), {
	      className: 'function',
	      beginKeywords: 'Function PageEx Section SectionGroup SubSection', end: '$'
	    }, COMPILER, DEFINES, VARIABLES, LANGUAGES, PARAMETERS, hljs.NUMBER_MODE, { // plug::ins
	      className: 'literal',
	      begin: hljs.IDENT_RE + '::' + hljs.IDENT_RE
	    }]
	  };
	};

/***/ },
/* 281 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var API_CLASS = {
	    className: 'built_in',
	    begin: '(AV|CA|CF|CG|CI|MK|MP|NS|UI)\\w+'
	  };
	  var OBJC_KEYWORDS = {
	    keyword: 'int float while char export sizeof typedef const struct for union ' + 'unsigned long volatile static bool mutable if do return goto void ' + 'enum else break extern asm case short default double register explicit ' + 'signed typename this switch continue wchar_t inline readonly assign ' + 'readwrite self @synchronized id typeof ' + 'nonatomic super unichar IBOutlet IBAction strong weak copy ' + 'in out inout bycopy byref oneway __strong __weak __block __autoreleasing ' + '@private @protected @public @try @property @end @throw @catch @finally ' + '@autoreleasepool @synthesize @dynamic @selector @optional @required',
	    literal: 'false true FALSE TRUE nil YES NO NULL',
	    built_in: 'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once'
	  };
	  var LEXEMES = /[a-zA-Z@][a-zA-Z0-9_]*/;
	  var CLASS_KEYWORDS = '@interface @class @protocol @implementation';
	  return {
	    aliases: ['mm', 'objc', 'obj-c'],
	    keywords: OBJC_KEYWORDS,
	    lexemes: LEXEMES,
	    illegal: '</',
	    contains: [API_CLASS, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.C_NUMBER_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      variants: [{
	        begin: '@"', end: '"',
	        illegal: '\\n',
	        contains: [hljs.BACKSLASH_ESCAPE]
	      }, {
	        begin: '\'', end: '[^\\\\]\'',
	        illegal: '[^\\\\][^\']'
	      }]
	    }, {
	      className: 'preprocessor',
	      begin: '#',
	      end: '$',
	      contains: [{
	        className: 'title',
	        variants: [{ begin: '\"', end: '\"' }, { begin: '<', end: '>' }]
	      }]
	    }, {
	      className: 'class',
	      begin: '(' + CLASS_KEYWORDS.split(' ').join('|') + ')\\b', end: '({|$)', excludeEnd: true,
	      keywords: CLASS_KEYWORDS, lexemes: LEXEMES,
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      className: 'variable',
	      begin: '\\.' + hljs.UNDERSCORE_IDENT_RE,
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 282 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  /* missing support for heredoc-like string (OCaml 4.0.2+) */
	  return {
	    aliases: ['ml'],
	    keywords: {
	      keyword: 'and as assert asr begin class constraint do done downto else end ' + 'exception external for fun function functor if in include ' + 'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method ' + 'mod module mutable new object of open! open or private rec sig struct ' + 'then to try type val! val virtual when while with ' +
	      /* camlp4 */
	      'parser value',
	      built_in:
	      /* built-in types */
	      'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit ' +
	      /* (some) types in Pervasives */
	      'in_channel out_channel ref',
	      literal: 'true false'
	    },
	    illegal: /\/\/|>>/,
	    lexemes: '[a-z_]\\w*!?',
	    contains: [{
	      className: 'literal',
	      begin: '\\[(\\|\\|)?\\]|\\(\\)'
	    }, hljs.COMMENT('\\(\\*', '\\*\\)', {
	      contains: ['self']
	    }), { /* type variable */
	      className: 'symbol',
	      begin: '\'[A-Za-z_](?!\')[\\w\']*'
	      /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
	    }, { /* polymorphic variant */
	      className: 'tag',
	      begin: '`[A-Z][\\w\']*'
	    }, { /* module or constructor */
	      className: 'type',
	      begin: '\\b[A-Z][\\w\']*',
	      relevance: 0
	    }, { /* don't color identifiers, but safely catch all identifiers with '*/
	      begin: '[a-z_]\\w*\'[\\w\']*'
	    }, hljs.inherit(hljs.APOS_STRING_MODE, { className: 'char', relevance: 0 }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), {
	      className: 'number',
	      begin: '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' + '0[oO][0-7_]+[Lln]?|' + '0[bB][01_]+[Lln]?|' + '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
	      relevance: 0
	    }, {
	      begin: /[-=]>/ // relevance booster
	    }]
	  };
	};

/***/ },
/* 283 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
		var SPECIAL_VARS = {
			className: 'keyword',
			begin: '\\$(f[asn]|t|vp[rtd]|children)'
		},
		    LITERALS = {
			className: 'literal',
			begin: 'false|true|PI|undef'
		},
		    NUMBERS = {
			className: 'number',
			begin: '\\b\\d+(\\.\\d+)?(e-?\\d+)?', //adds 1e5, 1e-10
			relevance: 0
		},
		    STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
		    PREPRO = {
			className: 'preprocessor',
			keywords: 'include use',
			begin: 'include|use <',
			end: '>'
		},
		    PARAMS = {
			className: 'params',
			begin: '\\(', end: '\\)',
			contains: ['self', NUMBERS, STRING, SPECIAL_VARS, LITERALS]
		},
		    MODIFIERS = {
			className: 'built_in',
			begin: '[*!#%]',
			relevance: 0
		},
		    FUNCTIONS = {
			className: 'function',
			beginKeywords: 'module function',
			end: '\\=|\\{',
			contains: [PARAMS, hljs.UNDERSCORE_TITLE_MODE]
		};

		return {
			aliases: ['scad'],
			keywords: {
				keyword: 'function module include use for intersection_for if else \\%',
				literal: 'false true PI undef',
				built_in: 'circle square polygon text sphere cube cylinder polyhedron translate rotate scale resize mirror multmatrix color offset hull minkowski union difference intersection abs sign sin cos tan acos asin atan atan2 floor round ceil ln log pow sqrt exp rands min max concat lookup str chr search version version_num norm cross parent_module echo import import_dxf dxf_linear_extrude linear_extrude rotate_extrude surface projection render children dxf_cross dxf_dim let assign'
			},
			contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, NUMBERS, PREPRO, STRING, PARAMS, SPECIAL_VARS, MODIFIERS, FUNCTIONS]
		};
	};

/***/ },
/* 284 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var OXYGENE_KEYWORDS = 'abstract add and array as asc aspect assembly async begin break block by case class concat const copy constructor continue ' + 'create default delegate desc distinct div do downto dynamic each else empty end ensure enum equals event except exit extension external false ' + 'final finalize finalizer finally flags for forward from function future global group has if implementation implements implies in index inherited ' + 'inline interface into invariants is iterator join locked locking loop matching method mod module namespace nested new nil not notify nullable of ' + 'old on operator or order out override parallel params partial pinned private procedure property protected public queryable raise read readonly ' + 'record reintroduce remove repeat require result reverse sealed select self sequence set shl shr skip static step soft take then to true try tuple ' + 'type union unit unsafe until uses using var virtual raises volatile where while with write xor yield await mapped deprecated stdcall cdecl pascal ' + 'register safecall overload library platform reference packed strict published autoreleasepool selector strong weak unretained';
	  var CURLY_COMMENT = hljs.COMMENT('{', '}', {
	    relevance: 0
	  });
	  var PAREN_COMMENT = hljs.COMMENT('\\(\\*', '\\*\\)', {
	    relevance: 10
	  });
	  var STRING = {
	    className: 'string',
	    begin: '\'', end: '\'',
	    contains: [{ begin: '\'\'' }]
	  };
	  var CHAR_STRING = {
	    className: 'string', begin: '(#\\d+)+'
	  };
	  var FUNCTION = {
	    className: 'function',
	    beginKeywords: 'function constructor destructor procedure method', end: '[:;]',
	    keywords: 'function constructor|10 destructor|10 procedure|10 method|10',
	    contains: [hljs.TITLE_MODE, {
	      className: 'params',
	      begin: '\\(', end: '\\)',
	      keywords: OXYGENE_KEYWORDS,
	      contains: [STRING, CHAR_STRING]
	    }, CURLY_COMMENT, PAREN_COMMENT]
	  };
	  return {
	    case_insensitive: true,
	    keywords: OXYGENE_KEYWORDS,
	    illegal: '("|\\$[G-Zg-z]|\\/\\*|</|=>|->)',
	    contains: [CURLY_COMMENT, PAREN_COMMENT, hljs.C_LINE_COMMENT_MODE, STRING, CHAR_STRING, hljs.NUMBER_MODE, FUNCTION, {
	      className: 'class',
	      begin: '=\\bclass\\b', end: 'end;',
	      keywords: OXYGENE_KEYWORDS,
	      contains: [STRING, CHAR_STRING, CURLY_COMMENT, PAREN_COMMENT, hljs.C_LINE_COMMENT_MODE, FUNCTION]
	    }]
	  };
	};

/***/ },
/* 285 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var CURLY_SUBCOMMENT = hljs.COMMENT('{', '}', {
	    contains: ['self']
	  });
	  return {
	    subLanguage: 'xml', relevance: 0,
	    contains: [hljs.COMMENT('^#', '$'), hljs.COMMENT('\\^rem{', '}', {
	      relevance: 10,
	      contains: [CURLY_SUBCOMMENT]
	    }), {
	      className: 'preprocessor',
	      begin: '^@(?:BASE|USE|CLASS|OPTIONS)$',
	      relevance: 10
	    }, {
	      className: 'title',
	      begin: '@[\\w\\-]+\\[[\\w^;\\-]*\\](?:\\[[\\w^;\\-]*\\])?(?:.*)$'
	    }, {
	      className: 'variable',
	      begin: '\\$\\{?[\\w\\-\\.\\:]+\\}?'
	    }, {
	      className: 'keyword',
	      begin: '\\^[\\w\\-\\.\\:]+'
	    }, {
	      className: 'number',
	      begin: '\\^#[0-9a-fA-F]+'
	    }, hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 286 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var MACRO = {
	    className: 'variable',
	    begin: /\$[\w\d#@][\w\d_]*/
	  };
	  var TABLE = {
	    className: 'variable',
	    begin: /</, end: />/
	  };
	  var QUOTE_STRING = {
	    className: 'string',
	    begin: /"/, end: /"/
	  };

	  return {
	    aliases: ['pf.conf'],
	    lexemes: /[a-z0-9_<>-]+/,
	    keywords: {
	      built_in: /* block match pass are "actions" in pf.conf(5), the rest are
	                 * lexically similar top-level commands.
	                 */
	      'block match pass load anchor|5 antispoof|10 set table',
	      keyword: 'in out log quick on rdomain inet inet6 proto from port os to route' + 'allow-opts divert-packet divert-reply divert-to flags group icmp-type' + 'icmp6-type label once probability recieved-on rtable prio queue' + 'tos tag tagged user keep fragment for os drop' + 'af-to|10 binat-to|10 nat-to|10 rdr-to|10 bitmask least-stats random round-robin' + 'source-hash static-port' + 'dup-to reply-to route-to' + 'parent bandwidth default min max qlimit' + 'block-policy debug fingerprints hostid limit loginterface optimization' + 'reassemble ruleset-optimization basic none profile skip state-defaults' + 'state-policy timeout' + 'const counters persist' + 'no modulate synproxy state|5 floating if-bound no-sync pflow|10 sloppy' + 'source-track global rule max-src-nodes max-src-states max-src-conn' + 'max-src-conn-rate overload flush' + 'scrub|5 max-mss min-ttl no-df|10 random-id',
	      literal: 'all any no-route self urpf-failed egress|5 unknown'
	    },
	    contains: [hljs.HASH_COMMENT_MODE, hljs.NUMBER_MODE, hljs.QUOTE_STRING_MODE, MACRO, TABLE]
	  };
	};

/***/ },
/* 287 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var VARIABLE = {
	    className: 'variable', begin: '\\$+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
	  };
	  var PREPROCESSOR = {
	    className: 'preprocessor', begin: /<\?(php)?|\?>/
	  };
	  var STRING = {
	    className: 'string',
	    contains: [hljs.BACKSLASH_ESCAPE, PREPROCESSOR],
	    variants: [{
	      begin: 'b"', end: '"'
	    }, {
	      begin: 'b\'', end: '\''
	    }, hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })]
	  };
	  var NUMBER = { variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE] };
	  return {
	    aliases: ['php3', 'php4', 'php5', 'php6'],
	    case_insensitive: true,
	    keywords: 'and include_once list abstract global private echo interface as static endswitch ' + 'array null if endwhile or const for endforeach self var while isset public ' + 'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' + 'return parent clone use __CLASS__ __LINE__ else break print eval new ' + 'catch __METHOD__ case exception default die require __FUNCTION__ ' + 'enddeclare final try switch continue endfor endif declare unset true false ' + 'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' + 'yield finally',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.HASH_COMMENT_MODE, hljs.COMMENT('/\\*', '\\*/', {
	      contains: [{
	        className: 'doctag',
	        begin: '@[A-Za-z]+'
	      }, PREPROCESSOR]
	    }), hljs.COMMENT('__halt_compiler.+?;', false, {
	      endsWithParent: true,
	      keywords: '__halt_compiler',
	      lexemes: hljs.UNDERSCORE_IDENT_RE
	    }), {
	      className: 'string',
	      begin: '<<<[\'"]?\\w+[\'"]?$', end: '^\\w+;',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, PREPROCESSOR, VARIABLE, {
	      // swallow composed identifiers to avoid parsing them as keywords
	      begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
	    }, {
	      className: 'function',
	      beginKeywords: 'function', end: /[;{]/, excludeEnd: true,
	      illegal: '\\$|\\[|%',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)',
	        contains: ['self', VARIABLE, hljs.C_BLOCK_COMMENT_MODE, STRING, NUMBER]
	      }]
	    }, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '{', excludeEnd: true,
	      illegal: /[:\(\$"]/,
	      contains: [{ beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      beginKeywords: 'namespace', end: ';',
	      illegal: /[\.']/,
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      beginKeywords: 'use', end: ';',
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      begin: '=>' // No markup, just a relevance booster
	    }, STRING, NUMBER]
	  };
	};

/***/ },
/* 288 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var backtickEscape = {
	    begin: '`[\\s\\S]',
	    relevance: 0
	  };
	  var dollarEscape = {
	    begin: '\\$\\$[\\s\\S]',
	    relevance: 0
	  };
	  var VAR = {
	    className: 'variable',
	    variants: [{ begin: /\$[\w\d][\w\d_:]*/ }]
	  };
	  var QUOTE_STRING = {
	    className: 'string',
	    begin: /"/, end: /"/,
	    contains: [backtickEscape, VAR, {
	      className: 'variable',
	      begin: /\$[A-z]/, end: /[^A-z]/
	    }]
	  };
	  var APOS_STRING = {
	    className: 'string',
	    begin: /'/, end: /'/
	  };

	  return {
	    aliases: ['ps'],
	    lexemes: /-?[A-z\.\-]+/,
	    case_insensitive: true,
	    keywords: {
	      keyword: 'if else foreach return function do while until elseif begin for trap data dynamicparam end break throw param continue finally in switch exit filter try process catch',
	      literal: '$null $true $false',
	      built_in: 'Add-Content Add-History Add-Member Add-PSSnapin Clear-Content Clear-Item Clear-Item Property Clear-Variable Compare-Object ConvertFrom-SecureString Convert-Path ConvertTo-Html ConvertTo-SecureString Copy-Item Copy-ItemProperty Export-Alias Export-Clixml Export-Console Export-Csv ForEach-Object Format-Custom Format-List Format-Table Format-Wide Get-Acl Get-Alias Get-AuthenticodeSignature Get-ChildItem Get-Command Get-Content Get-Credential Get-Culture Get-Date Get-EventLog Get-ExecutionPolicy Get-Help Get-History Get-Host Get-Item Get-ItemProperty Get-Location Get-Member Get-PfxCertificate Get-Process Get-PSDrive Get-PSProvider Get-PSSnapin Get-Service Get-TraceSource Get-UICulture Get-Unique Get-Variable Get-WmiObject Group-Object Import-Alias Import-Clixml Import-Csv Invoke-Expression Invoke-History Invoke-Item Join-Path Measure-Command Measure-Object Move-Item Move-ItemProperty New-Alias New-Item New-ItemProperty New-Object New-PSDrive New-Service New-TimeSpan New-Variable Out-Default Out-File Out-Host Out-Null Out-Printer Out-String Pop-Location Push-Location Read-Host Remove-Item Remove-ItemProperty Remove-PSDrive Remove-PSSnapin Remove-Variable Rename-Item Rename-ItemProperty Resolve-Path Restart-Service Resume-Service Select-Object Select-String Set-Acl Set-Alias Set-AuthenticodeSignature Set-Content Set-Date Set-ExecutionPolicy Set-Item Set-ItemProperty Set-Location Set-PSDebug Set-Service Set-TraceSource Set-Variable Sort-Object Split-Path Start-Service Start-Sleep Start-Transcript Stop-Process Stop-Service Stop-Transcript Suspend-Service Tee-Object Test-Path Trace-Command Update-FormatData Update-TypeData Where-Object Write-Debug Write-Error Write-Host Write-Output Write-Progress Write-Verbose Write-Warning',
	      operator: '-ne -eq -lt -gt -ge -le -not -like -notlike -match -notmatch -contains -notcontains -in -notin -replace'
	    },
	    contains: [hljs.HASH_COMMENT_MODE, hljs.NUMBER_MODE, QUOTE_STRING, APOS_STRING, VAR]
	  };
	};

/***/ },
/* 289 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      keyword: 'BufferedReader PVector PFont PImage PGraphics HashMap boolean byte char color ' + 'double float int long String Array FloatDict FloatList IntDict IntList JSONArray JSONObject ' + 'Object StringDict StringList Table TableRow XML ' +
	      // Java keywords
	      'false synchronized int abstract float private char boolean static null if const ' + 'for true while long throw strictfp finally protected import native final return void ' + 'enum else break transient new catch instanceof byte super volatile case assert short ' + 'package default double public try this switch continue throws protected public private',
	      constant: 'P2D P3D HALF_PI PI QUARTER_PI TAU TWO_PI',
	      variable: 'displayHeight displayWidth mouseY mouseX mousePressed pmouseX pmouseY key ' + 'keyCode pixels focused frameCount frameRate height width',
	      title: 'setup draw',
	      built_in: 'size createGraphics beginDraw createShape loadShape PShape arc ellipse line point ' + 'quad rect triangle bezier bezierDetail bezierPoint bezierTangent curve curveDetail curvePoint ' + 'curveTangent curveTightness shape shapeMode beginContour beginShape bezierVertex curveVertex ' + 'endContour endShape quadraticVertex vertex ellipseMode noSmooth rectMode smooth strokeCap ' + 'strokeJoin strokeWeight mouseClicked mouseDragged mouseMoved mousePressed mouseReleased ' + 'mouseWheel keyPressed keyPressedkeyReleased keyTyped print println save saveFrame day hour ' + 'millis minute month second year background clear colorMode fill noFill noStroke stroke alpha ' + 'blue brightness color green hue lerpColor red saturation modelX modelY modelZ screenX screenY ' + 'screenZ ambient emissive shininess specular add createImage beginCamera camera endCamera frustum ' + 'ortho perspective printCamera printProjection cursor frameRate noCursor exit loop noLoop popStyle ' + 'pushStyle redraw binary boolean byte char float hex int str unbinary unhex join match matchAll nf ' + 'nfc nfp nfs split splitTokens trim append arrayCopy concat expand reverse shorten sort splice subset ' + 'box sphere sphereDetail createInput createReader loadBytes loadJSONArray loadJSONObject loadStrings ' + 'loadTable loadXML open parseXML saveTable selectFolder selectInput beginRaw beginRecord createOutput ' + 'createWriter endRaw endRecord PrintWritersaveBytes saveJSONArray saveJSONObject saveStream saveStrings ' + 'saveXML selectOutput popMatrix printMatrix pushMatrix resetMatrix rotate rotateX rotateY rotateZ scale ' + 'shearX shearY translate ambientLight directionalLight lightFalloff lights lightSpecular noLights normal ' + 'pointLight spotLight image imageMode loadImage noTint requestImage tint texture textureMode textureWrap ' + 'blend copy filter get loadPixels set updatePixels blendMode loadShader PShaderresetShader shader createFont ' + 'loadFont text textFont textAlign textLeading textMode textSize textWidth textAscent textDescent abs ceil ' + 'constrain dist exp floor lerp log mag map max min norm pow round sq sqrt acos asin atan atan2 cos degrees ' + 'radians sin tan noise noiseDetail noiseSeed random randomGaussian randomSeed'
	    },
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 290 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    contains: [hljs.C_NUMBER_MODE, {
	      className: 'built_in',
	      begin: '{', end: '}$',
	      excludeBegin: true, excludeEnd: true,
	      contains: [hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE],
	      relevance: 0
	    }, {
	      className: 'filename',
	      begin: '[a-zA-Z_][\\da-zA-Z_]+\\.[\\da-zA-Z_]{1,3}', end: ':',
	      excludeEnd: true
	    }, {
	      className: 'header',
	      begin: '(ncalls|tottime|cumtime)', end: '$',
	      keywords: 'ncalls tottime|10 cumtime|10 filename',
	      relevance: 10
	    }, {
	      className: 'summary',
	      begin: 'function calls', end: '$',
	      contains: [hljs.C_NUMBER_MODE],
	      relevance: 10
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'function',
	      begin: '\\(', end: '\\)$',
	      contains: [hljs.UNDERSCORE_TITLE_MODE],
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 291 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {

	  var ATOM = {

	    className: 'atom',
	    begin: /[a-z][A-Za-z0-9_]*/,
	    relevance: 0
	  };

	  var VAR = {

	    className: 'name',
	    variants: [{ begin: /[A-Z][a-zA-Z0-9_]*/ }, { begin: /_[A-Za-z0-9_]*/ }],
	    relevance: 0
	  };

	  var PARENTED = {

	    begin: /\(/,
	    end: /\)/,
	    relevance: 0
	  };

	  var LIST = {

	    begin: /\[/,
	    end: /\]/
	  };

	  var LINE_COMMENT = {

	    className: 'comment',
	    begin: /%/, end: /$/,
	    contains: [hljs.PHRASAL_WORDS_MODE]
	  };

	  var BACKTICK_STRING = {

	    className: 'string',
	    begin: /`/, end: /`/,
	    contains: [hljs.BACKSLASH_ESCAPE]
	  };

	  var CHAR_CODE = {

	    className: 'string', // 0'a etc.
	    begin: /0\'(\\\'|.)/
	  };

	  var SPACE_CODE = {

	    className: 'string',
	    begin: /0\'\\s/ // 0'\s
	  };

	  var PRED_OP = { // relevance booster
	    begin: /:-/
	  };

	  var inner = [ATOM, VAR, PARENTED, PRED_OP, LIST, LINE_COMMENT, hljs.C_BLOCK_COMMENT_MODE, hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE, BACKTICK_STRING, CHAR_CODE, SPACE_CODE, hljs.C_NUMBER_MODE];

	  PARENTED.contains = inner;
	  LIST.contains = inner;

	  return {
	    contains: inner.concat([{ begin: /\.$/ } // relevance booster
	    ])
	  };
	};

/***/ },
/* 292 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      keyword: 'package import option optional required repeated group',
	      built_in: 'double float int32 int64 uint32 uint64 sint32 sint64 ' + 'fixed32 fixed64 sfixed32 sfixed64 bool string bytes',
	      literal: 'true false'
	    },
	    contains: [hljs.QUOTE_STRING_MODE, hljs.NUMBER_MODE, hljs.C_LINE_COMMENT_MODE, {
	      className: 'class',
	      beginKeywords: 'message enum service', end: /\{/,
	      illegal: /\n/,
	      contains: [hljs.inherit(hljs.TITLE_MODE, {
	        starts: { endsWithParent: true, excludeEnd: true } // hack: eating everything after the first title
	      })]
	    }, {
	      className: 'function',
	      beginKeywords: 'rpc',
	      end: /;/, excludeEnd: true,
	      keywords: 'rpc returns'
	    }, {
	      className: 'constant',
	      begin: /^\s*[A-Z_]+/,
	      end: /\s*=/, excludeEnd: true
	    }]
	  };
	};

/***/ },
/* 293 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {

	  var PUPPET_KEYWORDS = {
	    keyword:
	    /* language keywords */
	    'and case default else elsif false if in import enherits node or true undef unless main settings $string ',
	    literal:
	    /* metaparameters */
	    'alias audit before loglevel noop require subscribe tag ' +
	    /* normal attributes */
	    'owner ensure group mode name|0 changes context force incl lens load_path onlyif provider returns root show_diff type_check ' + 'en_address ip_address realname command environment hour monute month monthday special target weekday ' + 'creates cwd ogoutput refresh refreshonly tries try_sleep umask backup checksum content ctime force ignore ' + 'links mtime purge recurse recurselimit replace selinux_ignore_defaults selrange selrole seltype seluser source ' + 'souirce_permissions sourceselect validate_cmd validate_replacement allowdupe attribute_membership auth_membership forcelocal gid ' + 'ia_load_module members system host_aliases ip allowed_trunk_vlans description device_url duplex encapsulation etherchannel ' + 'native_vlan speed principals allow_root auth_class auth_type authenticate_user k_of_n mechanisms rule session_owner shared options ' + 'device fstype enable hasrestart directory present absent link atboot blockdevice device dump pass remounts poller_tag use ' + 'message withpath adminfile allow_virtual allowcdrom category configfiles flavor install_options instance package_settings platform ' + 'responsefile status uninstall_options vendor unless_system_user unless_uid binary control flags hasstatus manifest pattern restart running ' + 'start stop allowdupe auths expiry gid groups home iterations key_membership keys managehome membership password password_max_age ' + 'password_min_age profile_membership profiles project purge_ssh_keys role_membership roles salt shell uid baseurl cost descr enabled ' + 'enablegroups exclude failovermethod gpgcheck gpgkey http_caching include includepkgs keepalive metadata_expire metalink mirrorlist ' + 'priority protect proxy proxy_password proxy_username repo_gpgcheck s3_enabled skip_if_unavailable sslcacert sslclientcert sslclientkey ' + 'sslverify mounted',
	    built_in:
	    /* core facts */
	    'architecture augeasversion blockdevices boardmanufacturer boardproductname boardserialnumber cfkey dhcp_servers ' + 'domain ec2_ ec2_userdata facterversion filesystems ldom fqdn gid hardwareisa hardwaremodel hostname id|0 interfaces ' + 'ipaddress ipaddress_ ipaddress6 ipaddress6_ iphostnumber is_virtual kernel kernelmajversion kernelrelease kernelversion ' + 'kernelrelease kernelversion lsbdistcodename lsbdistdescription lsbdistid lsbdistrelease lsbmajdistrelease lsbminordistrelease ' + 'lsbrelease macaddress macaddress_ macosx_buildversion macosx_productname macosx_productversion macosx_productverson_major ' + 'macosx_productversion_minor manufacturer memoryfree memorysize netmask metmask_ network_ operatingsystem operatingsystemmajrelease ' + 'operatingsystemrelease osfamily partitions path physicalprocessorcount processor processorcount productname ps puppetversion ' + 'rubysitedir rubyversion selinux selinux_config_mode selinux_config_policy selinux_current_mode selinux_current_mode selinux_enforced ' + 'selinux_policyversion serialnumber sp_ sshdsakey sshecdsakey sshrsakey swapencrypted swapfree swapsize timezone type uniqueid uptime ' + 'uptime_days uptime_hours uptime_seconds uuid virtual vlans xendomains zfs_version zonenae zones zpool_version'
	  };

	  var COMMENT = hljs.COMMENT('#', '$');

	  var IDENT_RE = '([A-Za-z_]|::)(\\w|::)*';

	  var TITLE = hljs.inherit(hljs.TITLE_MODE, { begin: IDENT_RE });

	  var VARIABLE = { className: 'variable', begin: '\\$' + IDENT_RE };

	  var STRING = {
	    className: 'string',
	    contains: [hljs.BACKSLASH_ESCAPE, VARIABLE],
	    variants: [{ begin: /'/, end: /'/ }, { begin: /"/, end: /"/ }]
	  };

	  return {
	    aliases: ['pp'],
	    contains: [COMMENT, VARIABLE, STRING, {
	      beginKeywords: 'class', end: '\\{|;',
	      illegal: /=/,
	      contains: [TITLE, COMMENT]
	    }, {
	      beginKeywords: 'define', end: /\{/,
	      contains: [{
	        className: 'title', begin: hljs.IDENT_RE, endsParent: true
	      }]
	    }, {
	      begin: hljs.IDENT_RE + '\\s+\\{', returnBegin: true,
	      end: /\S/,
	      contains: [{
	        className: 'name',
	        begin: hljs.IDENT_RE
	      }, {
	        begin: /\{/, end: /\}/,
	        keywords: PUPPET_KEYWORDS,
	        relevance: 0,
	        contains: [STRING, COMMENT, {
	          begin: '[a-zA-Z_]+\\s*=>'
	        }, {
	          className: 'number',
	          begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
	          relevance: 0
	        }, VARIABLE]
	      }],
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 294 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var PROMPT = {
	    className: 'prompt', begin: /^(>>>|\.\.\.) /
	  };
	  var STRING = {
	    className: 'string',
	    contains: [hljs.BACKSLASH_ESCAPE],
	    variants: [{
	      begin: /(u|b)?r?'''/, end: /'''/,
	      contains: [PROMPT],
	      relevance: 10
	    }, {
	      begin: /(u|b)?r?"""/, end: /"""/,
	      contains: [PROMPT],
	      relevance: 10
	    }, {
	      begin: /(u|r|ur)'/, end: /'/,
	      relevance: 10
	    }, {
	      begin: /(u|r|ur)"/, end: /"/,
	      relevance: 10
	    }, {
	      begin: /(b|br)'/, end: /'/
	    }, {
	      begin: /(b|br)"/, end: /"/
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE]
	  };
	  var NUMBER = {
	    className: 'number', relevance: 0,
	    variants: [{ begin: hljs.BINARY_NUMBER_RE + '[lLjJ]?' }, { begin: '\\b(0o[0-7]+)[lLjJ]?' }, { begin: hljs.C_NUMBER_RE + '[lLjJ]?' }]
	  };
	  var PARAMS = {
	    className: 'params',
	    begin: /\(/, end: /\)/,
	    contains: ['self', PROMPT, NUMBER, STRING]
	  };
	  return {
	    aliases: ['py', 'gyp'],
	    keywords: {
	      keyword: 'and elif is global as in if from raise for except finally print import pass return ' + 'exec else break not with class assert yield try while continue del or def lambda ' + 'nonlocal|10 None True False',
	      built_in: 'Ellipsis NotImplemented'
	    },
	    illegal: /(<\/|->|\?)/,
	    contains: [PROMPT, NUMBER, STRING, hljs.HASH_COMMENT_MODE, {
	      variants: [{ className: 'function', beginKeywords: 'def', relevance: 10 }, { className: 'class', beginKeywords: 'class' }],
	      end: /:/,
	      illegal: /[${=;\n,]/,
	      contains: [hljs.UNDERSCORE_TITLE_MODE, PARAMS]
	    }, {
	      className: 'decorator',
	      begin: /^[\t ]*@/, end: /$/
	    }, {
	      begin: /\b(print|exec)\(/ // don’t highlight keywords-turned-functions in Python 3
	    }]
	  };
	};

/***/ },
/* 295 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var Q_KEYWORDS = {
	    keyword: 'do while select delete by update from',
	    constant: '0b 1b',
	    built_in: 'neg not null string reciprocal floor ceiling signum mod xbar xlog and or each scan over prior mmu lsq inv md5 ltime gtime count first var dev med cov cor all any rand sums prds mins maxs fills deltas ratios avgs differ prev next rank reverse iasc idesc asc desc msum mcount mavg mdev xrank mmin mmax xprev rotate distinct group where flip type key til get value attr cut set upsert raze union inter except cross sv vs sublist enlist read0 read1 hopen hclose hdel hsym hcount peach system ltrim rtrim trim lower upper ssr view tables views cols xcols keys xkey xcol xasc xdesc fkeys meta lj aj aj0 ij pj asof uj ww wj wj1 fby xgroup ungroup ej save load rsave rload show csv parse eval min max avg wavg wsum sin cos tan sum',
	    typename: '`float `double int `timestamp `timespan `datetime `time `boolean `symbol `char `byte `short `long `real `month `date `minute `second `guid'
	  };
	  return {
	    aliases: ['k', 'kdb'],
	    keywords: Q_KEYWORDS,
	    lexemes: /\b(`?)[A-Za-z0-9_]+\b/,
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 296 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE = '([a-zA-Z]|\\.[a-zA-Z.])[a-zA-Z0-9._]*';

	  return {
	    contains: [hljs.HASH_COMMENT_MODE, {
	      begin: IDENT_RE,
	      lexemes: IDENT_RE,
	      keywords: {
	        keyword: 'function if in break next repeat else for return switch while try tryCatch ' + 'stop warning require library attach detach source setMethod setGeneric ' + 'setGroupGeneric setClass ...',
	        literal: 'NULL NA TRUE FALSE T F Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 ' + 'NA_complex_|10'
	      },
	      relevance: 0
	    }, {
	      // hex value
	      className: 'number',
	      begin: "0[xX][0-9a-fA-F]+[Li]?\\b",
	      relevance: 0
	    }, {
	      // explicit integer
	      className: 'number',
	      begin: "\\d+(?:[eE][+\\-]?\\d*)?L\\b",
	      relevance: 0
	    }, {
	      // number with trailing decimal
	      className: 'number',
	      begin: "\\d+\\.(?!\\d)(?:i\\b)?",
	      relevance: 0
	    }, {
	      // number
	      className: 'number',
	      begin: "\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d*)?i?\\b",
	      relevance: 0
	    }, {
	      // number with leading decimal
	      className: 'number',
	      begin: "\\.\\d+(?:[eE][+\\-]?\\d*)?i?\\b",
	      relevance: 0
	    }, {
	      // escaped identifier
	      begin: '`',
	      end: '`',
	      relevance: 0
	    }, {
	      className: 'string',
	      contains: [hljs.BACKSLASH_ESCAPE],
	      variants: [{ begin: '"', end: '"' }, { begin: "'", end: "'" }]
	    }]
	  };
	};

/***/ },
/* 297 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: 'ArchiveRecord AreaLightSource Atmosphere Attribute AttributeBegin AttributeEnd Basis ' + 'Begin Blobby Bound Clipping ClippingPlane Color ColorSamples ConcatTransform Cone ' + 'CoordinateSystem CoordSysTransform CropWindow Curves Cylinder DepthOfField Detail ' + 'DetailRange Disk Displacement Display End ErrorHandler Exposure Exterior Format ' + 'FrameAspectRatio FrameBegin FrameEnd GeneralPolygon GeometricApproximation Geometry ' + 'Hider Hyperboloid Identity Illuminate Imager Interior LightSource ' + 'MakeCubeFaceEnvironment MakeLatLongEnvironment MakeShadow MakeTexture Matte ' + 'MotionBegin MotionEnd NuPatch ObjectBegin ObjectEnd ObjectInstance Opacity Option ' + 'Orientation Paraboloid Patch PatchMesh Perspective PixelFilter PixelSamples ' + 'PixelVariance Points PointsGeneralPolygons PointsPolygons Polygon Procedural Projection ' + 'Quantize ReadArchive RelativeDetail ReverseOrientation Rotate Scale ScreenWindow ' + 'ShadingInterpolation ShadingRate Shutter Sides Skew SolidBegin SolidEnd Sphere ' + 'SubdivisionMesh Surface TextureCoordinates Torus Transform TransformBegin TransformEnd ' + 'TransformPoints Translate TrimCurve WorldBegin WorldEnd',
	    illegal: '</',
	    contains: [hljs.HASH_COMMENT_MODE, hljs.C_NUMBER_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE]
	  };
	};

/***/ },
/* 298 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENTIFIER = '[a-zA-Z-_][^\n{\r\n]+\\{';

	  return {
	    aliases: ['graph', 'instances'],
	    case_insensitive: true,
	    keywords: 'import',
	    contains: [
	    // Facet sections
	    {
	      className: 'facet',
	      begin: '^facet ' + IDENTIFIER,
	      end: '}',
	      keywords: 'facet installer exports children extends',
	      contains: [hljs.HASH_COMMENT_MODE]
	    },

	    // Instance sections
	    {
	      className: 'instance-of',
	      begin: '^instance of ' + IDENTIFIER,
	      end: '}',
	      keywords: 'name count channels instance-data instance-state instance of',
	      contains: [
	      // Instance overridden properties
	      {
	        className: 'keyword',
	        begin: '[a-zA-Z-_]+( |\t)*:'
	      }, hljs.HASH_COMMENT_MODE]
	    },

	    // Component sections
	    {
	      className: 'component',
	      begin: '^' + IDENTIFIER,
	      end: '}',
	      lexemes: '\\(?[a-zA-Z]+\\)?',
	      keywords: 'installer exports children extends imports facets alias (optional)',
	      contains: [
	      // Imported component variables
	      {
	        className: 'string',
	        begin: '\\.[a-zA-Z-_]+',
	        end: '\\s|,|;',
	        excludeEnd: true
	      }, hljs.HASH_COMMENT_MODE]
	    },

	    // Comments
	    hljs.HASH_COMMENT_MODE]
	  };
	};

/***/ },
/* 299 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      keyword: 'float color point normal vector matrix while for if do return else break extern continue',
	      built_in: 'abs acos ambient area asin atan atmosphere attribute calculatenormal ceil cellnoise ' + 'clamp comp concat cos degrees depth Deriv diffuse distance Du Dv environment exp ' + 'faceforward filterstep floor format fresnel incident length lightsource log match ' + 'max min mod noise normalize ntransform opposite option phong pnoise pow printf ' + 'ptlined radians random reflect refract renderinfo round setcomp setxcomp setycomp ' + 'setzcomp shadow sign sin smoothstep specular specularbrdf spline sqrt step tan ' + 'texture textureinfo trace transform vtransform xcomp ycomp zcomp'
	    },
	    illegal: '</',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE, hljs.C_NUMBER_MODE, {
	      className: 'preprocessor',
	      begin: '#', end: '$'
	    }, {
	      className: 'shader',
	      beginKeywords: 'surface displacement light volume imager', end: '\\('
	    }, {
	      className: 'shading',
	      beginKeywords: 'illuminate illuminance gather', end: '\\('
	    }]
	  };
	};

/***/ },
/* 300 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      keyword: 'BILL_PERIOD BILL_START BILL_STOP RS_EFFECTIVE_START RS_EFFECTIVE_STOP RS_JURIS_CODE RS_OPCO_CODE ' + 'INTDADDATTRIBUTE|5 INTDADDVMSG|5 INTDBLOCKOP|5 INTDBLOCKOPNA|5 INTDCLOSE|5 INTDCOUNT|5 ' + 'INTDCOUNTSTATUSCODE|5 INTDCREATEMASK|5 INTDCREATEDAYMASK|5 INTDCREATEFACTORMASK|5 ' + 'INTDCREATEHANDLE|5 INTDCREATEOVERRIDEDAYMASK|5 INTDCREATEOVERRIDEMASK|5 ' + 'INTDCREATESTATUSCODEMASK|5 INTDCREATETOUPERIOD|5 INTDDELETE|5 INTDDIPTEST|5 INTDEXPORT|5 ' + 'INTDGETERRORCODE|5 INTDGETERRORMESSAGE|5 INTDISEQUAL|5 INTDJOIN|5 INTDLOAD|5 INTDLOADACTUALCUT|5 ' + 'INTDLOADDATES|5 INTDLOADHIST|5 INTDLOADLIST|5 INTDLOADLISTDATES|5 INTDLOADLISTENERGY|5 ' + 'INTDLOADLISTHIST|5 INTDLOADRELATEDCHANNEL|5 INTDLOADSP|5 INTDLOADSTAGING|5 INTDLOADUOM|5 ' + 'INTDLOADUOMDATES|5 INTDLOADUOMHIST|5 INTDLOADVERSION|5 INTDOPEN|5 INTDREADFIRST|5 INTDREADNEXT|5 ' + 'INTDRECCOUNT|5 INTDRELEASE|5 INTDREPLACE|5 INTDROLLAVG|5 INTDROLLPEAK|5 INTDSCALAROP|5 INTDSCALE|5 ' + 'INTDSETATTRIBUTE|5 INTDSETDSTPARTICIPANT|5 INTDSETSTRING|5 INTDSETVALUE|5 INTDSETVALUESTATUS|5 ' + 'INTDSHIFTSTARTTIME|5 INTDSMOOTH|5 INTDSORT|5 INTDSPIKETEST|5 INTDSUBSET|5 INTDTOU|5 ' + 'INTDTOURELEASE|5 INTDTOUVALUE|5 INTDUPDATESTATS|5 INTDVALUE|5 STDEV INTDDELETEEX|5 ' + 'INTDLOADEXACTUAL|5 INTDLOADEXCUT|5 INTDLOADEXDATES|5 INTDLOADEX|5 INTDLOADEXRELATEDCHANNEL|5 ' + 'INTDSAVEEX|5 MVLOAD|5 MVLOADACCT|5 MVLOADACCTDATES|5 MVLOADACCTHIST|5 MVLOADDATES|5 MVLOADHIST|5 ' + 'MVLOADLIST|5 MVLOADLISTDATES|5 MVLOADLISTHIST|5 IF FOR NEXT DONE SELECT END CALL ABORT CLEAR CHANNEL FACTOR LIST NUMBER ' + 'OVERRIDE SET WEEK DISTRIBUTIONNODE ELSE WHEN THEN OTHERWISE IENUM CSV INCLUDE LEAVE RIDER SAVE DELETE ' + 'NOVALUE SECTION WARN SAVE_UPDATE DETERMINANT LABEL REPORT REVENUE EACH ' + 'IN FROM TOTAL CHARGE BLOCK AND OR CSV_FILE RATE_CODE AUXILIARY_DEMAND ' + 'UIDACCOUNT RS BILL_PERIOD_SELECT HOURS_PER_MONTH INTD_ERROR_STOP SEASON_SCHEDULE_NAME ' + 'ACCOUNTFACTOR ARRAYUPPERBOUND CALLSTOREDPROC GETADOCONNECTION GETCONNECT GETDATASOURCE ' + 'GETQUALIFIER GETUSERID HASVALUE LISTCOUNT LISTOP LISTUPDATE LISTVALUE PRORATEFACTOR RSPRORATE ' + 'SETBINPATH SETDBMONITOR WQ_OPEN BILLINGHOURS DATE DATEFROMFLOAT DATETIMEFROMSTRING ' + 'DATETIMETOSTRING DATETOFLOAT DAY DAYDIFF DAYNAME DBDATETIME HOUR MINUTE MONTH MONTHDIFF ' + 'MONTHHOURS MONTHNAME ROUNDDATE SAMEWEEKDAYLASTYEAR SECOND WEEKDAY WEEKDIFF YEAR YEARDAY ' + 'YEARSTR COMPSUM HISTCOUNT HISTMAX HISTMIN HISTMINNZ HISTVALUE MAXNRANGE MAXRANGE MINRANGE ' + 'COMPIKVA COMPKVA COMPKVARFROMKQKW COMPLF IDATTR FLAG LF2KW LF2KWH MAXKW POWERFACTOR ' + 'READING2USAGE AVGSEASON MAXSEASON MONTHLYMERGE SEASONVALUE SUMSEASON ACCTREADDATES ' + 'ACCTTABLELOAD CONFIGADD CONFIGGET CREATEOBJECT CREATEREPORT EMAILCLIENT EXPBLKMDMUSAGE ' + 'EXPMDMUSAGE EXPORT_USAGE FACTORINEFFECT GETUSERSPECIFIEDSTOP INEFFECT ISHOLIDAY RUNRATE ' + 'SAVE_PROFILE SETREPORTTITLE USEREXIT WATFORRUNRATE TO TABLE ACOS ASIN ATAN ATAN2 BITAND CEIL ' + 'COS COSECANT COSH COTANGENT DIVQUOT DIVREM EXP FABS FLOOR FMOD FREPM FREXPN LOG LOG10 MAX MAXN ' + 'MIN MINNZ MODF POW ROUND ROUND2VALUE ROUNDINT SECANT SIN SINH SQROOT TAN TANH FLOAT2STRING ' + 'FLOAT2STRINGNC INSTR LEFT LEN LTRIM MID RIGHT RTRIM STRING STRINGNC TOLOWER TOUPPER TRIM ' + 'NUMDAYS READ_DATE STAGING',
	      built_in: 'IDENTIFIER OPTIONS XML_ELEMENT XML_OP XML_ELEMENT_OF DOMDOCCREATE DOMDOCLOADFILE DOMDOCLOADXML ' + 'DOMDOCSAVEFILE DOMDOCGETROOT DOMDOCADDPI DOMNODEGETNAME DOMNODEGETTYPE DOMNODEGETVALUE DOMNODEGETCHILDCT ' + 'DOMNODEGETFIRSTCHILD DOMNODEGETSIBLING DOMNODECREATECHILDELEMENT DOMNODESETATTRIBUTE ' + 'DOMNODEGETCHILDELEMENTCT DOMNODEGETFIRSTCHILDELEMENT DOMNODEGETSIBLINGELEMENT DOMNODEGETATTRIBUTECT ' + 'DOMNODEGETATTRIBUTEI DOMNODEGETATTRIBUTEBYNAME DOMNODEGETBYNAME'
	    },
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, {
	      className: 'array',
	      variants: [{ begin: '#\\s+[a-zA-Z\\ \\.]*', relevance: 0 }, // looks like #-comment
	      { begin: '#[a-zA-Z\\ \\.]+' }]
	    }]
	  };
	};

/***/ },
/* 301 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var NUM_SUFFIX = '([uif](8|16|32|64|size))\?';
	  var BLOCK_COMMENT = hljs.inherit(hljs.C_BLOCK_COMMENT_MODE);
	  BLOCK_COMMENT.contains.push('self');
	  return {
	    aliases: ['rs'],
	    keywords: {
	      keyword: 'alignof as be box break const continue crate do else enum extern ' + 'false fn for if impl in let loop match mod mut offsetof once priv ' + 'proc pub pure ref return self Self sizeof static struct super trait true ' + 'type typeof unsafe unsized use virtual while where yield ' + 'int i8 i16 i32 i64 ' + 'uint u8 u32 u64 ' + 'float f32 f64 ' + 'str char bool',
	      built_in: 'assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! ' + 'debug_assert! debug_assert_eq! env! panic! file! format! format_args! ' + 'include_bin! include_str! line! local_data_key! module_path! ' + 'option_env! print! println! select! stringify! try! unimplemented! ' + 'unreachable! vec! write! writeln!'
	    },
	    lexemes: hljs.IDENT_RE + '!?',
	    illegal: '</',
	    contains: [hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT, hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), {
	      className: 'string',
	      variants: [{ begin: /r(#*)".*?"\1(?!#)/ }, { begin: /'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/ }, { begin: /'[a-zA-Z_][a-zA-Z0-9_]*/ }]
	    }, {
	      className: 'number',
	      variants: [{ begin: '\\b0b([01_]+)' + NUM_SUFFIX }, { begin: '\\b0o([0-7_]+)' + NUM_SUFFIX }, { begin: '\\b0x([A-Fa-f0-9_]+)' + NUM_SUFFIX }, { begin: '\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)' + NUM_SUFFIX
	      }],
	      relevance: 0
	    }, {
	      className: 'function',
	      beginKeywords: 'fn', end: '(\\(|<)', excludeEnd: true,
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      className: 'preprocessor',
	      begin: '#\\!?\\[', end: '\\]'
	    }, {
	      beginKeywords: 'type', end: '(=|<)',
	      contains: [hljs.UNDERSCORE_TITLE_MODE],
	      illegal: '\\S'
	    }, {
	      beginKeywords: 'trait enum', end: '{',
	      contains: [hljs.inherit(hljs.UNDERSCORE_TITLE_MODE, { endsParent: true })],
	      illegal: '[\\w\\d]'
	    }, {
	      begin: hljs.IDENT_RE + '::'
	    }, {
	      begin: '->'
	    }]
	  };
	};

/***/ },
/* 302 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {

	  var ANNOTATION = {
	    className: 'annotation', begin: '@[A-Za-z]+'
	  };

	  var STRING = {
	    className: 'string',
	    begin: 'u?r?"""', end: '"""',
	    relevance: 10
	  };

	  var SYMBOL = {
	    className: 'symbol',
	    begin: '\'\\w[\\w\\d_]*(?!\')'
	  };

	  var TYPE = {
	    className: 'type',
	    begin: '\\b[A-Z][A-Za-z0-9_]*',
	    relevance: 0
	  };

	  var NAME = {
	    className: 'title',
	    begin: /[^0-9\n\t "'(),.`{}\[\]:;][^\n\t "'(),.`{}\[\]:;]+|[^0-9\n\t "'(),.`{}\[\]:;=]/,
	    relevance: 0
	  };

	  var CLASS = {
	    className: 'class',
	    beginKeywords: 'class object trait type',
	    end: /[:={\[(\n;]/,
	    contains: [{ className: 'keyword', beginKeywords: 'extends with', relevance: 10 }, NAME]
	  };

	  var METHOD = {
	    className: 'function',
	    beginKeywords: 'def val',
	    end: /[:={\[(\n;]/,
	    contains: [NAME]
	  };

	  return {
	    keywords: {
	      literal: 'true false null',
	      keyword: 'type yield lazy override def with val var sealed abstract private trait object if forSome for while throw finally protected extends import final return else break new catch super class case package default try this match continue throws implicit'
	    },
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, STRING, hljs.QUOTE_STRING_MODE, SYMBOL, TYPE, METHOD, CLASS, hljs.C_NUMBER_MODE, ANNOTATION]
	  };
	};

/***/ },
/* 303 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var SCHEME_IDENT_RE = '[^\\(\\)\\[\\]\\{\\}",\'`;#|\\\\\\s]+';
	  var SCHEME_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+([./]\\d+)?';
	  var SCHEME_COMPLEX_NUMBER_RE = SCHEME_SIMPLE_NUMBER_RE + '[+\\-]' + SCHEME_SIMPLE_NUMBER_RE + 'i';
	  var BUILTINS = {
	    built_in: 'case-lambda call/cc class define-class exit-handler field import ' + 'inherit init-field interface let*-values let-values let/ec mixin ' + 'opt-lambda override protect provide public rename require ' + 'require-for-syntax syntax syntax-case syntax-error unit/sig unless ' + 'when with-syntax and begin call-with-current-continuation ' + 'call-with-input-file call-with-output-file case cond define ' + 'define-syntax delay do dynamic-wind else for-each if lambda let let* ' + 'let-syntax letrec letrec-syntax map or syntax-rules \' * + , ,@ - ... / ' + '; < <= = => > >= ` abs acos angle append apply asin assoc assq assv atan ' + 'boolean? caar cadr call-with-input-file call-with-output-file ' + 'call-with-values car cdddar cddddr cdr ceiling char->integer ' + 'char-alphabetic? char-ci<=? char-ci<? char-ci=? char-ci>=? char-ci>? ' + 'char-downcase char-lower-case? char-numeric? char-ready? char-upcase ' + 'char-upper-case? char-whitespace? char<=? char<? char=? char>=? char>? ' + 'char? close-input-port close-output-port complex? cons cos ' + 'current-input-port current-output-port denominator display eof-object? ' + 'eq? equal? eqv? eval even? exact->inexact exact? exp expt floor ' + 'force gcd imag-part inexact->exact inexact? input-port? integer->char ' + 'integer? interaction-environment lcm length list list->string ' + 'list->vector list-ref list-tail list? load log magnitude make-polar ' + 'make-rectangular make-string make-vector max member memq memv min ' + 'modulo negative? newline not null-environment null? number->string ' + 'number? numerator odd? open-input-file open-output-file output-port? ' + 'pair? peek-char port? positive? procedure? quasiquote quote quotient ' + 'rational? rationalize read read-char real-part real? remainder reverse ' + 'round scheme-report-environment set! set-car! set-cdr! sin sqrt string ' + 'string->list string->number string->symbol string-append string-ci<=? ' + 'string-ci<? string-ci=? string-ci>=? string-ci>? string-copy ' + 'string-fill! string-length string-ref string-set! string<=? string<? ' + 'string=? string>=? string>? string? substring symbol->string symbol? ' + 'tan transcript-off transcript-on truncate values vector ' + 'vector->list vector-fill! vector-length vector-ref vector-set! ' + 'with-input-from-file with-output-to-file write write-char zero?'
	  };

	  var SHEBANG = {
	    className: 'shebang',
	    begin: '^#!',
	    end: '$'
	  };

	  var LITERAL = {
	    className: 'literal',
	    begin: '(#t|#f|#\\\\' + SCHEME_IDENT_RE + '|#\\\\.)'
	  };

	  var NUMBER = {
	    className: 'number',
	    variants: [{ begin: SCHEME_SIMPLE_NUMBER_RE, relevance: 0 }, { begin: SCHEME_COMPLEX_NUMBER_RE, relevance: 0 }, { begin: '#b[0-1]+(/[0-1]+)?' }, { begin: '#o[0-7]+(/[0-7]+)?' }, { begin: '#x[0-9a-f]+(/[0-9a-f]+)?' }]
	  };

	  var STRING = hljs.QUOTE_STRING_MODE;

	  var REGULAR_EXPRESSION = {
	    className: 'regexp',
	    begin: '#[pr]x"',
	    end: '[^\\\\]"'
	  };

	  var COMMENT_MODES = [hljs.COMMENT(';', '$', {
	    relevance: 0
	  }), hljs.COMMENT('#\\|', '\\|#')];

	  var IDENT = {
	    begin: SCHEME_IDENT_RE,
	    relevance: 0
	  };

	  var QUOTED_IDENT = {
	    className: 'variable',
	    begin: '\'' + SCHEME_IDENT_RE
	  };

	  var BODY = {
	    endsWithParent: true,
	    relevance: 0
	  };

	  var LIST = {
	    className: 'list',
	    variants: [{ begin: '\\(', end: '\\)' }, { begin: '\\[', end: '\\]' }],
	    contains: [{
	      className: 'keyword',
	      begin: SCHEME_IDENT_RE,
	      lexemes: SCHEME_IDENT_RE,
	      keywords: BUILTINS
	    }, BODY]
	  };

	  BODY.contains = [LITERAL, NUMBER, STRING, IDENT, QUOTED_IDENT, LIST].concat(COMMENT_MODES);

	  return {
	    illegal: /\S/,
	    contains: [SHEBANG, NUMBER, STRING, QUOTED_IDENT, LIST].concat(COMMENT_MODES)
	  };
	};

/***/ },
/* 304 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {

	  var COMMON_CONTAINS = [hljs.C_NUMBER_MODE, {
	    className: 'string',
	    begin: '\'|\"', end: '\'|\"',
	    contains: [hljs.BACKSLASH_ESCAPE, { begin: '\'\'' }]
	  }];

	  return {
	    aliases: ['sci'],
	    keywords: {
	      keyword: 'abort break case clear catch continue do elseif else endfunction end for function' + 'global if pause return resume select try then while' + '%f %F %t %T %pi %eps %inf %nan %e %i %z %s',
	      built_in: // Scilab has more than 2000 functions. Just list the most commons
	      'abs and acos asin atan ceil cd chdir clearglobal cosh cos cumprod deff disp error' + 'exec execstr exists exp eye gettext floor fprintf fread fsolve imag isdef isempty' + 'isinfisnan isvector lasterror length load linspace list listfiles log10 log2 log' + 'max min msprintf mclose mopen ones or pathconvert poly printf prod pwd rand real' + 'round sinh sin size gsort sprintf sqrt strcat strcmps tring sum system tanh tan' + 'type typename warning zeros matrix'
	    },
	    illegal: '("|#|/\\*|\\s+/\\w+)',
	    contains: [{
	      className: 'function',
	      beginKeywords: 'function endfunction', end: '$',
	      keywords: 'function endfunction|10',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)'
	      }]
	    }, {
	      className: 'transposed_variable',
	      begin: '[a-zA-Z_][a-zA-Z_0-9]*(\'+[\\.\']*|[\\.\']+)', end: '',
	      relevance: 0
	    }, {
	      className: 'matrix',
	      begin: '\\[', end: '\\]\'*[\\.\']*',
	      relevance: 0,
	      contains: COMMON_CONTAINS
	    }, hljs.COMMENT('//', '$')].concat(COMMON_CONTAINS)
	  };
	};

/***/ },
/* 305 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var IDENT_RE = '[a-zA-Z-][a-zA-Z0-9_-]*';
	  var VARIABLE = {
	    className: 'variable',
	    begin: '(\\$' + IDENT_RE + ')\\b'
	  };
	  var FUNCTION = {
	    className: 'function',
	    begin: IDENT_RE + '\\(',
	    returnBegin: true,
	    excludeEnd: true,
	    end: '\\('
	  };
	  var HEXCOLOR = {
	    className: 'hexcolor', begin: '#[0-9A-Fa-f]+'
	  };
	  var DEF_INTERNALS = {
	    className: 'attribute',
	    begin: '[A-Z\\_\\.\\-]+', end: ':',
	    excludeEnd: true,
	    illegal: '[^\\s]',
	    starts: {
	      className: 'value',
	      endsWithParent: true, excludeEnd: true,
	      contains: [FUNCTION, HEXCOLOR, hljs.CSS_NUMBER_MODE, hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	        className: 'important', begin: '!important'
	      }]
	    }
	  };
	  return {
	    case_insensitive: true,
	    illegal: '[=/|\']',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, FUNCTION, {
	      className: 'id', begin: '\\#[A-Za-z0-9_-]+',
	      relevance: 0
	    }, {
	      className: 'class', begin: '\\.[A-Za-z0-9_-]+',
	      relevance: 0
	    }, {
	      className: 'attr_selector',
	      begin: '\\[', end: '\\]',
	      illegal: '$'
	    }, {
	      className: 'tag', // begin: IDENT_RE, end: '[,|\\s]'
	      begin: '\\b(a|abbr|acronym|address|area|article|aside|audio|b|base|big|blockquote|body|br|button|canvas|caption|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|div|dl|dt|em|embed|fieldset|figcaption|figure|footer|form|frame|frameset|(h[1-6])|head|header|hgroup|hr|html|i|iframe|img|input|ins|kbd|keygen|label|legend|li|link|map|mark|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|samp|script|section|select|small|span|strike|strong|style|sub|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|ul|var|video)\\b',
	      relevance: 0
	    }, {
	      className: 'pseudo',
	      begin: ':(visited|valid|root|right|required|read-write|read-only|out-range|optional|only-of-type|only-child|nth-of-type|nth-last-of-type|nth-last-child|nth-child|not|link|left|last-of-type|last-child|lang|invalid|indeterminate|in-range|hover|focus|first-of-type|first-line|first-letter|first-child|first|enabled|empty|disabled|default|checked|before|after|active)'
	    }, {
	      className: 'pseudo',
	      begin: '::(after|before|choices|first-letter|first-line|repeat-index|repeat-item|selection|value)'
	    }, VARIABLE, {
	      className: 'attribute',
	      begin: '\\b(z-index|word-wrap|word-spacing|word-break|width|widows|white-space|visibility|vertical-align|unicode-bidi|transition-timing-function|transition-property|transition-duration|transition-delay|transition|transform-style|transform-origin|transform|top|text-underline-position|text-transform|text-shadow|text-rendering|text-overflow|text-indent|text-decoration-style|text-decoration-line|text-decoration-color|text-decoration|text-align-last|text-align|tab-size|table-layout|right|resize|quotes|position|pointer-events|perspective-origin|perspective|page-break-inside|page-break-before|page-break-after|padding-top|padding-right|padding-left|padding-bottom|padding|overflow-y|overflow-x|overflow-wrap|overflow|outline-width|outline-style|outline-offset|outline-color|outline|orphans|order|opacity|object-position|object-fit|normal|none|nav-up|nav-right|nav-left|nav-index|nav-down|min-width|min-height|max-width|max-height|mask|marks|margin-top|margin-right|margin-left|margin-bottom|margin|list-style-type|list-style-position|list-style-image|list-style|line-height|letter-spacing|left|justify-content|initial|inherit|ime-mode|image-orientation|image-resolution|image-rendering|icon|hyphens|height|font-weight|font-variant-ligatures|font-variant|font-style|font-stretch|font-size-adjust|font-size|font-language-override|font-kerning|font-feature-settings|font-family|font|float|flex-wrap|flex-shrink|flex-grow|flex-flow|flex-direction|flex-basis|flex|filter|empty-cells|display|direction|cursor|counter-reset|counter-increment|content|column-width|column-span|column-rule-width|column-rule-style|column-rule-color|column-rule|column-gap|column-fill|column-count|columns|color|clip-path|clip|clear|caption-side|break-inside|break-before|break-after|box-sizing|box-shadow|box-decoration-break|bottom|border-width|border-top-width|border-top-style|border-top-right-radius|border-top-left-radius|border-top-color|border-top|border-style|border-spacing|border-right-width|border-right-style|border-right-color|border-right|border-radius|border-left-width|border-left-style|border-left-color|border-left|border-image-width|border-image-source|border-image-slice|border-image-repeat|border-image-outset|border-image|border-color|border-collapse|border-bottom-width|border-bottom-style|border-bottom-right-radius|border-bottom-left-radius|border-bottom-color|border-bottom|border|background-size|background-repeat|background-position|background-origin|background-image|background-color|background-clip|background-attachment|background-blend-mode|background|backface-visibility|auto|animation-timing-function|animation-play-state|animation-name|animation-iteration-count|animation-fill-mode|animation-duration|animation-direction|animation-delay|animation|align-self|align-items|align-content)\\b',
	      illegal: '[^\\s]'
	    }, {
	      className: 'value',
	      begin: '\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b'
	    }, {
	      className: 'value',
	      begin: ':', end: ';',
	      contains: [FUNCTION, VARIABLE, HEXCOLOR, hljs.CSS_NUMBER_MODE, hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE, {
	        className: 'important', begin: '!important'
	      }]
	    }, {
	      className: 'at_rule',
	      begin: '@', end: '[{;]',
	      keywords: 'mixin include extend for if else each while charset import debug media page content font-face namespace warn',
	      contains: [FUNCTION, VARIABLE, hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE, HEXCOLOR, hljs.CSS_NUMBER_MODE, {
	        className: 'preprocessor',
	        begin: '\\s[A-Za-z0-9_.-]+',
	        relevance: 0
	      }]
	    }]
	  };
	};

/***/ },
/* 306 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var smali_instr_low_prio = ['add', 'and', 'cmp', 'cmpg', 'cmpl', 'const', 'div', 'double', 'float', 'goto', 'if', 'int', 'long', 'move', 'mul', 'neg', 'new', 'nop', 'not', 'or', 'rem', 'return', 'shl', 'shr', 'sput', 'sub', 'throw', 'ushr', 'xor'];
	  var smali_instr_high_prio = ['aget', 'aput', 'array', 'check', 'execute', 'fill', 'filled', 'goto/16', 'goto/32', 'iget', 'instance', 'invoke', 'iput', 'monitor', 'packed', 'sget', 'sparse'];
	  var smali_keywords = ['transient', 'constructor', 'abstract', 'final', 'synthetic', 'public', 'private', 'protected', 'static', 'bridge', 'system'];
	  return {
	    aliases: ['smali'],
	    contains: [{
	      className: 'string',
	      begin: '"', end: '"',
	      relevance: 0
	    }, hljs.COMMENT('#', '$', {
	      relevance: 0
	    }), {
	      className: 'keyword',
	      begin: '\\s*\\.end\\s[a-zA-Z0-9]*',
	      relevance: 1
	    }, {
	      className: 'keyword',
	      begin: '^[ ]*\\.[a-zA-Z]*',
	      relevance: 0
	    }, {
	      className: 'keyword',
	      begin: '\\s:[a-zA-Z_0-9]*',
	      relevance: 0
	    }, {
	      className: 'keyword',
	      begin: '\\s(' + smali_keywords.join('|') + ')',
	      relevance: 1
	    }, {
	      className: 'keyword',
	      begin: '\\[',
	      relevance: 0
	    }, {
	      className: 'instruction',
	      begin: '\\s(' + smali_instr_low_prio.join('|') + ')\\s',
	      relevance: 1
	    }, {
	      className: 'instruction',
	      begin: '\\s(' + smali_instr_low_prio.join('|') + ')((\\-|/)[a-zA-Z0-9]+)+\\s',
	      relevance: 10
	    }, {
	      className: 'instruction',
	      begin: '\\s(' + smali_instr_high_prio.join('|') + ')((\\-|/)[a-zA-Z0-9]+)*\\s',
	      relevance: 10
	    }, {
	      className: 'class',
	      begin: 'L[^\(;:\n]*;',
	      relevance: 0
	    }, {
	      className: 'function',
	      begin: '( |->)[^(\n ;"]*\\(',
	      relevance: 0
	    }, {
	      className: 'function',
	      begin: '\\)',
	      relevance: 0
	    }, {
	      className: 'variable',
	      begin: '[vp][0-9]+',
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 307 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var VAR_IDENT_RE = '[a-z][a-zA-Z0-9_]*';
	  var CHAR = {
	    className: 'char',
	    begin: '\\$.{1}'
	  };
	  var SYMBOL = {
	    className: 'symbol',
	    begin: '#' + hljs.UNDERSCORE_IDENT_RE
	  };
	  return {
	    aliases: ['st'],
	    keywords: 'self super nil true false thisContext', // only 6
	    contains: [hljs.COMMENT('"', '"'), hljs.APOS_STRING_MODE, {
	      className: 'class',
	      begin: '\\b[A-Z][A-Za-z0-9_]*',
	      relevance: 0
	    }, {
	      className: 'method',
	      begin: VAR_IDENT_RE + ':',
	      relevance: 0
	    }, hljs.C_NUMBER_MODE, SYMBOL, CHAR, {
	      className: 'localvars',
	      // This looks more complicated than needed to avoid combinatorial
	      // explosion under V8. It effectively means `| var1 var2 ... |` with
	      // whitespace adjacent to `|` being optional.
	      begin: '\\|[ ]*' + VAR_IDENT_RE + '([ ]+' + VAR_IDENT_RE + ')*[ ]*\\|',
	      returnBegin: true, end: /\|/,
	      illegal: /\S/,
	      contains: [{ begin: '(\\|[ ]*)?' + VAR_IDENT_RE }]
	    }, {
	      className: 'array',
	      begin: '\\#\\(', end: '\\)',
	      contains: [hljs.APOS_STRING_MODE, CHAR, hljs.C_NUMBER_MODE, SYMBOL]
	    }]
	  };
	};

/***/ },
/* 308 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['ml'],
	    keywords: {
	      keyword:
	      /* according to Definition of Standard ML 97  */
	      'abstype and andalso as case datatype do else end eqtype ' + 'exception fn fun functor handle if in include infix infixr ' + 'let local nonfix of op open orelse raise rec sharing sig ' + 'signature struct structure then type val with withtype where while',
	      built_in:
	      /* built-in types according to basis library */
	      'array bool char exn int list option order real ref string substring vector unit word',
	      literal: 'true false NONE SOME LESS EQUAL GREATER nil'
	    },
	    illegal: /\/\/|>>/,
	    lexemes: '[a-z_]\\w*!?',
	    contains: [{
	      className: 'literal',
	      begin: '\\[(\\|\\|)?\\]|\\(\\)'
	    }, hljs.COMMENT('\\(\\*', '\\*\\)', {
	      contains: ['self']
	    }), { /* type variable */
	      className: 'symbol',
	      begin: '\'[A-Za-z_](?!\')[\\w\']*'
	      /* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
	    }, { /* polymorphic variant */
	      className: 'tag',
	      begin: '`[A-Z][\\w\']*'
	    }, { /* module or constructor */
	      className: 'type',
	      begin: '\\b[A-Z][\\w\']*',
	      relevance: 0
	    }, { /* don't color identifiers, but safely catch all identifiers with '*/
	      begin: '[a-z_]\\w*\'[\\w\']*'
	    }, hljs.inherit(hljs.APOS_STRING_MODE, { className: 'char', relevance: 0 }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), {
	      className: 'number',
	      begin: '\\b(0[xX][a-fA-F0-9_]+[Lln]?|' + '0[oO][0-7_]+[Lln]?|' + '0[bB][01_]+[Lln]?|' + '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
	      relevance: 0
	    }, {
	      begin: /[-=]>/ // relevance booster
	    }]
	  };
	};

/***/ },
/* 309 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var COMMENT_MODE = hljs.COMMENT('--', '$');
	  return {
	    case_insensitive: true,
	    illegal: /[<>]/,
	    contains: [{
	      className: 'operator',
	      beginKeywords: 'begin end start commit rollback savepoint lock alter create drop rename call ' + 'delete do handler insert load replace select truncate update set show pragma grant ' + 'merge describe use explain help declare prepare execute deallocate savepoint release|0 ' + 'unlock purge reset change stop analyze cache flush optimize repair kill ' + 'install uninstall checksum restore check backup revoke',
	      end: /;/, endsWithParent: true,
	      keywords: {
	        keyword: 'abort abs absolute acc acce accep accept access accessed accessible account acos action activate add ' + 'addtime admin administer advanced advise aes_decrypt aes_encrypt after agent aggregate ali alia alias ' + 'allocate allow alter always analyze ancillary and any anydata anydataset anyschema anytype apply ' + 'archive archived archivelog are as asc ascii asin assembly assertion associate asynchronous at atan ' + 'atn2 attr attri attrib attribu attribut attribute attributes audit authenticated authentication authid ' + 'authors auto autoallocate autodblink autoextend automatic availability avg backup badfile basicfile ' + 'before begin beginning benchmark between bfile bfile_base big bigfile bin binary_double binary_float ' + 'binlog bit_and bit_count bit_length bit_or bit_xor bitmap blob_base block blocksize body both bound ' + 'buffer_cache buffer_pool build bulk by byte byteordermark bytes c cache caching call calling cancel ' + 'capacity cascade cascaded case cast catalog category ceil ceiling chain change changed char_base ' + 'char_length character_length characters characterset charindex charset charsetform charsetid check ' + 'checksum checksum_agg child choose chr chunk class cleanup clear client clob clob_base clone close ' + 'cluster_id cluster_probability cluster_set clustering coalesce coercibility col collate collation ' + 'collect colu colum column column_value columns columns_updated comment commit compact compatibility ' + 'compiled complete composite_limit compound compress compute concat concat_ws concurrent confirm conn ' + 'connec connect connect_by_iscycle connect_by_isleaf connect_by_root connect_time connection ' + 'consider consistent constant constraint constraints constructor container content contents context ' + 'contributors controlfile conv convert convert_tz corr corr_k corr_s corresponding corruption cos cost ' + 'count count_big counted covar_pop covar_samp cpu_per_call cpu_per_session crc32 create creation ' + 'critical cross cube cume_dist curdate current current_date current_time current_timestamp current_user ' + 'cursor curtime customdatum cycle d data database databases datafile datafiles datalength date_add ' + 'date_cache date_format date_sub dateadd datediff datefromparts datename datepart datetime2fromparts ' + 'day day_to_second dayname dayofmonth dayofweek dayofyear days db_role_change dbtimezone ddl deallocate ' + 'declare decode decompose decrement decrypt deduplicate def defa defau defaul default defaults ' + 'deferred defi defin define degrees delayed delegate delete delete_all delimited demand dense_rank ' + 'depth dequeue des_decrypt des_encrypt des_key_file desc descr descri describ describe descriptor ' + 'deterministic diagnostics difference dimension direct_load directory disable disable_all ' + 'disallow disassociate discardfile disconnect diskgroup distinct distinctrow distribute distributed div ' + 'do document domain dotnet double downgrade drop dumpfile duplicate duration e each edition editionable ' + 'editions element ellipsis else elsif elt empty enable enable_all enclosed encode encoding encrypt ' + 'end end-exec endian enforced engine engines enqueue enterprise entityescaping eomonth error errors ' + 'escaped evalname evaluate event eventdata events except exception exceptions exchange exclude excluding ' + 'execu execut execute exempt exists exit exp expire explain export export_set extended extent external ' + 'external_1 external_2 externally extract f failed failed_login_attempts failover failure far fast ' + 'feature_set feature_value fetch field fields file file_name_convert filesystem_like_logging final ' + 'finish first first_value fixed flash_cache flashback floor flush following follows for forall force ' + 'form forma format found found_rows freelist freelists freepools fresh from from_base64 from_days ' + 'ftp full function g general generated get get_format get_lock getdate getutcdate global global_name ' + 'globally go goto grant grants greatest group group_concat group_id grouping grouping_id groups ' + 'gtid_subtract guarantee guard handler hash hashkeys having hea head headi headin heading heap help hex ' + 'hierarchy high high_priority hosts hour http i id ident_current ident_incr ident_seed identified ' + 'identity idle_time if ifnull ignore iif ilike ilm immediate import in include including increment ' + 'index indexes indexing indextype indicator indices inet6_aton inet6_ntoa inet_aton inet_ntoa infile ' + 'initial initialized initially initrans inmemory inner innodb input insert install instance instantiable ' + 'instr interface interleaved intersect into invalidate invisible is is_free_lock is_ipv4 is_ipv4_compat ' + 'is_not is_not_null is_used_lock isdate isnull isolation iterate java join json json_exists ' + 'k keep keep_duplicates key keys kill l language large last|0 last_day last_insert_id last_value lax lcase ' + 'lead leading least leaves left len lenght length less level levels library like like2 like4 likec limit ' + 'lines link|0 list|0 listagg little ln load load_file lob lobs local localtime localtimestamp locate ' + 'locator lock|0 locked log log10 log2 logfile logfiles logging logical logical_reads_per_call ' + 'logoff logon logs long loop|0 low low_priority lower lpad lrtrim ltrim m main make_set makedate maketime ' + 'managed management manual map mapping mask master master_pos_wait match matched materialized max ' + 'maxextents maximize maxinstances maxlen maxlogfiles maxloghistory maxlogmembers maxsize maxtrans ' + 'md5 measures median medium member memcompress memory merge microsecond mid migration min minextents ' + 'minimum mining minus minute minvalue missing mod mode model modification modify module monitoring month ' + 'months mount move movement multiset mutex n name name_const names nan national native natural nav nchar ' + 'nclob nested never new newline next nextval no no_write_to_binlog noarchivelog noaudit nobadfile ' + 'nocheck nocompress nocopy nocycle nodelay nodiscardfile noentityescaping noguarantee nokeep nologfile ' + 'nomapping nomaxvalue nominimize nominvalue nomonitoring none noneditionable nonschema noorder ' + 'nopr nopro noprom nopromp noprompt norely noresetlogs noreverse normal norowdependencies noschemacheck ' + 'noswitch not nothing notice notrim novalidate now nowait nth_value nullif nulls num numb numbe ' + 'nvarchar nvarchar2 object ocicoll ocidate ocidatetime ociduration ociinterval ociloblocator ocinumber ' + 'ociref ocirefcursor ocirowid ocistring ocitype oct octet_length of off offline offset oid oidindex old ' + 'on online only opaque open operations operator optimal optimize option optionally or oracle oracle_date ' + 'oradata ord ordaudio orddicom orddoc order ordimage ordinality ordvideo organization orlany orlvary ' + 'out outer outfile outline output over overflow overriding p package pad parallel parallel_enable ' + 'parameters parent parse partial partition partitions pascal passing password password_grace_time ' + 'password_lock_time password_reuse_max password_reuse_time password_verify_function patch path patindex ' + 'pctincrease pctthreshold pctused pctversion percent percent_rank percentile_cont percentile_disc ' + 'performance period period_add period_diff permanent physical pi pipe pipelined pivot pluggable plugin ' + 'policy position post_transaction pow power pragma prebuilt precedes preceding precision prediction ' + 'prediction_cost prediction_details prediction_probability prediction_set prepare present preserve ' + 'prior priority private private_sga privileges procedural procedure procedure_analyze processlist ' + 'profiles project prompt protection public publishingservername purge quarter query quick quiesce quota ' + 'quotename radians raise|0 rand range rank raw read reads readsize rebuild record records ' + 'recover recovery recursive recycle redo reduced ref reference referenced references referencing refresh ' + 'regexp_like register regr_avgx regr_avgy regr_count regr_intercept regr_r2 regr_slope regr_sxx regr_sxy ' + 'reject rekey relational relative relaylog release|0 release_lock relies_on relocate rely rem remainder ' + 'repair repeat replace replicate replication required reset resetlogs resize resource respect restore ' + 'restricted result result_cache resumable resume retention return returning returns reuse reverse revoke ' + 'right rlike role roles rollback rolling rollup round row row_count rowdependencies rowid rownum rows ' + 'rtrim rules safe salt sample save savepoint sb1 sb2 sb4 scan schema schemacheck scn scope scroll ' + 'sdo_georaster sdo_topo_geometry search sec_to_time second section securefile security seed segment ' + 'self sequence sequential serializable server servererror session session_user sessions_per_user set ' + 'sets settings sha sha1 sha2 share shared shared_pool short show shrink shutdown si_averagecolor ' + 'si_colorhistogram si_featurelist si_positionalcolor si_stillimage si_texture siblings sid sign sin ' + 'size size_t sizes skip slave sleep smalldatetimefromparts smallfile snapshot some soname sort soundex ' + 'source space sparse spfile split sql sql_big_result sql_buffer_result sql_cache sql_calc_found_rows ' + 'sql_small_result sql_variant_property sqlcode sqldata sqlerror sqlname sqlstate sqrt square standalone ' + 'standby start starting startup statement static statistics stats_binomial_test stats_crosstab ' + 'stats_ks_test stats_mode stats_mw_test stats_one_way_anova stats_t_test_ stats_t_test_indep ' + 'stats_t_test_one stats_t_test_paired stats_wsr_test status std stddev stddev_pop stddev_samp stdev ' + 'stop storage store stored str str_to_date straight_join strcmp strict string struct stuff style subdate ' + 'subpartition subpartitions substitutable substr substring subtime subtring_index subtype success sum ' + 'suspend switch switchoffset switchover sync synchronous synonym sys sys_xmlagg sysasm sysaux sysdate ' + 'sysdatetimeoffset sysdba sysoper system system_user sysutcdatetime t table tables tablespace tan tdo ' + 'template temporary terminated tertiary_weights test than then thread through tier ties time time_format ' + 'time_zone timediff timefromparts timeout timestamp timestampadd timestampdiff timezone_abbr ' + 'timezone_minute timezone_region to to_base64 to_date to_days to_seconds todatetimeoffset trace tracking ' + 'transaction transactional translate translation treat trigger trigger_nestlevel triggers trim truncate ' + 'try_cast try_convert try_parse type ub1 ub2 ub4 ucase unarchived unbounded uncompress ' + 'under undo unhex unicode uniform uninstall union unique unix_timestamp unknown unlimited unlock unpivot ' + 'unrecoverable unsafe unsigned until untrusted unusable unused update updated upgrade upped upper upsert ' + 'url urowid usable usage use use_stored_outlines user user_data user_resources users using utc_date ' + 'utc_timestamp uuid uuid_short validate validate_password_strength validation valist value values var ' + 'var_samp varcharc vari varia variab variabl variable variables variance varp varraw varrawc varray ' + 'verify version versions view virtual visible void wait wallet warning warnings week weekday weekofyear ' + 'wellformed when whene whenev wheneve whenever where while whitespace with within without work wrapped ' + 'xdb xml xmlagg xmlattributes xmlcast xmlcolattval xmlelement xmlexists xmlforest xmlindex xmlnamespaces ' + 'xmlpi xmlquery xmlroot xmlschema xmlserialize xmltable xmltype xor year year_to_month years yearweek',
	        literal: 'true false null',
	        built_in: 'array bigint binary bit blob boolean char character date dec decimal float int int8 integer interval number ' + 'numeric real record serial serial8 smallint text varchar varying void'
	      },
	      contains: [{
	        className: 'string',
	        begin: '\'', end: '\'',
	        contains: [hljs.BACKSLASH_ESCAPE, { begin: '\'\'' }]
	      }, {
	        className: 'string',
	        begin: '"', end: '"',
	        contains: [hljs.BACKSLASH_ESCAPE, { begin: '""' }]
	      }, {
	        className: 'string',
	        begin: '`', end: '`',
	        contains: [hljs.BACKSLASH_ESCAPE]
	      }, hljs.C_NUMBER_MODE, hljs.C_BLOCK_COMMENT_MODE, COMMENT_MODE]
	    }, hljs.C_BLOCK_COMMENT_MODE, COMMENT_MODE]
	  };
	};

/***/ },
/* 310 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['do', 'ado'],
	    case_insensitive: true,
	    keywords: 'if else in foreach for forv forva forval forvalu forvalue forvalues by bys bysort xi quietly qui capture about ac ac_7 acprplot acprplot_7 adjust ado adopath adoupdate alpha ameans an ano anov anova anova_estat anova_terms anovadef aorder ap app appe appen append arch arch_dr arch_estat arch_p archlm areg areg_p args arima arima_dr arima_estat arima_p as asmprobit asmprobit_estat asmprobit_lf asmprobit_mfx__dlg asmprobit_p ass asse asser assert avplot avplot_7 avplots avplots_7 bcskew0 bgodfrey binreg bip0_lf biplot bipp_lf bipr_lf bipr_p biprobit bitest bitesti bitowt blogit bmemsize boot bootsamp bootstrap bootstrap_8 boxco_l boxco_p boxcox boxcox_6 boxcox_p bprobit br break brier bro brow brows browse brr brrstat bs bs_7 bsampl_w bsample bsample_7 bsqreg bstat bstat_7 bstat_8 bstrap bstrap_7 ca ca_estat ca_p cabiplot camat canon canon_8 canon_8_p canon_estat canon_p cap caprojection capt captu captur capture cat cc cchart cchart_7 cci cd censobs_table centile cf char chdir checkdlgfiles checkestimationsample checkhlpfiles checksum chelp ci cii cl class classutil clear cli clis clist clo clog clog_lf clog_p clogi clogi_sw clogit clogit_lf clogit_p clogitp clogl_sw cloglog clonevar clslistarray cluster cluster_measures cluster_stop cluster_tree cluster_tree_8 clustermat cmdlog cnr cnre cnreg cnreg_p cnreg_sw cnsreg codebook collaps4 collapse colormult_nb colormult_nw compare compress conf confi confir confirm conren cons const constr constra constrai constrain constraint continue contract copy copyright copysource cor corc corr corr2data corr_anti corr_kmo corr_smc corre correl correla correlat correlate corrgram cou coun count cox cox_p cox_sw coxbase coxhaz coxvar cprplot cprplot_7 crc cret cretu cretur creturn cross cs cscript cscript_log csi ct ct_is ctset ctst_5 ctst_st cttost cumsp cumsp_7 cumul cusum cusum_7 cutil d datasig datasign datasigna datasignat datasignatu datasignatur datasignature datetof db dbeta de dec deco decod decode deff des desc descr descri describ describe destring dfbeta dfgls dfuller di di_g dir dirstats dis discard disp disp_res disp_s displ displa display distinct do doe doed doedi doedit dotplot dotplot_7 dprobit drawnorm drop ds ds_util dstdize duplicates durbina dwstat dydx e ed edi edit egen eivreg emdef en enc enco encod encode eq erase ereg ereg_lf ereg_p ereg_sw ereghet ereghet_glf ereghet_glf_sh ereghet_gp ereghet_ilf ereghet_ilf_sh ereghet_ip eret eretu eretur ereturn err erro error est est_cfexist est_cfname est_clickable est_expand est_hold est_table est_unhold est_unholdok estat estat_default estat_summ estat_vce_only esti estimates etodow etof etomdy ex exi exit expand expandcl fac fact facto factor factor_estat factor_p factor_pca_rotated factor_rotate factormat fcast fcast_compute fcast_graph fdades fdadesc fdadescr fdadescri fdadescrib fdadescribe fdasav fdasave fdause fh_st file open file read file close file filefilter fillin find_hlp_file findfile findit findit_7 fit fl fli flis flist for5_0 form forma format fpredict frac_154 frac_adj frac_chk frac_cox frac_ddp frac_dis frac_dv frac_in frac_mun frac_pp frac_pq frac_pv frac_wgt frac_xo fracgen fracplot fracplot_7 fracpoly fracpred fron_ex fron_hn fron_p fron_tn fron_tn2 frontier ftodate ftoe ftomdy ftowdate g gamhet_glf gamhet_gp gamhet_ilf gamhet_ip gamma gamma_d2 gamma_p gamma_sw gammahet gdi_hexagon gdi_spokes ge gen gene gener genera generat generate genrank genstd genvmean gettoken gl gladder gladder_7 glim_l01 glim_l02 glim_l03 glim_l04 glim_l05 glim_l06 glim_l07 glim_l08 glim_l09 glim_l10 glim_l11 glim_l12 glim_lf glim_mu glim_nw1 glim_nw2 glim_nw3 glim_p glim_v1 glim_v2 glim_v3 glim_v4 glim_v5 glim_v6 glim_v7 glm glm_6 glm_p glm_sw glmpred glo glob globa global glogit glogit_8 glogit_p gmeans gnbre_lf gnbreg gnbreg_5 gnbreg_p gomp_lf gompe_sw gomper_p gompertz gompertzhet gomphet_glf gomphet_glf_sh gomphet_gp gomphet_ilf gomphet_ilf_sh gomphet_ip gphdot gphpen gphprint gprefs gprobi_p gprobit gprobit_8 gr gr7 gr_copy gr_current gr_db gr_describe gr_dir gr_draw gr_draw_replay gr_drop gr_edit gr_editviewopts gr_example gr_example2 gr_export gr_print gr_qscheme gr_query gr_read gr_rename gr_replay gr_save gr_set gr_setscheme gr_table gr_undo gr_use graph graph7 grebar greigen greigen_7 greigen_8 grmeanby grmeanby_7 gs_fileinfo gs_filetype gs_graphinfo gs_stat gsort gwood h hadimvo hareg hausman haver he heck_d2 heckma_p heckman heckp_lf heckpr_p heckprob hel help hereg hetpr_lf hetpr_p hetprob hettest hexdump hilite hist hist_7 histogram hlogit hlu hmeans hotel hotelling hprobit hreg hsearch icd9 icd9_ff icd9p iis impute imtest inbase include inf infi infil infile infix inp inpu input ins insheet insp inspe inspec inspect integ inten intreg intreg_7 intreg_p intrg2_ll intrg_ll intrg_ll2 ipolate iqreg ir irf irf_create irfm iri is_svy is_svysum isid istdize ivprob_1_lf ivprob_lf ivprobit ivprobit_p ivreg ivreg_footnote ivtob_1_lf ivtob_lf ivtobit ivtobit_p jackknife jacknife jknife jknife_6 jknife_8 jkstat joinby kalarma1 kap kap_3 kapmeier kappa kapwgt kdensity kdensity_7 keep ksm ksmirnov ktau kwallis l la lab labe label labelbook ladder levels levelsof leverage lfit lfit_p li lincom line linktest lis list lloghet_glf lloghet_glf_sh lloghet_gp lloghet_ilf lloghet_ilf_sh lloghet_ip llogi_sw llogis_p llogist llogistic llogistichet lnorm_lf lnorm_sw lnorma_p lnormal lnormalhet lnormhet_glf lnormhet_glf_sh lnormhet_gp lnormhet_ilf lnormhet_ilf_sh lnormhet_ip lnskew0 loadingplot loc loca local log logi logis_lf logistic logistic_p logit logit_estat logit_p loglogs logrank loneway lookfor lookup lowess lowess_7 lpredict lrecomp lroc lroc_7 lrtest ls lsens lsens_7 lsens_x lstat ltable ltable_7 ltriang lv lvr2plot lvr2plot_7 m ma mac macr macro makecns man manova manova_estat manova_p manovatest mantel mark markin markout marksample mat mat_capp mat_order mat_put_rr mat_rapp mata mata_clear mata_describe mata_drop mata_matdescribe mata_matsave mata_matuse mata_memory mata_mlib mata_mosave mata_rename mata_which matalabel matcproc matlist matname matr matri matrix matrix_input__dlg matstrik mcc mcci md0_ md1_ md1debug_ md2_ md2debug_ mds mds_estat mds_p mdsconfig mdslong mdsmat mdsshepard mdytoe mdytof me_derd mean means median memory memsize meqparse mer merg merge mfp mfx mhelp mhodds minbound mixed_ll mixed_ll_reparm mkassert mkdir mkmat mkspline ml ml_5 ml_adjs ml_bhhhs ml_c_d ml_check ml_clear ml_cnt ml_debug ml_defd ml_e0 ml_e0_bfgs ml_e0_cycle ml_e0_dfp ml_e0i ml_e1 ml_e1_bfgs ml_e1_bhhh ml_e1_cycle ml_e1_dfp ml_e2 ml_e2_cycle ml_ebfg0 ml_ebfr0 ml_ebfr1 ml_ebh0q ml_ebhh0 ml_ebhr0 ml_ebr0i ml_ecr0i ml_edfp0 ml_edfr0 ml_edfr1 ml_edr0i ml_eds ml_eer0i ml_egr0i ml_elf ml_elf_bfgs ml_elf_bhhh ml_elf_cycle ml_elf_dfp ml_elfi ml_elfs ml_enr0i ml_enrr0 ml_erdu0 ml_erdu0_bfgs ml_erdu0_bhhh ml_erdu0_bhhhq ml_erdu0_cycle ml_erdu0_dfp ml_erdu0_nrbfgs ml_exde ml_footnote ml_geqnr ml_grad0 ml_graph ml_hbhhh ml_hd0 ml_hold ml_init ml_inv ml_log ml_max ml_mlout ml_mlout_8 ml_model ml_nb0 ml_opt ml_p ml_plot ml_query ml_rdgrd ml_repor ml_s_e ml_score ml_searc ml_technique ml_unhold mleval mlf_ mlmatbysum mlmatsum mlog mlogi mlogit mlogit_footnote mlogit_p mlopts mlsum mlvecsum mnl0_ mor more mov move mprobit mprobit_lf mprobit_p mrdu0_ mrdu1_ mvdecode mvencode mvreg mvreg_estat n nbreg nbreg_al nbreg_lf nbreg_p nbreg_sw nestreg net newey newey_7 newey_p news nl nl_7 nl_9 nl_9_p nl_p nl_p_7 nlcom nlcom_p nlexp2 nlexp2_7 nlexp2a nlexp2a_7 nlexp3 nlexp3_7 nlgom3 nlgom3_7 nlgom4 nlgom4_7 nlinit nllog3 nllog3_7 nllog4 nllog4_7 nlog_rd nlogit nlogit_p nlogitgen nlogittree nlpred no nobreak noi nois noisi noisil noisily note notes notes_dlg nptrend numlabel numlist odbc old_ver olo olog ologi ologi_sw ologit ologit_p ologitp on one onew onewa oneway op_colnm op_comp op_diff op_inv op_str opr opro oprob oprob_sw oprobi oprobi_p oprobit oprobitp opts_exclusive order orthog orthpoly ou out outf outfi outfil outfile outs outsh outshe outshee outsheet ovtest pac pac_7 palette parse parse_dissim pause pca pca_8 pca_display pca_estat pca_p pca_rotate pcamat pchart pchart_7 pchi pchi_7 pcorr pctile pentium pergram pergram_7 permute permute_8 personal peto_st pkcollapse pkcross pkequiv pkexamine pkexamine_7 pkshape pksumm pksumm_7 pl plo plot plugin pnorm pnorm_7 poisgof poiss_lf poiss_sw poisso_p poisson poisson_estat post postclose postfile postutil pperron pr prais prais_e prais_e2 prais_p predict predictnl preserve print pro prob probi probit probit_estat probit_p proc_time procoverlay procrustes procrustes_estat procrustes_p profiler prog progr progra program prop proportion prtest prtesti pwcorr pwd q\\s qby qbys qchi qchi_7 qladder qladder_7 qnorm qnorm_7 qqplot qqplot_7 qreg qreg_c qreg_p qreg_sw qu quadchk quantile quantile_7 que quer query range ranksum ratio rchart rchart_7 rcof recast reclink recode reg reg3 reg3_p regdw regr regre regre_p2 regres regres_p regress regress_estat regriv_p remap ren rena renam rename renpfix repeat replace report reshape restore ret retu retur return rm rmdir robvar roccomp roccomp_7 roccomp_8 rocf_lf rocfit rocfit_8 rocgold rocplot rocplot_7 roctab roctab_7 rolling rologit rologit_p rot rota rotat rotate rotatemat rreg rreg_p ru run runtest rvfplot rvfplot_7 rvpplot rvpplot_7 sa safesum sample sampsi sav save savedresults saveold sc sca scal scala scalar scatter scm_mine sco scob_lf scob_p scobi_sw scobit scor score scoreplot scoreplot_help scree screeplot screeplot_help sdtest sdtesti se search separate seperate serrbar serrbar_7 serset set set_defaults sfrancia sh she shel shell shewhart shewhart_7 signestimationsample signrank signtest simul simul_7 simulate simulate_8 sktest sleep slogit slogit_d2 slogit_p smooth snapspan so sor sort spearman spikeplot spikeplot_7 spikeplt spline_x split sqreg sqreg_p sret sretu sretur sreturn ssc st st_ct st_hc st_hcd st_hcd_sh st_is st_issys st_note st_promo st_set st_show st_smpl st_subid stack statsby statsby_8 stbase stci stci_7 stcox stcox_estat stcox_fr stcox_fr_ll stcox_p stcox_sw stcoxkm stcoxkm_7 stcstat stcurv stcurve stcurve_7 stdes stem stepwise stereg stfill stgen stir stjoin stmc stmh stphplot stphplot_7 stphtest stphtest_7 stptime strate strate_7 streg streg_sw streset sts sts_7 stset stsplit stsum sttocc sttoct stvary stweib su suest suest_8 sum summ summa summar summari summariz summarize sunflower sureg survcurv survsum svar svar_p svmat svy svy_disp svy_dreg svy_est svy_est_7 svy_estat svy_get svy_gnbreg_p svy_head svy_header svy_heckman_p svy_heckprob_p svy_intreg_p svy_ivreg_p svy_logistic_p svy_logit_p svy_mlogit_p svy_nbreg_p svy_ologit_p svy_oprobit_p svy_poisson_p svy_probit_p svy_regress_p svy_sub svy_sub_7 svy_x svy_x_7 svy_x_p svydes svydes_8 svygen svygnbreg svyheckman svyheckprob svyintreg svyintreg_7 svyintrg svyivreg svylc svylog_p svylogit svymarkout svymarkout_8 svymean svymlog svymlogit svynbreg svyolog svyologit svyoprob svyoprobit svyopts svypois svypois_7 svypoisson svyprobit svyprobt svyprop svyprop_7 svyratio svyreg svyreg_p svyregress svyset svyset_7 svyset_8 svytab svytab_7 svytest svytotal sw sw_8 swcnreg swcox swereg swilk swlogis swlogit swologit swoprbt swpois swprobit swqreg swtobit swweib symmetry symmi symplot symplot_7 syntax sysdescribe sysdir sysuse szroeter ta tab tab1 tab2 tab_or tabd tabdi tabdis tabdisp tabi table tabodds tabodds_7 tabstat tabu tabul tabula tabulat tabulate te tempfile tempname tempvar tes test testnl testparm teststd tetrachoric time_it timer tis tob tobi tobit tobit_p tobit_sw token tokeni tokeniz tokenize tostring total translate translator transmap treat_ll treatr_p treatreg trim trnb_cons trnb_mean trpoiss_d2 trunc_ll truncr_p truncreg tsappend tset tsfill tsline tsline_ex tsreport tsrevar tsrline tsset tssmooth tsunab ttest ttesti tut_chk tut_wait tutorial tw tware_st two twoway twoway__fpfit_serset twoway__function_gen twoway__histogram_gen twoway__ipoint_serset twoway__ipoints_serset twoway__kdensity_gen twoway__lfit_serset twoway__normgen_gen twoway__pci_serset twoway__qfit_serset twoway__scatteri_serset twoway__sunflower_gen twoway_ksm_serset ty typ type typeof u unab unabbrev unabcmd update us use uselabel var var_mkcompanion var_p varbasic varfcast vargranger varirf varirf_add varirf_cgraph varirf_create varirf_ctable varirf_describe varirf_dir varirf_drop varirf_erase varirf_graph varirf_ograph varirf_rename varirf_set varirf_table varlist varlmar varnorm varsoc varstable varstable_w varstable_w2 varwle vce vec vec_fevd vec_mkphi vec_p vec_p_w vecirf_create veclmar veclmar_w vecnorm vecnorm_w vecrank vecstable verinst vers versi versio version view viewsource vif vwls wdatetof webdescribe webseek webuse weib1_lf weib2_lf weib_lf weib_lf0 weibhet_glf weibhet_glf_sh weibhet_glfa weibhet_glfa_sh weibhet_gp weibhet_ilf weibhet_ilf_sh weibhet_ilfa weibhet_ilfa_sh weibhet_ip weibu_sw weibul_p weibull weibull_c weibull_s weibullhet wh whelp whi which whil while wilc_st wilcoxon win wind windo window winexec wntestb wntestb_7 wntestq xchart xchart_7 xcorr xcorr_7 xi xi_6 xmlsav xmlsave xmluse xpose xsh xshe xshel xshell xt_iis xt_tis xtab_p xtabond xtbin_p xtclog xtcloglog xtcloglog_8 xtcloglog_d2 xtcloglog_pa_p xtcloglog_re_p xtcnt_p xtcorr xtdata xtdes xtfront_p xtfrontier xtgee xtgee_elink xtgee_estat xtgee_makeivar xtgee_p xtgee_plink xtgls xtgls_p xthaus xthausman xtht_p xthtaylor xtile xtint_p xtintreg xtintreg_8 xtintreg_d2 xtintreg_p xtivp_1 xtivp_2 xtivreg xtline xtline_ex xtlogit xtlogit_8 xtlogit_d2 xtlogit_fe_p xtlogit_pa_p xtlogit_re_p xtmixed xtmixed_estat xtmixed_p xtnb_fe xtnb_lf xtnbreg xtnbreg_pa_p xtnbreg_refe_p xtpcse xtpcse_p xtpois xtpoisson xtpoisson_d2 xtpoisson_pa_p xtpoisson_refe_p xtpred xtprobit xtprobit_8 xtprobit_d2 xtprobit_re_p xtps_fe xtps_lf xtps_ren xtps_ren_8 xtrar_p xtrc xtrc_p xtrchh xtrefe_p xtreg xtreg_be xtreg_fe xtreg_ml xtreg_pa_p xtreg_re xtregar xtrere_p xtset xtsf_ll xtsf_llti xtsum xttab xttest0 xttobit xttobit_8 xttobit_p xttrans yx yxview__barlike_draw yxview_area_draw yxview_bar_draw yxview_dot_draw yxview_dropline_draw yxview_function_draw yxview_iarrow_draw yxview_ilabels_draw yxview_normal_draw yxview_pcarrow_draw yxview_pcbarrow_draw yxview_pccapsym_draw yxview_pcscatter_draw yxview_pcspike_draw yxview_rarea_draw yxview_rbar_draw yxview_rbarm_draw yxview_rcap_draw yxview_rcapsym_draw yxview_rconnected_draw yxview_rline_draw yxview_rscatter_draw yxview_rspike_draw yxview_spike_draw yxview_sunflower_draw zap_s zinb zinb_llf zinb_plf zip zip_llf zip_p zip_plf zt_ct_5 zt_hc_5 zt_hcd_5 zt_is_5 zt_iss_5 zt_sho_5 zt_smp_5 ztbase_5 ztcox_5 ztdes_5 ztereg_5 ztfill_5 ztgen_5 ztir_5 ztjoin_5 ztnb ztnb_p ztp ztp_p zts_5 ztset_5 ztspli_5 ztsum_5 zttoct_5 ztvary_5 ztweib_5',
	    contains: [{
	      className: 'label',
	      variants: [{ begin: "\\$\\{?[a-zA-Z0-9_]+\\}?" }, { begin: "`[a-zA-Z0-9_]+'" }]
	    }, {
	      className: 'string',
	      variants: [{ begin: '`"[^\r\n]*?"\'' }, { begin: '"[^\r\n"]*"' }]
	    }, {
	      className: 'literal',
	      variants: [{
	        begin: '\\b(abs|acos|asin|atan|atan2|atanh|ceil|cloglog|comb|cos|digamma|exp|floor|invcloglog|invlogit|ln|lnfact|lnfactorial|lngamma|log|log10|max|min|mod|reldif|round|sign|sin|sqrt|sum|tan|tanh|trigamma|trunc|betaden|Binomial|binorm|binormal|chi2|chi2tail|dgammapda|dgammapdada|dgammapdadx|dgammapdx|dgammapdxdx|F|Fden|Ftail|gammaden|gammap|ibeta|invbinomial|invchi2|invchi2tail|invF|invFtail|invgammap|invibeta|invnchi2|invnFtail|invnibeta|invnorm|invnormal|invttail|nbetaden|nchi2|nFden|nFtail|nibeta|norm|normal|normalden|normd|npnchi2|tden|ttail|uniform|abbrev|char|index|indexnot|length|lower|ltrim|match|plural|proper|real|regexm|regexr|regexs|reverse|rtrim|string|strlen|strlower|strltrim|strmatch|strofreal|strpos|strproper|strreverse|strrtrim|strtrim|strupper|subinstr|subinword|substr|trim|upper|word|wordcount|_caller|autocode|byteorder|chop|clip|cond|e|epsdouble|epsfloat|group|inlist|inrange|irecode|matrix|maxbyte|maxdouble|maxfloat|maxint|maxlong|mi|minbyte|mindouble|minfloat|minint|minlong|missing|r|recode|replay|return|s|scalar|d|date|day|dow|doy|halfyear|mdy|month|quarter|week|year|d|daily|dofd|dofh|dofm|dofq|dofw|dofy|h|halfyearly|hofd|m|mofd|monthly|q|qofd|quarterly|tin|twithin|w|weekly|wofd|y|yearly|yh|ym|yofd|yq|yw|cholesky|colnumb|colsof|corr|det|diag|diag0cnt|el|get|hadamard|I|inv|invsym|issym|issymmetric|J|matmissing|matuniform|mreldif|nullmat|rownumb|rowsof|sweep|syminv|trace|vec|vecdiag)(?=\\(|$)'
	      }]
	    }, hljs.COMMENT('^[ \t]*\\*.*$', false), hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE]
	  };
	};

/***/ },
/* 311 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var STEP21_IDENT_RE = '[A-Z_][A-Z0-9_.]*';
	  var STEP21_CLOSE_RE = 'END-ISO-10303-21;';
	  var STEP21_KEYWORDS = {
	    literal: '',
	    built_in: '',
	    keyword: 'HEADER ENDSEC DATA'
	  };
	  var STEP21_START = {
	    className: 'preprocessor',
	    begin: 'ISO-10303-21;',
	    relevance: 10
	  };
	  var STEP21_CODE = [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.COMMENT('/\\*\\*!', '\\*/'), hljs.C_NUMBER_MODE, hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }), {
	    className: 'string',
	    begin: "'", end: "'"
	  }, {
	    className: 'label',
	    variants: [{
	      begin: '#', end: '\\d+',
	      illegal: '\\W'
	    }]
	  }];

	  return {
	    aliases: ['p21', 'step', 'stp'],
	    case_insensitive: true, // STEP 21 is case insensitive in theory, in practice all non-comments are capitalized.
	    lexemes: STEP21_IDENT_RE,
	    keywords: STEP21_KEYWORDS,
	    contains: [{
	      className: 'preprocessor',
	      begin: STEP21_CLOSE_RE,
	      relevance: 10
	    }, STEP21_START].concat(STEP21_CODE)
	  };
	};

/***/ },
/* 312 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {

	  var VARIABLE = {
	    className: 'variable',
	    begin: '\\$' + hljs.IDENT_RE
	  };

	  var HEX_COLOR = {
	    className: 'hexcolor',
	    begin: '#([a-fA-F0-9]{6}|[a-fA-F0-9]{3})',
	    relevance: 10
	  };

	  var AT_KEYWORDS = ['charset', 'css', 'debug', 'extend', 'font-face', 'for', 'import', 'include', 'media', 'mixin', 'page', 'warn', 'while'];

	  var PSEUDO_SELECTORS = ['after', 'before', 'first-letter', 'first-line', 'active', 'first-child', 'focus', 'hover', 'lang', 'link', 'visited'];

	  var TAGS = ['a', 'abbr', 'address', 'article', 'aside', 'audio', 'b', 'blockquote', 'body', 'button', 'canvas', 'caption', 'cite', 'code', 'dd', 'del', 'details', 'dfn', 'div', 'dl', 'dt', 'em', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'header', 'hgroup', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'mark', 'menu', 'nav', 'object', 'ol', 'p', 'q', 'quote', 'samp', 'section', 'span', 'strong', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'ul', 'var', 'video'];

	  var TAG_END = '[\\.\\s\\n\\[\\:,]';

	  var ATTRIBUTES = ['align-content', 'align-items', 'align-self', 'animation', 'animation-delay', 'animation-direction', 'animation-duration', 'animation-fill-mode', 'animation-iteration-count', 'animation-name', 'animation-play-state', 'animation-timing-function', 'auto', 'backface-visibility', 'background', 'background-attachment', 'background-clip', 'background-color', 'background-image', 'background-origin', 'background-position', 'background-repeat', 'background-size', 'border', 'border-bottom', 'border-bottom-color', 'border-bottom-left-radius', 'border-bottom-right-radius', 'border-bottom-style', 'border-bottom-width', 'border-collapse', 'border-color', 'border-image', 'border-image-outset', 'border-image-repeat', 'border-image-slice', 'border-image-source', 'border-image-width', 'border-left', 'border-left-color', 'border-left-style', 'border-left-width', 'border-radius', 'border-right', 'border-right-color', 'border-right-style', 'border-right-width', 'border-spacing', 'border-style', 'border-top', 'border-top-color', 'border-top-left-radius', 'border-top-right-radius', 'border-top-style', 'border-top-width', 'border-width', 'bottom', 'box-decoration-break', 'box-shadow', 'box-sizing', 'break-after', 'break-before', 'break-inside', 'caption-side', 'clear', 'clip', 'clip-path', 'color', 'column-count', 'column-fill', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-style', 'column-rule-width', 'column-span', 'column-width', 'columns', 'content', 'counter-increment', 'counter-reset', 'cursor', 'direction', 'display', 'empty-cells', 'filter', 'flex', 'flex-basis', 'flex-direction', 'flex-flow', 'flex-grow', 'flex-shrink', 'flex-wrap', 'float', 'font', 'font-family', 'font-feature-settings', 'font-kerning', 'font-language-override', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-variant-ligatures', 'font-weight', 'height', 'hyphens', 'icon', 'image-orientation', 'image-rendering', 'image-resolution', 'ime-mode', 'inherit', 'initial', 'justify-content', 'left', 'letter-spacing', 'line-height', 'list-style', 'list-style-image', 'list-style-position', 'list-style-type', 'margin', 'margin-bottom', 'margin-left', 'margin-right', 'margin-top', 'marks', 'mask', 'max-height', 'max-width', 'min-height', 'min-width', 'nav-down', 'nav-index', 'nav-left', 'nav-right', 'nav-up', 'none', 'normal', 'object-fit', 'object-position', 'opacity', 'order', 'orphans', 'outline', 'outline-color', 'outline-offset', 'outline-style', 'outline-width', 'overflow', 'overflow-wrap', 'overflow-x', 'overflow-y', 'padding', 'padding-bottom', 'padding-left', 'padding-right', 'padding-top', 'page-break-after', 'page-break-before', 'page-break-inside', 'perspective', 'perspective-origin', 'pointer-events', 'position', 'quotes', 'resize', 'right', 'tab-size', 'table-layout', 'text-align', 'text-align-last', 'text-decoration', 'text-decoration-color', 'text-decoration-line', 'text-decoration-style', 'text-indent', 'text-overflow', 'text-rendering', 'text-shadow', 'text-transform', 'text-underline-position', 'top', 'transform', 'transform-origin', 'transform-style', 'transition', 'transition-delay', 'transition-duration', 'transition-property', 'transition-timing-function', 'unicode-bidi', 'vertical-align', 'visibility', 'white-space', 'widows', 'width', 'word-break', 'word-spacing', 'word-wrap', 'z-index'];

	  // illegals
	  var ILLEGAL = ['\\{', '\\}', '\\?', '(\\bReturn\\b)', // monkey
	  '(\\bEnd\\b)', // monkey
	  '(\\bend\\b)', // vbscript
	  ';', // sql
	  '#\\s', // markdown
	  '\\*\\s', // markdown
	  '===\\s', // markdown
	  '\\|', '%'];

	  // prolog
	  return {
	    aliases: ['styl'],
	    case_insensitive: false,
	    illegal: '(' + ILLEGAL.join('|') + ')',
	    keywords: 'if else for in',
	    contains: [

	    // strings
	    hljs.QUOTE_STRING_MODE, hljs.APOS_STRING_MODE,

	    // comments
	    hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE,

	    // hex colors
	    HEX_COLOR,

	    // class tag
	    {
	      begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
	      returnBegin: true,
	      contains: [{ className: 'class', begin: '\\.[a-zA-Z][a-zA-Z0-9_-]*' }]
	    },

	    // id tag
	    {
	      begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*' + TAG_END,
	      returnBegin: true,
	      contains: [{ className: 'id', begin: '\\#[a-zA-Z][a-zA-Z0-9_-]*' }]
	    },

	    // tags
	    {
	      begin: '\\b(' + TAGS.join('|') + ')' + TAG_END,
	      returnBegin: true,
	      contains: [{ className: 'tag', begin: '\\b[a-zA-Z][a-zA-Z0-9_-]*' }]
	    },

	    // psuedo selectors
	    {
	      className: 'pseudo',
	      begin: '&?:?:\\b(' + PSEUDO_SELECTORS.join('|') + ')' + TAG_END
	    },

	    // @ keywords
	    {
	      className: 'at_rule',
	      begin: '\@(' + AT_KEYWORDS.join('|') + ')\\b'
	    },

	    // variables
	    VARIABLE,

	    // dimension
	    hljs.CSS_NUMBER_MODE,

	    // number
	    hljs.NUMBER_MODE,

	    // functions
	    //  - only from beginning of line + whitespace
	    {
	      className: 'function',
	      begin: '\\b[a-zA-Z][a-zA-Z0-9_\-]*\\(.*\\)',
	      illegal: '[\\n]',
	      returnBegin: true,
	      contains: [{ className: 'title', begin: '\\b[a-zA-Z][a-zA-Z0-9_\-]*' }, {
	        className: 'params',
	        begin: /\(/,
	        end: /\)/,
	        contains: [HEX_COLOR, VARIABLE, hljs.APOS_STRING_MODE, hljs.CSS_NUMBER_MODE, hljs.NUMBER_MODE, hljs.QUOTE_STRING_MODE]
	      }]
	    },

	    // attributes
	    //  - only from beginning of line + whitespace
	    //  - must have whitespace after it
	    {
	      className: 'attribute',
	      begin: '\\b(' + ATTRIBUTES.reverse().join('|') + ')\\b'
	    }]
	  };
	};

/***/ },
/* 313 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var SWIFT_KEYWORDS = {
	    keyword: 'class deinit enum extension func import init let protocol static ' + 'struct subscript typealias var break case continue default do ' + 'else fallthrough if in for return switch where while as dynamicType ' + 'is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ ' + '__LINE__ associativity didSet get infix inout left mutating none ' + 'nonmutating operator override postfix precedence prefix right set ' + 'unowned unowned safe unsafe weak willSet',
	    literal: 'true false nil',
	    built_in: 'abs advance alignof alignofValue assert bridgeFromObjectiveC ' + 'bridgeFromObjectiveCUnconditional bridgeToObjectiveC ' + 'bridgeToObjectiveCUnconditional c contains count countElements ' + 'countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump ' + 'encodeBitsAsWords enumerate equal filter find getBridgedObjectiveCType ' + 'getVaList indices insertionSort isBridgedToObjectiveC ' + 'isBridgedVerbatimToObjectiveC isUniquelyReferenced join ' + 'lexicographicalCompare map max maxElement min minElement numericCast ' + 'partition posix print println quickSort reduce reflect reinterpretCast ' + 'reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof ' + 'strideofValue swap swift toString transcode underestimateCount ' + 'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' + 'withUnsafePointerToObject withUnsafePointers withVaList'
	  };

	  var TYPE = {
	    className: 'type',
	    begin: '\\b[A-Z][\\w\']*',
	    relevance: 0
	  };
	  var BLOCK_COMMENT = hljs.COMMENT('/\\*', '\\*/', {
	    contains: ['self']
	  });
	  var SUBST = {
	    className: 'subst',
	    begin: /\\\(/, end: '\\)',
	    keywords: SWIFT_KEYWORDS,
	    contains: [] // assigned later
	  };
	  var NUMBERS = {
	    className: 'number',
	    begin: '\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b',
	    relevance: 0
	  };
	  var QUOTE_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, {
	    contains: [SUBST, hljs.BACKSLASH_ESCAPE]
	  });
	  SUBST.contains = [NUMBERS];

	  return {
	    keywords: SWIFT_KEYWORDS,
	    contains: [QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT, TYPE, NUMBERS, {
	      className: 'func',
	      beginKeywords: 'func', end: '{', excludeEnd: true,
	      contains: [hljs.inherit(hljs.TITLE_MODE, {
	        begin: /[A-Za-z$_][0-9A-Za-z$_]*/,
	        illegal: /\(/
	      }), {
	        className: 'generics',
	        begin: /</, end: />/,
	        illegal: />/
	      }, {
	        className: 'params',
	        begin: /\(/, end: /\)/, endsParent: true,
	        keywords: SWIFT_KEYWORDS,
	        contains: ['self', NUMBERS, QUOTE_STRING_MODE, hljs.C_BLOCK_COMMENT_MODE, { begin: ':' } // relevance booster
	        ],
	        illegal: /["']/
	      }],
	      illegal: /\[|%/
	    }, {
	      className: 'class',
	      beginKeywords: 'struct protocol class extension enum',
	      keywords: SWIFT_KEYWORDS,
	      end: '\\{',
	      excludeEnd: true,
	      contains: [hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ })]
	    }, {
	      className: 'preprocessor', // @attributes
	      begin: '(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|' + '@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|' + '@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|' + '@infix|@prefix|@postfix)'
	    }]
	  };
	};

/***/ },
/* 314 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['tk'],
	    keywords: 'after append apply array auto_execok auto_import auto_load auto_mkindex ' + 'auto_mkindex_old auto_qualify auto_reset bgerror binary break catch cd chan clock ' + 'close concat continue dde dict encoding eof error eval exec exit expr fblocked ' + 'fconfigure fcopy file fileevent filename flush for foreach format gets glob global ' + 'history http if incr info interp join lappend|10 lassign|10 lindex|10 linsert|10 list ' + 'llength|10 load lrange|10 lrepeat|10 lreplace|10 lreverse|10 lsearch|10 lset|10 lsort|10 ' + 'mathfunc mathop memory msgcat namespace open package parray pid pkg::create pkg_mkIndex ' + 'platform platform::shell proc puts pwd read refchan regexp registry regsub|10 rename ' + 'return safe scan seek set socket source split string subst switch tcl_endOfWord ' + 'tcl_findLibrary tcl_startOfNextWord tcl_startOfPreviousWord tcl_wordBreakAfter ' + 'tcl_wordBreakBefore tcltest tclvars tell time tm trace unknown unload unset update ' + 'uplevel upvar variable vwait while',
	    contains: [hljs.COMMENT(';[ \\t]*#', '$'), hljs.COMMENT('^[ \\t]*#', '$'), {
	      beginKeywords: 'proc',
	      end: '[\\{]',
	      excludeEnd: true,
	      contains: [{
	        className: 'symbol',
	        begin: '[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
	        end: '[ \\t\\n\\r]',
	        endsWithParent: true,
	        excludeEnd: true
	      }]
	    }, {
	      className: 'variable',
	      excludeEnd: true,
	      variants: [{
	        begin: '\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*\\(([a-zA-Z0-9_])*\\)',
	        end: '[^a-zA-Z0-9_\\}\\$]'
	      }, {
	        begin: '\\$(\\{)?(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
	        end: '(\\))?[^a-zA-Z0-9_\\}\\$]'
	      }]
	    }, {
	      className: 'string',
	      contains: [hljs.BACKSLASH_ESCAPE],
	      variants: [hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })]
	    }, {
	      className: 'number',
	      variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE]
	    }]
	  };
	};

/***/ },
/* 315 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var COMMAND1 = {
	    className: 'command',
	    begin: '\\\\[a-zA-Zа-яА-я]+[\\*]?'
	  };
	  var COMMAND2 = {
	    className: 'command',
	    begin: '\\\\[^a-zA-Zа-яА-я0-9]'
	  };
	  var SPECIAL = {
	    className: 'special',
	    begin: '[{}\\[\\]\\&#~]',
	    relevance: 0
	  };

	  return {
	    contains: [{ // parameter
	      begin: '\\\\[a-zA-Zа-яА-я]+[\\*]? *= *-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?',
	      returnBegin: true,
	      contains: [COMMAND1, COMMAND2, {
	        className: 'number',
	        begin: ' *=', end: '-?\\d*\\.?\\d+(pt|pc|mm|cm|in|dd|cc|ex|em)?',
	        excludeBegin: true
	      }],
	      relevance: 10
	    }, COMMAND1, COMMAND2, SPECIAL, {
	      className: 'formula',
	      begin: '\\$\\$', end: '\\$\\$',
	      contains: [COMMAND1, COMMAND2, SPECIAL],
	      relevance: 0
	    }, {
	      className: 'formula',
	      begin: '\\$', end: '\\$',
	      contains: [COMMAND1, COMMAND2, SPECIAL],
	      relevance: 0
	    }, hljs.COMMENT('%', '$', {
	      relevance: 0
	    })]
	  };
	};

/***/ },
/* 316 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var BUILT_IN_TYPES = 'bool byte i16 i32 i64 double string binary';
	  return {
	    keywords: {
	      keyword: 'namespace const typedef struct enum service exception void oneway set list map required optional',
	      built_in: BUILT_IN_TYPES,
	      literal: 'true false'
	    },
	    contains: [hljs.QUOTE_STRING_MODE, hljs.NUMBER_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'class',
	      beginKeywords: 'struct enum service exception', end: /\{/,
	      illegal: /\n/,
	      contains: [hljs.inherit(hljs.TITLE_MODE, {
	        starts: { endsWithParent: true, excludeEnd: true } // hack: eating everything after the first title
	      })]
	    }, {
	      begin: '\\b(set|list|map)\\s*<', end: '>',
	      keywords: BUILT_IN_TYPES,
	      contains: ['self']
	    }]
	  };
	};

/***/ },
/* 317 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var TPID = {
	    className: 'number',
	    begin: '[1-9][0-9]*', /* no leading zeros */
	    relevance: 0
	  };
	  var TPLABEL = {
	    className: 'comment',
	    begin: ':[^\\]]+'
	  };
	  var TPDATA = {
	    className: 'built_in',
	    begin: '(AR|P|PAYLOAD|PR|R|SR|RSR|LBL|VR|UALM|MESSAGE|UTOOL|UFRAME|TIMER|\
	    TIMER_OVERFLOW|JOINT_MAX_SPEED|RESUME_PROG|DIAG_REC)\\[', end: '\\]',
	    contains: ['self', TPID, TPLABEL]
	  };
	  var TPIO = {
	    className: 'built_in',
	    begin: '(AI|AO|DI|DO|F|RI|RO|UI|UO|GI|GO|SI|SO)\\[', end: '\\]',
	    contains: ['self', TPID, hljs.QUOTE_STRING_MODE, /* for pos section at bottom */
	    TPLABEL]
	  };

	  return {
	    keywords: {
	      keyword: 'ABORT ACC ADJUST AND AP_LD BREAK CALL CNT COL CONDITION CONFIG DA DB ' + 'DIV DETECT ELSE END ENDFOR ERR_NUM ERROR_PROG FINE FOR GP GUARD INC ' + 'IF JMP LINEAR_MAX_SPEED LOCK MOD MONITOR OFFSET Offset OR OVERRIDE ' + 'PAUSE PREG PTH RT_LD RUN SELECT SKIP Skip TA TB TO TOOL_OFFSET ' + 'Tool_Offset UF UT UFRAME_NUM UTOOL_NUM UNLOCK WAIT X Y Z W P R STRLEN ' + 'SUBSTR FINDSTR VOFFSET',
	      constant: 'ON OFF max_speed LPOS JPOS ENABLE DISABLE START STOP RESET'
	    },
	    contains: [TPDATA, TPIO, {
	      className: 'keyword',
	      begin: '/(PROG|ATTR|MN|POS|END)\\b'
	    }, {
	      /* this is for cases like ,CALL */
	      className: 'keyword',
	      begin: '(CALL|RUN|POINT_LOGIC|LBL)\\b'
	    }, {
	      /* this is for cases like CNT100 where the default lexemes do not
	       * separate the keyword and the number */
	      className: 'keyword',
	      begin: '\\b(ACC|CNT|Skip|Offset|PSPD|RT_LD|AP_LD|Tool_Offset)'
	    }, {
	      /* to catch numbers that do not have a word boundary on the left */
	      className: 'number',
	      begin: '\\d+(sec|msec|mm/sec|cm/min|inch/min|deg/sec|mm|in|cm)?\\b',
	      relevance: 0
	    }, hljs.COMMENT('//', '[;$]'), hljs.COMMENT('!', '[;$]'), hljs.COMMENT('--eg:', '$'), hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      begin: '\'', end: '\''
	    }, hljs.C_NUMBER_MODE, {
	      className: 'variable',
	      begin: '\\$[A-Za-z0-9_]+'
	    }]
	  };
	};

/***/ },
/* 318 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var PARAMS = {
	    className: 'params',
	    begin: '\\(', end: '\\)'
	  };

	  var FUNCTION_NAMES = 'attribute block constant cycle date dump include ' + 'max min parent random range source template_from_string';

	  var FUNCTIONS = {
	    className: 'function',
	    beginKeywords: FUNCTION_NAMES,
	    relevance: 0,
	    contains: [PARAMS]
	  };

	  var FILTER = {
	    className: 'filter',
	    begin: /\|[A-Za-z_]+:?/,
	    keywords: 'abs batch capitalize convert_encoding date date_modify default ' + 'escape first format join json_encode keys last length lower ' + 'merge nl2br number_format raw replace reverse round slice sort split ' + 'striptags title trim upper url_encode',
	    contains: [FUNCTIONS]
	  };

	  var TAGS = 'autoescape block do embed extends filter flush for ' + 'if import include macro sandbox set spaceless use verbatim';

	  TAGS = TAGS + ' ' + TAGS.split(' ').map(function (t) {
	    return 'end' + t;
	  }).join(' ');

	  return {
	    aliases: ['craftcms'],
	    case_insensitive: true,
	    subLanguage: 'xml',
	    contains: [hljs.COMMENT(/\{#/, /#}/), {
	      className: 'template_tag',
	      begin: /\{%/, end: /%}/,
	      keywords: TAGS,
	      contains: [FILTER, FUNCTIONS]
	    }, {
	      className: 'variable',
	      begin: /\{\{/, end: /}}/,
	      contains: [FILTER, FUNCTIONS]
	    }]
	  };
	};

/***/ },
/* 319 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = {
	    keyword: 'in if for while finally var new function|0 do return void else break catch ' + 'instanceof with throw case default try this switch continue typeof delete ' + 'let yield const class public private get set super ' + 'static implements enum export import declare type protected',
	    literal: 'true false null undefined NaN Infinity',
	    built_in: 'eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent ' + 'encodeURI encodeURIComponent escape unescape Object Function Boolean Error ' + 'EvalError InternalError RangeError ReferenceError StopIteration SyntaxError ' + 'TypeError URIError Number Math Date String RegExp Array Float32Array ' + 'Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array ' + 'Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require ' + 'module console window document any number boolean string void'
	  };

	  return {
	    aliases: ['ts'],
	    keywords: KEYWORDS,
	    contains: [{
	      className: 'pi',
	      begin: /^\s*['"]use strict['"]/,
	      relevance: 0
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'number',
	      variants: [{ begin: '\\b(0[bB][01]+)' }, { begin: '\\b(0[oO][0-7]+)' }, { begin: hljs.C_NUMBER_RE }],
	      relevance: 0
	    }, { // "value" container
	      begin: '(' + hljs.RE_STARTERS_RE + '|\\b(case|return|throw)\\b)\\s*',
	      keywords: 'return throw case',
	      contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, hljs.REGEXP_MODE],
	      relevance: 0
	    }, {
	      className: 'function',
	      begin: 'function', end: /[\{;]/, excludeEnd: true,
	      keywords: KEYWORDS,
	      contains: ['self', hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/ }), {
	        className: 'params',
	        begin: /\(/, end: /\)/,
	        excludeBegin: true,
	        excludeEnd: true,
	        keywords: KEYWORDS,
	        contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE],
	        illegal: /["'\(]/
	      }],
	      illegal: /\[|%/,
	      relevance: 0 // () => {} is more typical in TypeScript
	    }, {
	      className: 'constructor',
	      beginKeywords: 'constructor', end: /\{/, excludeEnd: true,
	      relevance: 10
	    }, {
	      className: 'module',
	      beginKeywords: 'module', end: /\{/, excludeEnd: true
	    }, {
	      className: 'interface',
	      beginKeywords: 'interface', end: /\{/, excludeEnd: true,
	      keywords: 'interface extends'
	    }, {
	      begin: /\$[(.]/ // relevance booster for a pattern common to JS libs: `$(something)` and `$.something`
	    }, {
	      begin: '\\.' + hljs.IDENT_RE, relevance: 0 // hack: prevents detection of keywords after dots
	    }]
	  };
	};

/***/ },
/* 320 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    keywords: {
	      keyword:
	      // Value types
	      'char uchar unichar int uint long ulong short ushort int8 int16 int32 int64 uint8 ' + 'uint16 uint32 uint64 float double bool struct enum string void ' +
	      // Reference types
	      'weak unowned owned ' +
	      // Modifiers
	      'async signal static abstract interface override ' +
	      // Control Structures
	      'while do for foreach else switch case break default return try catch ' +
	      // Visibility
	      'public private protected internal ' +
	      // Other
	      'using new this get set const stdout stdin stderr var',
	      built_in: 'DBus GLib CCode Gee Object',
	      literal: 'false true null'
	    },
	    contains: [{
	      className: 'class',
	      beginKeywords: 'class interface delegate namespace', end: '{', excludeEnd: true,
	      illegal: '[^,:\\n\\s\\.]',
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, {
	      className: 'string',
	      begin: '"""', end: '"""',
	      relevance: 5
	    }, hljs.APOS_STRING_MODE, hljs.QUOTE_STRING_MODE, hljs.C_NUMBER_MODE, {
	      className: 'preprocessor',
	      begin: '^#', end: '$',
	      relevance: 2
	    }, {
	      className: 'constant',
	      begin: ' [A-Z_]+ ',
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 321 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['vb'],
	    case_insensitive: true,
	    keywords: {
	      keyword: 'addhandler addressof alias and andalso aggregate ansi as assembly auto binary by byref byval ' + /* a-b */
	      'call case catch class compare const continue custom declare default delegate dim distinct do ' + /* c-d */
	      'each equals else elseif end enum erase error event exit explicit finally for friend from function ' + /* e-f */
	      'get global goto group handles if implements imports in inherits interface into is isfalse isnot istrue ' + /* g-i */
	      'join key let lib like loop me mid mod module mustinherit mustoverride mybase myclass ' + /* j-m */
	      'namespace narrowing new next not notinheritable notoverridable ' + /* n */
	      'of off on operator option optional or order orelse overloads overridable overrides ' + /* o */
	      'paramarray partial preserve private property protected public ' + /* p */
	      'raiseevent readonly redim rem removehandler resume return ' + /* r */
	      'select set shadows shared skip static step stop structure strict sub synclock ' + /* s */
	      'take text then throw to try unicode until using when where while widening with withevents writeonly xor', /* t-x */
	      built_in: 'boolean byte cbool cbyte cchar cdate cdec cdbl char cint clng cobj csbyte cshort csng cstr ctype ' + /* b-c */
	      'date decimal directcast double gettype getxmlnamespace iif integer long object ' + /* d-o */
	      'sbyte short single string trycast typeof uinteger ulong ushort', /* s-u */
	      literal: 'true false nothing'
	    },
	    illegal: '//|{|}|endif|gosub|variant|wend', /* reserved deprecated keywords */
	    contains: [hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [{ begin: '""' }] }), hljs.COMMENT('\'', '$', {
	      returnBegin: true,
	      contains: [{
	        className: 'xmlDocTag',
	        begin: '\'\'\'|<!--|-->',
	        contains: [hljs.PHRASAL_WORDS_MODE]
	      }, {
	        className: 'xmlDocTag',
	        begin: '</?', end: '>',
	        contains: [hljs.PHRASAL_WORDS_MODE]
	      }]
	    }), hljs.C_NUMBER_MODE, {
	      className: 'preprocessor',
	      begin: '#', end: '$',
	      keywords: 'if else elseif end region externalsource'
	    }]
	  };
	};

/***/ },
/* 322 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['vbs'],
	    case_insensitive: true,
	    keywords: {
	      keyword: 'call class const dim do loop erase execute executeglobal exit for each next function ' + 'if then else on error option explicit new private property let get public randomize ' + 'redim rem select case set stop sub while wend with end to elseif is or xor and not ' + 'class_initialize class_terminate default preserve in me byval byref step resume goto',
	      built_in: 'lcase month vartype instrrev ubound setlocale getobject rgb getref string ' + 'weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency ' + 'conversions csng timevalue second year space abs clng timeserial fixs len asc ' + 'isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate ' + 'instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex ' + 'chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim ' + 'strcomp int createobject loadpicture tan formatnumber mid scriptenginebuildversion ' + 'scriptengine split scriptengineminorversion cint sin datepart ltrim sqr ' + 'scriptenginemajorversion time derived eval date formatpercent exp inputbox left ascw ' + 'chrw regexp server response request cstr err',
	      literal: 'true false null nothing empty'
	    },
	    illegal: '//',
	    contains: [hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [{ begin: '""' }] }), hljs.COMMENT(/'/, /$/, {
	      relevance: 0
	    }), hljs.C_NUMBER_MODE]
	  };
	};

/***/ },
/* 323 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    subLanguage: 'xml',
	    contains: [{
	      begin: '<%', end: '%>',
	      subLanguage: 'vbscript'
	    }]
	  };
	};

/***/ },
/* 324 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    aliases: ['v'],
	    case_insensitive: true,
	    keywords: {
	      keyword: 'always and assign begin buf bufif0 bufif1 case casex casez cmos deassign ' + 'default defparam disable edge else end endcase endfunction endmodule ' + 'endprimitive endspecify endtable endtask event for force forever fork ' + 'function if ifnone initial inout input join macromodule module nand ' + 'negedge nmos nor not notif0 notif1 or output parameter pmos posedge ' + 'primitive pulldown pullup rcmos release repeat rnmos rpmos rtran ' + 'rtranif0 rtranif1 specify specparam table task timescale tran ' + 'tranif0 tranif1 wait while xnor xor',
	      typename: 'highz0 highz1 integer large medium pull0 pull1 real realtime reg ' + 'scalared signed small strong0 strong1 supply0 supply0 supply1 supply1 ' + 'time tri tri0 tri1 triand trior trireg vectored wand weak0 weak1 wire wor'
	    },
	    contains: [hljs.C_BLOCK_COMMENT_MODE, hljs.C_LINE_COMMENT_MODE, hljs.QUOTE_STRING_MODE, {
	      className: 'number',
	      begin: '\\b(\\d+\'(b|h|o|d|B|H|O|D))?[0-9xzXZ]+',
	      contains: [hljs.BACKSLASH_ESCAPE],
	      relevance: 0
	    },
	    /* ports in instances */
	    {
	      className: 'typename',
	      begin: '\\.\\w+',
	      relevance: 0
	    },
	    /* parameters to instances */
	    {
	      className: 'value',
	      begin: '#\\((?!parameter).+\\)'
	    },
	    /* operators */
	    {
	      className: 'keyword',
	      begin: '\\+|-|\\*|/|%|<|>|=|#|`|\\!|&|\\||@|:|\\^|~|\\{|\\}',
	      relevance: 0
	    }]
	  }; // return
	};

/***/ },
/* 325 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  // Regular expression for VHDL numeric literals.

	  // Decimal literal:
	  var INTEGER_RE = '\\d(_|\\d)*';
	  var EXPONENT_RE = '[eE][-+]?' + INTEGER_RE;
	  var DECIMAL_LITERAL_RE = INTEGER_RE + '(\\.' + INTEGER_RE + ')?' + '(' + EXPONENT_RE + ')?';
	  // Based literal:
	  var BASED_INTEGER_RE = '\\w+';
	  var BASED_LITERAL_RE = INTEGER_RE + '#' + BASED_INTEGER_RE + '(\\.' + BASED_INTEGER_RE + ')?' + '#' + '(' + EXPONENT_RE + ')?';

	  var NUMBER_RE = '\\b(' + BASED_LITERAL_RE + '|' + DECIMAL_LITERAL_RE + ')';

	  return {
	    case_insensitive: true,
	    keywords: {
	      keyword: 'abs access after alias all and architecture array assert attribute begin block ' + 'body buffer bus case component configuration constant context cover disconnect ' + 'downto default else elsif end entity exit fairness file for force function generate ' + 'generic group guarded if impure in inertial inout is label library linkage literal ' + 'loop map mod nand new next nor not null of on open or others out package port ' + 'postponed procedure process property protected pure range record register reject ' + 'release rem report restrict restrict_guarantee return rol ror select sequence ' + 'severity shared signal sla sll sra srl strong subtype then to transport type ' + 'unaffected units until use variable vmode vprop vunit wait when while with xnor xor',
	      typename: 'boolean bit character severity_level integer time delay_length natural positive ' + 'string bit_vector file_open_kind file_open_status std_ulogic std_ulogic_vector ' + 'std_logic std_logic_vector unsigned signed boolean_vector integer_vector ' + 'real_vector time_vector'
	    },
	    illegal: '{',
	    contains: [hljs.C_BLOCK_COMMENT_MODE, // VHDL-2008 block commenting.
	    hljs.COMMENT('--', '$'), hljs.QUOTE_STRING_MODE, {
	      className: 'number',
	      begin: NUMBER_RE,
	      relevance: 0
	    }, {
	      className: 'literal',
	      begin: '\'(U|X|0|1|Z|W|L|H|-)\'',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      className: 'attribute',
	      begin: '\'[A-Za-z](_?[A-Za-z0-9])*',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }]
	  };
	};

/***/ },
/* 326 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    lexemes: /[!#@\w]+/,
	    keywords: {
	      keyword: //ex command
	      // express version except: ! & * < = > !! # @ @@
	      'N|0 P|0 X|0 a|0 ab abc abo al am an|0 ar arga argd arge argdo argg argl argu as au aug aun b|0 bN ba bad bd be bel bf bl bm bn bo bp br brea breaka breakd breakl bro bufdo buffers bun bw c|0 cN cNf ca cabc caddb cad caddf cal cat cb cc ccl cd ce cex cf cfir cgetb cgete cg changes chd che checkt cl cla clo cm cmapc cme cn cnew cnf cno cnorea cnoreme co col colo com comc comp con conf cope ' + 'cp cpf cq cr cs cst cu cuna cunme cw d|0 delm deb debugg delc delf dif diffg diffo diffp diffpu diffs diffthis dig di dl dell dj dli do doautoa dp dr ds dsp e|0 ea ec echoe echoh echom echon el elsei em en endfo endf endt endw ene ex exe exi exu f|0 files filet fin fina fini fir fix fo foldc foldd folddoc foldo for fu g|0 go gr grepa gu gv ha h|0 helpf helpg helpt hi hid his i|0 ia iabc if ij il im imapc ' + 'ime ino inorea inoreme int is isp iu iuna iunme j|0 ju k|0 keepa kee keepj lN lNf l|0 lad laddb laddf la lan lat lb lc lch lcl lcs le lefta let lex lf lfir lgetb lgete lg lgr lgrepa lh ll lla lli lmak lm lmapc lne lnew lnf ln loadk lo loc lockv lol lope lp lpf lr ls lt lu lua luad luaf lv lvimgrepa lw m|0 ma mak map mapc marks mat me menut mes mk mks mksp mkv mkvie mod mz mzf nbc nb nbs n|0 new nm nmapc nme nn nnoreme noa no noh norea noreme norm nu nun nunme ol o|0 om omapc ome on ono onoreme opt ou ounme ow p|0 ' + 'profd prof pro promptr pc ped pe perld po popu pp pre prev ps pt ptN ptf ptj ptl ptn ptp ptr pts pu pw py3 python3 py3d py3f py pyd pyf q|0 quita qa r|0 rec red redi redr redraws reg res ret retu rew ri rightb rub rubyd rubyf rund ru rv s|0 sN san sa sal sav sb sbN sba sbf sbl sbm sbn sbp sbr scrip scripte scs se setf setg setl sf sfir sh sim sig sil sl sla sm smap smapc sme sn sni sno snor snoreme sor ' + 'so spelld spe spelli spellr spellu spellw sp spr sre st sta startg startr star stopi stj sts sun sunm sunme sus sv sw sy synti sync t|0 tN tabN tabc tabdo tabe tabf tabfir tabl tabm tabnew ' + 'tabn tabo tabp tabr tabs tab ta tags tc tcld tclf te tf th tj tl tm tn to tp tr try ts tu u|0 undoj undol una unh unl unlo unm unme uns up v|0 ve verb vert vim vimgrepa vi viu vie vm vmapc vme vne vn vnoreme vs vu vunme windo w|0 wN wa wh wi winc winp wn wp wq wqa ws wu wv x|0 xa xmapc xm xme xn xnoreme xu xunme y|0 z|0 ~ ' +
	      // full version
	      'Next Print append abbreviate abclear aboveleft all amenu anoremenu args argadd argdelete argedit argglobal arglocal argument ascii autocmd augroup aunmenu buffer bNext ball badd bdelete behave belowright bfirst blast bmodified bnext botright bprevious brewind break breakadd breakdel breaklist browse bunload ' + 'bwipeout change cNext cNfile cabbrev cabclear caddbuffer caddexpr caddfile call catch cbuffer cclose center cexpr cfile cfirst cgetbuffer cgetexpr cgetfile chdir checkpath checktime clist clast close cmap cmapclear cmenu cnext cnewer cnfile cnoremap cnoreabbrev cnoremenu copy colder colorscheme command comclear compiler continue confirm copen cprevious cpfile cquit crewind cscope cstag cunmap ' + 'cunabbrev cunmenu cwindow delete delmarks debug debuggreedy delcommand delfunction diffupdate diffget diffoff diffpatch diffput diffsplit digraphs display deletel djump dlist doautocmd doautoall deletep drop dsearch dsplit edit earlier echo echoerr echohl echomsg else elseif emenu endif endfor ' + 'endfunction endtry endwhile enew execute exit exusage file filetype find finally finish first fixdel fold foldclose folddoopen folddoclosed foldopen function global goto grep grepadd gui gvim hardcopy help helpfind helpgrep helptags highlight hide history insert iabbrev iabclear ijump ilist imap ' + 'imapclear imenu inoremap inoreabbrev inoremenu intro isearch isplit iunmap iunabbrev iunmenu join jumps keepalt keepmarks keepjumps lNext lNfile list laddexpr laddbuffer laddfile last language later lbuffer lcd lchdir lclose lcscope left leftabove lexpr lfile lfirst lgetbuffer lgetexpr lgetfile lgrep lgrepadd lhelpgrep llast llist lmake lmap lmapclear lnext lnewer lnfile lnoremap loadkeymap loadview ' + 'lockmarks lockvar lolder lopen lprevious lpfile lrewind ltag lunmap luado luafile lvimgrep lvimgrepadd lwindow move mark make mapclear match menu menutranslate messages mkexrc mksession mkspell mkvimrc mkview mode mzscheme mzfile nbclose nbkey nbsart next nmap nmapclear nmenu nnoremap ' + 'nnoremenu noautocmd noremap nohlsearch noreabbrev noremenu normal number nunmap nunmenu oldfiles open omap omapclear omenu only onoremap onoremenu options ounmap ounmenu ownsyntax print profdel profile promptfind promptrepl pclose pedit perl perldo pop popup ppop preserve previous psearch ptag ptNext ' + 'ptfirst ptjump ptlast ptnext ptprevious ptrewind ptselect put pwd py3do py3file python pydo pyfile quit quitall qall read recover redo redir redraw redrawstatus registers resize retab return rewind right rightbelow ruby rubydo rubyfile rundo runtime rviminfo substitute sNext sandbox sargument sall saveas sbuffer sbNext sball sbfirst sblast sbmodified sbnext sbprevious sbrewind scriptnames scriptencoding ' + 'scscope set setfiletype setglobal setlocal sfind sfirst shell simalt sign silent sleep slast smagic smapclear smenu snext sniff snomagic snoremap snoremenu sort source spelldump spellgood spellinfo spellrepall spellundo spellwrong split sprevious srewind stop stag startgreplace startreplace ' + 'startinsert stopinsert stjump stselect sunhide sunmap sunmenu suspend sview swapname syntax syntime syncbind tNext tabNext tabclose tabedit tabfind tabfirst tablast tabmove tabnext tabonly tabprevious tabrewind tag tcl tcldo tclfile tearoff tfirst throw tjump tlast tmenu tnext topleft tprevious ' + 'trewind tselect tunmenu undo undojoin undolist unabbreviate unhide unlet unlockvar unmap unmenu unsilent update vglobal version verbose vertical vimgrep vimgrepadd visual viusage view vmap vmapclear vmenu vnew ' + 'vnoremap vnoremenu vsplit vunmap vunmenu write wNext wall while winsize wincmd winpos wnext wprevious wqall wsverb wundo wviminfo xit xall xmapclear xmap xmenu xnoremap xnoremenu xunmap xunmenu yank',
	      built_in: //built in func
	      'abs acos add and append argc argidx argv asin atan atan2 browse browsedir bufexists buflisted bufloaded bufname bufnr bufwinnr byte2line byteidx call ceil changenr char2nr cindent clearmatches col complete complete_add complete_check confirm copy cos cosh count cscope_connection cursor ' + 'deepcopy delete did_filetype diff_filler diff_hlID empty escape eval eventhandler executable exists exp expand extend feedkeys filereadable filewritable filter finddir findfile float2nr floor fmod fnameescape fnamemodify foldclosed foldclosedend foldlevel foldtext foldtextresult foreground function ' + 'garbagecollect get getbufline getbufvar getchar getcharmod getcmdline getcmdpos getcmdtype getcwd getfontname getfperm getfsize getftime getftype getline getloclist getmatches getpid getpos getqflist getreg getregtype gettabvar gettabwinvar getwinposx getwinposy getwinvar glob globpath has has_key ' + 'haslocaldir hasmapto histadd histdel histget histnr hlexists hlID hostname iconv indent index input inputdialog inputlist inputrestore inputsave inputsecret insert invert isdirectory islocked items join keys len libcall libcallnr line line2byte lispindent localtime log log10 luaeval map maparg mapcheck ' + 'match matchadd matcharg matchdelete matchend matchlist matchstr max min mkdir mode mzeval nextnonblank nr2char or pathshorten pow prevnonblank printf pumvisible py3eval pyeval range readfile reltime reltimestr remote_expr remote_foreground remote_peek remote_read remote_send remove rename repeat ' + 'resolve reverse round screenattr screenchar screencol screenrow search searchdecl searchpair searchpairpos searchpos server2client serverlist setbufvar setcmdpos setline setloclist setmatches setpos setqflist setreg settabvar settabwinvar setwinvar sha256 shellescape shiftwidth simplify sin ' + 'sinh sort soundfold spellbadword spellsuggest split sqrt str2float str2nr strchars strdisplaywidth strftime stridx string strlen strpart strridx strtrans strwidth submatch substitute synconcealed synID synIDattr ' + 'synIDtrans synstack system tabpagebuflist tabpagenr tabpagewinnr tagfiles taglist tan tanh tempname tolower toupper tr trunc type undofile undotree values virtcol visualmode wildmenumode winbufnr wincol winheight winline winnr winrestcmd winrestview winsaveview winwidth writefile xor'
	    },
	    illegal: /[{:]/,
	    contains: [hljs.NUMBER_MODE, hljs.APOS_STRING_MODE, {
	      className: 'string',
	      // quote with escape, comment as quote
	      begin: /"((\\")|[^"\n])*("|\n)/
	    }, {
	      className: 'variable',
	      begin: /[bwtglsav]:[\w\d_]*/
	    }, {
	      className: 'function',
	      beginKeywords: 'function function!', end: '$',
	      relevance: 0,
	      contains: [hljs.TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)'
	      }]
	    }]
	  };
	};

/***/ },
/* 327 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  return {
	    case_insensitive: true,
	    lexemes: '\\.?' + hljs.IDENT_RE,
	    keywords: {
	      keyword: 'lock rep repe repz repne repnz xaquire xrelease bnd nobnd ' + 'aaa aad aam aas adc add and arpl bb0_reset bb1_reset bound bsf bsr bswap bt btc btr bts call cbw cdq cdqe clc cld cli clts cmc cmp cmpsb cmpsd cmpsq cmpsw cmpxchg cmpxchg486 cmpxchg8b cmpxchg16b cpuid cpu_read cpu_write cqo cwd cwde daa das dec div dmint emms enter equ f2xm1 fabs fadd faddp fbld fbstp fchs fclex fcmovb fcmovbe fcmove fcmovnb fcmovnbe fcmovne fcmovnu fcmovu fcom fcomi fcomip fcomp fcompp fcos fdecstp fdisi fdiv fdivp fdivr fdivrp femms feni ffree ffreep fiadd ficom ficomp fidiv fidivr fild fimul fincstp finit fist fistp fisttp fisub fisubr fld fld1 fldcw fldenv fldl2e fldl2t fldlg2 fldln2 fldpi fldz fmul fmulp fnclex fndisi fneni fninit fnop fnsave fnstcw fnstenv fnstsw fpatan fprem fprem1 fptan frndint frstor fsave fscale fsetpm fsin fsincos fsqrt fst fstcw fstenv fstp fstsw fsub fsubp fsubr fsubrp ftst fucom fucomi fucomip fucomp fucompp fxam fxch fxtract fyl2x fyl2xp1 hlt ibts icebp idiv imul in inc incbin insb insd insw int int01 int1 int03 int3 into invd invpcid invlpg invlpga iret iretd iretq iretw jcxz jecxz jrcxz jmp jmpe lahf lar lds lea leave les lfence lfs lgdt lgs lidt lldt lmsw loadall loadall286 lodsb lodsd lodsq lodsw loop loope loopne loopnz loopz lsl lss ltr mfence monitor mov movd movq movsb movsd movsq movsw movsx movsxd movzx mul mwait neg nop not or out outsb outsd outsw packssdw packsswb packuswb paddb paddd paddsb paddsiw paddsw paddusb paddusw paddw pand pandn pause paveb pavgusb pcmpeqb pcmpeqd pcmpeqw pcmpgtb pcmpgtd pcmpgtw pdistib pf2id pfacc pfadd pfcmpeq pfcmpge pfcmpgt pfmax pfmin pfmul pfrcp pfrcpit1 pfrcpit2 pfrsqit1 pfrsqrt pfsub pfsubr pi2fd pmachriw pmaddwd pmagw pmulhriw pmulhrwa pmulhrwc pmulhw pmullw pmvgezb pmvlzb pmvnzb pmvzb pop popa popad popaw popf popfd popfq popfw por prefetch prefetchw pslld psllq psllw psrad psraw psrld psrlq psrlw psubb psubd psubsb psubsiw psubsw psubusb psubusw psubw punpckhbw punpckhdq punpckhwd punpcklbw punpckldq punpcklwd push pusha pushad pushaw pushf pushfd pushfq pushfw pxor rcl rcr rdshr rdmsr rdpmc rdtsc rdtscp ret retf retn rol ror rdm rsdc rsldt rsm rsts sahf sal salc sar sbb scasb scasd scasq scasw sfence sgdt shl shld shr shrd sidt sldt skinit smi smint smintold smsw stc std sti stosb stosd stosq stosw str sub svdc svldt svts swapgs syscall sysenter sysexit sysret test ud0 ud1 ud2b ud2 ud2a umov verr verw fwait wbinvd wrshr wrmsr xadd xbts xchg xlatb xlat xor cmove cmovz cmovne cmovnz cmova cmovnbe cmovae cmovnb cmovb cmovnae cmovbe cmovna cmovg cmovnle cmovge cmovnl cmovl cmovnge cmovle cmovng cmovc cmovnc cmovo cmovno cmovs cmovns cmovp cmovpe cmovnp cmovpo je jz jne jnz ja jnbe jae jnb jb jnae jbe jna jg jnle jge jnl jl jnge jle jng jc jnc jo jno js jns jpo jnp jpe jp sete setz setne setnz seta setnbe setae setnb setnc setb setnae setcset setbe setna setg setnle setge setnl setl setnge setle setng sets setns seto setno setpe setp setpo setnp addps addss andnps andps cmpeqps cmpeqss cmpleps cmpless cmpltps cmpltss cmpneqps cmpneqss cmpnleps cmpnless cmpnltps cmpnltss cmpordps cmpordss cmpunordps cmpunordss cmpps cmpss comiss cvtpi2ps cvtps2pi cvtsi2ss cvtss2si cvttps2pi cvttss2si divps divss ldmxcsr maxps maxss minps minss movaps movhps movlhps movlps movhlps movmskps movntps movss movups mulps mulss orps rcpps rcpss rsqrtps rsqrtss shufps sqrtps sqrtss stmxcsr subps subss ucomiss unpckhps unpcklps xorps fxrstor fxrstor64 fxsave fxsave64 xgetbv xsetbv xsave xsave64 xsaveopt xsaveopt64 xrstor xrstor64 prefetchnta prefetcht0 prefetcht1 prefetcht2 maskmovq movntq pavgb pavgw pextrw pinsrw pmaxsw pmaxub pminsw pminub pmovmskb pmulhuw psadbw pshufw pf2iw pfnacc pfpnacc pi2fw pswapd maskmovdqu clflush movntdq movnti movntpd movdqa movdqu movdq2q movq2dq paddq pmuludq pshufd pshufhw pshuflw pslldq psrldq psubq punpckhqdq punpcklqdq addpd addsd andnpd andpd cmpeqpd cmpeqsd cmplepd cmplesd cmpltpd cmpltsd cmpneqpd cmpneqsd cmpnlepd cmpnlesd cmpnltpd cmpnltsd cmpordpd cmpordsd cmpunordpd cmpunordsd cmppd comisd cvtdq2pd cvtdq2ps cvtpd2dq cvtpd2pi cvtpd2ps cvtpi2pd cvtps2dq cvtps2pd cvtsd2si cvtsd2ss cvtsi2sd cvtss2sd cvttpd2pi cvttpd2dq cvttps2dq cvttsd2si divpd divsd maxpd maxsd minpd minsd movapd movhpd movlpd movmskpd movupd mulpd mulsd orpd shufpd sqrtpd sqrtsd subpd subsd ucomisd unpckhpd unpcklpd xorpd addsubpd addsubps haddpd haddps hsubpd hsubps lddqu movddup movshdup movsldup clgi stgi vmcall vmclear vmfunc vmlaunch vmload vmmcall vmptrld vmptrst vmread vmresume vmrun vmsave vmwrite vmxoff vmxon invept invvpid pabsb pabsw pabsd palignr phaddw phaddd phaddsw phsubw phsubd phsubsw pmaddubsw pmulhrsw pshufb psignb psignw psignd extrq insertq movntsd movntss lzcnt blendpd blendps blendvpd blendvps dppd dpps extractps insertps movntdqa mpsadbw packusdw pblendvb pblendw pcmpeqq pextrb pextrd pextrq phminposuw pinsrb pinsrd pinsrq pmaxsb pmaxsd pmaxud pmaxuw pminsb pminsd pminud pminuw pmovsxbw pmovsxbd pmovsxbq pmovsxwd pmovsxwq pmovsxdq pmovzxbw pmovzxbd pmovzxbq pmovzxwd pmovzxwq pmovzxdq pmuldq pmulld ptest roundpd roundps roundsd roundss crc32 pcmpestri pcmpestrm pcmpistri pcmpistrm pcmpgtq popcnt getsec pfrcpv pfrsqrtv movbe aesenc aesenclast aesdec aesdeclast aesimc aeskeygenassist vaesenc vaesenclast vaesdec vaesdeclast vaesimc vaeskeygenassist vaddpd vaddps vaddsd vaddss vaddsubpd vaddsubps vandpd vandps vandnpd vandnps vblendpd vblendps vblendvpd vblendvps vbroadcastss vbroadcastsd vbroadcastf128 vcmpeq_ospd vcmpeqpd vcmplt_ospd vcmpltpd vcmple_ospd vcmplepd vcmpunord_qpd vcmpunordpd vcmpneq_uqpd vcmpneqpd vcmpnlt_uspd vcmpnltpd vcmpnle_uspd vcmpnlepd vcmpord_qpd vcmpordpd vcmpeq_uqpd vcmpnge_uspd vcmpngepd vcmpngt_uspd vcmpngtpd vcmpfalse_oqpd vcmpfalsepd vcmpneq_oqpd vcmpge_ospd vcmpgepd vcmpgt_ospd vcmpgtpd vcmptrue_uqpd vcmptruepd vcmplt_oqpd vcmple_oqpd vcmpunord_spd vcmpneq_uspd vcmpnlt_uqpd vcmpnle_uqpd vcmpord_spd vcmpeq_uspd vcmpnge_uqpd vcmpngt_uqpd vcmpfalse_ospd vcmpneq_ospd vcmpge_oqpd vcmpgt_oqpd vcmptrue_uspd vcmppd vcmpeq_osps vcmpeqps vcmplt_osps vcmpltps vcmple_osps vcmpleps vcmpunord_qps vcmpunordps vcmpneq_uqps vcmpneqps vcmpnlt_usps vcmpnltps vcmpnle_usps vcmpnleps vcmpord_qps vcmpordps vcmpeq_uqps vcmpnge_usps vcmpngeps vcmpngt_usps vcmpngtps vcmpfalse_oqps vcmpfalseps vcmpneq_oqps vcmpge_osps vcmpgeps vcmpgt_osps vcmpgtps vcmptrue_uqps vcmptrueps vcmplt_oqps vcmple_oqps vcmpunord_sps vcmpneq_usps vcmpnlt_uqps vcmpnle_uqps vcmpord_sps vcmpeq_usps vcmpnge_uqps vcmpngt_uqps vcmpfalse_osps vcmpneq_osps vcmpge_oqps vcmpgt_oqps vcmptrue_usps vcmpps vcmpeq_ossd vcmpeqsd vcmplt_ossd vcmpltsd vcmple_ossd vcmplesd vcmpunord_qsd vcmpunordsd vcmpneq_uqsd vcmpneqsd vcmpnlt_ussd vcmpnltsd vcmpnle_ussd vcmpnlesd vcmpord_qsd vcmpordsd vcmpeq_uqsd vcmpnge_ussd vcmpngesd vcmpngt_ussd vcmpngtsd vcmpfalse_oqsd vcmpfalsesd vcmpneq_oqsd vcmpge_ossd vcmpgesd vcmpgt_ossd vcmpgtsd vcmptrue_uqsd vcmptruesd vcmplt_oqsd vcmple_oqsd vcmpunord_ssd vcmpneq_ussd vcmpnlt_uqsd vcmpnle_uqsd vcmpord_ssd vcmpeq_ussd vcmpnge_uqsd vcmpngt_uqsd vcmpfalse_ossd vcmpneq_ossd vcmpge_oqsd vcmpgt_oqsd vcmptrue_ussd vcmpsd vcmpeq_osss vcmpeqss vcmplt_osss vcmpltss vcmple_osss vcmpless vcmpunord_qss vcmpunordss vcmpneq_uqss vcmpneqss vcmpnlt_usss vcmpnltss vcmpnle_usss vcmpnless vcmpord_qss vcmpordss vcmpeq_uqss vcmpnge_usss vcmpngess vcmpngt_usss vcmpngtss vcmpfalse_oqss vcmpfalsess vcmpneq_oqss vcmpge_osss vcmpgess vcmpgt_osss vcmpgtss vcmptrue_uqss vcmptruess vcmplt_oqss vcmple_oqss vcmpunord_sss vcmpneq_usss vcmpnlt_uqss vcmpnle_uqss vcmpord_sss vcmpeq_usss vcmpnge_uqss vcmpngt_uqss vcmpfalse_osss vcmpneq_osss vcmpge_oqss vcmpgt_oqss vcmptrue_usss vcmpss vcomisd vcomiss vcvtdq2pd vcvtdq2ps vcvtpd2dq vcvtpd2ps vcvtps2dq vcvtps2pd vcvtsd2si vcvtsd2ss vcvtsi2sd vcvtsi2ss vcvtss2sd vcvtss2si vcvttpd2dq vcvttps2dq vcvttsd2si vcvttss2si vdivpd vdivps vdivsd vdivss vdppd vdpps vextractf128 vextractps vhaddpd vhaddps vhsubpd vhsubps vinsertf128 vinsertps vlddqu vldqqu vldmxcsr vmaskmovdqu vmaskmovps vmaskmovpd vmaxpd vmaxps vmaxsd vmaxss vminpd vminps vminsd vminss vmovapd vmovaps vmovd vmovq vmovddup vmovdqa vmovqqa vmovdqu vmovqqu vmovhlps vmovhpd vmovhps vmovlhps vmovlpd vmovlps vmovmskpd vmovmskps vmovntdq vmovntqq vmovntdqa vmovntpd vmovntps vmovsd vmovshdup vmovsldup vmovss vmovupd vmovups vmpsadbw vmulpd vmulps vmulsd vmulss vorpd vorps vpabsb vpabsw vpabsd vpacksswb vpackssdw vpackuswb vpackusdw vpaddb vpaddw vpaddd vpaddq vpaddsb vpaddsw vpaddusb vpaddusw vpalignr vpand vpandn vpavgb vpavgw vpblendvb vpblendw vpcmpestri vpcmpestrm vpcmpistri vpcmpistrm vpcmpeqb vpcmpeqw vpcmpeqd vpcmpeqq vpcmpgtb vpcmpgtw vpcmpgtd vpcmpgtq vpermilpd vpermilps vperm2f128 vpextrb vpextrw vpextrd vpextrq vphaddw vphaddd vphaddsw vphminposuw vphsubw vphsubd vphsubsw vpinsrb vpinsrw vpinsrd vpinsrq vpmaddwd vpmaddubsw vpmaxsb vpmaxsw vpmaxsd vpmaxub vpmaxuw vpmaxud vpminsb vpminsw vpminsd vpminub vpminuw vpminud vpmovmskb vpmovsxbw vpmovsxbd vpmovsxbq vpmovsxwd vpmovsxwq vpmovsxdq vpmovzxbw vpmovzxbd vpmovzxbq vpmovzxwd vpmovzxwq vpmovzxdq vpmulhuw vpmulhrsw vpmulhw vpmullw vpmulld vpmuludq vpmuldq vpor vpsadbw vpshufb vpshufd vpshufhw vpshuflw vpsignb vpsignw vpsignd vpslldq vpsrldq vpsllw vpslld vpsllq vpsraw vpsrad vpsrlw vpsrld vpsrlq vptest vpsubb vpsubw vpsubd vpsubq vpsubsb vpsubsw vpsubusb vpsubusw vpunpckhbw vpunpckhwd vpunpckhdq vpunpckhqdq vpunpcklbw vpunpcklwd vpunpckldq vpunpcklqdq vpxor vrcpps vrcpss vrsqrtps vrsqrtss vroundpd vroundps vroundsd vroundss vshufpd vshufps vsqrtpd vsqrtps vsqrtsd vsqrtss vstmxcsr vsubpd vsubps vsubsd vsubss vtestps vtestpd vucomisd vucomiss vunpckhpd vunpckhps vunpcklpd vunpcklps vxorpd vxorps vzeroall vzeroupper pclmullqlqdq pclmulhqlqdq pclmullqhqdq pclmulhqhqdq pclmulqdq vpclmullqlqdq vpclmulhqlqdq vpclmullqhqdq vpclmulhqhqdq vpclmulqdq vfmadd132ps vfmadd132pd vfmadd312ps vfmadd312pd vfmadd213ps vfmadd213pd vfmadd123ps vfmadd123pd vfmadd231ps vfmadd231pd vfmadd321ps vfmadd321pd vfmaddsub132ps vfmaddsub132pd vfmaddsub312ps vfmaddsub312pd vfmaddsub213ps vfmaddsub213pd vfmaddsub123ps vfmaddsub123pd vfmaddsub231ps vfmaddsub231pd vfmaddsub321ps vfmaddsub321pd vfmsub132ps vfmsub132pd vfmsub312ps vfmsub312pd vfmsub213ps vfmsub213pd vfmsub123ps vfmsub123pd vfmsub231ps vfmsub231pd vfmsub321ps vfmsub321pd vfmsubadd132ps vfmsubadd132pd vfmsubadd312ps vfmsubadd312pd vfmsubadd213ps vfmsubadd213pd vfmsubadd123ps vfmsubadd123pd vfmsubadd231ps vfmsubadd231pd vfmsubadd321ps vfmsubadd321pd vfnmadd132ps vfnmadd132pd vfnmadd312ps vfnmadd312pd vfnmadd213ps vfnmadd213pd vfnmadd123ps vfnmadd123pd vfnmadd231ps vfnmadd231pd vfnmadd321ps vfnmadd321pd vfnmsub132ps vfnmsub132pd vfnmsub312ps vfnmsub312pd vfnmsub213ps vfnmsub213pd vfnmsub123ps vfnmsub123pd vfnmsub231ps vfnmsub231pd vfnmsub321ps vfnmsub321pd vfmadd132ss vfmadd132sd vfmadd312ss vfmadd312sd vfmadd213ss vfmadd213sd vfmadd123ss vfmadd123sd vfmadd231ss vfmadd231sd vfmadd321ss vfmadd321sd vfmsub132ss vfmsub132sd vfmsub312ss vfmsub312sd vfmsub213ss vfmsub213sd vfmsub123ss vfmsub123sd vfmsub231ss vfmsub231sd vfmsub321ss vfmsub321sd vfnmadd132ss vfnmadd132sd vfnmadd312ss vfnmadd312sd vfnmadd213ss vfnmadd213sd vfnmadd123ss vfnmadd123sd vfnmadd231ss vfnmadd231sd vfnmadd321ss vfnmadd321sd vfnmsub132ss vfnmsub132sd vfnmsub312ss vfnmsub312sd vfnmsub213ss vfnmsub213sd vfnmsub123ss vfnmsub123sd vfnmsub231ss vfnmsub231sd vfnmsub321ss vfnmsub321sd rdfsbase rdgsbase rdrand wrfsbase wrgsbase vcvtph2ps vcvtps2ph adcx adox rdseed clac stac xstore xcryptecb xcryptcbc xcryptctr xcryptcfb xcryptofb montmul xsha1 xsha256 llwpcb slwpcb lwpval lwpins vfmaddpd vfmaddps vfmaddsd vfmaddss vfmaddsubpd vfmaddsubps vfmsubaddpd vfmsubaddps vfmsubpd vfmsubps vfmsubsd vfmsubss vfnmaddpd vfnmaddps vfnmaddsd vfnmaddss vfnmsubpd vfnmsubps vfnmsubsd vfnmsubss vfrczpd vfrczps vfrczsd vfrczss vpcmov vpcomb vpcomd vpcomq vpcomub vpcomud vpcomuq vpcomuw vpcomw vphaddbd vphaddbq vphaddbw vphadddq vphaddubd vphaddubq vphaddubw vphaddudq vphadduwd vphadduwq vphaddwd vphaddwq vphsubbw vphsubdq vphsubwd vpmacsdd vpmacsdqh vpmacsdql vpmacssdd vpmacssdqh vpmacssdql vpmacsswd vpmacssww vpmacswd vpmacsww vpmadcsswd vpmadcswd vpperm vprotb vprotd vprotq vprotw vpshab vpshad vpshaq vpshaw vpshlb vpshld vpshlq vpshlw vbroadcasti128 vpblendd vpbroadcastb vpbroadcastw vpbroadcastd vpbroadcastq vpermd vpermpd vpermps vpermq vperm2i128 vextracti128 vinserti128 vpmaskmovd vpmaskmovq vpsllvd vpsllvq vpsravd vpsrlvd vpsrlvq vgatherdpd vgatherqpd vgatherdps vgatherqps vpgatherdd vpgatherqd vpgatherdq vpgatherqq xabort xbegin xend xtest andn bextr blci blcic blsi blsic blcfill blsfill blcmsk blsmsk blsr blcs bzhi mulx pdep pext rorx sarx shlx shrx tzcnt tzmsk t1mskc valignd valignq vblendmpd vblendmps vbroadcastf32x4 vbroadcastf64x4 vbroadcasti32x4 vbroadcasti64x4 vcompresspd vcompressps vcvtpd2udq vcvtps2udq vcvtsd2usi vcvtss2usi vcvttpd2udq vcvttps2udq vcvttsd2usi vcvttss2usi vcvtudq2pd vcvtudq2ps vcvtusi2sd vcvtusi2ss vexpandpd vexpandps vextractf32x4 vextractf64x4 vextracti32x4 vextracti64x4 vfixupimmpd vfixupimmps vfixupimmsd vfixupimmss vgetexppd vgetexpps vgetexpsd vgetexpss vgetmantpd vgetmantps vgetmantsd vgetmantss vinsertf32x4 vinsertf64x4 vinserti32x4 vinserti64x4 vmovdqa32 vmovdqa64 vmovdqu32 vmovdqu64 vpabsq vpandd vpandnd vpandnq vpandq vpblendmd vpblendmq vpcmpltd vpcmpled vpcmpneqd vpcmpnltd vpcmpnled vpcmpd vpcmpltq vpcmpleq vpcmpneqq vpcmpnltq vpcmpnleq vpcmpq vpcmpequd vpcmpltud vpcmpleud vpcmpnequd vpcmpnltud vpcmpnleud vpcmpud vpcmpequq vpcmpltuq vpcmpleuq vpcmpnequq vpcmpnltuq vpcmpnleuq vpcmpuq vpcompressd vpcompressq vpermi2d vpermi2pd vpermi2ps vpermi2q vpermt2d vpermt2pd vpermt2ps vpermt2q vpexpandd vpexpandq vpmaxsq vpmaxuq vpminsq vpminuq vpmovdb vpmovdw vpmovqb vpmovqd vpmovqw vpmovsdb vpmovsdw vpmovsqb vpmovsqd vpmovsqw vpmovusdb vpmovusdw vpmovusqb vpmovusqd vpmovusqw vpord vporq vprold vprolq vprolvd vprolvq vprord vprorq vprorvd vprorvq vpscatterdd vpscatterdq vpscatterqd vpscatterqq vpsraq vpsravq vpternlogd vpternlogq vptestmd vptestmq vptestnmd vptestnmq vpxord vpxorq vrcp14pd vrcp14ps vrcp14sd vrcp14ss vrndscalepd vrndscaleps vrndscalesd vrndscaless vrsqrt14pd vrsqrt14ps vrsqrt14sd vrsqrt14ss vscalefpd vscalefps vscalefsd vscalefss vscatterdpd vscatterdps vscatterqpd vscatterqps vshuff32x4 vshuff64x2 vshufi32x4 vshufi64x2 kandnw kandw kmovw knotw kortestw korw kshiftlw kshiftrw kunpckbw kxnorw kxorw vpbroadcastmb2q vpbroadcastmw2d vpconflictd vpconflictq vplzcntd vplzcntq vexp2pd vexp2ps vrcp28pd vrcp28ps vrcp28sd vrcp28ss vrsqrt28pd vrsqrt28ps vrsqrt28sd vrsqrt28ss vgatherpf0dpd vgatherpf0dps vgatherpf0qpd vgatherpf0qps vgatherpf1dpd vgatherpf1dps vgatherpf1qpd vgatherpf1qps vscatterpf0dpd vscatterpf0dps vscatterpf0qpd vscatterpf0qps vscatterpf1dpd vscatterpf1dps vscatterpf1qpd vscatterpf1qps prefetchwt1 bndmk bndcl bndcu bndcn bndmov bndldx bndstx sha1rnds4 sha1nexte sha1msg1 sha1msg2 sha256rnds2 sha256msg1 sha256msg2 hint_nop0 hint_nop1 hint_nop2 hint_nop3 hint_nop4 hint_nop5 hint_nop6 hint_nop7 hint_nop8 hint_nop9 hint_nop10 hint_nop11 hint_nop12 hint_nop13 hint_nop14 hint_nop15 hint_nop16 hint_nop17 hint_nop18 hint_nop19 hint_nop20 hint_nop21 hint_nop22 hint_nop23 hint_nop24 hint_nop25 hint_nop26 hint_nop27 hint_nop28 hint_nop29 hint_nop30 hint_nop31 hint_nop32 hint_nop33 hint_nop34 hint_nop35 hint_nop36 hint_nop37 hint_nop38 hint_nop39 hint_nop40 hint_nop41 hint_nop42 hint_nop43 hint_nop44 hint_nop45 hint_nop46 hint_nop47 hint_nop48 hint_nop49 hint_nop50 hint_nop51 hint_nop52 hint_nop53 hint_nop54 hint_nop55 hint_nop56 hint_nop57 hint_nop58 hint_nop59 hint_nop60 hint_nop61 hint_nop62 hint_nop63',
	      literal:
	      // Instruction pointer
	      'ip eip rip ' +
	      // 8-bit registers
	      'al ah bl bh cl ch dl dh sil dil bpl spl r8b r9b r10b r11b r12b r13b r14b r15b ' +
	      // 16-bit registers
	      'ax bx cx dx si di bp sp r8w r9w r10w r11w r12w r13w r14w r15w ' +
	      // 32-bit registers
	      'eax ebx ecx edx esi edi ebp esp eip r8d r9d r10d r11d r12d r13d r14d r15d ' +
	      // 64-bit registers
	      'rax rbx rcx rdx rsi rdi rbp rsp r8 r9 r10 r11 r12 r13 r14 r15 ' +
	      // Segment registers
	      'cs ds es fs gs ss ' +
	      // Floating point stack registers
	      'st st0 st1 st2 st3 st4 st5 st6 st7 ' +
	      // MMX Registers
	      'mm0 mm1 mm2 mm3 mm4 mm5 mm6 mm7 ' +
	      // SSE registers
	      'xmm0  xmm1  xmm2  xmm3  xmm4  xmm5  xmm6  xmm7  xmm8  xmm9 xmm10  xmm11 xmm12 xmm13 xmm14 xmm15 ' + 'xmm16 xmm17 xmm18 xmm19 xmm20 xmm21 xmm22 xmm23 xmm24 xmm25 xmm26 xmm27 xmm28 xmm29 xmm30 xmm31 ' +
	      // AVX registers
	      'ymm0  ymm1  ymm2  ymm3  ymm4  ymm5  ymm6  ymm7  ymm8  ymm9 ymm10  ymm11 ymm12 ymm13 ymm14 ymm15 ' + 'ymm16 ymm17 ymm18 ymm19 ymm20 ymm21 ymm22 ymm23 ymm24 ymm25 ymm26 ymm27 ymm28 ymm29 ymm30 ymm31 ' +
	      // AVX-512F registers
	      'zmm0  zmm1  zmm2  zmm3  zmm4  zmm5  zmm6  zmm7  zmm8  zmm9 zmm10  zmm11 zmm12 zmm13 zmm14 zmm15 ' + 'zmm16 zmm17 zmm18 zmm19 zmm20 zmm21 zmm22 zmm23 zmm24 zmm25 zmm26 zmm27 zmm28 zmm29 zmm30 zmm31 ' +
	      // AVX-512F mask registers
	      'k0 k1 k2 k3 k4 k5 k6 k7 ' +
	      // Bound (MPX) register
	      'bnd0 bnd1 bnd2 bnd3 ' +
	      // Special register
	      'cr0 cr1 cr2 cr3 cr4 cr8 dr0 dr1 dr2 dr3 dr8 tr3 tr4 tr5 tr6 tr7 ' +
	      // NASM altreg package
	      'r0 r1 r2 r3 r4 r5 r6 r7 r0b r1b r2b r3b r4b r5b r6b r7b ' + 'r0w r1w r2w r3w r4w r5w r6w r7w r0d r1d r2d r3d r4d r5d r6d r7d ' + 'r0h r1h r2h r3h ' + 'r0l r1l r2l r3l r4l r5l r6l r7l r8l r9l r10l r11l r12l r13l r14l r15l',

	      pseudo: 'db dw dd dq dt ddq do dy dz ' + 'resb resw resd resq rest resdq reso resy resz ' + 'incbin equ times',

	      preprocessor: '%define %xdefine %+ %undef %defstr %deftok %assign %strcat %strlen %substr %rotate %elif %else %endif ' + '%ifmacro %ifctx %ifidn %ifidni %ifid %ifnum %ifstr %iftoken %ifempty %ifenv %error %warning %fatal %rep ' + '%endrep %include %push %pop %repl %pathsearch %depend %use %arg %stacksize %local %line %comment %endcomment ' + '.nolist ' + 'byte word dword qword nosplit rel abs seg wrt strict near far a32 ptr ' + '__FILE__ __LINE__ __SECT__  __BITS__ __OUTPUT_FORMAT__ __DATE__ __TIME__ __DATE_NUM__ __TIME_NUM__ ' + '__UTC_DATE__ __UTC_TIME__ __UTC_DATE_NUM__ __UTC_TIME_NUM__  __PASS__ struc endstruc istruc at iend ' + 'align alignb sectalign daz nodaz up down zero default option assume public ',

	      built_in: 'bits use16 use32 use64 default section segment absolute extern global common cpu float ' + '__utf16__ __utf16le__ __utf16be__ __utf32__ __utf32le__ __utf32be__ ' + '__float8__ __float16__ __float32__ __float64__ __float80m__ __float80e__ __float128l__ __float128h__ ' + '__Infinity__ __QNaN__ __SNaN__ Inf NaN QNaN SNaN float8 float16 float32 float64 float80m float80e ' + 'float128l float128h __FLOAT_DAZ__ __FLOAT_ROUND__ __FLOAT__'
	    },
	    contains: [hljs.COMMENT(';', '$', {
	      relevance: 0
	    }), {
	      className: 'number',
	      variants: [
	      // Float number and x87 BCD
	      {
	        begin: '\\b(?:([0-9][0-9_]*)?\\.[0-9_]*(?:[eE][+-]?[0-9_]+)?|' + '(0[Xx])?[0-9][0-9_]*\\.?[0-9_]*(?:[pP](?:[+-]?[0-9_]+)?)?)\\b',
	        relevance: 0
	      },

	      // Hex number in $
	      { begin: '\\$[0-9][0-9A-Fa-f]*', relevance: 0 },

	      // Number in H,D,T,Q,O,B,Y suffix
	      { begin: '\\b(?:[0-9A-Fa-f][0-9A-Fa-f_]*[Hh]|[0-9][0-9_]*[DdTt]?|[0-7][0-7_]*[QqOo]|[0-1][0-1_]*[BbYy])\\b' },

	      // Number in X,D,T,Q,O,B,Y prefix
	      { begin: '\\b(?:0[Xx][0-9A-Fa-f_]+|0[DdTt][0-9_]+|0[QqOo][0-7_]+|0[BbYy][0-1_]+)\\b' }]
	    },
	    // Double quote string
	    hljs.QUOTE_STRING_MODE, {
	      className: 'string',
	      variants: [
	      // Single-quoted string
	      { begin: '\'', end: '[^\\\\]\'' },
	      // Backquoted string
	      { begin: '`', end: '[^\\\\]`' },
	      // Section name
	      { begin: '\\.[A-Za-z0-9]+' }],
	      relevance: 0
	    }, {
	      className: 'label',
	      variants: [
	      // Global label and local label
	      { begin: '^\\s*[A-Za-z._?][A-Za-z0-9_$#@~.?]*(:|\\s+label)' },
	      // Macro-local label
	      { begin: '^\\s*%%[A-Za-z0-9_$#@~.?]*:' }],
	      relevance: 0
	    },
	    // Macro parameter
	    {
	      className: 'argument',
	      begin: '%[0-9]+',
	      relevance: 0
	    },
	    // Macro parameter
	    {
	      className: 'built_in',
	      begin: '%!\S+',
	      relevance: 0
	    }]
	  };
	};

/***/ },
/* 328 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var BUILTIN_MODULES = 'ObjectLoader Animate MovieCredits Slides Filters Shading Materials LensFlare Mapping VLCAudioVideo StereoDecoder PointCloud NetworkAccess RemoteControl RegExp ChromaKey Snowfall NodeJS Speech Charts';

	  var XL_KEYWORDS = {
	    keyword: 'if then else do while until for loop import with is as where when by data constant',
	    literal: 'true false nil',
	    type: 'integer real text name boolean symbol infix prefix postfix block tree',
	    built_in: 'in mod rem and or xor not abs sign floor ceil sqrt sin cos tan asin acos atan exp expm1 log log2 log10 log1p pi at',
	    module: BUILTIN_MODULES,
	    id: 'text_length text_range text_find text_replace contains page slide basic_slide title_slide title subtitle fade_in fade_out fade_at clear_color color line_color line_width texture_wrap texture_transform texture scale_?x scale_?y scale_?z? translate_?x translate_?y translate_?z? rotate_?x rotate_?y rotate_?z? rectangle circle ellipse sphere path line_to move_to quad_to curve_to theme background contents locally time mouse_?x mouse_?y mouse_buttons'
	  };

	  var XL_CONSTANT = {
	    className: 'constant',
	    begin: '[A-Z][A-Z_0-9]+',
	    relevance: 0
	  };
	  var XL_VARIABLE = {
	    className: 'variable',
	    begin: '([A-Z][a-z_0-9]+)+',
	    relevance: 0
	  };
	  var XL_ID = {
	    className: 'id',
	    begin: '[a-z][a-z_0-9]+',
	    relevance: 0
	  };

	  var DOUBLE_QUOTE_TEXT = {
	    className: 'string',
	    begin: '"', end: '"', illegal: '\\n'
	  };
	  var SINGLE_QUOTE_TEXT = {
	    className: 'string',
	    begin: '\'', end: '\'', illegal: '\\n'
	  };
	  var LONG_TEXT = {
	    className: 'string',
	    begin: '<<', end: '>>'
	  };
	  var BASED_NUMBER = {
	    className: 'number',
	    begin: '[0-9]+#[0-9A-Z_]+(\\.[0-9-A-Z_]+)?#?([Ee][+-]?[0-9]+)?',
	    relevance: 10
	  };
	  var IMPORT = {
	    className: 'import',
	    beginKeywords: 'import', end: '$',
	    keywords: {
	      keyword: 'import',
	      module: BUILTIN_MODULES
	    },
	    relevance: 0,
	    contains: [DOUBLE_QUOTE_TEXT]
	  };
	  var FUNCTION_DEFINITION = {
	    className: 'function',
	    begin: '[a-z].*->'
	  };
	  return {
	    aliases: ['tao'],
	    lexemes: /[a-zA-Z][a-zA-Z0-9_?]*/,
	    keywords: XL_KEYWORDS,
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE, DOUBLE_QUOTE_TEXT, SINGLE_QUOTE_TEXT, LONG_TEXT, FUNCTION_DEFINITION, IMPORT, XL_CONSTANT, XL_VARIABLE, XL_ID, BASED_NUMBER, hljs.NUMBER_MODE]
	  };
	};

/***/ },
/* 329 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var KEYWORDS = 'for let if while then else return where group by xquery encoding version' + 'module namespace boundary-space preserve strip default collation base-uri ordering' + 'copy-namespaces order declare import schema namespace function option in allowing empty' + 'at tumbling window sliding window start when only end when previous next stable ascending' + 'descending empty greatest least some every satisfies switch case typeswitch try catch and' + 'or to union intersect instance of treat as castable cast map array delete insert into' + 'replace value rename copy modify update';
	  var LITERAL = 'false true xs:string xs:integer element item xs:date xs:datetime xs:float xs:double xs:decimal QName xs:anyURI xs:long xs:int xs:short xs:byte attribute';
	  var VAR = {
	    className: 'variable',
	    begin: /\$[a-zA-Z0-9\-]+/,
	    relevance: 5
	  };

	  var NUMBER = {
	    className: 'number',
	    begin: '(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b',
	    relevance: 0
	  };

	  var STRING = {
	    className: 'string',
	    variants: [{ begin: /"/, end: /"/, contains: [{ begin: /""/, relevance: 0 }] }, { begin: /'/, end: /'/, contains: [{ begin: /''/, relevance: 0 }] }]
	  };

	  var ANNOTATION = {
	    className: 'decorator',
	    begin: '%\\w+'
	  };

	  var COMMENT = {
	    className: 'comment',
	    begin: '\\(:', end: ':\\)',
	    relevance: 10,
	    contains: [{
	      className: 'doc', begin: '@\\w+'
	    }]
	  };

	  var METHOD = {
	    begin: '{', end: '}'
	  };

	  var CONTAINS = [VAR, STRING, NUMBER, COMMENT, ANNOTATION, METHOD];
	  METHOD.contains = CONTAINS;

	  return {
	    aliases: ['xpath', 'xq'],
	    case_insensitive: false,
	    lexemes: /[a-zA-Z\$][a-zA-Z0-9_:\-]*/,
	    illegal: /(proc)|(abstract)|(extends)|(until)|(#)/,
	    keywords: {
	      keyword: KEYWORDS,
	      literal: LITERAL
	    },
	    contains: CONTAINS
	  };
	};

/***/ },
/* 330 */
/***/ function(module, exports) {

	'use strict';

	module.exports = function (hljs) {
	  var STRING = {
	    className: 'string',
	    contains: [hljs.BACKSLASH_ESCAPE],
	    variants: [{
	      begin: 'b"', end: '"'
	    }, {
	      begin: 'b\'', end: '\''
	    }, hljs.inherit(hljs.APOS_STRING_MODE, { illegal: null }), hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null })]
	  };
	  var NUMBER = { variants: [hljs.BINARY_NUMBER_MODE, hljs.C_NUMBER_MODE] };
	  return {
	    aliases: ['zep'],
	    case_insensitive: true,
	    keywords: 'and include_once list abstract global private echo interface as static endswitch ' + 'array null if endwhile or const for endforeach self var let while isset public ' + 'protected exit foreach throw elseif include __FILE__ empty require_once do xor ' + 'return parent clone use __CLASS__ __LINE__ else break print eval new ' + 'catch __METHOD__ case exception default die require __FUNCTION__ ' + 'enddeclare final try switch continue endfor endif declare unset true false ' + 'trait goto instanceof insteadof __DIR__ __NAMESPACE__ ' + 'yield finally int uint long ulong char uchar double float bool boolean string' + 'likely unlikely',
	    contains: [hljs.C_LINE_COMMENT_MODE, hljs.HASH_COMMENT_MODE, hljs.COMMENT('/\\*', '\\*/', {
	      contains: [{
	        className: 'doctag',
	        begin: '@[A-Za-z]+'
	      }]
	    }), hljs.COMMENT('__halt_compiler.+?;', false, {
	      endsWithParent: true,
	      keywords: '__halt_compiler',
	      lexemes: hljs.UNDERSCORE_IDENT_RE
	    }), {
	      className: 'string',
	      begin: '<<<[\'"]?\\w+[\'"]?$', end: '^\\w+;',
	      contains: [hljs.BACKSLASH_ESCAPE]
	    }, {
	      // swallow composed identifiers to avoid parsing them as keywords
	      begin: /(::|->)+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/
	    }, {
	      className: 'function',
	      beginKeywords: 'function', end: /[;{]/, excludeEnd: true,
	      illegal: '\\$|\\[|%',
	      contains: [hljs.UNDERSCORE_TITLE_MODE, {
	        className: 'params',
	        begin: '\\(', end: '\\)',
	        contains: ['self', hljs.C_BLOCK_COMMENT_MODE, STRING, NUMBER]
	      }]
	    }, {
	      className: 'class',
	      beginKeywords: 'class interface', end: '{', excludeEnd: true,
	      illegal: /[:\(\$"]/,
	      contains: [{ beginKeywords: 'extends implements' }, hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      beginKeywords: 'namespace', end: ';',
	      illegal: /[\.']/,
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      beginKeywords: 'use', end: ';',
	      contains: [hljs.UNDERSCORE_TITLE_MODE]
	    }, {
	      begin: '=>' // No markup, just a relevance booster
	    }, STRING, NUMBER]
	  };
	};

/***/ },
/* 331 */
/***/ function(module, exports) {

	module.exports = {
		"100": {
			"unicode": "1F4AF",
			"unicode_alternates": [],
			"name": "hundred points symbol",
			"shortname": ":100:",
			"category": "objects_symbols",
			"emoji_order": "4300",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"numbers",
				"perfect",
				"score",
				"100",
				"percent",
				"a",
				"plus",
				"perfect",
				"school",
				"quiz",
				"score",
				"test",
				"exam"
			]
		},
		"1234": {
			"unicode": "1F522",
			"unicode_alternates": [],
			"name": "input symbol for numbers",
			"shortname": ":1234:",
			"category": "objects_symbols",
			"emoji_order": "4130",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"numbers"
			]
		},
		"flag_zw": {
			"unicode": "1F1FF-1F1FC",
			"unicode_alternates": [],
			"name": "zimbabwe",
			"shortname": ":flag_zw:",
			"category": "travel_places",
			"emoji_order": "6175",
			"aliases": [
				":zw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_zm": {
			"unicode": "1F1FF-1F1F2",
			"unicode_alternates": [],
			"name": "zambia",
			"shortname": ":flag_zm:",
			"category": "travel_places",
			"emoji_order": "6170",
			"aliases": [
				":zm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ye": {
			"unicode": "1F1FE-1F1EA",
			"unicode_alternates": [],
			"name": "yemen",
			"shortname": ":flag_ye:",
			"category": "travel_places",
			"emoji_order": "6165",
			"aliases": [
				":ye:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al yaman"
			]
		},
		"flag_eh": {
			"unicode": "1F1EA-1F1ED",
			"unicode_alternates": [],
			"name": "western sahara",
			"shortname": ":flag_eh:",
			"category": "travel_places",
			"emoji_order": "6160",
			"aliases": [
				":eh:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"aṣ-Ṣaḥrā’ al-gharbīyah",
				"sahra",
				"gharbiyah"
			]
		},
		"flag_wf": {
			"unicode": "1F1FC-1F1EB",
			"unicode_alternates": [],
			"name": "wallis and futuna",
			"shortname": ":flag_wf:",
			"category": "travel_places",
			"emoji_order": "6155",
			"aliases": [
				":wf:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ve": {
			"unicode": "1F1FB-1F1EA",
			"unicode_alternates": [],
			"name": "venezuela",
			"shortname": ":flag_ve:",
			"category": "travel_places",
			"emoji_order": "6150",
			"aliases": [
				":ve:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_va": {
			"unicode": "1F1FB-1F1E6",
			"unicode_alternates": [],
			"name": "the vatican city",
			"shortname": ":flag_va:",
			"category": "travel_places",
			"emoji_order": "6146",
			"aliases": [
				":va:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_vu": {
			"unicode": "1F1FB-1F1FA",
			"unicode_alternates": [],
			"name": "vanuatu",
			"shortname": ":flag_vu:",
			"category": "travel_places",
			"emoji_order": "6145",
			"aliases": [
				":vu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_uz": {
			"unicode": "1F1FA-1F1FF",
			"unicode_alternates": [],
			"name": "uzbekistan",
			"shortname": ":flag_uz:",
			"category": "travel_places",
			"emoji_order": "6140",
			"aliases": [
				":uz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"uzbekiston respublikasi"
			]
		},
		"flag_uy": {
			"unicode": "1F1FA-1F1FE",
			"unicode_alternates": [],
			"name": "uruguay",
			"shortname": ":flag_uy:",
			"category": "travel_places",
			"emoji_order": "6135",
			"aliases": [
				":uy:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ua": {
			"unicode": "1F1FA-1F1E6",
			"unicode_alternates": [],
			"name": "ukraine",
			"shortname": ":flag_ua:",
			"category": "travel_places",
			"emoji_order": "6130",
			"aliases": [
				":ua:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"ukrayina"
			]
		},
		"flag_ug": {
			"unicode": "1F1FA-1F1EC",
			"unicode_alternates": [],
			"name": "uganda",
			"shortname": ":flag_ug:",
			"category": "travel_places",
			"emoji_order": "6125",
			"aliases": [
				":ug:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_vi": {
			"unicode": "1F1FB-1F1EE",
			"unicode_alternates": [],
			"name": "u.s. virgin islands",
			"shortname": ":flag_vi:",
			"category": "travel_places",
			"emoji_order": "6120",
			"aliases": [
				":vi:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_tv": {
			"unicode": "1F1F9-1F1FB",
			"unicode_alternates": [],
			"name": "tuvalu",
			"shortname": ":flag_tv:",
			"category": "travel_places",
			"emoji_order": "6115",
			"aliases": [
				":tuvalu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_tm": {
			"unicode": "1F1F9-1F1F2",
			"unicode_alternates": [],
			"name": "turkmenistan",
			"shortname": ":flag_tm:",
			"category": "travel_places",
			"emoji_order": "6110",
			"aliases": [
				":turkmenistan:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_tn": {
			"unicode": "1F1F9-1F1F3",
			"unicode_alternates": [],
			"name": "tunisia",
			"shortname": ":flag_tn:",
			"category": "travel_places",
			"emoji_order": "6105",
			"aliases": [
				":tn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"tunis"
			]
		},
		"flag_tt": {
			"unicode": "1F1F9-1F1F9",
			"unicode_alternates": [],
			"name": "trinidad and tobago",
			"shortname": ":flag_tt:",
			"category": "travel_places",
			"emoji_order": "6100",
			"aliases": [
				":tt:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_to": {
			"unicode": "1F1F9-1F1F4",
			"unicode_alternates": [],
			"name": "tonga",
			"shortname": ":flag_to:",
			"category": "travel_places",
			"emoji_order": "6095",
			"aliases": [
				":to:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_tg": {
			"unicode": "1F1F9-1F1EC",
			"unicode_alternates": [],
			"name": "togo",
			"shortname": ":flag_tg:",
			"category": "travel_places",
			"emoji_order": "6090",
			"aliases": [
				":tg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"republique togolaise"
			]
		},
		"flag_th": {
			"unicode": "1F1F9-1F1ED",
			"unicode_alternates": [],
			"name": "thailand",
			"shortname": ":flag_th:",
			"category": "travel_places",
			"emoji_order": "6025",
			"aliases": [
				":th:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"prathet thai"
			]
		},
		"flag_tz": {
			"unicode": "1F1F9-1F1FF",
			"unicode_alternates": [],
			"name": "tanzania",
			"shortname": ":flag_tz:",
			"category": "travel_places",
			"emoji_order": "6020",
			"aliases": [
				":tz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_tj": {
			"unicode": "1F1F9-1F1EF",
			"unicode_alternates": [],
			"name": "tajikistan",
			"shortname": ":flag_tj:",
			"category": "travel_places",
			"emoji_order": "6015",
			"aliases": [
				":tj:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"jumhurii tojikiston"
			]
		},
		"flag_tw": {
			"unicode": "1F1F9-1F1FC",
			"unicode_alternates": [],
			"name": "the republic of china",
			"shortname": ":flag_tw:",
			"category": "travel_places",
			"emoji_order": "6011",
			"aliases": [
				":tw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sy": {
			"unicode": "1F1F8-1F1FE",
			"unicode_alternates": [],
			"name": "syria",
			"shortname": ":flag_sy:",
			"category": "travel_places",
			"emoji_order": "6010",
			"aliases": [
				":sy:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sz": {
			"unicode": "1F1F8-1F1FF",
			"unicode_alternates": [],
			"name": "swaziland",
			"shortname": ":flag_sz:",
			"category": "travel_places",
			"emoji_order": "6005",
			"aliases": [
				":sz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sr": {
			"unicode": "1F1F8-1F1F7",
			"unicode_alternates": [],
			"name": "suriname",
			"shortname": ":flag_sr:",
			"category": "travel_places",
			"emoji_order": "6000",
			"aliases": [
				":sr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sd": {
			"unicode": "1F1F8-1F1E9",
			"unicode_alternates": [],
			"name": "sudan",
			"shortname": ":flag_sd:",
			"category": "travel_places",
			"emoji_order": "5995",
			"aliases": [
				":sd:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"as-sudan"
			]
		},
		"flag_lk": {
			"unicode": "1F1F1-1F1F0",
			"unicode_alternates": [],
			"name": "sri lanka",
			"shortname": ":flag_lk:",
			"category": "travel_places",
			"emoji_order": "5990",
			"aliases": [
				":lk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_so": {
			"unicode": "1F1F8-1F1F4",
			"unicode_alternates": [],
			"name": "somalia",
			"shortname": ":flag_so:",
			"category": "travel_places",
			"emoji_order": "5985",
			"aliases": [
				":so:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sb": {
			"unicode": "1F1F8-1F1E7",
			"unicode_alternates": [],
			"name": "the solomon islands",
			"shortname": ":flag_sb:",
			"category": "travel_places",
			"emoji_order": "5981",
			"aliases": [
				":sb:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_si": {
			"unicode": "1F1F8-1F1EE",
			"unicode_alternates": [],
			"name": "slovenia",
			"shortname": ":flag_si:",
			"category": "travel_places",
			"emoji_order": "5980",
			"aliases": [
				":si:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"slovenija"
			]
		},
		"flag_sk": {
			"unicode": "1F1F8-1F1F0",
			"unicode_alternates": [],
			"name": "slovakia",
			"shortname": ":flag_sk:",
			"category": "travel_places",
			"emoji_order": "5975",
			"aliases": [
				":sk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sl": {
			"unicode": "1F1F8-1F1F1",
			"unicode_alternates": [],
			"name": "sierra leone",
			"shortname": ":flag_sl:",
			"category": "travel_places",
			"emoji_order": "5970",
			"aliases": [
				":sl:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sc": {
			"unicode": "1F1F8-1F1E8",
			"unicode_alternates": [],
			"name": "the seychelles",
			"shortname": ":flag_sc:",
			"category": "travel_places",
			"emoji_order": "5966",
			"aliases": [
				":sc:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"seychelles"
			]
		},
		"flag_rs": {
			"unicode": "1F1F7-1F1F8",
			"unicode_alternates": [],
			"name": "serbia",
			"shortname": ":flag_rs:",
			"category": "travel_places",
			"emoji_order": "5965",
			"aliases": [
				":rs:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"srbija"
			]
		},
		"flag_sn": {
			"unicode": "1F1F8-1F1F3",
			"unicode_alternates": [],
			"name": "senegal",
			"shortname": ":flag_sn:",
			"category": "travel_places",
			"emoji_order": "5960",
			"aliases": [
				":sn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_st": {
			"unicode": "1F1F8-1F1F9",
			"unicode_alternates": [],
			"name": "sao tome and principe",
			"shortname": ":flag_st:",
			"category": "travel_places",
			"emoji_order": "5955",
			"aliases": [
				":st:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"sao tome e principe"
			]
		},
		"flag_sm": {
			"unicode": "1F1F8-1F1F2",
			"unicode_alternates": [],
			"name": "san marino",
			"shortname": ":flag_sm:",
			"category": "travel_places",
			"emoji_order": "5950",
			"aliases": [
				":sm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ws": {
			"unicode": "1F1FC-1F1F8",
			"unicode_alternates": [],
			"name": "samoa",
			"shortname": ":flag_ws:",
			"category": "travel_places",
			"emoji_order": "5945",
			"aliases": [
				":ws:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"american samoa"
			]
		},
		"flag_vc": {
			"unicode": "1F1FB-1F1E8",
			"unicode_alternates": [],
			"name": "saint vincent and the grenadines",
			"shortname": ":flag_vc:",
			"category": "travel_places",
			"emoji_order": "5940",
			"aliases": [
				":vc:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"&nbsp;"
			]
		},
		"flag_lc": {
			"unicode": "1F1F1-1F1E8",
			"unicode_alternates": [],
			"name": "saint lucia",
			"shortname": ":flag_lc:",
			"category": "travel_places",
			"emoji_order": "5935",
			"aliases": [
				":lc:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_kn": {
			"unicode": "1F1F0-1F1F3",
			"unicode_alternates": [],
			"name": "saint kitts and nevis",
			"shortname": ":flag_kn:",
			"category": "travel_places",
			"emoji_order": "5930",
			"aliases": [
				":kn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"&nbsp;"
			]
		},
		"flag_sh": {
			"unicode": "1F1F8-1F1ED",
			"unicode_alternates": [],
			"name": "saint helena",
			"shortname": ":flag_sh:",
			"category": "travel_places",
			"emoji_order": "5925",
			"aliases": [
				":sh:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_rw": {
			"unicode": "1F1F7-1F1FC",
			"unicode_alternates": [],
			"name": "rwanda",
			"shortname": ":flag_rw:",
			"category": "travel_places",
			"emoji_order": "5920",
			"aliases": [
				":rw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ro": {
			"unicode": "1F1F7-1F1F4",
			"unicode_alternates": [],
			"name": "romania",
			"shortname": ":flag_ro:",
			"category": "travel_places",
			"emoji_order": "5915",
			"aliases": [
				":ro:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_qa": {
			"unicode": "1F1F6-1F1E6",
			"unicode_alternates": [],
			"name": "qatar",
			"shortname": ":flag_qa:",
			"category": "travel_places",
			"emoji_order": "5910",
			"aliases": [
				":qa:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"dawlat qatar"
			]
		},
		"flag_pe": {
			"unicode": "1F1F5-1F1EA",
			"unicode_alternates": [],
			"name": "peru",
			"shortname": ":flag_pe:",
			"category": "travel_places",
			"emoji_order": "5905",
			"aliases": [
				":pe:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_py": {
			"unicode": "1F1F5-1F1FE",
			"unicode_alternates": [],
			"name": "paraguay",
			"shortname": ":flag_py:",
			"category": "travel_places",
			"emoji_order": "5900",
			"aliases": [
				":py:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_pg": {
			"unicode": "1F1F5-1F1EC",
			"unicode_alternates": [],
			"name": "papua new guinea",
			"shortname": ":flag_pg:",
			"category": "travel_places",
			"emoji_order": "5895",
			"aliases": [
				":pg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"papua niu gini"
			]
		},
		"flag_pa": {
			"unicode": "1F1F5-1F1E6",
			"unicode_alternates": [],
			"name": "panama",
			"shortname": ":flag_pa:",
			"category": "travel_places",
			"emoji_order": "5890",
			"aliases": [
				":pa:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ps": {
			"unicode": "1F1F5-1F1F8",
			"unicode_alternates": [],
			"name": "palestinian authority",
			"shortname": ":flag_ps:",
			"category": "travel_places",
			"emoji_order": "5885",
			"aliases": [
				":ps:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_pw": {
			"unicode": "1F1F5-1F1FC",
			"unicode_alternates": [],
			"name": "palau",
			"shortname": ":flag_pw:",
			"category": "travel_places",
			"emoji_order": "5880",
			"aliases": [
				":pw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"belau"
			]
		},
		"flag_pk": {
			"unicode": "1F1F5-1F1F0",
			"unicode_alternates": [],
			"name": "pakistan",
			"shortname": ":flag_pk:",
			"category": "travel_places",
			"emoji_order": "5875",
			"aliases": [
				":pk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_om": {
			"unicode": "1F1F4-1F1F2",
			"unicode_alternates": [],
			"name": "oman",
			"shortname": ":flag_om:",
			"category": "travel_places",
			"emoji_order": "5870",
			"aliases": [
				":om:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"saltanat uman"
			]
		},
		"flag_kp": {
			"unicode": "1F1F0-1F1F5",
			"unicode_alternates": [],
			"name": "north korea",
			"shortname": ":flag_kp:",
			"category": "travel_places",
			"emoji_order": "5865",
			"aliases": [
				":kp:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_nu": {
			"unicode": "1F1F3-1F1FA",
			"unicode_alternates": [],
			"name": "niue",
			"shortname": ":flag_nu:",
			"category": "travel_places",
			"emoji_order": "5860",
			"aliases": [
				":nu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ng": {
			"unicode": "1F1F3-1F1EC",
			"unicode_alternates": [],
			"name": "nigeria",
			"shortname": ":flag_ng:",
			"category": "travel_places",
			"emoji_order": "5855",
			"aliases": [
				":nigeria:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ne": {
			"unicode": "1F1F3-1F1EA",
			"unicode_alternates": [],
			"name": "niger",
			"shortname": ":flag_ne:",
			"category": "travel_places",
			"emoji_order": "5850",
			"aliases": [
				":ne:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ni": {
			"unicode": "1F1F3-1F1EE",
			"unicode_alternates": [],
			"name": "nicaragua",
			"shortname": ":flag_ni:",
			"category": "travel_places",
			"emoji_order": "5845",
			"aliases": [
				":ni:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_nc": {
			"unicode": "1F1F3-1F1E8",
			"unicode_alternates": [],
			"name": "new caledonia",
			"shortname": ":flag_nc:",
			"category": "travel_places",
			"emoji_order": "5840",
			"aliases": [
				":nc:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"nouvelle",
				"cal&eacute;donie",
				"caledonie"
			]
		},
		"flag_np": {
			"unicode": "1F1F3-1F1F5",
			"unicode_alternates": [],
			"name": "nepal",
			"shortname": ":flag_np:",
			"category": "travel_places",
			"emoji_order": "5835",
			"aliases": [
				":np:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_nr": {
			"unicode": "1F1F3-1F1F7",
			"unicode_alternates": [],
			"name": "nauru",
			"shortname": ":flag_nr:",
			"category": "travel_places",
			"emoji_order": "5830",
			"aliases": [
				":nr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_na": {
			"unicode": "1F1F3-1F1E6",
			"unicode_alternates": [],
			"name": "namibia",
			"shortname": ":flag_na:",
			"category": "travel_places",
			"emoji_order": "5825",
			"aliases": [
				":na:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mm": {
			"unicode": "1F1F2-1F1F2",
			"unicode_alternates": [],
			"name": "myanmar",
			"shortname": ":flag_mm:",
			"category": "travel_places",
			"emoji_order": "5820",
			"aliases": [
				":mm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"myanma naingngandaw"
			]
		},
		"flag_mz": {
			"unicode": "1F1F2-1F1FF",
			"unicode_alternates": [],
			"name": "mozambique",
			"shortname": ":flag_mz:",
			"category": "travel_places",
			"emoji_order": "5815",
			"aliases": [
				":mz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"mocambique"
			]
		},
		"flag_ma": {
			"unicode": "1F1F2-1F1E6",
			"unicode_alternates": [],
			"name": "morocco",
			"shortname": ":flag_ma:",
			"category": "travel_places",
			"emoji_order": "5810",
			"aliases": [
				":ma:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al maghrib"
			]
		},
		"flag_ms": {
			"unicode": "1F1F2-1F1F8",
			"unicode_alternates": [],
			"name": "montserrat",
			"shortname": ":flag_ms:",
			"category": "travel_places",
			"emoji_order": "5805",
			"aliases": [
				":ms:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_me": {
			"unicode": "1F1F2-1F1EA",
			"unicode_alternates": [],
			"name": "montenegro",
			"shortname": ":flag_me:",
			"category": "travel_places",
			"emoji_order": "5800",
			"aliases": [
				":me:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"crna gora"
			]
		},
		"flag_mn": {
			"unicode": "1F1F2-1F1F3",
			"unicode_alternates": [],
			"name": "mongolia",
			"shortname": ":flag_mn:",
			"category": "travel_places",
			"emoji_order": "5795",
			"aliases": [
				":mn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"mongol uls"
			]
		},
		"flag_mc": {
			"unicode": "1F1F2-1F1E8",
			"unicode_alternates": [],
			"name": "monaco",
			"shortname": ":flag_mc:",
			"category": "travel_places",
			"emoji_order": "5790",
			"aliases": [
				":mc:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_md": {
			"unicode": "1F1F2-1F1E9",
			"unicode_alternates": [],
			"name": "moldova",
			"shortname": ":flag_md:",
			"category": "travel_places",
			"emoji_order": "5785",
			"aliases": [
				":md:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_fm": {
			"unicode": "1F1EB-1F1F2",
			"unicode_alternates": [],
			"name": "micronesia",
			"shortname": ":flag_fm:",
			"category": "travel_places",
			"emoji_order": "5780",
			"aliases": [
				":fm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mu": {
			"unicode": "1F1F2-1F1FA",
			"unicode_alternates": [],
			"name": "mauritius",
			"shortname": ":flag_mu:",
			"category": "travel_places",
			"emoji_order": "5775",
			"aliases": [
				":mu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mr": {
			"unicode": "1F1F2-1F1F7",
			"unicode_alternates": [],
			"name": "mauritania",
			"shortname": ":flag_mr:",
			"category": "travel_places",
			"emoji_order": "5770",
			"aliases": [
				":mr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"muritaniyah"
			]
		},
		"flag_mh": {
			"unicode": "1F1F2-1F1ED",
			"unicode_alternates": [],
			"name": "the marshall islands",
			"shortname": ":flag_mh:",
			"category": "travel_places",
			"emoji_order": "5766",
			"aliases": [
				":mh:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mt": {
			"unicode": "1F1F2-1F1F9",
			"unicode_alternates": [],
			"name": "malta",
			"shortname": ":flag_mt:",
			"category": "travel_places",
			"emoji_order": "5765",
			"aliases": [
				":mt:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ml": {
			"unicode": "1F1F2-1F1F1",
			"unicode_alternates": [],
			"name": "mali",
			"shortname": ":flag_ml:",
			"category": "travel_places",
			"emoji_order": "5760",
			"aliases": [
				":ml:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mv": {
			"unicode": "1F1F2-1F1FB",
			"unicode_alternates": [],
			"name": "maldives",
			"shortname": ":flag_mv:",
			"category": "travel_places",
			"emoji_order": "5755",
			"aliases": [
				":mv:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"dhivehi raajje"
			]
		},
		"flag_mw": {
			"unicode": "1F1F2-1F1FC",
			"unicode_alternates": [],
			"name": "malawi",
			"shortname": ":flag_mw:",
			"category": "travel_places",
			"emoji_order": "5750",
			"aliases": [
				":mw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mg": {
			"unicode": "1F1F2-1F1EC",
			"unicode_alternates": [],
			"name": "madagascar",
			"shortname": ":flag_mg:",
			"category": "travel_places",
			"emoji_order": "5745",
			"aliases": [
				":mg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mk": {
			"unicode": "1F1F2-1F1F0",
			"unicode_alternates": [],
			"name": "macedonia",
			"shortname": ":flag_mk:",
			"category": "travel_places",
			"emoji_order": "5740",
			"aliases": [
				":mk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_lu": {
			"unicode": "1F1F1-1F1FA",
			"unicode_alternates": [],
			"name": "luxembourg",
			"shortname": ":flag_lu:",
			"category": "travel_places",
			"emoji_order": "5735",
			"aliases": [
				":lu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"luxembourg",
				"letzebuerg"
			]
		},
		"flag_lt": {
			"unicode": "1F1F1-1F1F9",
			"unicode_alternates": [],
			"name": "lithuania",
			"shortname": ":flag_lt:",
			"category": "travel_places",
			"emoji_order": "5730",
			"aliases": [
				":lt:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"lietuva"
			]
		},
		"flag_li": {
			"unicode": "1F1F1-1F1EE",
			"unicode_alternates": [],
			"name": "liechtenstein",
			"shortname": ":flag_li:",
			"category": "travel_places",
			"emoji_order": "5725",
			"aliases": [
				":li:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ly": {
			"unicode": "1F1F1-1F1FE",
			"unicode_alternates": [],
			"name": "libya",
			"shortname": ":flag_ly:",
			"category": "travel_places",
			"emoji_order": "5720",
			"aliases": [
				":ly:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"libiyah"
			]
		},
		"flag_lr": {
			"unicode": "1F1F1-1F1F7",
			"unicode_alternates": [],
			"name": "liberia",
			"shortname": ":flag_lr:",
			"category": "travel_places",
			"emoji_order": "5715",
			"aliases": [
				":lr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ls": {
			"unicode": "1F1F1-1F1F8",
			"unicode_alternates": [],
			"name": "lesotho",
			"shortname": ":flag_ls:",
			"category": "travel_places",
			"emoji_order": "5710",
			"aliases": [
				":ls:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_lb": {
			"unicode": "1F1F1-1F1E7",
			"unicode_alternates": [],
			"name": "lebanon",
			"shortname": ":flag_lb:",
			"category": "travel_places",
			"emoji_order": "5705",
			"aliases": [
				":lb:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"lubnan"
			]
		},
		"flag_lv": {
			"unicode": "1F1F1-1F1FB",
			"unicode_alternates": [],
			"name": "latvia",
			"shortname": ":flag_lv:",
			"category": "travel_places",
			"emoji_order": "5700",
			"aliases": [
				":lv:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"latvija"
			]
		},
		"flag_la": {
			"unicode": "1F1F1-1F1E6",
			"unicode_alternates": [],
			"name": "laos",
			"shortname": ":flag_la:",
			"category": "travel_places",
			"emoji_order": "5695",
			"aliases": [
				":la:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_kg": {
			"unicode": "1F1F0-1F1EC",
			"unicode_alternates": [],
			"name": "kyrgyzstan",
			"shortname": ":flag_kg:",
			"category": "travel_places",
			"emoji_order": "5690",
			"aliases": [
				":kg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"kyrgyz respublikasy"
			]
		},
		"flag_kw": {
			"unicode": "1F1F0-1F1FC",
			"unicode_alternates": [],
			"name": "kuwait",
			"shortname": ":flag_kw:",
			"category": "travel_places",
			"emoji_order": "5685",
			"aliases": [
				":kw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al kuwayt"
			]
		},
		"flag_xk": {
			"unicode": "1F1FD-1F1F0",
			"unicode_alternates": [],
			"name": "kosovo",
			"shortname": ":flag_xk:",
			"category": "travel_places",
			"emoji_order": "5680",
			"aliases": [
				":xk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ki": {
			"unicode": "1F1F0-1F1EE",
			"unicode_alternates": [],
			"name": "kiribati",
			"shortname": ":flag_ki:",
			"category": "travel_places",
			"emoji_order": "5675",
			"aliases": [
				":ki:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"kiribati",
				"kiribas"
			]
		},
		"flag_ke": {
			"unicode": "1F1F0-1F1EA",
			"unicode_alternates": [],
			"name": "kenya",
			"shortname": ":flag_ke:",
			"category": "travel_places",
			"emoji_order": "5670",
			"aliases": [
				":ke:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_kz": {
			"unicode": "1F1F0-1F1FF",
			"unicode_alternates": [],
			"name": "kazakhstan",
			"shortname": ":flag_kz:",
			"category": "travel_places",
			"emoji_order": "5665",
			"aliases": [
				":kz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"qazaqstan"
			]
		},
		"flag_jo": {
			"unicode": "1F1EF-1F1F4",
			"unicode_alternates": [],
			"name": "jordan",
			"shortname": ":flag_jo:",
			"category": "travel_places",
			"emoji_order": "5660",
			"aliases": [
				":jo:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al urdun"
			]
		},
		"flag_je": {
			"unicode": "1F1EF-1F1EA",
			"unicode_alternates": [],
			"name": "jersey",
			"shortname": ":flag_je:",
			"category": "travel_places",
			"emoji_order": "5655",
			"aliases": [
				":je:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_jm": {
			"unicode": "1F1EF-1F1F2",
			"unicode_alternates": [],
			"name": "jamaica",
			"shortname": ":flag_jm:",
			"category": "travel_places",
			"emoji_order": "5650",
			"aliases": [
				":jm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_iq": {
			"unicode": "1F1EE-1F1F6",
			"unicode_alternates": [],
			"name": "iraq",
			"shortname": ":flag_iq:",
			"category": "travel_places",
			"emoji_order": "5645",
			"aliases": [
				":iq:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ir": {
			"unicode": "1F1EE-1F1F7",
			"unicode_alternates": [],
			"name": "iran",
			"shortname": ":flag_ir:",
			"category": "travel_places",
			"emoji_order": "5640",
			"aliases": [
				":ir:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_is": {
			"unicode": "1F1EE-1F1F8",
			"unicode_alternates": [],
			"name": "iceland",
			"shortname": ":flag_is:",
			"category": "travel_places",
			"emoji_order": "5635",
			"aliases": [
				":is:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"lyoveldio island"
			]
		},
		"flag_hu": {
			"unicode": "1F1ED-1F1FA",
			"unicode_alternates": [],
			"name": "hungary",
			"shortname": ":flag_hu:",
			"category": "travel_places",
			"emoji_order": "5630",
			"aliases": [
				":hu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"magyarorszag"
			]
		},
		"flag_hn": {
			"unicode": "1F1ED-1F1F3",
			"unicode_alternates": [],
			"name": "honduras",
			"shortname": ":flag_hn:",
			"category": "travel_places",
			"emoji_order": "5625",
			"aliases": [
				":hn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ht": {
			"unicode": "1F1ED-1F1F9",
			"unicode_alternates": [],
			"name": "haiti",
			"shortname": ":flag_ht:",
			"category": "travel_places",
			"emoji_order": "5620",
			"aliases": [
				":ht:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_gy": {
			"unicode": "1F1EC-1F1FE",
			"unicode_alternates": [],
			"name": "guyana",
			"shortname": ":flag_gy:",
			"category": "travel_places",
			"emoji_order": "5615",
			"aliases": [
				":gy:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_gw": {
			"unicode": "1F1EC-1F1FC",
			"unicode_alternates": [],
			"name": "guinea-bissau",
			"shortname": ":flag_gw:",
			"category": "travel_places",
			"emoji_order": "5610",
			"aliases": [
				":gw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"guine-bissau",
				"guine bissau"
			]
		},
		"flag_gn": {
			"unicode": "1F1EC-1F1F3",
			"unicode_alternates": [],
			"name": "guinea",
			"shortname": ":flag_gn:",
			"category": "travel_places",
			"emoji_order": "5605",
			"aliases": [
				":gn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"guinee"
			]
		},
		"flag_gt": {
			"unicode": "1F1EC-1F1F9",
			"unicode_alternates": [],
			"name": "guatemala",
			"shortname": ":flag_gt:",
			"category": "travel_places",
			"emoji_order": "5600",
			"aliases": [
				":gt:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_gu": {
			"unicode": "1F1EC-1F1FA",
			"unicode_alternates": [],
			"name": "guam",
			"shortname": ":flag_gu:",
			"category": "travel_places",
			"emoji_order": "5595",
			"aliases": [
				":gu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_gd": {
			"unicode": "1F1EC-1F1E9",
			"unicode_alternates": [],
			"name": "grenada",
			"shortname": ":flag_gd:",
			"category": "travel_places",
			"emoji_order": "5590",
			"aliases": [
				":gd:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_gl": {
			"unicode": "1F1EC-1F1F1",
			"unicode_alternates": [],
			"name": "greenland",
			"shortname": ":flag_gl:",
			"category": "travel_places",
			"emoji_order": "5585",
			"aliases": [
				":gl:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"kalaallit nunaat"
			]
		},
		"flag_gr": {
			"unicode": "1F1EC-1F1F7",
			"unicode_alternates": [],
			"name": "greece",
			"shortname": ":flag_gr:",
			"category": "travel_places",
			"emoji_order": "5580",
			"aliases": [
				":gr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"ellas",
				"ellada"
			]
		},
		"flag_gi": {
			"unicode": "1F1EC-1F1EE",
			"unicode_alternates": [],
			"name": "gibraltar",
			"shortname": ":flag_gi:",
			"category": "travel_places",
			"emoji_order": "5575",
			"aliases": [
				":gi:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_gh": {
			"unicode": "1F1EC-1F1ED",
			"unicode_alternates": [],
			"name": "ghana",
			"shortname": ":flag_gh:",
			"category": "travel_places",
			"emoji_order": "5570",
			"aliases": [
				":gh:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ge": {
			"unicode": "1F1EC-1F1EA",
			"unicode_alternates": [],
			"name": "georgia",
			"shortname": ":flag_ge:",
			"category": "travel_places",
			"emoji_order": "5565",
			"aliases": [
				":ge:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"sak'art'velo",
				"sakartvelo"
			]
		},
		"flag_gm": {
			"unicode": "1F1EC-1F1F2",
			"unicode_alternates": [],
			"name": "the gambia",
			"shortname": ":flag_gm:",
			"category": "travel_places",
			"emoji_order": "5561",
			"aliases": [
				":gm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ga": {
			"unicode": "1F1EC-1F1E6",
			"unicode_alternates": [],
			"name": "gabon",
			"shortname": ":flag_ga:",
			"category": "travel_places",
			"emoji_order": "5560",
			"aliases": [
				":ga:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_pf": {
			"unicode": "1F1F5-1F1EB",
			"unicode_alternates": [],
			"name": "french polynesia",
			"shortname": ":flag_pf:",
			"category": "travel_places",
			"emoji_order": "5555",
			"aliases": [
				":pf:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"polyn&eacute;sie fran&ccedil;aise",
				"polynesie francaise"
			]
		},
		"flag_fj": {
			"unicode": "1F1EB-1F1EF",
			"unicode_alternates": [],
			"name": "fiji",
			"shortname": ":flag_fj:",
			"category": "travel_places",
			"emoji_order": "5550",
			"aliases": [
				":fj:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_fo": {
			"unicode": "1F1EB-1F1F4",
			"unicode_alternates": [],
			"name": "faroe islands",
			"shortname": ":flag_fo:",
			"category": "travel_places",
			"emoji_order": "5545",
			"aliases": [
				":fo:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"foroyar"
			]
		},
		"flag_fk": {
			"unicode": "1F1EB-1F1F0",
			"unicode_alternates": [],
			"name": "falkland islands",
			"shortname": ":flag_fk:",
			"category": "travel_places",
			"emoji_order": "5540",
			"aliases": [
				":fk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"islas malvinas"
			]
		},
		"flag_et": {
			"unicode": "1F1EA-1F1F9",
			"unicode_alternates": [],
			"name": "ethiopia",
			"shortname": ":flag_et:",
			"category": "travel_places",
			"emoji_order": "5535",
			"aliases": [
				":et:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"ityop'iya",
				"ityopiya"
			]
		},
		"flag_ee": {
			"unicode": "1F1EA-1F1EA",
			"unicode_alternates": [],
			"name": "estonia",
			"shortname": ":flag_ee:",
			"category": "travel_places",
			"emoji_order": "5530",
			"aliases": [
				":ee:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"eesti vabariik"
			]
		},
		"flag_er": {
			"unicode": "1F1EA-1F1F7",
			"unicode_alternates": [],
			"name": "eritrea",
			"shortname": ":flag_er:",
			"category": "travel_places",
			"emoji_order": "5525",
			"aliases": [
				":er:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"hagere ertra"
			]
		},
		"flag_gq": {
			"unicode": "1F1EC-1F1F6",
			"unicode_alternates": [],
			"name": "equatorial guinea",
			"shortname": ":flag_gq:",
			"category": "travel_places",
			"emoji_order": "5520",
			"aliases": [
				":gq:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"guinea ecuatorial"
			]
		},
		"flag_sv": {
			"unicode": "1F1F8-1F1FB",
			"unicode_alternates": [],
			"name": "el salvador",
			"shortname": ":flag_sv:",
			"category": "travel_places",
			"emoji_order": "5515",
			"aliases": [
				":sv:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_eg": {
			"unicode": "1F1EA-1F1EC",
			"unicode_alternates": [],
			"name": "egypt",
			"shortname": ":flag_eg:",
			"category": "travel_places",
			"emoji_order": "5510",
			"aliases": [
				":eg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"misr"
			]
		},
		"flag_ec": {
			"unicode": "1F1EA-1F1E8",
			"unicode_alternates": [],
			"name": "ecuador",
			"shortname": ":flag_ec:",
			"category": "travel_places",
			"emoji_order": "5505",
			"aliases": [
				":ec:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_tl": {
			"unicode": "1F1F9-1F1F1",
			"unicode_alternates": [],
			"name": "east timor",
			"shortname": ":flag_tl:",
			"category": "travel_places",
			"emoji_order": "5500",
			"aliases": [
				":tl:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_do": {
			"unicode": "1F1E9-1F1F4",
			"unicode_alternates": [],
			"name": "the dominican republic",
			"shortname": ":flag_do:",
			"category": "travel_places",
			"emoji_order": "5496",
			"aliases": [
				":do:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_dm": {
			"unicode": "1F1E9-1F1F2",
			"unicode_alternates": [],
			"name": "dominica",
			"shortname": ":flag_dm:",
			"category": "travel_places",
			"emoji_order": "5495",
			"aliases": [
				":dm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_dj": {
			"unicode": "1F1E9-1F1EF",
			"unicode_alternates": [],
			"name": "djibouti",
			"shortname": ":flag_dj:",
			"category": "travel_places",
			"emoji_order": "5490",
			"aliases": [
				":dj:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_cz": {
			"unicode": "1F1E8-1F1FF",
			"unicode_alternates": [],
			"name": "the czech republic",
			"shortname": ":flag_cz:",
			"category": "travel_places",
			"emoji_order": "5486",
			"aliases": [
				":cz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"ceska republika"
			]
		},
		"flag_cy": {
			"unicode": "1F1E8-1F1FE",
			"unicode_alternates": [],
			"name": "cyprus",
			"shortname": ":flag_cy:",
			"category": "travel_places",
			"emoji_order": "5485",
			"aliases": [
				":cy:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"kibris",
				"kypros"
			]
		},
		"flag_cu": {
			"unicode": "1F1E8-1F1FA",
			"unicode_alternates": [],
			"name": "cuba",
			"shortname": ":flag_cu:",
			"category": "travel_places",
			"emoji_order": "5480",
			"aliases": [
				":cu:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_hr": {
			"unicode": "1F1ED-1F1F7",
			"unicode_alternates": [],
			"name": "croatia",
			"shortname": ":flag_hr:",
			"category": "travel_places",
			"emoji_order": "5475",
			"aliases": [
				":hr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"hrvatska"
			]
		},
		"flag_ci": {
			"unicode": "1F1E8-1F1EE",
			"unicode_alternates": [],
			"name": "cote d'ivoire",
			"shortname": ":flag_ci:",
			"category": "travel_places",
			"emoji_order": "5470",
			"aliases": [
				":ci:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_cr": {
			"unicode": "1F1E8-1F1F7",
			"unicode_alternates": [],
			"name": "costa rica",
			"shortname": ":flag_cr:",
			"category": "travel_places",
			"emoji_order": "5465",
			"aliases": [
				":cr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_td": {
			"unicode": "1F1F9-1F1E9",
			"unicode_alternates": [],
			"name": "chad",
			"shortname": ":flag_td:",
			"category": "travel_places",
			"emoji_order": "5460",
			"aliases": [
				":td:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"tchad"
			]
		},
		"flag_cg": {
			"unicode": "1F1E8-1F1EC",
			"unicode_alternates": [],
			"name": "the republic of the congo",
			"shortname": ":flag_cg:",
			"category": "travel_places",
			"emoji_order": "5458",
			"aliases": [
				":cg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_cd": {
			"unicode": "1F1E8-1F1E9",
			"unicode_alternates": [],
			"name": "the democratic republic of the congo",
			"shortname": ":flag_cd:",
			"category": "travel_places",
			"emoji_order": "5457",
			"aliases": [
				":congo:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"r&eacute;publique d&eacute;mocratique du congo",
				"republique democratique du congo"
			]
		},
		"flag_km": {
			"unicode": "1F1F0-1F1F2",
			"unicode_alternates": [],
			"name": "the comoros",
			"shortname": ":flag_km:",
			"category": "travel_places",
			"emoji_order": "5456",
			"aliases": [
				":km:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_cf": {
			"unicode": "1F1E8-1F1EB",
			"unicode_alternates": [],
			"name": "central african republic",
			"shortname": ":flag_cf:",
			"category": "travel_places",
			"emoji_order": "5455",
			"aliases": [
				":cf:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ky": {
			"unicode": "1F1F0-1F1FE",
			"unicode_alternates": [],
			"name": "cayman islands",
			"shortname": ":flag_ky:",
			"category": "travel_places",
			"emoji_order": "5450",
			"aliases": [
				":ky:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_cv": {
			"unicode": "1F1E8-1F1FB",
			"unicode_alternates": [],
			"name": "cape verde",
			"shortname": ":flag_cv:",
			"category": "travel_places",
			"emoji_order": "5445",
			"aliases": [
				":cv:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"cabo verde"
			]
		},
		"flag_cm": {
			"unicode": "1F1E8-1F1F2",
			"unicode_alternates": [],
			"name": "cameroon",
			"shortname": ":flag_cm:",
			"category": "travel_places",
			"emoji_order": "5440",
			"aliases": [
				":cm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_kh": {
			"unicode": "1F1F0-1F1ED",
			"unicode_alternates": [],
			"name": "cambodia",
			"shortname": ":flag_kh:",
			"category": "travel_places",
			"emoji_order": "5435",
			"aliases": [
				":kh:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"kampuchea"
			]
		},
		"flag_bi": {
			"unicode": "1F1E7-1F1EE",
			"unicode_alternates": [],
			"name": "burundi",
			"shortname": ":flag_bi:",
			"category": "travel_places",
			"emoji_order": "5430",
			"aliases": [
				":bi:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bf": {
			"unicode": "1F1E7-1F1EB",
			"unicode_alternates": [],
			"name": "burkina faso",
			"shortname": ":flag_bf:",
			"category": "travel_places",
			"emoji_order": "5425",
			"aliases": [
				":bf:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bg": {
			"unicode": "1F1E7-1F1EC",
			"unicode_alternates": [],
			"name": "bulgaria",
			"shortname": ":flag_bg:",
			"category": "travel_places",
			"emoji_order": "5420",
			"aliases": [
				":bg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bn": {
			"unicode": "1F1E7-1F1F3",
			"unicode_alternates": [],
			"name": "brunei",
			"shortname": ":flag_bn:",
			"category": "travel_places",
			"emoji_order": "5415",
			"aliases": [
				":bn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bw": {
			"unicode": "1F1E7-1F1FC",
			"unicode_alternates": [],
			"name": "botswana",
			"shortname": ":flag_bw:",
			"category": "travel_places",
			"emoji_order": "5410",
			"aliases": [
				":bw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ba": {
			"unicode": "1F1E7-1F1E6",
			"unicode_alternates": [],
			"name": "bosnia and herzegovina",
			"shortname": ":flag_ba:",
			"category": "travel_places",
			"emoji_order": "5405",
			"aliases": [
				":ba:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"bosna i hercegovina"
			]
		},
		"flag_bo": {
			"unicode": "1F1E7-1F1F4",
			"unicode_alternates": [],
			"name": "bolivia",
			"shortname": ":flag_bo:",
			"category": "travel_places",
			"emoji_order": "5400",
			"aliases": [
				":bo:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bt": {
			"unicode": "1F1E7-1F1F9",
			"unicode_alternates": [],
			"name": "bhutan",
			"shortname": ":flag_bt:",
			"category": "travel_places",
			"emoji_order": "5395",
			"aliases": [
				":bt:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bm": {
			"unicode": "1F1E7-1F1F2",
			"unicode_alternates": [],
			"name": "bermuda",
			"shortname": ":flag_bm:",
			"category": "travel_places",
			"emoji_order": "5390",
			"aliases": [
				":bm:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bj": {
			"unicode": "1F1E7-1F1EF",
			"unicode_alternates": [],
			"name": "benin",
			"shortname": ":flag_bj:",
			"category": "travel_places",
			"emoji_order": "5385",
			"aliases": [
				":bj:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bz": {
			"unicode": "1F1E7-1F1FF",
			"unicode_alternates": [],
			"name": "belize",
			"shortname": ":flag_bz:",
			"category": "travel_places",
			"emoji_order": "5380",
			"aliases": [
				":bz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_by": {
			"unicode": "1F1E7-1F1FE",
			"unicode_alternates": [],
			"name": "belarus",
			"shortname": ":flag_by:",
			"category": "travel_places",
			"emoji_order": "5375",
			"aliases": [
				":by:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"byelarus"
			]
		},
		"flag_bb": {
			"unicode": "1F1E7-1F1E7",
			"unicode_alternates": [],
			"name": "barbados",
			"shortname": ":flag_bb:",
			"category": "travel_places",
			"emoji_order": "5370",
			"aliases": [
				":bb:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bd": {
			"unicode": "1F1E7-1F1E9",
			"unicode_alternates": [],
			"name": "bangladesh",
			"shortname": ":flag_bd:",
			"category": "travel_places",
			"emoji_order": "5365",
			"aliases": [
				":bd:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_bh": {
			"unicode": "1F1E7-1F1ED",
			"unicode_alternates": [],
			"name": "bahrain",
			"shortname": ":flag_bh:",
			"category": "travel_places",
			"emoji_order": "5360",
			"aliases": [
				":bh:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al bahrayn"
			]
		},
		"flag_bs": {
			"unicode": "1F1E7-1F1F8",
			"unicode_alternates": [],
			"name": "the bahamas",
			"shortname": ":flag_bs:",
			"category": "travel_places",
			"emoji_order": "5356",
			"aliases": [
				":bs:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_az": {
			"unicode": "1F1E6-1F1FF",
			"unicode_alternates": [],
			"name": "azerbaijan",
			"shortname": ":flag_az:",
			"category": "travel_places",
			"emoji_order": "5355",
			"aliases": [
				":az:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"azarbaycan"
			]
		},
		"flag_ac": {
			"unicode": "1F1E6-1F1E8",
			"unicode_alternates": [],
			"name": "ascension",
			"shortname": ":flag_ac:",
			"category": "travel_places",
			"emoji_order": "5350",
			"aliases": [
				":ac:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_aw": {
			"unicode": "1F1E6-1F1FC",
			"unicode_alternates": [],
			"name": "aruba",
			"shortname": ":flag_aw:",
			"category": "travel_places",
			"emoji_order": "5345",
			"aliases": [
				":aw:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_am": {
			"unicode": "1F1E6-1F1F2",
			"unicode_alternates": [],
			"name": "armenia",
			"shortname": ":flag_am:",
			"category": "travel_places",
			"emoji_order": "5340",
			"aliases": [
				":am:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"hayastan"
			]
		},
		"flag_ar": {
			"unicode": "1F1E6-1F1F7",
			"unicode_alternates": [],
			"name": "argentina",
			"shortname": ":flag_ar:",
			"category": "travel_places",
			"emoji_order": "5335",
			"aliases": [
				":ar:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ag": {
			"unicode": "1F1E6-1F1EC",
			"unicode_alternates": [],
			"name": "antigua and barbuda",
			"shortname": ":flag_ag:",
			"category": "travel_places",
			"emoji_order": "5330",
			"aliases": [
				":ag:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ai": {
			"unicode": "1F1E6-1F1EE",
			"unicode_alternates": [],
			"name": "anguilla",
			"shortname": ":flag_ai:",
			"category": "travel_places",
			"emoji_order": "5325",
			"aliases": [
				":ai:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ao": {
			"unicode": "1F1E6-1F1F4",
			"unicode_alternates": [],
			"name": "angola",
			"shortname": ":flag_ao:",
			"category": "travel_places",
			"emoji_order": "5320",
			"aliases": [
				":ao:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ad": {
			"unicode": "1F1E6-1F1E9",
			"unicode_alternates": [],
			"name": "andorra",
			"shortname": ":flag_ad:",
			"category": "travel_places",
			"emoji_order": "5315",
			"aliases": [
				":ad:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_dz": {
			"unicode": "1F1E9-1F1FF",
			"unicode_alternates": [],
			"name": "algeria",
			"shortname": ":flag_dz:",
			"category": "travel_places",
			"emoji_order": "5310",
			"aliases": [
				":dz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al jaza'ir",
				"al jazair"
			]
		},
		"flag_al": {
			"unicode": "1F1E6-1F1F1",
			"unicode_alternates": [],
			"name": "albania",
			"shortname": ":flag_al:",
			"category": "travel_places",
			"emoji_order": "5305",
			"aliases": [
				":al:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"shqiperia"
			]
		},
		"flag_af": {
			"unicode": "1F1E6-1F1EB",
			"unicode_alternates": [],
			"name": "afghanistan",
			"shortname": ":flag_af:",
			"category": "travel_places",
			"emoji_order": "5300",
			"aliases": [
				":af:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"afghanestan"
			]
		},
		"flag_vn": {
			"unicode": "1F1FB-1F1F3",
			"unicode_alternates": [],
			"name": "vietnam",
			"shortname": ":flag_vn:",
			"category": "travel_places",
			"emoji_order": "5295",
			"aliases": [
				":vn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"viet nam"
			]
		},
		"flag_ae": {
			"unicode": "1F1E6-1F1EA",
			"unicode_alternates": [],
			"name": "the united arab emirates",
			"shortname": ":flag_ae:",
			"category": "travel_places",
			"emoji_order": "5290",
			"aliases": [
				":ae:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_us": {
			"unicode": "1F1FA-1F1F8",
			"unicode_alternates": [],
			"name": "united states",
			"shortname": ":flag_us:",
			"category": "travel_places",
			"emoji_order": "5285",
			"aliases": [
				":us:"
			],
			"aliases_ascii": [],
			"keywords": [
				"american",
				"banner",
				"country",
				"flag",
				"nation",
				"usa",
				"united states of america",
				"america",
				"old glory"
			]
		},
		"flag_gb": {
			"unicode": "1F1EC-1F1E7",
			"unicode_alternates": [],
			"name": "great britain",
			"shortname": ":flag_gb:",
			"category": "travel_places",
			"emoji_order": "5280",
			"aliases": [
				":gb:"
			],
			"aliases_ascii": [],
			"keywords": [
				"UK",
				"banner",
				"britsh",
				"flag",
				"nation",
				"united kingdom",
				"england",
				"country"
			]
		},
		"flag_tr": {
			"unicode": "1F1F9-1F1F7",
			"unicode_alternates": [],
			"name": "turkey",
			"shortname": ":flag_tr:",
			"category": "travel_places",
			"emoji_order": "5275",
			"aliases": [
				":tr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"turkiye"
			]
		},
		"flag_ch": {
			"unicode": "1F1E8-1F1ED",
			"unicode_alternates": [],
			"name": "switzerland",
			"shortname": ":flag_ch:",
			"category": "travel_places",
			"emoji_order": "5270",
			"aliases": [
				":ch:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_se": {
			"unicode": "1F1F8-1F1EA",
			"unicode_alternates": [],
			"name": "sweden",
			"shortname": ":flag_se:",
			"category": "travel_places",
			"emoji_order": "5265",
			"aliases": [
				":se:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"sverige"
			]
		},
		"flag_es": {
			"unicode": "1F1EA-1F1F8",
			"unicode_alternates": [],
			"name": "spain",
			"shortname": ":flag_es:",
			"category": "travel_places",
			"emoji_order": "5260",
			"aliases": [
				":es:"
			],
			"aliases_ascii": [],
			"keywords": [
				"flag",
				"nation",
				"spain",
				"espa&ntilde;a",
				"country",
				"espana"
			]
		},
		"flag_za": {
			"unicode": "1F1FF-1F1E6",
			"unicode_alternates": [],
			"name": "south africa",
			"shortname": ":flag_za:",
			"category": "travel_places",
			"emoji_order": "5255",
			"aliases": [
				":za:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sg": {
			"unicode": "1F1F8-1F1EC",
			"unicode_alternates": [],
			"name": "singapore",
			"shortname": ":flag_sg:",
			"category": "travel_places",
			"emoji_order": "5250",
			"aliases": [
				":sg:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_sa": {
			"unicode": "1F1F8-1F1E6",
			"unicode_alternates": [],
			"name": "saudi arabia",
			"shortname": ":flag_sa:",
			"category": "travel_places",
			"emoji_order": "5245",
			"aliases": [
				":saudiarabia:",
				":saudi:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"al arabiyah as suudiyah"
			]
		},
		"flag_ru": {
			"unicode": "1F1F7-1F1FA",
			"unicode_alternates": [],
			"name": "russia",
			"shortname": ":flag_ru:",
			"category": "travel_places",
			"emoji_order": "5240",
			"aliases": [
				":ru:"
			],
			"aliases_ascii": [],
			"keywords": [
				"banner",
				"flag",
				"nation",
				"russian",
				"country"
			]
		},
		"flag_pr": {
			"unicode": "1F1F5-1F1F7",
			"unicode_alternates": [],
			"name": "puerto rico",
			"shortname": ":flag_pr:",
			"category": "travel_places",
			"emoji_order": "5235",
			"aliases": [
				":pr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_pt": {
			"unicode": "1F1F5-1F1F9",
			"unicode_alternates": [],
			"name": "portugal",
			"shortname": ":flag_pt:",
			"category": "travel_places",
			"emoji_order": "5230",
			"aliases": [
				":pt:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_pl": {
			"unicode": "1F1F5-1F1F1",
			"unicode_alternates": [],
			"name": "poland",
			"shortname": ":flag_pl:",
			"category": "travel_places",
			"emoji_order": "5225",
			"aliases": [
				":pl:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"polska"
			]
		},
		"flag_ph": {
			"unicode": "1F1F5-1F1ED",
			"unicode_alternates": [],
			"name": "the philippines",
			"shortname": ":flag_ph:",
			"category": "travel_places",
			"emoji_order": "5220",
			"aliases": [
				":ph:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"pilipinas"
			]
		},
		"flag_no": {
			"unicode": "1F1F3-1F1F4",
			"unicode_alternates": [],
			"name": "norway",
			"shortname": ":flag_no:",
			"category": "travel_places",
			"emoji_order": "5215",
			"aliases": [
				":no:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"norge"
			]
		},
		"flag_nz": {
			"unicode": "1F1F3-1F1FF",
			"unicode_alternates": [],
			"name": "new zealand",
			"shortname": ":flag_nz:",
			"category": "travel_places",
			"emoji_order": "5210",
			"aliases": [
				":nz:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"aotearoa"
			]
		},
		"flag_nl": {
			"unicode": "1F1F3-1F1F1",
			"unicode_alternates": [],
			"name": "the netherlands",
			"shortname": ":flag_nl:",
			"category": "travel_places",
			"emoji_order": "5205",
			"aliases": [
				":nl:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"nederland",
				"holland"
			]
		},
		"flag_mx": {
			"unicode": "1F1F2-1F1FD",
			"unicode_alternates": [],
			"name": "mexico",
			"shortname": ":flag_mx:",
			"category": "travel_places",
			"emoji_order": "5200",
			"aliases": [
				":mx:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_my": {
			"unicode": "1F1F2-1F1FE",
			"unicode_alternates": [],
			"name": "malaysia",
			"shortname": ":flag_my:",
			"category": "travel_places",
			"emoji_order": "5195",
			"aliases": [
				":my:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_mo": {
			"unicode": "1F1F2-1F1F4",
			"unicode_alternates": [],
			"name": "macau",
			"shortname": ":flag_mo:",
			"category": "travel_places",
			"emoji_order": "5190",
			"aliases": [
				":mo:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"aomen"
			]
		},
		"flag_kr": {
			"unicode": "1F1F0-1F1F7",
			"unicode_alternates": [],
			"name": "korea",
			"shortname": ":flag_kr:",
			"category": "travel_places",
			"emoji_order": "5185",
			"aliases": [
				":kr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"flag",
				"korea",
				"nation",
				"country"
			]
		},
		"flag_jp": {
			"unicode": "1F1EF-1F1F5",
			"unicode_alternates": [],
			"name": "japan",
			"shortname": ":flag_jp:",
			"category": "travel_places",
			"emoji_order": "5180",
			"aliases": [
				":jp:"
			],
			"aliases_ascii": [],
			"keywords": [
				"flag",
				"japan",
				"nation",
				"nippon",
				"country"
			]
		},
		"flag_it": {
			"unicode": "1F1EE-1F1F9",
			"unicode_alternates": [],
			"name": "italy",
			"shortname": ":flag_it:",
			"category": "travel_places",
			"emoji_order": "5175",
			"aliases": [
				":it:"
			],
			"aliases_ascii": [],
			"keywords": [
				"flag",
				"italy",
				"italia",
				"country",
				"nation"
			]
		},
		"flag_il": {
			"unicode": "1F1EE-1F1F1",
			"unicode_alternates": [],
			"name": "israel",
			"shortname": ":flag_il:",
			"category": "travel_places",
			"emoji_order": "5170",
			"aliases": [
				":il:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"yisra'el",
				"yisrael"
			]
		},
		"flag_ie": {
			"unicode": "1F1EE-1F1EA",
			"unicode_alternates": [],
			"name": "ireland",
			"shortname": ":flag_ie:",
			"category": "travel_places",
			"emoji_order": "5165",
			"aliases": [
				":ie:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"&eacute;ire",
				"eire"
			]
		},
		"flag_id": {
			"unicode": "1F1EE-1F1E9",
			"unicode_alternates": [],
			"name": "indonesia",
			"shortname": ":flag_id:",
			"category": "travel_places",
			"emoji_order": "5160",
			"aliases": [
				":indonesia:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_in": {
			"unicode": "1F1EE-1F1F3",
			"unicode_alternates": [],
			"name": "india",
			"shortname": ":flag_in:",
			"category": "travel_places",
			"emoji_order": "5155",
			"aliases": [
				":in:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"bharat"
			]
		},
		"flag_hk": {
			"unicode": "1F1ED-1F1F0",
			"unicode_alternates": [],
			"name": "hong kong",
			"shortname": ":flag_hk:",
			"category": "travel_places",
			"emoji_order": "5150",
			"aliases": [
				":hk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"xianggang"
			]
		},
		"flag_de": {
			"unicode": "1F1E9-1F1EA",
			"unicode_alternates": [],
			"name": "germany",
			"shortname": ":flag_de:",
			"category": "travel_places",
			"emoji_order": "5145",
			"aliases": [
				":de:"
			],
			"aliases_ascii": [],
			"keywords": [
				"flag",
				"german",
				"nation",
				"deutschland",
				"country"
			]
		},
		"flag_fr": {
			"unicode": "1F1EB-1F1F7",
			"unicode_alternates": [],
			"name": "france",
			"shortname": ":flag_fr:",
			"category": "travel_places",
			"emoji_order": "5140",
			"aliases": [
				":fr:"
			],
			"aliases_ascii": [],
			"keywords": [
				"banner",
				"flag",
				"france",
				"french",
				"nation",
				"country"
			]
		},
		"flag_fi": {
			"unicode": "1F1EB-1F1EE",
			"unicode_alternates": [],
			"name": "finland",
			"shortname": ":flag_fi:",
			"category": "travel_places",
			"emoji_order": "5135",
			"aliases": [
				":fi:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"suomen tasavalta"
			]
		},
		"flag_dk": {
			"unicode": "1F1E9-1F1F0",
			"unicode_alternates": [],
			"name": "denmark",
			"shortname": ":flag_dk:",
			"category": "travel_places",
			"emoji_order": "5130",
			"aliases": [
				":dk:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"danmark"
			]
		},
		"flag_co": {
			"unicode": "1F1E8-1F1F4",
			"unicode_alternates": [],
			"name": "colombia",
			"shortname": ":flag_co:",
			"category": "travel_places",
			"emoji_order": "5125",
			"aliases": [
				":co:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_cn": {
			"unicode": "1F1E8-1F1F3",
			"unicode_alternates": [],
			"name": "china",
			"shortname": ":flag_cn:",
			"category": "travel_places",
			"emoji_order": "5120",
			"aliases": [
				":cn:"
			],
			"aliases_ascii": [],
			"keywords": [
				"china",
				"chinese",
				"prc",
				"zhong guo",
				"country",
				"nation"
			]
		},
		"flag_cl": {
			"unicode": "1F1E8-1F1F1",
			"unicode_alternates": [],
			"name": "chile",
			"shortname": ":flag_cl:",
			"category": "travel_places",
			"emoji_order": "5115",
			"aliases": [
				":chile:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_ca": {
			"unicode": "1F1E8-1F1E6",
			"unicode_alternates": [],
			"name": "canada",
			"shortname": ":flag_ca:",
			"category": "travel_places",
			"emoji_order": "5110",
			"aliases": [
				":ca:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"flag_br": {
			"unicode": "1F1E7-1F1F7",
			"unicode_alternates": [],
			"name": "brazil",
			"shortname": ":flag_br:",
			"category": "travel_places",
			"emoji_order": "5105",
			"aliases": [
				":br:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"brasil"
			]
		},
		"flag_be": {
			"unicode": "1F1E7-1F1EA",
			"unicode_alternates": [],
			"name": "belgium",
			"shortname": ":flag_be:",
			"category": "travel_places",
			"emoji_order": "5100",
			"aliases": [
				":be:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"belgique",
				"belgie"
			]
		},
		"flag_at": {
			"unicode": "1F1E6-1F1F9",
			"unicode_alternates": [],
			"name": "austria",
			"shortname": ":flag_at:",
			"category": "travel_places",
			"emoji_order": "5095",
			"aliases": [
				":at:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation",
				"&ouml;sterreich",
				"osterreich"
			]
		},
		"flag_au": {
			"unicode": "1F1E6-1F1FA",
			"unicode_alternates": [],
			"name": "australia",
			"shortname": ":flag_au:",
			"category": "travel_places",
			"emoji_order": "5090",
			"aliases": [
				":au:"
			],
			"aliases_ascii": [],
			"keywords": [
				"country",
				"nation"
			]
		},
		"map": {
			"unicode": "1F5FA",
			"unicode_alternates": [],
			"name": "world map",
			"shortname": ":map:",
			"category": "travel_places",
			"emoji_order": "5085",
			"aliases": [
				":world_map:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"school": {
			"unicode": "1F3EB",
			"unicode_alternates": [],
			"name": "school",
			"shortname": ":school:",
			"category": "travel_places",
			"emoji_order": "5080",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"school",
				"university",
				"elementary",
				"middle",
				"high",
				"college",
				"teach",
				"education"
			]
		},
		"convenience_store": {
			"unicode": "1F3EA",
			"unicode_alternates": [],
			"name": "convenience store",
			"shortname": ":convenience_store:",
			"category": "travel_places",
			"emoji_order": "5075",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building"
			]
		},
		"church": {
			"unicode": "26EA",
			"unicode_alternates": [
				"26EA-FE0F"
			],
			"name": "church",
			"shortname": ":church:",
			"category": "travel_places",
			"emoji_order": "5070",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"christ",
				"religion"
			]
		},
		"wedding": {
			"unicode": "1F492",
			"unicode_alternates": [],
			"name": "wedding",
			"shortname": ":wedding:",
			"category": "travel_places",
			"emoji_order": "5065",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"bride",
				"couple",
				"groom",
				"like",
				"love",
				"marriage"
			]
		},
		"love_hotel": {
			"unicode": "1F3E9",
			"unicode_alternates": [],
			"name": "love hotel",
			"shortname": ":love_hotel:",
			"category": "travel_places",
			"emoji_order": "5060",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"dating",
				"like",
				"love",
				"hotel",
				"love",
				"sex",
				"romance",
				"leisure",
				"adultery",
				"prostitution",
				"hospital",
				"birth",
				"happy"
			]
		},
		"hotel": {
			"unicode": "1F3E8",
			"unicode_alternates": [],
			"name": "hotel",
			"shortname": ":hotel:",
			"category": "travel_places",
			"emoji_order": "5055",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accomodation",
				"building",
				"checkin",
				"whotel",
				"hotel",
				"motel",
				"holiday inn",
				"hospital"
			]
		},
		"bank": {
			"unicode": "1F3E6",
			"unicode_alternates": [],
			"name": "bank",
			"shortname": ":bank:",
			"category": "travel_places",
			"emoji_order": "5050",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building"
			]
		},
		"hospital": {
			"unicode": "1F3E5",
			"unicode_alternates": [],
			"name": "hospital",
			"shortname": ":hospital:",
			"category": "travel_places",
			"emoji_order": "5045",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"doctor",
				"health",
				"surgery"
			]
		},
		"european_post_office": {
			"unicode": "1F3E4",
			"unicode_alternates": [],
			"name": "european post office",
			"shortname": ":european_post_office:",
			"category": "travel_places",
			"emoji_order": "5040",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building"
			]
		},
		"post_office": {
			"unicode": "1F3E3",
			"unicode_alternates": [],
			"name": "japanese post office",
			"shortname": ":post_office:",
			"category": "travel_places",
			"emoji_order": "5035",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"communication",
				"email"
			]
		},
		"factory": {
			"unicode": "1F3ED",
			"unicode_alternates": [],
			"name": "factory",
			"shortname": ":factory:",
			"category": "travel_places",
			"emoji_order": "5030",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building"
			]
		},
		"department_store": {
			"unicode": "1F3EC",
			"unicode_alternates": [],
			"name": "department store",
			"shortname": ":department_store:",
			"category": "travel_places",
			"emoji_order": "5025",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"mall",
				"shopping",
				"department",
				"store",
				"retail",
				"sale",
				"merchandise"
			]
		},
		"office": {
			"unicode": "1F3E2",
			"unicode_alternates": [],
			"name": "office building",
			"shortname": ":office:",
			"category": "travel_places",
			"emoji_order": "5020",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"bureau",
				"work"
			]
		},
		"contruction_site": {
			"unicode": "1F3D7",
			"unicode_alternates": [],
			"name": "building construction",
			"shortname": ":contruction_site:",
			"category": "travel_places",
			"emoji_order": "5016",
			"aliases": [
				":building_construction:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"house-abandoned": {
			"unicode": "1F3DA",
			"unicode_alternates": [],
			"name": "derelict house building",
			"shortname": ":house-abandoned:",
			"category": "travel_places",
			"emoji_order": "5015",
			"aliases": [
				":derelict_house_building:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"house_with_garden": {
			"unicode": "1F3E1",
			"unicode_alternates": [],
			"name": "house with garden",
			"shortname": ":house_with_garden:",
			"category": "travel_places",
			"emoji_order": "5010",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"home",
				"nature",
				"plant"
			]
		},
		"homes": {
			"unicode": "1F3D8",
			"unicode_alternates": [],
			"name": "house buildings",
			"shortname": ":homes:",
			"category": "travel_places",
			"emoji_order": "5005",
			"aliases": [
				":house_buildings:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"house": {
			"unicode": "1F3E0",
			"unicode_alternates": [],
			"name": "house building",
			"shortname": ":house:",
			"category": "travel_places",
			"emoji_order": "5000",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"home",
				"house",
				"home",
				"residence",
				"dwelling",
				"mansion",
				"bungalow",
				"ranch",
				"craftsman"
			]
		},
		"bridge_at_night": {
			"unicode": "1F309",
			"unicode_alternates": [],
			"name": "bridge at night",
			"shortname": ":bridge_at_night:",
			"category": "travel_places",
			"emoji_order": "4995",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"photo",
				"sanfrancisco",
				"bridge",
				"night",
				"water",
				"road",
				"evening",
				"suspension",
				"golden",
				"gate"
			]
		},
		"night_with_stars": {
			"unicode": "1F303",
			"unicode_alternates": [],
			"name": "night with stars",
			"shortname": ":night_with_stars:",
			"category": "travel_places",
			"emoji_order": "4990",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"star",
				"cloudless",
				"evening",
				"planets",
				"space",
				"sky"
			]
		},
		"city_dusk": {
			"unicode": "1F306",
			"unicode_alternates": [],
			"name": "cityscape at dusk",
			"shortname": ":city_dusk:",
			"category": "travel_places",
			"emoji_order": "4985",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"photo",
				"city",
				"scape",
				"sunset",
				"dusk",
				"lights",
				"evening",
				"metropolitan",
				"night",
				"dark"
			]
		},
		"city_sunset": {
			"unicode": "1F307",
			"unicode_alternates": [],
			"name": "sunset over buildings",
			"shortname": ":city_sunset:",
			"category": "travel_places",
			"emoji_order": "4984",
			"aliases": [
				":city_sunrise:"
			],
			"aliases_ascii": [],
			"keywords": [
				"photo",
				"city",
				"scape",
				"sunrise",
				"dawn",
				"light",
				"morning",
				"metropolitan",
				"rise",
				"sun"
			]
		},
		"cityscape": {
			"unicode": "1F3D9",
			"unicode_alternates": [],
			"name": "cityscape",
			"shortname": ":cityscape:",
			"category": "travel_places",
			"emoji_order": "4981",
			"aliases": [
				":cityscape:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"park": {
			"unicode": "1F3DE",
			"unicode_alternates": [],
			"name": "national park",
			"shortname": ":park:",
			"category": "travel_places",
			"emoji_order": "4980",
			"aliases": [
				":national_park:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"island": {
			"unicode": "1F3DD",
			"unicode_alternates": [],
			"name": "desert island",
			"shortname": ":island:",
			"category": "travel_places",
			"emoji_order": "4979",
			"aliases": [
				":desert_island:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"desert": {
			"unicode": "1F3DC",
			"unicode_alternates": [],
			"name": "desert",
			"shortname": ":desert:",
			"category": "travel_places",
			"emoji_order": "4978",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"beach": {
			"unicode": "1F3D6",
			"unicode_alternates": [],
			"name": "beach with umbrella",
			"shortname": ":beach:",
			"category": "travel_places",
			"emoji_order": "4977",
			"aliases": [
				":beach_with_umbrella:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"camping": {
			"unicode": "1F3D5",
			"unicode_alternates": [],
			"name": "camping",
			"shortname": ":camping:",
			"category": "travel_places",
			"emoji_order": "4976",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"mountain_snow": {
			"unicode": "1F3D4",
			"unicode_alternates": [],
			"name": "snow capped mountain",
			"shortname": ":mountain_snow:",
			"category": "travel_places",
			"emoji_order": "4975",
			"aliases": [
				":snow_capped_mountain:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"stadium": {
			"unicode": "1F3DF",
			"unicode_alternates": [],
			"name": "stadium",
			"shortname": ":stadium:",
			"category": "travel_places",
			"emoji_order": "4974",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"classical_building": {
			"unicode": "1F3DB",
			"unicode_alternates": [],
			"name": "classical building",
			"shortname": ":classical_building:",
			"category": "travel_places",
			"emoji_order": "4973",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"japanese_castle": {
			"unicode": "1F3EF",
			"unicode_alternates": [],
			"name": "japanese castle",
			"shortname": ":japanese_castle:",
			"category": "travel_places",
			"emoji_order": "4972",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"photo",
				"castle",
				"japanese",
				"residence",
				"royalty",
				"fort",
				"fortified",
				"fortress"
			]
		},
		"european_castle": {
			"unicode": "1F3F0",
			"unicode_alternates": [],
			"name": "european castle",
			"shortname": ":european_castle:",
			"category": "travel_places",
			"emoji_order": "4970",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"building",
				"history",
				"royalty",
				"castle",
				"european",
				"residence",
				"royalty",
				"disneyland",
				"disney",
				"fort",
				"fortified",
				"moat",
				"tower",
				"princess",
				"prince",
				"lord",
				"king",
				"queen",
				"fortress",
				"nobel",
				"stronghold"
			]
		},
		"fountain": {
			"unicode": "26F2",
			"unicode_alternates": [
				"26F2-FE0F"
			],
			"name": "fountain",
			"shortname": ":fountain:",
			"category": "travel_places",
			"emoji_order": "4965",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"photo"
			]
		},
		"tokyo_tower": {
			"unicode": "1F5FC",
			"unicode_alternates": [],
			"name": "tokyo tower",
			"shortname": ":tokyo_tower:",
			"category": "travel_places",
			"emoji_order": "4960",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"japan",
				"photo"
			]
		},
		"foggy": {
			"unicode": "1F301",
			"unicode_alternates": [],
			"name": "foggy",
			"shortname": ":foggy:",
			"category": "travel_places",
			"emoji_order": "4955",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"mountain",
				"photo",
				"bridge",
				"weather",
				"fog",
				"foggy"
			]
		},
		"moyai": {
			"unicode": "1F5FF",
			"unicode_alternates": [],
			"name": "moyai",
			"shortname": ":moyai:",
			"category": "travel_places",
			"emoji_order": "4950",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"island",
				"stone"
			]
		},
		"statue_of_liberty": {
			"unicode": "1F5FD",
			"unicode_alternates": [],
			"name": "statue of liberty",
			"shortname": ":statue_of_liberty:",
			"category": "travel_places",
			"emoji_order": "4947",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"american",
				"newyork"
			]
		},
		"shopping_bags": {
			"unicode": "1F6CD",
			"unicode_alternates": [],
			"name": "shopping bags",
			"shortname": ":shopping_bags:",
			"category": "travel_places",
			"emoji_order": "4945",
			"aliases": [
				":shopping_bags:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"fork_knife_plate": {
			"unicode": "1F37D",
			"unicode_alternates": [],
			"name": "fork and knife with plate",
			"shortname": ":fork_knife_plate:",
			"category": "travel_places",
			"emoji_order": "4944",
			"aliases": [
				":fork_and_knife_with_plate:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"couch": {
			"unicode": "1F6CB",
			"unicode_alternates": [],
			"name": "couch and lamp",
			"shortname": ":couch:",
			"category": "travel_places",
			"emoji_order": "4943",
			"aliases": [
				":couch_and_lamp:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"bed": {
			"unicode": "1F6CF",
			"unicode_alternates": [],
			"name": "bed",
			"shortname": ":bed:",
			"category": "travel_places",
			"emoji_order": "4942",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"bellhop": {
			"unicode": "1F6CE",
			"unicode_alternates": [],
			"name": "bellhop bell",
			"shortname": ":bellhop:",
			"category": "travel_places",
			"emoji_order": "4941",
			"aliases": [
				":bellhop_bell:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"dollar": {
			"unicode": "1F4B5",
			"unicode_alternates": [],
			"name": "banknote with dollar sign",
			"shortname": ":dollar:",
			"category": "travel_places",
			"emoji_order": "4940",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bill",
				"currency",
				"money",
				"dollar",
				"united states",
				"canada",
				"australia",
				"banknote",
				"money",
				"currency",
				"paper",
				"cash",
				"bills"
			]
		},
		"pound": {
			"unicode": "1F4B7",
			"unicode_alternates": [],
			"name": "banknote with pound sign",
			"shortname": ":pound:",
			"category": "travel_places",
			"emoji_order": "4935",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bills",
				"british",
				"currency",
				"england",
				"money",
				"sterling",
				"uk",
				"pound",
				"britain",
				"british",
				"banknote",
				"money",
				"currency",
				"paper",
				"cash",
				"bills"
			]
		},
		"euro": {
			"unicode": "1F4B6",
			"unicode_alternates": [],
			"name": "banknote with euro sign",
			"shortname": ":euro:",
			"category": "travel_places",
			"emoji_order": "4930",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"currency",
				"dollar",
				"money",
				"euro",
				"europe",
				"banknote",
				"money",
				"currency",
				"paper",
				"cash",
				"bills"
			]
		},
		"yen": {
			"unicode": "1F4B4",
			"unicode_alternates": [],
			"name": "banknote with yen sign",
			"shortname": ":yen:",
			"category": "travel_places",
			"emoji_order": "4925",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"currency",
				"dollar",
				"japanese",
				"money",
				"yen",
				"japan",
				"japanese",
				"banknote",
				"money",
				"currency",
				"paper",
				"cash",
				"bill"
			]
		},
		"left_luggage": {
			"unicode": "1F6C5",
			"unicode_alternates": [],
			"name": "left luggage",
			"shortname": ":left_luggage:",
			"category": "travel_places",
			"emoji_order": "4920",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"travel",
				"bag",
				"baggage",
				"luggage",
				"travel"
			]
		},
		"baggage_claim": {
			"unicode": "1F6C4",
			"unicode_alternates": [],
			"name": "baggage claim",
			"shortname": ":baggage_claim:",
			"category": "travel_places",
			"emoji_order": "4915",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"airport",
				"blue-square",
				"transport",
				"bag",
				"baggage",
				"luggage",
				"travel"
			]
		},
		"customs": {
			"unicode": "1F6C3",
			"unicode_alternates": [],
			"name": "customs",
			"shortname": ":customs:",
			"category": "travel_places",
			"emoji_order": "4910",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"border",
				"passport",
				"customs",
				"travel",
				"foreign",
				"goods",
				"check",
				"authority",
				"government"
			]
		},
		"passport_control": {
			"unicode": "1F6C2",
			"unicode_alternates": [],
			"name": "passport control",
			"shortname": ":passport_control:",
			"category": "travel_places",
			"emoji_order": "4905",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"custom",
				"passport",
				"official",
				"travel",
				"control",
				"foreign",
				"identification"
			]
		},
		"suspension_railway": {
			"unicode": "1F69F",
			"unicode_alternates": [],
			"name": "suspension railway",
			"shortname": ":suspension_railway:",
			"category": "travel_places",
			"emoji_order": "4900",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"suspension",
				"railway",
				"rail",
				"train",
				"transportation"
			]
		},
		"mountain_cableway": {
			"unicode": "1F6A0",
			"unicode_alternates": [],
			"name": "mountain cableway",
			"shortname": ":mountain_cableway:",
			"category": "travel_places",
			"emoji_order": "4895",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"mountain",
				"cable",
				"rail",
				"train",
				"railway"
			]
		},
		"aerial_tramway": {
			"unicode": "1F6A1",
			"unicode_alternates": [],
			"name": "aerial tramway",
			"shortname": ":aerial_tramway:",
			"category": "travel_places",
			"emoji_order": "4890",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"aerial",
				"tram",
				"tramway",
				"cable",
				"transport"
			]
		},
		"sailboat": {
			"unicode": "26F5",
			"unicode_alternates": [
				"26F5-FE0F"
			],
			"name": "sailboat",
			"shortname": ":sailboat:",
			"category": "travel_places",
			"emoji_order": "4885",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ship",
				"transportation"
			]
		},
		"speedboat": {
			"unicode": "1F6A4",
			"unicode_alternates": [],
			"name": "speedboat",
			"shortname": ":speedboat:",
			"category": "travel_places",
			"emoji_order": "4880",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ship",
				"transportation",
				"vehicle",
				"motor",
				"speed",
				"ski",
				"power",
				"boat"
			]
		},
		"motorboat": {
			"unicode": "1F6E5",
			"unicode_alternates": [],
			"name": "motorboat",
			"shortname": ":motorboat:",
			"category": "travel_places",
			"emoji_order": "4877",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"cruise_ship": {
			"unicode": "1F6F3",
			"unicode_alternates": [],
			"name": "passenger ship",
			"shortname": ":cruise_ship:",
			"category": "travel_places",
			"emoji_order": "4876",
			"aliases": [
				":passenger_ship:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"ship": {
			"unicode": "1F6A2",
			"unicode_alternates": [],
			"name": "ship",
			"shortname": ":ship:",
			"category": "travel_places",
			"emoji_order": "4875",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"titanic",
				"transportation",
				"ferry",
				"ship",
				"boat"
			]
		},
		"anchor": {
			"unicode": "2693",
			"unicode_alternates": [
				"2693-FE0F"
			],
			"name": "anchor",
			"shortname": ":anchor:",
			"category": "travel_places",
			"emoji_order": "4870",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ferry",
				"ship",
				"anchor",
				"ship",
				"boat",
				"ocean",
				"harbor",
				"marina",
				"shipyard",
				"sailor",
				"tattoo"
			]
		},
		"seat": {
			"unicode": "1F4BA",
			"unicode_alternates": [],
			"name": "seat",
			"shortname": ":seat:",
			"category": "travel_places",
			"emoji_order": "4869",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sit"
			]
		},
		"airplane_arriving": {
			"unicode": "1F6EC",
			"unicode_alternates": [],
			"name": "airplane arriving",
			"shortname": ":airplane_arriving:",
			"category": "travel_places",
			"emoji_order": "4867",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"airplane_departure": {
			"unicode": "1F6EB",
			"unicode_alternates": [],
			"name": "airplane departure",
			"shortname": ":airplane_departure:",
			"category": "travel_places",
			"emoji_order": "4866",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"airplane_small": {
			"unicode": "1F6E9",
			"unicode_alternates": [],
			"name": "small airplane",
			"shortname": ":airplane_small:",
			"category": "travel_places",
			"emoji_order": "4865",
			"aliases": [
				":small_airplane:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"airplane_northeast": {
			"unicode": "1F6EA",
			"unicode_alternates": [],
			"name": "northeast-pointing airplane",
			"shortname": ":airplane_northeast:",
			"category": "travel_places",
			"emoji_order": "4864",
			"aliases": [
				":northeast_pointing_airplane:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"jet_up": {
			"unicode": "1F6E6",
			"unicode_alternates": [],
			"name": "up-pointing military airplane",
			"shortname": ":jet_up:",
			"category": "travel_places",
			"emoji_order": "4863",
			"aliases": [
				":up_pointing_military_airplane:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"airplane_small_up": {
			"unicode": "1F6E8",
			"unicode_alternates": [],
			"name": "up-pointing small airplane",
			"shortname": ":airplane_small_up:",
			"category": "travel_places",
			"emoji_order": "4862",
			"aliases": [
				":up_pointing_small_airplane:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"airplane_up": {
			"unicode": "1F6E7",
			"unicode_alternates": [],
			"name": "up-pointing airplane",
			"shortname": ":airplane_up:",
			"category": "travel_places",
			"emoji_order": "4861",
			"aliases": [
				":up_pointing_airplane:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"airplane": {
			"unicode": "2708",
			"unicode_alternates": [
				"2708-FE0F"
			],
			"name": "airplane",
			"shortname": ":airplane:",
			"category": "travel_places",
			"emoji_order": "4860",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flight",
				"transportation",
				"vehicle",
				"airplane",
				"plane",
				"airport",
				"travel",
				"airlines",
				"fly",
				"jet",
				"jumbo",
				"boeing",
				"airbus"
			]
		},
		"helicopter": {
			"unicode": "1F681",
			"unicode_alternates": [],
			"name": "helicopter",
			"shortname": ":helicopter:",
			"category": "travel_places",
			"emoji_order": "4855",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"helicopter",
				"heli",
				"gyro",
				"gyrocopter"
			]
		},
		"rocket": {
			"unicode": "1F680",
			"unicode_alternates": [],
			"name": "rocket",
			"shortname": ":rocket:",
			"category": "travel_places",
			"emoji_order": "4850",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"launch",
				"ship",
				"staffmode",
				"rocket",
				"space",
				"spacecraft",
				"astronaut",
				"cosmonaut"
			]
		},
		"traffic_light": {
			"unicode": "1F6A5",
			"unicode_alternates": [],
			"name": "horizontal traffic light",
			"shortname": ":traffic_light:",
			"category": "travel_places",
			"emoji_order": "4845",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"traffic",
				"transportation",
				"traffic",
				"light",
				"stop",
				"go",
				"yield",
				"horizontal"
			]
		},
		"vertical_traffic_light": {
			"unicode": "1F6A6",
			"unicode_alternates": [],
			"name": "vertical traffic light",
			"shortname": ":vertical_traffic_light:",
			"category": "travel_places",
			"emoji_order": "4840",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"traffic",
				"light",
				"stop",
				"go",
				"yield",
				"vertical"
			]
		},
		"construction": {
			"unicode": "1F6A7",
			"unicode_alternates": [],
			"name": "construction sign",
			"shortname": ":construction:",
			"category": "travel_places",
			"emoji_order": "4835",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"caution",
				"progress",
				"wip"
			]
		},
		"fuelpump": {
			"unicode": "26FD",
			"unicode_alternates": [
				"26FD-FE0F"
			],
			"name": "fuel pump",
			"shortname": ":fuelpump:",
			"category": "travel_places",
			"emoji_order": "4830",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"gas station",
				"petroleum"
			]
		},
		"busstop": {
			"unicode": "1F68F",
			"unicode_alternates": [],
			"name": "bus stop",
			"shortname": ":busstop:",
			"category": "travel_places",
			"emoji_order": "4825",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"bus",
				"stop",
				"city",
				"transport",
				"transportation"
			]
		},
		"motorway": {
			"unicode": "1F6E3",
			"unicode_alternates": [],
			"name": "motorway",
			"shortname": ":motorway:",
			"category": "travel_places",
			"emoji_order": "4821",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"bike": {
			"unicode": "1F6B2",
			"unicode_alternates": [],
			"name": "bicycle",
			"shortname": ":bike:",
			"category": "travel_places",
			"emoji_order": "4820",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bicycle",
				"exercise",
				"hipster",
				"sports",
				"bike",
				"pedal",
				"bicycle",
				"transportation"
			]
		},
		"tractor": {
			"unicode": "1F69C",
			"unicode_alternates": [],
			"name": "tractor",
			"shortname": ":tractor:",
			"category": "travel_places",
			"emoji_order": "4815",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"agriculture",
				"car",
				"farming",
				"vehicle",
				"tractor",
				"farm",
				"construction",
				"machine",
				"digger"
			]
		},
		"articulated_lorry": {
			"unicode": "1F69B",
			"unicode_alternates": [],
			"name": "articulated lorry",
			"shortname": ":articulated_lorry:",
			"category": "travel_places",
			"emoji_order": "4810",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cars",
				"transportation",
				"vehicle",
				"truck",
				"delivery",
				"semi",
				"lorry",
				"articulated"
			]
		},
		"truck": {
			"unicode": "1F69A",
			"unicode_alternates": [],
			"name": "delivery truck",
			"shortname": ":truck:",
			"category": "travel_places",
			"emoji_order": "4805",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cars",
				"transportation",
				"truck",
				"delivery",
				"package"
			]
		},
		"blue_car": {
			"unicode": "1F699",
			"unicode_alternates": [],
			"name": "recreational vehicle",
			"shortname": ":blue_car:",
			"category": "travel_places",
			"emoji_order": "4800",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"car",
				"suv",
				"car",
				"wagon",
				"automobile"
			]
		},
		"oncoming_automobile": {
			"unicode": "1F698",
			"unicode_alternates": [],
			"name": "oncoming automobile",
			"shortname": ":oncoming_automobile:",
			"category": "travel_places",
			"emoji_order": "4795",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"car",
				"transportation",
				"vehicle",
				"sedan",
				"car",
				"automobile"
			]
		},
		"red_car": {
			"unicode": "1F697",
			"unicode_alternates": [],
			"name": "automobile",
			"shortname": ":red_car:",
			"category": "travel_places",
			"emoji_order": "4790",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle"
			]
		},
		"oncoming_taxi": {
			"unicode": "1F696",
			"unicode_alternates": [],
			"name": "oncoming taxi",
			"shortname": ":oncoming_taxi:",
			"category": "travel_places",
			"emoji_order": "4785",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cars",
				"uber",
				"vehicle",
				"taxi",
				"car",
				"automobile",
				"city",
				"transport",
				"service"
			]
		},
		"taxi": {
			"unicode": "1F695",
			"unicode_alternates": [],
			"name": "taxi",
			"shortname": ":taxi:",
			"category": "travel_places",
			"emoji_order": "4780",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cars",
				"transportation",
				"uber",
				"vehicle",
				"taxi",
				"car",
				"automobile",
				"city",
				"transport",
				"service"
			]
		},
		"rotating_light": {
			"unicode": "1F6A8",
			"unicode_alternates": [],
			"name": "police cars revolving light",
			"shortname": ":rotating_light:",
			"category": "travel_places",
			"emoji_order": "4775",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"911",
				"ambulance",
				"emergency",
				"police",
				"light",
				"police",
				"emergency"
			]
		},
		"oncoming_police_car": {
			"unicode": "1F694",
			"unicode_alternates": [],
			"name": "oncoming police car",
			"shortname": ":oncoming_police_car:",
			"category": "travel_places",
			"emoji_order": "4770",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"enforcement",
				"law",
				"vehicle",
				"police",
				"car",
				"emergency",
				"ticket",
				"citation",
				"crime",
				"help",
				"officer"
			]
		},
		"police_car": {
			"unicode": "1F693",
			"unicode_alternates": [],
			"name": "police car",
			"shortname": ":police_car:",
			"category": "travel_places",
			"emoji_order": "4765",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cars",
				"enforcement",
				"law",
				"transportation",
				"vehicle",
				"police",
				"car",
				"emergency",
				"ticket",
				"citation",
				"crime",
				"help",
				"officer"
			]
		},
		"fire_engine_oncoming": {
			"unicode": "1F6F1",
			"unicode_alternates": [],
			"name": "oncoming fire engine",
			"shortname": ":fire_engine_oncoming:",
			"category": "travel_places",
			"emoji_order": "4761",
			"aliases": [
				":oncoming_fire_engine:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"fire_engine": {
			"unicode": "1F692",
			"unicode_alternates": [],
			"name": "fire engine",
			"shortname": ":fire_engine:",
			"category": "travel_places",
			"emoji_order": "4760",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cars",
				"transportation",
				"vehicle",
				"fire",
				"fighter",
				"engine",
				"truck",
				"emergency",
				"medical"
			]
		},
		"ambulance": {
			"unicode": "1F691",
			"unicode_alternates": [],
			"name": "ambulance",
			"shortname": ":ambulance:",
			"category": "travel_places",
			"emoji_order": "4755",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"911",
				"health",
				"ambulance",
				"emergency",
				"medical",
				"help",
				"assistance"
			]
		},
		"minibus": {
			"unicode": "1F690",
			"unicode_alternates": [],
			"name": "minibus",
			"shortname": ":minibus:",
			"category": "travel_places",
			"emoji_order": "4750",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"car",
				"transportation",
				"vehicle",
				"bus",
				"city",
				"transport",
				"transportation"
			]
		},
		"trolleybus": {
			"unicode": "1F68E",
			"unicode_alternates": [],
			"name": "trolleybus",
			"shortname": ":trolleybus:",
			"category": "travel_places",
			"emoji_order": "4745",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bart",
				"transportation",
				"vehicle",
				"trolley",
				"bus",
				"city",
				"transport",
				"transportation"
			]
		},
		"oncoming_bus": {
			"unicode": "1F68D",
			"unicode_alternates": [],
			"name": "oncoming bus",
			"shortname": ":oncoming_bus:",
			"category": "travel_places",
			"emoji_order": "4740",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"bus",
				"school",
				"city",
				"transportation",
				"public"
			]
		},
		"bus": {
			"unicode": "1F68C",
			"unicode_alternates": [],
			"name": "bus",
			"shortname": ":bus:",
			"category": "travel_places",
			"emoji_order": "4735",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"car",
				"transportation",
				"vehicle",
				"bus",
				"school",
				"city",
				"transportation",
				"public"
			]
		},
		"railway_track": {
			"unicode": "1F6E4",
			"unicode_alternates": [],
			"name": "railway track",
			"shortname": ":railway_track:",
			"category": "travel_places",
			"emoji_order": "4731",
			"aliases": [
				":railroad_track:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"tram": {
			"unicode": "1F68A",
			"unicode_alternates": [],
			"name": "tram",
			"shortname": ":tram:",
			"category": "travel_places",
			"emoji_order": "4730",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"tram",
				"transportation",
				"transport"
			]
		},
		"station": {
			"unicode": "1F689",
			"unicode_alternates": [],
			"name": "station",
			"shortname": ":station:",
			"category": "travel_places",
			"emoji_order": "4725",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"public",
				"transportation",
				"vehicle",
				"station",
				"train",
				"subway"
			]
		},
		"light_rail": {
			"unicode": "1F688",
			"unicode_alternates": [],
			"name": "light rail",
			"shortname": ":light_rail:",
			"category": "travel_places",
			"emoji_order": "4720",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"train",
				"rail",
				"light"
			]
		},
		"metro": {
			"unicode": "1F687",
			"unicode_alternates": [],
			"name": "metro",
			"shortname": ":metro:",
			"category": "travel_places",
			"emoji_order": "4715",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"mrt",
				"transportation",
				"tube",
				"underground",
				"metro",
				"subway",
				"underground",
				"train"
			]
		},
		"train2": {
			"unicode": "1F686",
			"unicode_alternates": [],
			"name": "train",
			"shortname": ":train2:",
			"category": "travel_places",
			"emoji_order": "4710",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"train",
				"locomotive",
				"rail"
			]
		},
		"bullettrain_front": {
			"unicode": "1F685",
			"unicode_alternates": [],
			"name": "high-speed train with bullet nose",
			"shortname": ":bullettrain_front:",
			"category": "travel_places",
			"emoji_order": "4705",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"train",
				"bullet",
				"rail"
			]
		},
		"bullettrain_side": {
			"unicode": "1F684",
			"unicode_alternates": [],
			"name": "high-speed train",
			"shortname": ":bullettrain_side:",
			"category": "travel_places",
			"emoji_order": "4700",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"train",
				"bullet",
				"rail"
			]
		},
		"monorail": {
			"unicode": "1F69D",
			"unicode_alternates": [],
			"name": "monorail",
			"shortname": ":monorail:",
			"category": "travel_places",
			"emoji_order": "4695",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"train",
				"mono",
				"rail",
				"transport"
			]
		},
		"train": {
			"unicode": "1F68B",
			"unicode_alternates": [],
			"name": "Tram Car",
			"shortname": ":train:",
			"category": "travel_places",
			"emoji_order": "4690",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"tram",
				"rail"
			]
		},
		"train_diesel": {
			"unicode": "1F6F2",
			"unicode_alternates": [],
			"name": "diesel locomotive",
			"shortname": ":train_diesel:",
			"category": "travel_places",
			"emoji_order": "4686",
			"aliases": [
				":diesel_locomotive:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"steam_locomotive": {
			"unicode": "1F682",
			"unicode_alternates": [],
			"name": "steam locomotive",
			"shortname": ":steam_locomotive:",
			"category": "travel_places",
			"emoji_order": "4685",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"train",
				"transportation",
				"vehicle",
				"locomotive",
				"steam",
				"train",
				"engine"
			]
		},
		"mountain_railway": {
			"unicode": "1F69E",
			"unicode_alternates": [],
			"name": "mountain railway",
			"shortname": ":mountain_railway:",
			"category": "travel_places",
			"emoji_order": "4680",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"mountain",
				"railway",
				"rail",
				"train",
				"transport"
			]
		},
		"railway_car": {
			"unicode": "1F683",
			"unicode_alternates": [],
			"name": "railway car",
			"shortname": ":railway_car:",
			"category": "travel_places",
			"emoji_order": "4675",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"transportation",
				"vehicle",
				"railway",
				"rail",
				"car",
				"coach",
				"train"
			]
		},
		"clock1230": {
			"unicode": "1F567",
			"unicode_alternates": [],
			"name": "clock face twelve-thirty",
			"shortname": ":clock1230:",
			"category": "objects_symbols",
			"emoji_order": "4670",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock1130": {
			"unicode": "1F566",
			"unicode_alternates": [],
			"name": "clock face eleven-thirty",
			"shortname": ":clock1130:",
			"category": "objects_symbols",
			"emoji_order": "4665",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock1030": {
			"unicode": "1F565",
			"unicode_alternates": [],
			"name": "clock face ten-thirty",
			"shortname": ":clock1030:",
			"category": "objects_symbols",
			"emoji_order": "4660",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock930": {
			"unicode": "1F564",
			"unicode_alternates": [],
			"name": "clock face nine-thirty",
			"shortname": ":clock930:",
			"category": "objects_symbols",
			"emoji_order": "4655",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock830": {
			"unicode": "1F563",
			"unicode_alternates": [],
			"name": "clock face eight-thirty",
			"shortname": ":clock830:",
			"category": "objects_symbols",
			"emoji_order": "4650",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock730": {
			"unicode": "1F562",
			"unicode_alternates": [],
			"name": "clock face seven-thirty",
			"shortname": ":clock730:",
			"category": "objects_symbols",
			"emoji_order": "4645",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock630": {
			"unicode": "1F561",
			"unicode_alternates": [],
			"name": "clock face six-thirty",
			"shortname": ":clock630:",
			"category": "objects_symbols",
			"emoji_order": "4640",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock530": {
			"unicode": "1F560",
			"unicode_alternates": [],
			"name": "clock face five-thirty",
			"shortname": ":clock530:",
			"category": "objects_symbols",
			"emoji_order": "4635",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock430": {
			"unicode": "1F55F",
			"unicode_alternates": [],
			"name": "clock face four-thirty",
			"shortname": ":clock430:",
			"category": "objects_symbols",
			"emoji_order": "4630",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock330": {
			"unicode": "1F55E",
			"unicode_alternates": [],
			"name": "clock face three-thirty",
			"shortname": ":clock330:",
			"category": "objects_symbols",
			"emoji_order": "4625",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock230": {
			"unicode": "1F55D",
			"unicode_alternates": [],
			"name": "clock face two-thirty",
			"shortname": ":clock230:",
			"category": "objects_symbols",
			"emoji_order": "4620",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock130": {
			"unicode": "1F55C",
			"unicode_alternates": [],
			"name": "clock face one-thirty",
			"shortname": ":clock130:",
			"category": "objects_symbols",
			"emoji_order": "4615",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock12": {
			"unicode": "1F55B",
			"unicode_alternates": [],
			"name": "clock face twelve oclock",
			"shortname": ":clock12:",
			"category": "objects_symbols",
			"emoji_order": "4610",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock11": {
			"unicode": "1F55A",
			"unicode_alternates": [],
			"name": "clock face eleven oclock",
			"shortname": ":clock11:",
			"category": "objects_symbols",
			"emoji_order": "4605",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock10": {
			"unicode": "1F559",
			"unicode_alternates": [],
			"name": "clock face ten oclock",
			"shortname": ":clock10:",
			"category": "objects_symbols",
			"emoji_order": "4600",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock9": {
			"unicode": "1F558",
			"unicode_alternates": [],
			"name": "clock face nine oclock",
			"shortname": ":clock9:",
			"category": "objects_symbols",
			"emoji_order": "4595",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock8": {
			"unicode": "1F557",
			"unicode_alternates": [],
			"name": "clock face eight oclock",
			"shortname": ":clock8:",
			"category": "objects_symbols",
			"emoji_order": "4590",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock7": {
			"unicode": "1F556",
			"unicode_alternates": [],
			"name": "clock face seven oclock",
			"shortname": ":clock7:",
			"category": "objects_symbols",
			"emoji_order": "4585",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock6": {
			"unicode": "1F555",
			"unicode_alternates": [],
			"name": "clock face six oclock",
			"shortname": ":clock6:",
			"category": "objects_symbols",
			"emoji_order": "4580",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock5": {
			"unicode": "1F554",
			"unicode_alternates": [],
			"name": "clock face five oclock",
			"shortname": ":clock5:",
			"category": "objects_symbols",
			"emoji_order": "4575",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock4": {
			"unicode": "1F553",
			"unicode_alternates": [],
			"name": "clock face four oclock",
			"shortname": ":clock4:",
			"category": "objects_symbols",
			"emoji_order": "4570",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock3": {
			"unicode": "1F552",
			"unicode_alternates": [],
			"name": "clock face three oclock",
			"shortname": ":clock3:",
			"category": "objects_symbols",
			"emoji_order": "4565",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock2": {
			"unicode": "1F551",
			"unicode_alternates": [],
			"name": "clock face two oclock",
			"shortname": ":clock2:",
			"category": "objects_symbols",
			"emoji_order": "4560",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"clock1": {
			"unicode": "1F550",
			"unicode_alternates": [],
			"name": "clock face one oclock",
			"shortname": ":clock1:",
			"category": "objects_symbols",
			"emoji_order": "4555",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"time"
			]
		},
		"white_square_button": {
			"unicode": "1F533",
			"unicode_alternates": [],
			"name": "white square button",
			"shortname": ":white_square_button:",
			"category": "objects_symbols",
			"emoji_order": "4550",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"black_square_button": {
			"unicode": "1F532",
			"unicode_alternates": [],
			"name": "black square button",
			"shortname": ":black_square_button:",
			"category": "objects_symbols",
			"emoji_order": "4545",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"frame"
			]
		},
		"white_medium_small_square": {
			"unicode": "25FD",
			"unicode_alternates": [
				"25FD-FE0F"
			],
			"name": "white medium small square",
			"shortname": ":white_medium_small_square:",
			"category": "objects_symbols",
			"emoji_order": "4540",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"black_medium_small_square": {
			"unicode": "25FE",
			"unicode_alternates": [
				"25FE-FE0F"
			],
			"name": "black medium small square",
			"shortname": ":black_medium_small_square:",
			"category": "objects_symbols",
			"emoji_order": "4535",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"white_medium_square": {
			"unicode": "25FB",
			"unicode_alternates": [
				"25FB-FE0F"
			],
			"name": "white medium square",
			"shortname": ":white_medium_square:",
			"category": "objects_symbols",
			"emoji_order": "4530",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"black_medium_square": {
			"unicode": "25FC",
			"unicode_alternates": [
				"25FC-FE0F"
			],
			"name": "black medium square",
			"shortname": ":black_medium_square:",
			"category": "objects_symbols",
			"emoji_order": "4525",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"white_large_square": {
			"unicode": "2B1C",
			"unicode_alternates": [
				"2B1C-FE0F"
			],
			"name": "white large square",
			"shortname": ":white_large_square:",
			"category": "objects_symbols",
			"emoji_order": "4520",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"black_large_square": {
			"unicode": "2B1B",
			"unicode_alternates": [
				"2B1B-FE0F"
			],
			"name": "black large square",
			"shortname": ":black_large_square:",
			"category": "objects_symbols",
			"emoji_order": "4515",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"white_small_square": {
			"unicode": "25AB",
			"unicode_alternates": [
				"25AB-FE0F"
			],
			"name": "white small square",
			"shortname": ":white_small_square:",
			"category": "objects_symbols",
			"emoji_order": "4510",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"black_small_square": {
			"unicode": "25AA",
			"unicode_alternates": [
				"25AA-FE0F"
			],
			"name": "black small square",
			"shortname": ":black_small_square:",
			"category": "objects_symbols",
			"emoji_order": "4505",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"large_blue_diamond": {
			"unicode": "1F537",
			"unicode_alternates": [],
			"name": "large blue diamond",
			"shortname": ":large_blue_diamond:",
			"category": "objects_symbols",
			"emoji_order": "4500",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"large_orange_diamond": {
			"unicode": "1F536",
			"unicode_alternates": [],
			"name": "large orange diamond",
			"shortname": ":large_orange_diamond:",
			"category": "objects_symbols",
			"emoji_order": "4495",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"small_blue_diamond": {
			"unicode": "1F539",
			"unicode_alternates": [],
			"name": "small blue diamond",
			"shortname": ":small_blue_diamond:",
			"category": "objects_symbols",
			"emoji_order": "4490",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"small_orange_diamond": {
			"unicode": "1F538",
			"unicode_alternates": [],
			"name": "small orange diamond",
			"shortname": ":small_orange_diamond:",
			"category": "objects_symbols",
			"emoji_order": "4485",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"small_red_triangle_down": {
			"unicode": "1F53B",
			"unicode_alternates": [],
			"name": "down-pointing red triangle",
			"shortname": ":small_red_triangle_down:",
			"category": "objects_symbols",
			"emoji_order": "4480",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"small_red_triangle": {
			"unicode": "1F53A",
			"unicode_alternates": [],
			"name": "up-pointing red triangle",
			"shortname": ":small_red_triangle:",
			"category": "objects_symbols",
			"emoji_order": "4475",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"large_blue_circle": {
			"unicode": "1F535",
			"unicode_alternates": [],
			"name": "large blue circle",
			"shortname": ":large_blue_circle:",
			"category": "objects_symbols",
			"emoji_order": "4470",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"red_circle": {
			"unicode": "1F534",
			"unicode_alternates": [],
			"name": "large red circle",
			"shortname": ":red_circle:",
			"category": "objects_symbols",
			"emoji_order": "4465",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"radio_button": {
			"unicode": "1F518",
			"unicode_alternates": [],
			"name": "radio button",
			"shortname": ":radio_button:",
			"category": "objects_symbols",
			"emoji_order": "4460",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"input"
			]
		},
		"black_circle": {
			"unicode": "26AB",
			"unicode_alternates": [
				"26AB-FE0F"
			],
			"name": "medium black circle",
			"shortname": ":black_circle:",
			"category": "objects_symbols",
			"emoji_order": "4455",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"white_circle": {
			"unicode": "26AA",
			"unicode_alternates": [
				"26AA-FE0F"
			],
			"name": "medium white circle",
			"shortname": ":white_circle:",
			"category": "objects_symbols",
			"emoji_order": "4450",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"ballot_box_x": {
			"unicode": "1F5F5",
			"unicode_alternates": [],
			"name": "ballot box with script x",
			"shortname": ":ballot_box_x:",
			"category": "objects_symbols",
			"emoji_order": "4445",
			"aliases": [
				":ballot_box_with_script_x:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"ballot_x": {
			"unicode": "1F5F4",
			"unicode_alternates": [],
			"name": "ballot script x",
			"shortname": ":ballot_x:",
			"category": "objects_symbols",
			"emoji_order": "4440",
			"aliases": [
				":ballot_script_x:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"ballot_box_check": {
			"unicode": "1F5F9",
			"unicode_alternates": [],
			"name": "ballot box with bold check",
			"shortname": ":ballot_box_check:",
			"category": "objects_symbols",
			"emoji_order": "4435",
			"aliases": [
				":ballot_box_with_bold_check:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"light_check_mark": {
			"unicode": "1F5F8",
			"unicode_alternates": [],
			"name": "light check mark",
			"shortname": ":light_check_mark:",
			"category": "objects_symbols",
			"emoji_order": "4430",
			"aliases": [
				":light_mark:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"ballot_box_with_check": {
			"unicode": "2611",
			"unicode_alternates": [
				"2611-FE0F"
			],
			"name": "ballot box with check",
			"shortname": ":ballot_box_with_check:",
			"category": "objects_symbols",
			"emoji_order": "4425",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"agree",
				"ok"
			]
		},
		"diamonds": {
			"unicode": "2666",
			"unicode_alternates": [
				"2666-FE0F"
			],
			"name": "black diamond suit",
			"shortname": ":diamonds:",
			"category": "objects_symbols",
			"emoji_order": "4420",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cards",
				"poker"
			]
		},
		"hearts": {
			"unicode": "2665",
			"unicode_alternates": [
				"2665-FE0F"
			],
			"name": "black heart suit",
			"shortname": ":hearts:",
			"category": "objects_symbols",
			"emoji_order": "4415",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cards",
				"poker"
			]
		},
		"clubs": {
			"unicode": "2663",
			"unicode_alternates": [
				"2663-FE0F"
			],
			"name": "black club suit",
			"shortname": ":clubs:",
			"category": "objects_symbols",
			"emoji_order": "4410",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cards",
				"poker"
			]
		},
		"spades": {
			"unicode": "2660",
			"unicode_alternates": [
				"2660-FE0F"
			],
			"name": "black spade suit",
			"shortname": ":spades:",
			"category": "objects_symbols",
			"emoji_order": "4405",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cards",
				"poker"
			]
		},
		"diamond_shape_with_a_dot_inside": {
			"unicode": "1F4A0",
			"unicode_alternates": [],
			"name": "diamond shape with a dot inside",
			"shortname": ":diamond_shape_with_a_dot_inside:",
			"category": "objects_symbols",
			"emoji_order": "4400",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"diamond",
				"cute",
				"cuteness",
				"kawaii",
				"japanese",
				"glyph",
				"adorable"
			]
		},
		"anger": {
			"unicode": "1F4A2",
			"unicode_alternates": [],
			"name": "anger symbol",
			"shortname": ":anger:",
			"category": "objects_symbols",
			"emoji_order": "4395",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"anger",
				"angry",
				"mad"
			]
		},
		"recycle": {
			"unicode": "267B",
			"unicode_alternates": [
				"267B-FE0F"
			],
			"name": "black universal recycling symbol",
			"shortname": ":recycle:",
			"category": "objects_symbols",
			"emoji_order": "4390",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"environment",
				"garbage",
				"trash"
			]
		},
		"rosette_black": {
			"unicode": "1F3F6",
			"unicode_alternates": [],
			"name": "black rosette",
			"shortname": ":rosette_black:",
			"category": "objects_symbols",
			"emoji_order": "4385",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"rosette": {
			"unicode": "1F3F5",
			"unicode_alternates": [],
			"name": "rosette",
			"shortname": ":rosette:",
			"category": "objects_symbols",
			"emoji_order": "4380",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"hotsprings": {
			"unicode": "2668",
			"unicode_alternates": [
				"2668-FE0F"
			],
			"name": "hot springs",
			"shortname": ":hotsprings:",
			"category": "objects_symbols",
			"emoji_order": "4375",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bath",
				"relax",
				"warm"
			]
		},
		"warning": {
			"unicode": "26A0",
			"unicode_alternates": [
				"26A0-FE0F"
			],
			"name": "warning sign",
			"shortname": ":warning:",
			"category": "objects_symbols",
			"emoji_order": "4370",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"exclamation",
				"wip"
			]
		},
		"trident": {
			"unicode": "1F531",
			"unicode_alternates": [],
			"name": "trident emblem",
			"shortname": ":trident:",
			"category": "objects_symbols",
			"emoji_order": "4365",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"spear",
				"weapon"
			]
		},
		"mood_lightning": {
			"unicode": "1F5F2",
			"unicode_alternates": [],
			"name": "lightning mood",
			"shortname": ":mood_lightning:",
			"category": "objects_symbols",
			"emoji_order": "4360",
			"aliases": [
				":lightning_mood:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"beginner": {
			"unicode": "1F530",
			"unicode_alternates": [],
			"name": "japanese symbol for beginner",
			"shortname": ":beginner:",
			"category": "objects_symbols",
			"emoji_order": "4355",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"badge",
				"shield"
			]
		},
		"six_pointed_star": {
			"unicode": "1F52F",
			"unicode_alternates": [],
			"name": "six pointed star with middle dot",
			"shortname": ":six_pointed_star:",
			"category": "objects_symbols",
			"emoji_order": "4350",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"purple-square"
			]
		},
		"ophiuchus": {
			"unicode": "26CE",
			"unicode_alternates": [],
			"name": "ophiuchus",
			"shortname": ":ophiuchus:",
			"category": "objects_symbols",
			"emoji_order": "4345",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ophiuchus",
				"serpent",
				"snake",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"purple-square",
				"sign",
				"horoscope"
			]
		},
		"info": {
			"unicode": "1F6C8",
			"unicode_alternates": [],
			"name": "circled information source",
			"shortname": ":info:",
			"category": "objects_symbols",
			"emoji_order": "4340",
			"aliases": [
				":circled_information_source:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"m": {
			"unicode": "24C2",
			"unicode_alternates": [
				"24C2-FE0F"
			],
			"name": "circled latin capital letter m",
			"shortname": ":m:",
			"category": "objects_symbols",
			"emoji_order": "4335",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"blue-circle",
				"letter"
			]
		},
		"cyclone": {
			"unicode": "1F300",
			"unicode_alternates": [],
			"name": "cyclone",
			"shortname": ":cyclone:",
			"category": "objects_symbols",
			"emoji_order": "4330",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue",
				"cloud",
				"swirl",
				"weather",
				"cyclone",
				"hurricane",
				"typhoon",
				"storm",
				"ocean"
			]
		},
		"soon": {
			"unicode": "1F51C",
			"unicode_alternates": [],
			"name": "soon with rightwards arrow above",
			"shortname": ":soon:",
			"category": "objects_symbols",
			"emoji_order": "4325",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"words"
			]
		},
		"top": {
			"unicode": "1F51D",
			"unicode_alternates": [],
			"name": "top with upwards arrow above",
			"shortname": ":top:",
			"category": "objects_symbols",
			"emoji_order": "4320",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"words"
			]
		},
		"on": {
			"unicode": "1F51B",
			"unicode_alternates": [],
			"name": "on with exclamation mark with left right arrow abo",
			"shortname": ":on:",
			"category": "objects_symbols",
			"emoji_order": "4315",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"words"
			]
		},
		"back": {
			"unicode": "1F519",
			"unicode_alternates": [],
			"name": "back with leftwards arrow above",
			"shortname": ":back:",
			"category": "objects_symbols",
			"emoji_order": "4310",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow"
			]
		},
		"end": {
			"unicode": "1F51A",
			"unicode_alternates": [],
			"name": "end with leftwards arrow above",
			"shortname": ":end:",
			"category": "objects_symbols",
			"emoji_order": "4305",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"words"
			]
		},
		"o": {
			"unicode": "2B55",
			"unicode_alternates": [
				"2B55-FE0F"
			],
			"name": "heavy large circle",
			"shortname": ":o:",
			"category": "objects_symbols",
			"emoji_order": "4295",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"circle",
				"round"
			]
		},
		"x": {
			"unicode": "274C",
			"unicode_alternates": [],
			"name": "cross mark",
			"shortname": ":x:",
			"category": "objects_symbols",
			"emoji_order": "4290",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"delete",
				"no",
				"remove"
			]
		},
		"triangle_round": {
			"unicode": "1F6C6",
			"unicode_alternates": [],
			"name": "triangle with rounded corners",
			"shortname": ":triangle_round:",
			"category": "objects_symbols",
			"emoji_order": "4285",
			"aliases": [
				":triangle_with_rounded_corners:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"interrobang": {
			"unicode": "2049",
			"unicode_alternates": [
				"2049-FE0F"
			],
			"name": "exclamation question mark",
			"shortname": ":interrobang:",
			"category": "objects_symbols",
			"emoji_order": "4280",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"punctuation",
				"surprise",
				"wat"
			]
		},
		"bangbang": {
			"unicode": "203C",
			"unicode_alternates": [
				"203C-FE0F"
			],
			"name": "double exclamation mark",
			"shortname": ":bangbang:",
			"category": "objects_symbols",
			"emoji_order": "4275",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"exclamation",
				"surprise"
			]
		},
		"grey_question": {
			"unicode": "2754",
			"unicode_alternates": [],
			"name": "white question mark ornament",
			"shortname": ":grey_question:",
			"category": "objects_symbols",
			"emoji_order": "4270",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"doubts"
			]
		},
		"grey_exclamation": {
			"unicode": "2755",
			"unicode_alternates": [],
			"name": "white exclamation mark ornament",
			"shortname": ":grey_exclamation:",
			"category": "objects_symbols",
			"emoji_order": "4265",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"surprise"
			]
		},
		"question": {
			"unicode": "2753",
			"unicode_alternates": [],
			"name": "black question mark ornament",
			"shortname": ":question:",
			"category": "objects_symbols",
			"emoji_order": "4260",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"confused",
				"doubt"
			]
		},
		"exclamation": {
			"unicode": "2757",
			"unicode_alternates": [
				"2757-FE0F"
			],
			"name": "heavy exclamation mark symbol",
			"shortname": ":exclamation:",
			"category": "objects_symbols",
			"emoji_order": "4255",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"surprise"
			]
		},
		"part_alternation_mark": {
			"unicode": "303D",
			"unicode_alternates": [
				"303D-FE0F"
			],
			"name": "part alternation mark",
			"shortname": ":part_alternation_mark:",
			"category": "objects_symbols",
			"emoji_order": "4250",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"graph",
				"sing",
				"song",
				"vocal",
				"music",
				"karaoke",
				"cue",
				"letter",
				"m",
				"japanese"
			]
		},
		"loop": {
			"unicode": "27BF",
			"unicode_alternates": [],
			"name": "double curly loop",
			"shortname": ":loop:",
			"category": "objects_symbols",
			"emoji_order": "4245",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"curly"
			]
		},
		"curly_loop": {
			"unicode": "27B0",
			"unicode_alternates": [],
			"name": "curly loop",
			"shortname": ":curly_loop:",
			"category": "objects_symbols",
			"emoji_order": "4240",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"scribble"
			]
		},
		"heavy_dollar_sign": {
			"unicode": "1F4B2",
			"unicode_alternates": [],
			"name": "heavy dollar sign",
			"shortname": ":heavy_dollar_sign:",
			"category": "objects_symbols",
			"emoji_order": "4235",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"currency",
				"money",
				"payment",
				"dollar",
				"currency",
				"money",
				"cash",
				"sale",
				"purchase",
				"value"
			]
		},
		"currency_exchange": {
			"unicode": "1F4B1",
			"unicode_alternates": [],
			"name": "currency exchange",
			"shortname": ":currency_exchange:",
			"category": "objects_symbols",
			"emoji_order": "4230",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"dollar",
				"money",
				"travel"
			]
		},
		"registered": {
			"unicode": "00AE",
			"unicode_alternates": [],
			"name": "registered sign",
			"shortname": ":registered:",
			"category": "objects_symbols",
			"emoji_order": "4225",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"circle"
			]
		},
		"copyright": {
			"unicode": "00A9",
			"unicode_alternates": [],
			"name": "copyright sign",
			"shortname": ":copyright:",
			"category": "objects_symbols",
			"emoji_order": "4220",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ip",
				"license"
			]
		},
		"tm": {
			"unicode": "2122",
			"unicode_alternates": [],
			"name": "trade mark sign",
			"shortname": ":tm:",
			"category": "objects_symbols",
			"emoji_order": "4215",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"brand",
				"trademark"
			]
		},
		"clockwise_arrows": {
			"unicode": "1F5D8",
			"unicode_alternates": [],
			"name": "clockwise right and left semicircle arrows",
			"shortname": ":clockwise_arrows:",
			"category": "objects_symbols",
			"emoji_order": "4210",
			"aliases": [
				":clockwise_right_and_left_semicircle_arrows:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"arrows_clockwise": {
			"unicode": "1F503",
			"unicode_alternates": [],
			"name": "clockwise downwards and upwards open circle arrows",
			"shortname": ":arrows_clockwise:",
			"category": "objects_symbols",
			"emoji_order": "4205",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sync"
			]
		},
		"cancellation_x": {
			"unicode": "1F5D9",
			"unicode_alternates": [],
			"name": "cancellation x",
			"shortname": ":cancellation_x:",
			"category": "objects_symbols",
			"emoji_order": "4200",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"heavy_check_mark": {
			"unicode": "2714",
			"unicode_alternates": [
				"2714-FE0F"
			],
			"name": "heavy check mark",
			"shortname": ":heavy_check_mark:",
			"category": "objects_symbols",
			"emoji_order": "4195",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nike",
				"ok"
			]
		},
		"heavy_multiplication_x": {
			"unicode": "2716",
			"unicode_alternates": [
				"2716-FE0F"
			],
			"name": "heavy multiplication x",
			"shortname": ":heavy_multiplication_x:",
			"category": "objects_symbols",
			"emoji_order": "4190",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"calculation",
				"math"
			]
		},
		"heavy_division_sign": {
			"unicode": "2797",
			"unicode_alternates": [],
			"name": "heavy division sign",
			"shortname": ":heavy_division_sign:",
			"category": "objects_symbols",
			"emoji_order": "4185",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"calculation",
				"divide",
				"math"
			]
		},
		"wavy_dash": {
			"unicode": "3030",
			"unicode_alternates": [],
			"name": "wavy dash",
			"shortname": ":wavy_dash:",
			"category": "objects_symbols",
			"emoji_order": "4180",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"draw",
				"line"
			]
		},
		"heavy_minus_sign": {
			"unicode": "2796",
			"unicode_alternates": [],
			"name": "heavy minus sign",
			"shortname": ":heavy_minus_sign:",
			"category": "objects_symbols",
			"emoji_order": "4175",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"calculation",
				"math"
			]
		},
		"heavy_plus_sign": {
			"unicode": "2795",
			"unicode_alternates": [],
			"name": "heavy plus sign",
			"shortname": ":heavy_plus_sign:",
			"category": "objects_symbols",
			"emoji_order": "4170",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"calculation",
				"math"
			]
		},
		"symbols": {
			"unicode": "1F523",
			"unicode_alternates": [],
			"name": "input symbol for symbols",
			"shortname": ":symbols:",
			"category": "objects_symbols",
			"emoji_order": "4165",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"cinema": {
			"unicode": "1F3A6",
			"unicode_alternates": [],
			"name": "cinema",
			"shortname": ":cinema:",
			"category": "objects_symbols",
			"emoji_order": "4160",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"film",
				"movie",
				"record",
				"cinema",
				"movie",
				"theater",
				"motion",
				"picture"
			]
		},
		"signal_strength": {
			"unicode": "1F4F6",
			"unicode_alternates": [],
			"name": "antenna with bars",
			"shortname": ":signal_strength:",
			"category": "objects_symbols",
			"emoji_order": "4155",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"information_source": {
			"unicode": "2139",
			"unicode_alternates": [
				"2139-FE0F"
			],
			"name": "information source",
			"shortname": ":information_source:",
			"category": "objects_symbols",
			"emoji_order": "4150",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"blue-square",
				"letter"
			]
		},
		"capital_abcd": {
			"unicode": "1F520",
			"unicode_alternates": [],
			"name": "input symbol for latin capital letters",
			"shortname": ":capital_abcd:",
			"category": "objects_symbols",
			"emoji_order": "4145",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"blue-square",
				"words"
			]
		},
		"abcd": {
			"unicode": "1F521",
			"unicode_alternates": [],
			"name": "input symbol for latin small letters",
			"shortname": ":abcd:",
			"category": "objects_symbols",
			"emoji_order": "4140",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"blue-square"
			]
		},
		"abc": {
			"unicode": "1F524",
			"unicode_alternates": [],
			"name": "input symbol for latin letters",
			"shortname": ":abc:",
			"category": "objects_symbols",
			"emoji_order": "4135",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"blue-square"
			]
		},
		"keycap_ten": {
			"unicode": "1F51F",
			"unicode_alternates": [],
			"name": "keycap ten",
			"shortname": ":keycap_ten:",
			"category": "objects_symbols",
			"emoji_order": "4125",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"10",
				"blue-square",
				"numbers"
			]
		},
		"nine": {
			"unicode": "0039-20E3",
			"unicode_alternates": [
				"0039-FE0F-20E3"
			],
			"name": "digit nine",
			"shortname": ":nine:",
			"category": "objects_symbols",
			"emoji_order": "4120",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"9",
				"blue-square",
				"numbers"
			]
		},
		"eight": {
			"unicode": "0038-20E3",
			"unicode_alternates": [
				"0038-FE0F-20E3"
			],
			"name": "digit eight",
			"shortname": ":eight:",
			"category": "objects_symbols",
			"emoji_order": "4115",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"8",
				"blue-square",
				"numbers"
			]
		},
		"seven": {
			"unicode": "0037-20E3",
			"unicode_alternates": [
				"0037-FE0F-20E3"
			],
			"name": "digit seven",
			"shortname": ":seven:",
			"category": "objects_symbols",
			"emoji_order": "4110",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"7",
				"blue-square",
				"numbers",
				"prime"
			]
		},
		"six": {
			"unicode": "0036-20E3",
			"unicode_alternates": [
				"0036-FE0F-20E3"
			],
			"name": "digit six",
			"shortname": ":six:",
			"category": "objects_symbols",
			"emoji_order": "4105",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"6",
				"blue-square",
				"numbers"
			]
		},
		"five": {
			"unicode": "0035-20E3",
			"unicode_alternates": [
				"0035-FE0F-20E3"
			],
			"name": "digit five",
			"shortname": ":five:",
			"category": "objects_symbols",
			"emoji_order": "4100",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"numbers",
				"prime"
			]
		},
		"four": {
			"unicode": "0034-20E3",
			"unicode_alternates": [
				"0034-FE0F-20E3"
			],
			"name": "digit four",
			"shortname": ":four:",
			"category": "objects_symbols",
			"emoji_order": "4095",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"4",
				"blue-square",
				"numbers"
			]
		},
		"three": {
			"unicode": "0033-20E3",
			"unicode_alternates": [
				"0033-FE0F-20E3"
			],
			"name": "digit three",
			"shortname": ":three:",
			"category": "objects_symbols",
			"emoji_order": "4090",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"3",
				"blue-square",
				"numbers",
				"prime"
			]
		},
		"two": {
			"unicode": "0032-20E3",
			"unicode_alternates": [
				"0032-FE0F-20E3"
			],
			"name": "digit two",
			"shortname": ":two:",
			"category": "objects_symbols",
			"emoji_order": "4085",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"2",
				"blue-square",
				"numbers",
				"prime"
			]
		},
		"one": {
			"unicode": "0031-20E3",
			"unicode_alternates": [
				"0031-FE0F-20E3"
			],
			"name": "digit one",
			"shortname": ":one:",
			"category": "objects_symbols",
			"emoji_order": "4080",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"1",
				"blue-square",
				"numbers"
			]
		},
		"zero": {
			"unicode": "0030-20E3",
			"unicode_alternates": [
				"0030-FE0F-20E3"
			],
			"name": "digit zero",
			"shortname": ":zero:",
			"category": "objects_symbols",
			"emoji_order": "4075",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"null",
				"numbers"
			]
		},
		"hash": {
			"unicode": "0023-20E3",
			"unicode_alternates": [
				"0023-FE0F-20E3"
			],
			"name": "number sign",
			"shortname": ":hash:",
			"category": "objects_symbols",
			"emoji_order": "4070",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"symbol"
			]
		},
		"repeat_one": {
			"unicode": "1F502",
			"unicode_alternates": [],
			"name": "clockwise rightwards and leftwards open circle arr",
			"shortname": ":repeat_one:",
			"category": "objects_symbols",
			"emoji_order": "4065",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"loop"
			]
		},
		"repeat": {
			"unicode": "1F501",
			"unicode_alternates": [],
			"name": "clockwise rightwards and leftwards open circle arr",
			"shortname": ":repeat:",
			"category": "objects_symbols",
			"emoji_order": "4060",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"loop",
				"record"
			]
		},
		"twisted_rightwards_arrows": {
			"unicode": "1F500",
			"unicode_alternates": [],
			"name": "twisted rightwards arrows",
			"shortname": ":twisted_rightwards_arrows:",
			"category": "objects_symbols",
			"emoji_order": "4055",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_heading_down": {
			"unicode": "2935",
			"unicode_alternates": [
				"2935-FE0F"
			],
			"name": "arrow pointing rightwards then curving downwards",
			"shortname": ":arrow_heading_down:",
			"category": "objects_symbols",
			"emoji_order": "4050",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_heading_up": {
			"unicode": "2934",
			"unicode_alternates": [
				"2934-FE0F"
			],
			"name": "arrow pointing rightwards then curving upwards",
			"shortname": ":arrow_heading_up:",
			"category": "objects_symbols",
			"emoji_order": "4045",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"leftwards_arrow_with_hook": {
			"unicode": "21A9",
			"unicode_alternates": [
				"21A9-FE0F"
			],
			"name": "leftwards arrow with hook",
			"shortname": ":leftwards_arrow_with_hook:",
			"category": "objects_symbols",
			"emoji_order": "4040",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"arrow_right_hook": {
			"unicode": "21AA",
			"unicode_alternates": [
				"21AA-FE0F"
			],
			"name": "rightwards arrow with hook",
			"shortname": ":arrow_right_hook:",
			"category": "objects_symbols",
			"emoji_order": "4035",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrows_counterclockwise": {
			"unicode": "1F504",
			"unicode_alternates": [],
			"name": "anticlockwise downwards and upwards open circle ar",
			"shortname": ":arrows_counterclockwise:",
			"category": "objects_symbols",
			"emoji_order": "4030",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"sync"
			]
		},
		"left_right_arrow": {
			"unicode": "2194",
			"unicode_alternates": [
				"2194-FE0F"
			],
			"name": "left right arrow",
			"shortname": ":left_right_arrow:",
			"category": "objects_symbols",
			"emoji_order": "4025",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shape"
			]
		},
		"arrow_up_down": {
			"unicode": "2195",
			"unicode_alternates": [
				"2195-FE0F"
			],
			"name": "up down arrow",
			"shortname": ":arrow_up_down:",
			"category": "objects_symbols",
			"emoji_order": "4020",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_upper_left": {
			"unicode": "2196",
			"unicode_alternates": [
				"2196-FE0F"
			],
			"name": "north west arrow",
			"shortname": ":arrow_upper_left:",
			"category": "objects_symbols",
			"emoji_order": "4015",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_lower_left": {
			"unicode": "2199",
			"unicode_alternates": [
				"2199-FE0F"
			],
			"name": "south west arrow",
			"shortname": ":arrow_lower_left:",
			"category": "objects_symbols",
			"emoji_order": "4010",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_lower_right": {
			"unicode": "2198",
			"unicode_alternates": [
				"2198-FE0F"
			],
			"name": "south east arrow",
			"shortname": ":arrow_lower_right:",
			"category": "objects_symbols",
			"emoji_order": "4005",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_upper_right": {
			"unicode": "2197",
			"unicode_alternates": [
				"2197-FE0F"
			],
			"name": "north east arrow",
			"shortname": ":arrow_upper_right:",
			"category": "objects_symbols",
			"emoji_order": "4000",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_down": {
			"unicode": "2B07",
			"unicode_alternates": [
				"2B07-FE0F"
			],
			"name": "downwards black arrow",
			"shortname": ":arrow_down:",
			"category": "objects_symbols",
			"emoji_order": "3995",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_up": {
			"unicode": "2B06",
			"unicode_alternates": [
				"2B06-FE0F"
			],
			"name": "upwards black arrow",
			"shortname": ":arrow_up:",
			"category": "objects_symbols",
			"emoji_order": "3990",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_left": {
			"unicode": "2B05",
			"unicode_alternates": [
				"2B05-FE0F"
			],
			"name": "leftwards black arrow",
			"shortname": ":arrow_left:",
			"category": "objects_symbols",
			"emoji_order": "3985",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square",
				"previous"
			]
		},
		"arrow_right": {
			"unicode": "27A1",
			"unicode_alternates": [
				"27A1-FE0F"
			],
			"name": "black rightwards arrow",
			"shortname": ":arrow_right:",
			"category": "objects_symbols",
			"emoji_order": "3980",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"next"
			]
		},
		"arrow_double_down": {
			"unicode": "23EC",
			"unicode_alternates": [],
			"name": "black down-pointing double triangle",
			"shortname": ":arrow_double_down:",
			"category": "objects_symbols",
			"emoji_order": "3975",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_double_up": {
			"unicode": "23EB",
			"unicode_alternates": [],
			"name": "black up-pointing double triangle",
			"shortname": ":arrow_double_up:",
			"category": "objects_symbols",
			"emoji_order": "3970",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"rewind": {
			"unicode": "23EA",
			"unicode_alternates": [],
			"name": "black left-pointing double triangle",
			"shortname": ":rewind:",
			"category": "objects_symbols",
			"emoji_order": "3965",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"play"
			]
		},
		"fast_forward": {
			"unicode": "23E9",
			"unicode_alternates": [],
			"name": "black right-pointing double triangle",
			"shortname": ":fast_forward:",
			"category": "objects_symbols",
			"emoji_order": "3960",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_down_small": {
			"unicode": "1F53D",
			"unicode_alternates": [],
			"name": "down-pointing small red triangle",
			"shortname": ":arrow_down_small:",
			"category": "objects_symbols",
			"emoji_order": "3955",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_up_small": {
			"unicode": "1F53C",
			"unicode_alternates": [],
			"name": "up-pointing small red triangle",
			"shortname": ":arrow_up_small:",
			"category": "objects_symbols",
			"emoji_order": "3950",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"arrow_backward": {
			"unicode": "25C0",
			"unicode_alternates": [
				"25C0-FE0F"
			],
			"name": "black left-pointing triangle",
			"shortname": ":arrow_backward:",
			"category": "objects_symbols",
			"emoji_order": "3945",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"arrow_forward": {
			"unicode": "25B6",
			"unicode_alternates": [
				"25B6-FE0F"
			],
			"name": "black right-pointing triangle",
			"shortname": ":arrow_forward:",
			"category": "objects_symbols",
			"emoji_order": "3940",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrow",
				"blue-square"
			]
		},
		"put_litter_in_its_place": {
			"unicode": "1F6AE",
			"unicode_alternates": [],
			"name": "put litter in its place symbol",
			"shortname": ":put_litter_in_its_place:",
			"category": "objects_symbols",
			"emoji_order": "3935",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"litter",
				"waste",
				"trash",
				"garbage",
				"receptacle",
				"can"
			]
		},
		"no_smoking": {
			"unicode": "1F6AD",
			"unicode_alternates": [],
			"name": "no smoking symbol",
			"shortname": ":no_smoking:",
			"category": "objects_symbols",
			"emoji_order": "3930",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cigarette",
				"no",
				"smoking",
				"cigarette",
				"smoke",
				"cancer",
				"lungs",
				"inhale",
				"tar",
				"nicotine"
			]
		},
		"potable_water": {
			"unicode": "1F6B0",
			"unicode_alternates": [],
			"name": "potable water symbol",
			"shortname": ":potable_water:",
			"category": "objects_symbols",
			"emoji_order": "3925",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"cleaning",
				"faucet",
				"liquid",
				"restroom",
				"potable",
				"water",
				"drinkable",
				"pure",
				"clear",
				"clean",
				"aqua",
				"h20"
			]
		},
		"wheelchair": {
			"unicode": "267F",
			"unicode_alternates": [
				"267F-FE0F"
			],
			"name": "wheelchair symbol",
			"shortname": ":wheelchair:",
			"category": "objects_symbols",
			"emoji_order": "3920",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"disabled"
			]
		},
		"baby_symbol": {
			"unicode": "1F6BC",
			"unicode_alternates": [],
			"name": "baby symbol",
			"shortname": ":baby_symbol:",
			"category": "objects_symbols",
			"emoji_order": "3915",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"child",
				"orange-square",
				"baby",
				"crawl",
				"newborn",
				"human",
				"diaper",
				"small",
				"babe"
			]
		},
		"girls_symbol": {
			"unicode": "1F6CA",
			"unicode_alternates": [],
			"name": "girls symbol",
			"shortname": ":girls_symbol:",
			"category": "objects_symbols",
			"emoji_order": "3910",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"boys_symbol": {
			"unicode": "1F6C9",
			"unicode_alternates": [],
			"name": "boys symbol",
			"shortname": ":boys_symbol:",
			"category": "objects_symbols",
			"emoji_order": "3905",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"womens": {
			"unicode": "1F6BA",
			"unicode_alternates": [],
			"name": "womens symbol",
			"shortname": ":womens:",
			"category": "objects_symbols",
			"emoji_order": "3900",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"purple-square",
				"woman",
				"bathroom",
				"restroom",
				"sign",
				"girl",
				"female",
				"avatar"
			]
		},
		"mens": {
			"unicode": "1F6B9",
			"unicode_alternates": [],
			"name": "mens symbol",
			"shortname": ":mens:",
			"category": "objects_symbols",
			"emoji_order": "3895",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"restroom",
				"toilet",
				"wc",
				"men",
				"bathroom",
				"restroom",
				"sign",
				"boy",
				"male",
				"avatar"
			]
		},
		"restroom": {
			"unicode": "1F6BB",
			"unicode_alternates": [],
			"name": "restroom",
			"shortname": ":restroom:",
			"category": "objects_symbols",
			"emoji_order": "3890",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"woman",
				"man",
				"unisex",
				"bathroom",
				"restroom",
				"sign",
				"shared",
				"toilet"
			]
		},
		"pisces": {
			"unicode": "2653",
			"unicode_alternates": [
				"2653-FE0F"
			],
			"name": "pisces",
			"shortname": ":pisces:",
			"category": "objects_symbols",
			"emoji_order": "3885",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"pisces",
				"fish",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"purple-square",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"aquarius": {
			"unicode": "2652",
			"unicode_alternates": [
				"2652-FE0F"
			],
			"name": "aquarius",
			"shortname": ":aquarius:",
			"category": "objects_symbols",
			"emoji_order": "3880",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"aquarius",
				"water",
				"bearer",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"purple-square",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"capricorn": {
			"unicode": "2651",
			"unicode_alternates": [
				"2651-FE0F"
			],
			"name": "capricorn",
			"shortname": ":capricorn:",
			"category": "objects_symbols",
			"emoji_order": "3875",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"capricorn",
				"sea-goat",
				"goat-horned",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"sagittarius": {
			"unicode": "2650",
			"unicode_alternates": [
				"2650-FE0F"
			],
			"name": "sagittarius",
			"shortname": ":sagittarius:",
			"category": "objects_symbols",
			"emoji_order": "3870",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sagittarius",
				"centaur",
				"archer",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"scorpius": {
			"unicode": "264F",
			"unicode_alternates": [
				"264F-FE0F"
			],
			"name": "scorpius",
			"shortname": ":scorpius:",
			"category": "objects_symbols",
			"emoji_order": "3865",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"scorpius",
				"scorpion",
				"scorpio",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"libra": {
			"unicode": "264E",
			"unicode_alternates": [
				"264E-FE0F"
			],
			"name": "libra",
			"shortname": ":libra:",
			"category": "objects_symbols",
			"emoji_order": "3860",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"libra",
				"scales",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"purple-square",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"virgo": {
			"unicode": "264D",
			"unicode_alternates": [
				"264D-FE0F"
			],
			"name": "virgo",
			"shortname": ":virgo:",
			"category": "objects_symbols",
			"emoji_order": "3855",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sign",
				"virgo",
				"maiden",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"leo": {
			"unicode": "264C",
			"unicode_alternates": [
				"264C-FE0F"
			],
			"name": "leo",
			"shortname": ":leo:",
			"category": "objects_symbols",
			"emoji_order": "3850",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"leo",
				"lion",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"purple-square",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"cancer": {
			"unicode": "264B",
			"unicode_alternates": [
				"264B-FE0F"
			],
			"name": "cancer",
			"shortname": ":cancer:",
			"category": "objects_symbols",
			"emoji_order": "3845",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cancer",
				"crab",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"gemini": {
			"unicode": "264A",
			"unicode_alternates": [
				"264A-FE0F"
			],
			"name": "gemini",
			"shortname": ":gemini:",
			"category": "objects_symbols",
			"emoji_order": "3840",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"gemini",
				"twins",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"taurus": {
			"unicode": "2649",
			"unicode_alternates": [
				"2649-FE0F"
			],
			"name": "taurus",
			"shortname": ":taurus:",
			"category": "objects_symbols",
			"emoji_order": "3835",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"purple-square",
				"sign",
				"taurus",
				"bull",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"aries": {
			"unicode": "2648",
			"unicode_alternates": [
				"2648-FE0F"
			],
			"name": "aries",
			"shortname": ":aries:",
			"category": "objects_symbols",
			"emoji_order": "3830",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"aries",
				"ram",
				"astrology",
				"greek",
				"constellation",
				"stars",
				"zodiac",
				"sign",
				"purple-square",
				"sign",
				"zodiac",
				"horoscope"
			]
		},
		"atm": {
			"unicode": "1F3E7",
			"unicode_alternates": [],
			"name": "automated teller machine",
			"shortname": ":atm:",
			"category": "objects_symbols",
			"emoji_order": "3825",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"atm",
				"cash",
				"withdrawal",
				"money",
				"deposit",
				"financial",
				"bank",
				"adam",
				"payday",
				"bank",
				"blue-square",
				"cash",
				"money",
				"payment"
			]
		},
		"up": {
			"unicode": "1F199",
			"unicode_alternates": [],
			"name": "squared up with exclamation mark",
			"shortname": ":up:",
			"category": "objects_symbols",
			"emoji_order": "3820",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"ok": {
			"unicode": "1F197",
			"unicode_alternates": [],
			"name": "squared ok",
			"shortname": ":ok:",
			"category": "objects_symbols",
			"emoji_order": "3815",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"agree",
				"blue-square",
				"good",
				"yes"
			]
		},
		"ng": {
			"unicode": "1F196",
			"unicode_alternates": [],
			"name": "squared ng",
			"shortname": ":ng:",
			"category": "objects_symbols",
			"emoji_order": "3810",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"new": {
			"unicode": "1F195",
			"unicode_alternates": [],
			"name": "squared new",
			"shortname": ":new:",
			"category": "objects_symbols",
			"emoji_order": "3805",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square"
			]
		},
		"free": {
			"unicode": "1F193",
			"unicode_alternates": [],
			"name": "squared free",
			"shortname": ":free:",
			"category": "objects_symbols",
			"emoji_order": "3800",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"words"
			]
		},
		"cool": {
			"unicode": "1F192",
			"unicode_alternates": [],
			"name": "squared cool",
			"shortname": ":cool:",
			"category": "objects_symbols",
			"emoji_order": "3795",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"words"
			]
		},
		"wc": {
			"unicode": "1F6BE",
			"unicode_alternates": [],
			"name": "water closet",
			"shortname": ":wc:",
			"category": "objects_symbols",
			"emoji_order": "3790",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"restroom",
				"toilet",
				"water",
				"closet",
				"toilet",
				"bathroom",
				"throne",
				"porcelain",
				"waste",
				"flush",
				"plumbing"
			]
		},
		"parking": {
			"unicode": "1F17F",
			"unicode_alternates": [
				"1F17F-FE0F"
			],
			"name": "negative squared latin capital letter p",
			"shortname": ":parking:",
			"category": "objects_symbols",
			"emoji_order": "3785",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"blue-square",
				"cars",
				"letter"
			]
		},
		"id": {
			"unicode": "1F194",
			"unicode_alternates": [],
			"name": "squared id",
			"shortname": ":id:",
			"category": "objects_symbols",
			"emoji_order": "3780",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"purple-square",
				"words"
			]
		},
		"sos": {
			"unicode": "1F198",
			"unicode_alternates": [],
			"name": "squared sos",
			"shortname": ":sos:",
			"category": "objects_symbols",
			"emoji_order": "3775",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"emergency",
				"help",
				"red-square",
				"words"
			]
		},
		"o2": {
			"unicode": "1F17E",
			"unicode_alternates": [],
			"name": "negative squared latin capital letter o",
			"shortname": ":o2:",
			"category": "objects_symbols",
			"emoji_order": "3770",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"letter",
				"red-square"
			]
		},
		"cl": {
			"unicode": "1F191",
			"unicode_alternates": [],
			"name": "squared cl",
			"shortname": ":cl:",
			"category": "objects_symbols",
			"emoji_order": "3765",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"red-square",
				"words"
			]
		},
		"ab": {
			"unicode": "1F18E",
			"unicode_alternates": [],
			"name": "negative squared ab",
			"shortname": ":ab:",
			"category": "objects_symbols",
			"emoji_order": "3760",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"red-square"
			]
		},
		"b": {
			"unicode": "1F171",
			"unicode_alternates": [],
			"name": "negative squared latin capital letter b",
			"shortname": ":b:",
			"category": "objects_symbols",
			"emoji_order": "3755",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"letter",
				"red-square"
			]
		},
		"a": {
			"unicode": "1F170",
			"unicode_alternates": [],
			"name": "negative squared latin capital letter a",
			"shortname": ":a:",
			"category": "objects_symbols",
			"emoji_order": "3750",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alphabet",
				"letter",
				"red-square"
			]
		},
		"vs": {
			"unicode": "1F19A",
			"unicode_alternates": [],
			"name": "squared vs",
			"shortname": ":vs:",
			"category": "objects_symbols",
			"emoji_order": "3745",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"orange-square",
				"words"
			]
		},
		"mobile_phone_off": {
			"unicode": "1F4F4",
			"unicode_alternates": [],
			"name": "mobile phone off",
			"shortname": ":mobile_phone_off:",
			"category": "objects_symbols",
			"emoji_order": "3740",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"mute"
			]
		},
		"vibration_mode": {
			"unicode": "1F4F3",
			"unicode_alternates": [],
			"name": "vibration mode",
			"shortname": ":vibration_mode:",
			"category": "objects_symbols",
			"emoji_order": "3735",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"orange-square",
				"phone"
			]
		},
		"eight_pointed_black_star": {
			"unicode": "2734",
			"unicode_alternates": [
				"2734-FE0F"
			],
			"name": "eight pointed black star",
			"shortname": ":eight_pointed_black_star:",
			"category": "objects_symbols",
			"emoji_order": "3730",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"white_check_mark": {
			"unicode": "2705",
			"unicode_alternates": [],
			"name": "white heavy check mark",
			"shortname": ":white_check_mark:",
			"category": "objects_symbols",
			"emoji_order": "3725",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"agree",
				"green-square",
				"ok"
			]
		},
		"negative_squared_cross_mark": {
			"unicode": "274E",
			"unicode_alternates": [],
			"name": "negative squared cross mark",
			"shortname": ":negative_squared_cross_mark:",
			"category": "objects_symbols",
			"emoji_order": "3720",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"deny",
				"green-square",
				"no",
				"x"
			]
		},
		"eight_spoked_asterisk": {
			"unicode": "2733",
			"unicode_alternates": [
				"2733-FE0F"
			],
			"name": "eight spoked asterisk",
			"shortname": ":eight_spoked_asterisk:",
			"category": "objects_symbols",
			"emoji_order": "3715",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"green-square",
				"sparkle",
				"star"
			]
		},
		"sparkle": {
			"unicode": "2747",
			"unicode_alternates": [
				"2747-FE0F"
			],
			"name": "sparkle",
			"shortname": ":sparkle:",
			"category": "objects_symbols",
			"emoji_order": "3710",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"green-square",
				"stars"
			]
		},
		"chart": {
			"unicode": "1F4B9",
			"unicode_alternates": [],
			"name": "chart with upwards trend and yen sign",
			"shortname": ":chart:",
			"category": "objects_symbols",
			"emoji_order": "3705",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"graph",
				"green-square"
			]
		},
		"u6307": {
			"unicode": "1F22F",
			"unicode_alternates": [
				"1F22F-FE0F"
			],
			"name": "squared cjk unified ideograph-6307",
			"shortname": ":u6307:",
			"category": "objects_symbols",
			"emoji_order": "3700",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"green-square",
				"kanji",
				"point"
			]
		},
		"koko": {
			"unicode": "1F201",
			"unicode_alternates": [],
			"name": "squared katakana koko",
			"shortname": ":koko:",
			"category": "objects_symbols",
			"emoji_order": "3695",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"destination",
				"here",
				"japanese",
				"katakana"
			]
		},
		"sa": {
			"unicode": "1F202",
			"unicode_alternates": [],
			"name": "squared katakana sa",
			"shortname": ":sa:",
			"category": "objects_symbols",
			"emoji_order": "3690",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue-square",
				"japanese"
			]
		},
		"u7a7a": {
			"unicode": "1F233",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-7a7a",
			"shortname": ":u7a7a:",
			"category": "objects_symbols",
			"emoji_order": "3685",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"empty",
				"japanese",
				"kanji"
			]
		},
		"u5272": {
			"unicode": "1F239",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-5272",
			"shortname": ":u5272:",
			"category": "objects_symbols",
			"emoji_order": "3680",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"cut",
				"divide",
				"kanji",
				"pink"
			]
		},
		"u6708": {
			"unicode": "1F237",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-6708",
			"shortname": ":u6708:",
			"category": "objects_symbols",
			"emoji_order": "3675",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"japanese",
				"kanji",
				"moon",
				"orange-square"
			]
		},
		"u55b6": {
			"unicode": "1F23A",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-55b6",
			"shortname": ":u55b6:",
			"category": "objects_symbols",
			"emoji_order": "3670",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"japanese",
				"opening hours"
			]
		},
		"u7533": {
			"unicode": "1F238",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-7533",
			"shortname": ":u7533:",
			"category": "objects_symbols",
			"emoji_order": "3665",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"japanese",
				"kanji"
			]
		},
		"u7121": {
			"unicode": "1F21A",
			"unicode_alternates": [
				"1F21A-FE0F"
			],
			"name": "squared cjk unified ideograph-7121",
			"shortname": ":u7121:",
			"category": "objects_symbols",
			"emoji_order": "3660",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"japanese",
				"kanji",
				"no",
				"nothing",
				"orange-square"
			]
		},
		"u6709": {
			"unicode": "1F236",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-6709",
			"shortname": ":u6709:",
			"category": "objects_symbols",
			"emoji_order": "3655",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"have",
				"kanji",
				"orange-square"
			]
		},
		"u7981": {
			"unicode": "1F232",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-7981",
			"shortname": ":u7981:",
			"category": "objects_symbols",
			"emoji_order": "3650",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"forbidden",
				"japanese",
				"kanji",
				"limit",
				"restricted"
			]
		},
		"u6e80": {
			"unicode": "1F235",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-6e80",
			"shortname": ":u6e80:",
			"category": "objects_symbols",
			"emoji_order": "3645",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"full",
				"japanese",
				"kanji",
				"red-square"
			]
		},
		"u5408": {
			"unicode": "1F234",
			"unicode_alternates": [],
			"name": "squared cjk unified ideograph-5408",
			"shortname": ":u5408:",
			"category": "objects_symbols",
			"emoji_order": "3640",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"japanese",
				"join",
				"kanji"
			]
		},
		"congratulations": {
			"unicode": "3297",
			"unicode_alternates": [
				"3297-FE0F"
			],
			"name": "circled ideograph congratulation",
			"shortname": ":congratulations:",
			"category": "objects_symbols",
			"emoji_order": "3635",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"japanese",
				"kanji"
			]
		},
		"secret": {
			"unicode": "3299",
			"unicode_alternates": [
				"3299-FE0F"
			],
			"name": "circled ideograph secret",
			"shortname": ":secret:",
			"category": "objects_symbols",
			"emoji_order": "3630",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"privacy"
			]
		},
		"white_flower": {
			"unicode": "1F4AE",
			"unicode_alternates": [],
			"name": "white flower",
			"shortname": ":white_flower:",
			"category": "objects_symbols",
			"emoji_order": "3625",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"japanese",
				"white",
				"flower",
				"teacher",
				"school",
				"grade",
				"score",
				"brilliance",
				"intelligence",
				"homework",
				"student",
				"assignment",
				"praise"
			]
		},
		"ideograph_advantage": {
			"unicode": "1F250",
			"unicode_alternates": [],
			"name": "circled ideograph advantage",
			"shortname": ":ideograph_advantage:",
			"category": "objects_symbols",
			"emoji_order": "3620",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"get",
				"kanji",
				"obtain"
			]
		},
		"accept": {
			"unicode": "1F251",
			"unicode_alternates": [],
			"name": "circled ideograph accept",
			"shortname": ":accept:",
			"category": "objects_symbols",
			"emoji_order": "3615",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"agree",
				"chinese",
				"good",
				"kanji",
				"ok",
				"yes"
			]
		},
		"piracy": {
			"unicode": "1F572",
			"unicode_alternates": [],
			"name": "no piracy",
			"shortname": ":piracy:",
			"category": "objects_symbols",
			"emoji_order": "3610",
			"aliases": [
				":no_piracy:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"underage": {
			"unicode": "1F51E",
			"unicode_alternates": [],
			"name": "no one under eighteen symbol",
			"shortname": ":underage:",
			"category": "objects_symbols",
			"emoji_order": "3605",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"18",
				"drink",
				"night",
				"pub"
			]
		},
		"no_mobile_phones": {
			"unicode": "1F4F5",
			"unicode_alternates": [],
			"name": "no mobile phones",
			"shortname": ":no_mobile_phones:",
			"category": "objects_symbols",
			"emoji_order": "3600",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"iphone",
				"mute"
			]
		},
		"non-potable_water": {
			"unicode": "1F6B1",
			"unicode_alternates": [],
			"name": "non-potable water symbol",
			"shortname": ":non-potable_water:",
			"category": "objects_symbols",
			"emoji_order": "3595",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"drink",
				"faucet",
				"tap",
				"non-potable",
				"water",
				"not drinkable",
				"dirty",
				"gross",
				"aqua",
				"h20"
			]
		},
		"no_bicycles": {
			"unicode": "1F6B3",
			"unicode_alternates": [],
			"name": "no bicycles",
			"shortname": ":no_bicycles:",
			"category": "objects_symbols",
			"emoji_order": "3590",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cyclist",
				"prohibited",
				"bicycle",
				"bike pedal",
				"no"
			]
		},
		"do_not_litter": {
			"unicode": "1F6AF",
			"unicode_alternates": [],
			"name": "do not litter symbol",
			"shortname": ":do_not_litter:",
			"category": "objects_symbols",
			"emoji_order": "3585",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bin",
				"garbage",
				"trash",
				"litter",
				"garbage",
				"waste",
				"no",
				"can",
				"trash"
			]
		},
		"no_pedestrians": {
			"unicode": "1F6B7",
			"unicode_alternates": [],
			"name": "no pedestrians",
			"shortname": ":no_pedestrians:",
			"category": "objects_symbols",
			"emoji_order": "3580",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"crossing",
				"rules",
				"walking",
				"no",
				"walk",
				"pedestrian",
				"stroll",
				"stride",
				"foot",
				"feet"
			]
		},
		"name_badge": {
			"unicode": "1F4DB",
			"unicode_alternates": [],
			"name": "name badge",
			"shortname": ":name_badge:",
			"category": "objects_symbols",
			"emoji_order": "3575",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fire",
				"forbid"
			]
		},
		"no_entry": {
			"unicode": "26D4",
			"unicode_alternates": [
				"26D4-FE0F"
			],
			"name": "no entry",
			"shortname": ":no_entry:",
			"category": "objects_symbols",
			"emoji_order": "3570",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bad",
				"denied",
				"limit",
				"privacy",
				"security",
				"stop"
			]
		},
		"no_entry_sign": {
			"unicode": "1F6AB",
			"unicode_alternates": [],
			"name": "no entry sign",
			"shortname": ":no_entry_sign:",
			"category": "objects_symbols",
			"emoji_order": "3565",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"denied",
				"disallow",
				"forbid",
				"limit",
				"stop",
				"no",
				"stop",
				"entry"
			]
		},
		"prohibited": {
			"unicode": "1F6C7",
			"unicode_alternates": [],
			"name": "prohibited sign",
			"shortname": ":prohibited:",
			"category": "objects_symbols",
			"emoji_order": "3560",
			"aliases": [
				":prohibited_sign:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"sleeping_accommodation": {
			"unicode": "1F6CC",
			"unicode_alternates": [],
			"name": "sleeping accommodation",
			"shortname": ":sleeping_accommodation:",
			"category": "objects_symbols",
			"emoji_order": "3555",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"speaking_head": {
			"unicode": "1F5E3",
			"unicode_alternates": [],
			"name": "speaking head in silhouette",
			"shortname": ":speaking_head:",
			"category": "objects_symbols",
			"emoji_order": "3550",
			"aliases": [
				":speaking_head_in_silhouette:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"mag_right": {
			"unicode": "1F50E",
			"unicode_alternates": [],
			"name": "right-pointing magnifying glass",
			"shortname": ":mag_right:",
			"category": "objects_symbols",
			"emoji_order": "3545",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"search",
				"zoom",
				"detective",
				"investigator",
				"detail",
				"details"
			]
		},
		"mag": {
			"unicode": "1F50D",
			"unicode_alternates": [],
			"name": "left-pointing magnifying glass",
			"shortname": ":mag:",
			"category": "objects_symbols",
			"emoji_order": "3540",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"search",
				"zoom",
				"detective",
				"investigator",
				"detail",
				"details"
			]
		},
		"shield": {
			"unicode": "1F6E1",
			"unicode_alternates": [],
			"name": "shield",
			"shortname": ":shield:",
			"category": "objects_symbols",
			"emoji_order": "3535",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"children_crossing": {
			"unicode": "1F6B8",
			"unicode_alternates": [],
			"name": "children crossing",
			"shortname": ":children_crossing:",
			"category": "objects_symbols",
			"emoji_order": "3530",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"school",
				"children",
				"kids",
				"caution",
				"crossing",
				"street",
				"crosswalk",
				"slow"
			]
		},
		"mood_bubble_lightning": {
			"unicode": "1F5F1",
			"unicode_alternates": [],
			"name": "lightning mood bubble",
			"shortname": ":mood_bubble_lightning:",
			"category": "objects_symbols",
			"emoji_order": "3525",
			"aliases": [
				":lightning_mood_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"mood_bubble": {
			"unicode": "1F5F0",
			"unicode_alternates": [],
			"name": "mood bubble",
			"shortname": ":mood_bubble:",
			"category": "objects_symbols",
			"emoji_order": "3520",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"anger_right": {
			"unicode": "1F5EF",
			"unicode_alternates": [],
			"name": "right anger bubble",
			"shortname": ":anger_right:",
			"category": "objects_symbols",
			"emoji_order": "3515",
			"aliases": [
				":right_anger_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"anger_left": {
			"unicode": "1F5EE",
			"unicode_alternates": [],
			"name": "left anger bubble",
			"shortname": ":anger_left:",
			"category": "objects_symbols",
			"emoji_order": "3510",
			"aliases": [
				":left_anger_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"thought_right": {
			"unicode": "1F5ED",
			"unicode_alternates": [],
			"name": "right thought bubble",
			"shortname": ":thought_right:",
			"category": "objects_symbols",
			"emoji_order": "3505",
			"aliases": [
				":right_thought_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"thought_left": {
			"unicode": "1F5EC",
			"unicode_alternates": [],
			"name": "left thought bubble",
			"shortname": ":thought_left:",
			"category": "objects_symbols",
			"emoji_order": "3500",
			"aliases": [
				":left_thought_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"speech_three": {
			"unicode": "1F5EB",
			"unicode_alternates": [],
			"name": "three speech bubbles",
			"shortname": ":speech_three:",
			"category": "objects_symbols",
			"emoji_order": "3495",
			"aliases": [
				":three_speech_bubbles:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"speech_two": {
			"unicode": "1F5EA",
			"unicode_alternates": [],
			"name": "two speech bubbles",
			"shortname": ":speech_two:",
			"category": "objects_symbols",
			"emoji_order": "3490",
			"aliases": [
				":two_speech_bubbles:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"speech_right": {
			"unicode": "1F5E9",
			"unicode_alternates": [],
			"name": "right speech bubble",
			"shortname": ":speech_right:",
			"category": "objects_symbols",
			"emoji_order": "3485",
			"aliases": [
				":right_speech_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"speech_left": {
			"unicode": "1F5E8",
			"unicode_alternates": [],
			"name": "left speech bubble",
			"shortname": ":speech_left:",
			"category": "objects_symbols",
			"emoji_order": "3480",
			"aliases": [
				":left_speech_bubble:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"speech_balloon": {
			"unicode": "1F4AC",
			"unicode_alternates": [],
			"name": "speech balloon",
			"shortname": ":speech_balloon:",
			"category": "objects_symbols",
			"emoji_order": "3475",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bubble",
				"words",
				"speech",
				"balloon",
				"talk",
				"conversation",
				"communication",
				"comic",
				"dialogue"
			]
		},
		"thought_balloon": {
			"unicode": "1F4AD",
			"unicode_alternates": [],
			"name": "thought balloon",
			"shortname": ":thought_balloon:",
			"category": "objects_symbols",
			"emoji_order": "3470",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bubble",
				"cloud",
				"speech",
				"thought",
				"balloon",
				"comic",
				"think",
				"day dream",
				"wonder"
			]
		},
		"dove": {
			"unicode": "1F54A",
			"unicode_alternates": [],
			"name": "dove of peace",
			"shortname": ":dove:",
			"category": "objects_symbols",
			"emoji_order": "3465",
			"aliases": [
				":dove_of_peace:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"om_symbol": {
			"unicode": "1F549",
			"unicode_alternates": [],
			"name": "om symbol",
			"shortname": ":om_symbol:",
			"category": "objects_symbols",
			"emoji_order": "3460",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"celtic_cross": {
			"unicode": "1F548",
			"unicode_alternates": [],
			"name": "celtic cross",
			"shortname": ":celtic_cross:",
			"category": "objects_symbols",
			"emoji_order": "3455",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"cross_heavy": {
			"unicode": "1F547",
			"unicode_alternates": [],
			"name": "heavy latin cross",
			"shortname": ":cross_heavy:",
			"category": "objects_symbols",
			"emoji_order": "3450",
			"aliases": [
				":heavy_latin_cross:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"cross_white": {
			"unicode": "1F546",
			"unicode_alternates": [],
			"name": "white latin cross",
			"shortname": ":cross_white:",
			"category": "objects_symbols",
			"emoji_order": "3445",
			"aliases": [
				":white_latin_cross:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"descending_notes": {
			"unicode": "1F39D",
			"unicode_alternates": [],
			"name": "beamed descending musical notes",
			"shortname": ":descending_notes:",
			"category": "objects_symbols",
			"emoji_order": "3440",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"ascending_notes": {
			"unicode": "1F39C",
			"unicode_alternates": [],
			"name": "beamed ascending musical notes",
			"shortname": ":ascending_notes:",
			"category": "objects_symbols",
			"emoji_order": "3435",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"ringing_bell": {
			"unicode": "1F56D",
			"unicode_alternates": [],
			"name": "ringing bell",
			"shortname": ":ringing_bell:",
			"category": "objects_symbols",
			"emoji_order": "3430",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"no_bell": {
			"unicode": "1F515",
			"unicode_alternates": [],
			"name": "bell with cancellation stroke",
			"shortname": ":no_bell:",
			"category": "objects_symbols",
			"emoji_order": "3425",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"mute",
				"sound",
				"volume"
			]
		},
		"bell": {
			"unicode": "1F514",
			"unicode_alternates": [],
			"name": "bell",
			"shortname": ":bell:",
			"category": "objects_symbols",
			"emoji_order": "3420",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chime",
				"christmas",
				"notification",
				"sound",
				"xmas"
			]
		},
		"zzz": {
			"unicode": "1F4A4",
			"unicode_alternates": [],
			"name": "sleeping symbol",
			"shortname": ":zzz:",
			"category": "objects_symbols",
			"emoji_order": "3415",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sleepy",
				"tired"
			]
		},
		"bullhorn_waves": {
			"unicode": "1F56C",
			"unicode_alternates": [],
			"name": "bullhorn with sound waves",
			"shortname": ":bullhorn_waves:",
			"category": "objects_symbols",
			"emoji_order": "3410",
			"aliases": [
				":bullhorn_with_sound_waves:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"bullhorn": {
			"unicode": "1F56B",
			"unicode_alternates": [],
			"name": "bullhorn",
			"shortname": ":bullhorn:",
			"category": "objects_symbols",
			"emoji_order": "3405",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"right_speaker_three": {
			"unicode": "1F56A",
			"unicode_alternates": [],
			"name": "right speaker with three sound waves",
			"shortname": ":right_speaker_three:",
			"category": "objects_symbols",
			"emoji_order": "3400",
			"aliases": [
				":right_speaker_with_three_sound_waves:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"right_speaker_one": {
			"unicode": "1F569",
			"unicode_alternates": [],
			"name": "right speaker with one sound wave",
			"shortname": ":right_speaker_one:",
			"category": "objects_symbols",
			"emoji_order": "3395",
			"aliases": [
				":right_speaker_with_one_sound_wave:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"right_speaker": {
			"unicode": "1F568",
			"unicode_alternates": [],
			"name": "right speaker",
			"shortname": ":right_speaker:",
			"category": "objects_symbols",
			"emoji_order": "3390",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"mute": {
			"unicode": "1F507",
			"unicode_alternates": [],
			"name": "speaker with cancellation stroke",
			"shortname": ":mute:",
			"category": "objects_symbols",
			"emoji_order": "3385",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sound",
				"volume"
			]
		},
		"loud_sound": {
			"unicode": "1F50A",
			"unicode_alternates": [],
			"name": "speaker with three sound waves",
			"shortname": ":loud_sound:",
			"category": "objects_symbols",
			"emoji_order": "3380",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"sound": {
			"unicode": "1F509",
			"unicode_alternates": [],
			"name": "speaker with one sound wave",
			"shortname": ":sound:",
			"category": "objects_symbols",
			"emoji_order": "3375",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"speaker",
				"volume"
			]
		},
		"speaker": {
			"unicode": "1F508",
			"unicode_alternates": [],
			"name": "speaker",
			"shortname": ":speaker:",
			"category": "objects_symbols",
			"emoji_order": "3370",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sound",
				"listen",
				"hear",
				"noise"
			]
		},
		"loudspeaker": {
			"unicode": "1F4E2",
			"unicode_alternates": [],
			"name": "public address loudspeaker",
			"shortname": ":loudspeaker:",
			"category": "objects_symbols",
			"emoji_order": "3365",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sound",
				"volume"
			]
		},
		"mega": {
			"unicode": "1F4E3",
			"unicode_alternates": [],
			"name": "cheering megaphone",
			"shortname": ":mega:",
			"category": "objects_symbols",
			"emoji_order": "3360",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sound",
				"speaker",
				"volume"
			]
		},
		"unlock": {
			"unicode": "1F513",
			"unicode_alternates": [],
			"name": "open lock",
			"shortname": ":unlock:",
			"category": "objects_symbols",
			"emoji_order": "3355",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"privacy",
				"security"
			]
		},
		"lock": {
			"unicode": "1F512",
			"unicode_alternates": [],
			"name": "lock",
			"shortname": ":lock:",
			"category": "objects_symbols",
			"emoji_order": "3350",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"password",
				"security"
			]
		},
		"closed_lock_with_key": {
			"unicode": "1F510",
			"unicode_alternates": [],
			"name": "closed lock with key",
			"shortname": ":closed_lock_with_key:",
			"category": "objects_symbols",
			"emoji_order": "3345",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"privacy",
				"security"
			]
		},
		"lock_with_ink_pen": {
			"unicode": "1F50F",
			"unicode_alternates": [],
			"name": "lock with ink pen",
			"shortname": ":lock_with_ink_pen:",
			"category": "objects_symbols",
			"emoji_order": "3340",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"secret",
				"security"
			]
		},
		"pencil": {
			"unicode": "1F4DD",
			"unicode_alternates": [],
			"name": "memo",
			"shortname": ":pencil:",
			"category": "objects_symbols",
			"emoji_order": "3335",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents",
				"paper",
				"station",
				"write"
			]
		},
		"crayon": {
			"unicode": "1F58D",
			"unicode_alternates": [],
			"name": "lower left crayon",
			"shortname": ":crayon:",
			"category": "objects_symbols",
			"emoji_order": "3330",
			"aliases": [
				":lower_left_crayon:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"paintbrush": {
			"unicode": "1F58C",
			"unicode_alternates": [],
			"name": "lower left paintbrush",
			"shortname": ":paintbrush:",
			"category": "objects_symbols",
			"emoji_order": "3325",
			"aliases": [
				":lower_left_paintbrush:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"pen_fountain": {
			"unicode": "1F58B",
			"unicode_alternates": [],
			"name": "lower left fountain pen",
			"shortname": ":pen_fountain:",
			"category": "objects_symbols",
			"emoji_order": "3320",
			"aliases": [
				":lower_left_fountain_pen:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"pen_ballpoint": {
			"unicode": "1F58A",
			"unicode_alternates": [],
			"name": "lower left ballpoint pen",
			"shortname": ":pen_ballpoint:",
			"category": "objects_symbols",
			"emoji_order": "3315",
			"aliases": [
				":lower_left_ballpoint_pen:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"pencil3": {
			"unicode": "1F589",
			"unicode_alternates": [],
			"name": "lower left pencil",
			"shortname": ":pencil3:",
			"category": "objects_symbols",
			"emoji_order": "3310",
			"aliases": [
				":lower_left_pencil:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"pencil2": {
			"unicode": "270F",
			"unicode_alternates": [
				"270F-FE0F"
			],
			"name": "pencil",
			"shortname": ":pencil2:",
			"category": "objects_symbols",
			"emoji_order": "3305",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"paper",
				"stationery",
				"write"
			]
		},
		"black_nib": {
			"unicode": "2712",
			"unicode_alternates": [
				"2712-FE0F"
			],
			"name": "black nib",
			"shortname": ":black_nib:",
			"category": "objects_symbols",
			"emoji_order": "3300",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"pen",
				"stationery"
			]
		},
		"file_cabinet": {
			"unicode": "1F5C4",
			"unicode_alternates": [],
			"name": "file cabinet",
			"shortname": ":file_cabinet:",
			"category": "objects_symbols",
			"emoji_order": "3295",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"open_file_folder": {
			"unicode": "1F4C2",
			"unicode_alternates": [],
			"name": "open file folder",
			"shortname": ":open_file_folder:",
			"category": "objects_symbols",
			"emoji_order": "3290",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents",
				"load"
			]
		},
		"file_folder": {
			"unicode": "1F4C1",
			"unicode_alternates": [],
			"name": "file folder",
			"shortname": ":file_folder:",
			"category": "objects_symbols",
			"emoji_order": "3285",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents"
			]
		},
		"folder_open": {
			"unicode": "1F5C1",
			"unicode_alternates": [],
			"name": "open folder",
			"shortname": ":folder_open:",
			"category": "objects_symbols",
			"emoji_order": "3280",
			"aliases": [
				":open_folder:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"folder": {
			"unicode": "1F5C0",
			"unicode_alternates": [],
			"name": "folder",
			"shortname": ":folder:",
			"category": "objects_symbols",
			"emoji_order": "3275",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"hole": {
			"unicode": "1F573",
			"unicode_alternates": [],
			"name": "hole",
			"shortname": ":hole:",
			"category": "objects_symbols",
			"emoji_order": "3270",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"flag_blac": {
			"unicode": "1F3F4",
			"unicode_alternates": [],
			"name": "waving black flag",
			"shortname": ":flag_black:",
			"category": "objects_symbols",
			"emoji_order": "3265",
			"aliases": [
				":waving_black_flag:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"flag_white": {
			"unicode": "1F3F3",
			"unicode_alternates": [],
			"name": "waving white flag",
			"shortname": ":flag_white:",
			"category": "objects_symbols",
			"emoji_order": "3260",
			"aliases": [
				":waving_white_flag:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"pennant_black": {
			"unicode": "1F3F2",
			"unicode_alternates": [],
			"name": "black pennant",
			"shortname": ":pennant_black:",
			"category": "objects_symbols",
			"emoji_order": "3255",
			"aliases": [
				":black_pennant:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"pennant_white": {
			"unicode": "1F3F1",
			"unicode_alternates": [],
			"name": "white pennant",
			"shortname": ":pennant_white:",
			"category": "objects_symbols",
			"emoji_order": "3250",
			"aliases": [
				":white_pennant:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"triangular_flag_on_post": {
			"unicode": "1F6A9",
			"unicode_alternates": [],
			"name": "triangular flag on post",
			"shortname": ":triangular_flag_on_post:",
			"category": "objects_symbols",
			"emoji_order": "3245",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"triangle",
				"triangular",
				"flag",
				"golf",
				"post",
				"flagpole"
			]
		},
		"straight_ruler": {
			"unicode": "1F4CF",
			"unicode_alternates": [],
			"name": "straight ruler",
			"shortname": ":straight_ruler:",
			"category": "objects_symbols",
			"emoji_order": "3240",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"stationery"
			]
		},
		"round_pushpin": {
			"unicode": "1F4CD",
			"unicode_alternates": [],
			"name": "round pushpin",
			"shortname": ":round_pushpin:",
			"category": "objects_symbols",
			"emoji_order": "3235",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"stationery"
			]
		},
		"triangular_ruler": {
			"unicode": "1F4D0",
			"unicode_alternates": [],
			"name": "triangular ruler",
			"shortname": ":triangular_ruler:",
			"category": "objects_symbols",
			"emoji_order": "3230",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"architect",
				"math",
				"sketch",
				"stationery"
			]
		},
		"scissors": {
			"unicode": "2702",
			"unicode_alternates": [
				"2702-FE0F"
			],
			"name": "black scissors",
			"shortname": ":scissors:",
			"category": "objects_symbols",
			"emoji_order": "3225",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cut",
				"stationery"
			]
		},
		"pushpin_black": {
			"unicode": "1F588",
			"unicode_alternates": [],
			"name": "black pushpin",
			"shortname": ":pushpin_black:",
			"category": "objects_symbols",
			"emoji_order": "3220",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"pushpin": {
			"unicode": "1F4CC",
			"unicode_alternates": [],
			"name": "pushpin",
			"shortname": ":pushpin:",
			"category": "objects_symbols",
			"emoji_order": "3215",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"stationery"
			]
		},
		"paperclips": {
			"unicode": "1F587",
			"unicode_alternates": [],
			"name": "linked paperclips",
			"shortname": ":paperclips:",
			"category": "objects_symbols",
			"emoji_order": "3210",
			"aliases": [
				":linked_paperclips:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"paperclip": {
			"unicode": "1F4CE",
			"unicode_alternates": [],
			"name": "paperclip",
			"shortname": ":paperclip:",
			"category": "objects_symbols",
			"emoji_order": "3205",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents",
				"stationery"
			]
		},
		"link": {
			"unicode": "1F517",
			"unicode_alternates": [],
			"name": "link symbol",
			"shortname": ":link:",
			"category": "objects_symbols",
			"emoji_order": "3200",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"rings",
				"url"
			]
		},
		"card_box": {
			"unicode": "1F5C3",
			"unicode_alternates": [],
			"name": "card file box",
			"shortname": ":card_box:",
			"category": "objects_symbols",
			"emoji_order": "3195",
			"aliases": [
				":card_file_box:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"dividers": {
			"unicode": "1F5C2",
			"unicode_alternates": [],
			"name": "card index dividers",
			"shortname": ":dividers:",
			"category": "objects_symbols",
			"emoji_order": "3190",
			"aliases": [
				":card_index_dividers:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"card_index": {
			"unicode": "1F4C7",
			"unicode_alternates": [],
			"name": "card index",
			"shortname": ":card_index:",
			"category": "objects_symbols",
			"emoji_order": "3185",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"business",
				"stationery"
			]
		},
		"books": {
			"unicode": "1F4DA",
			"unicode_alternates": [],
			"name": "books",
			"shortname": ":books:",
			"category": "objects_symbols",
			"emoji_order": "3180",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"library",
				"literature"
			]
		},
		"orange_book": {
			"unicode": "1F4D9",
			"unicode_alternates": [],
			"name": "orange book",
			"shortname": ":orange_book:",
			"category": "objects_symbols",
			"emoji_order": "3175",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"knowledge",
				"library",
				"read"
			]
		},
		"blue_book": {
			"unicode": "1F4D8",
			"unicode_alternates": [],
			"name": "blue book",
			"shortname": ":blue_book:",
			"category": "objects_symbols",
			"emoji_order": "3170",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"knowledge",
				"library",
				"read"
			]
		},
		"green_book": {
			"unicode": "1F4D7",
			"unicode_alternates": [],
			"name": "green book",
			"shortname": ":green_book:",
			"category": "objects_symbols",
			"emoji_order": "3165",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"knowledge",
				"library",
				"read"
			]
		},
		"closed_book": {
			"unicode": "1F4D5",
			"unicode_alternates": [],
			"name": "closed book",
			"shortname": ":closed_book:",
			"category": "objects_symbols",
			"emoji_order": "3160",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"knowledge",
				"library",
				"read"
			]
		},
		"ledger": {
			"unicode": "1F4D2",
			"unicode_alternates": [],
			"name": "ledger",
			"shortname": ":ledger:",
			"category": "objects_symbols",
			"emoji_order": "3155",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"notes",
				"paper"
			]
		},
		"notebook_with_decorative_cover": {
			"unicode": "1F4D4",
			"unicode_alternates": [],
			"name": "notebook with decorative cover",
			"shortname": ":notebook_with_decorative_cover:",
			"category": "objects_symbols",
			"emoji_order": "3150",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"classroom",
				"notes",
				"paper",
				"record"
			]
		},
		"notebook": {
			"unicode": "1F4D3",
			"unicode_alternates": [],
			"name": "notebook",
			"shortname": ":notebook:",
			"category": "objects_symbols",
			"emoji_order": "3145",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"notes",
				"paper",
				"record",
				"stationery"
			]
		},
		"book": {
			"unicode": "1F4D6",
			"unicode_alternates": [],
			"name": "open book",
			"shortname": ":book:",
			"category": "objects_symbols",
			"emoji_order": "3140",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"library",
				"literature"
			]
		},
		"book2": {
			"unicode": "1F56E",
			"unicode_alternates": [],
			"name": "book",
			"shortname": ":book2:",
			"category": "objects_symbols",
			"emoji_order": "3135",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"clipboard": {
			"unicode": "1F4CB",
			"unicode_alternates": [],
			"name": "clipboard",
			"shortname": ":clipboard:",
			"category": "objects_symbols",
			"emoji_order": "3130",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents",
				"stationery"
			]
		},
		"scroll": {
			"unicode": "1F4DC",
			"unicode_alternates": [],
			"name": "scroll",
			"shortname": ":scroll:",
			"category": "objects_symbols",
			"emoji_order": "3125",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents"
			]
		},
		"frame_tiles": {
			"unicode": "1F5BD",
			"unicode_alternates": [],
			"name": "frame with tiles",
			"shortname": ":frame_tiles:",
			"category": "objects_symbols",
			"emoji_order": "3120",
			"aliases": [
				":frame_with_tiles:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"frame_photo": {
			"unicode": "1F5BC",
			"unicode_alternates": [],
			"name": "frame with picture",
			"shortname": ":frame_photo:",
			"category": "objects_symbols",
			"emoji_order": "3115",
			"aliases": [
				":frame_with_picture:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"frame_x": {
			"unicode": "1F5BE",
			"unicode_alternates": [],
			"name": "frame with an x",
			"shortname": ":frame_x:",
			"category": "objects_symbols",
			"emoji_order": "3110",
			"aliases": [
				":frame_with_an_x:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"compression": {
			"unicode": "1F5DC",
			"unicode_alternates": [],
			"name": "compression",
			"shortname": ":compression:",
			"category": "objects_symbols",
			"emoji_order": "3105",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"high_brightness": {
			"unicode": "1F506",
			"unicode_alternates": [],
			"name": "high brightness symbol",
			"shortname": ":high_brightness:",
			"category": "objects_symbols",
			"emoji_order": "3100",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"light",
				"summer",
				"sun"
			]
		},
		"low_brightness": {
			"unicode": "1F505",
			"unicode_alternates": [],
			"name": "low brightness symbol",
			"shortname": ":low_brightness:",
			"category": "objects_symbols",
			"emoji_order": "3095",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"summer",
				"sun"
			]
		},
		"ballot_box": {
			"unicode": "1F5F3",
			"unicode_alternates": [],
			"name": "ballot box with ballot",
			"shortname": ":ballot_box:",
			"category": "objects_symbols",
			"emoji_order": "3090",
			"aliases": [
				":ballot_box_with_ballot:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"calendar_spiral": {
			"unicode": "1F5D3",
			"unicode_alternates": [],
			"name": "spiral calendar pad",
			"shortname": ":calendar_spiral:",
			"category": "objects_symbols",
			"emoji_order": "3085",
			"aliases": [
				":spiral_calendar_pad:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"calendar": {
			"unicode": "1F4C6",
			"unicode_alternates": [],
			"name": "tear-off calendar",
			"shortname": ":calendar:",
			"category": "objects_symbols",
			"emoji_order": "3080",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"schedule"
			]
		},
		"date": {
			"unicode": "1F4C5",
			"unicode_alternates": [],
			"name": "calendar",
			"shortname": ":date:",
			"category": "objects_symbols",
			"emoji_order": "3075",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"calendar",
				"schedule"
			]
		},
		"stock_chart": {
			"unicode": "1F5E0",
			"unicode_alternates": [],
			"name": "stock chart",
			"shortname": ":stock_chart:",
			"category": "objects_symbols",
			"emoji_order": "3070",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"bar_chart": {
			"unicode": "1F4CA",
			"unicode_alternates": [],
			"name": "bar chart",
			"shortname": ":bar_chart:",
			"category": "objects_symbols",
			"emoji_order": "3065",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"graph",
				"presentation",
				"stats"
			]
		},
		"chart_with_downwards_trend": {
			"unicode": "1F4C9",
			"unicode_alternates": [],
			"name": "chart with downwards trend",
			"shortname": ":chart_with_downwards_trend:",
			"category": "objects_symbols",
			"emoji_order": "3060",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"graph"
			]
		},
		"chart_with_upwards_trend": {
			"unicode": "1F4C8",
			"unicode_alternates": [],
			"name": "chart with upwards trend",
			"shortname": ":chart_with_upwards_trend:",
			"category": "objects_symbols",
			"emoji_order": "3055",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"graph"
			]
		},
		"notepad-spiral": {
			"unicode": "1F5D2",
			"unicode_alternates": [],
			"name": "spiral note pad",
			"shortname": ":notepad-spiral:",
			"category": "objects_symbols",
			"emoji_order": "3050",
			"aliases": [
				":spiral_note_pad:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"notepad": {
			"unicode": "1F5CA",
			"unicode_alternates": [],
			"name": "note pad",
			"shortname": ":notepad:",
			"category": "objects_symbols",
			"emoji_order": "3045",
			"aliases": [
				":note_pad:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"note": {
			"unicode": "1F5C9",
			"unicode_alternates": [],
			"name": "note page",
			"shortname": ":note:",
			"category": "objects_symbols",
			"emoji_order": "3040",
			"aliases": [
				":note_page:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"notepad_empty": {
			"unicode": "1F5C7",
			"unicode_alternates": [],
			"name": "empty note pad",
			"shortname": ":notepad_empty:",
			"category": "objects_symbols",
			"emoji_order": "3035",
			"aliases": [
				":empty_note_pad:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"note_empty": {
			"unicode": "1F5C6",
			"unicode_alternates": [],
			"name": "empty note page",
			"shortname": ":note_empty:",
			"category": "objects_symbols",
			"emoji_order": "3030",
			"aliases": [
				":empty_note_page:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"wastebasket": {
			"unicode": "1F5D1",
			"unicode_alternates": [],
			"name": "wastebasket",
			"shortname": ":wastebasket:",
			"category": "objects_symbols",
			"emoji_order": "3025",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"bookmark_tabs": {
			"unicode": "1F4D1",
			"unicode_alternates": [],
			"name": "bookmark tabs",
			"shortname": ":bookmark_tabs:",
			"category": "objects_symbols",
			"emoji_order": "3020",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"favorite"
			]
		},
		"pages": {
			"unicode": "1F5D0",
			"unicode_alternates": [],
			"name": "pages",
			"shortname": ":pages:",
			"category": "objects_symbols",
			"emoji_order": "3015",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"page_with_curl": {
			"unicode": "1F4C3",
			"unicode_alternates": [],
			"name": "page with curl",
			"shortname": ":page_with_curl:",
			"category": "objects_symbols",
			"emoji_order": "3010",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents"
			]
		},
		"page_facing_up": {
			"unicode": "1F4C4",
			"unicode_alternates": [],
			"name": "page facing up",
			"shortname": ":page_facing_up:",
			"category": "objects_symbols",
			"emoji_order": "3005",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents"
			]
		},
		"page": {
			"unicode": "1F5CF",
			"unicode_alternates": [],
			"name": "page",
			"shortname": ":page:",
			"category": "objects_symbols",
			"emoji_order": "3000",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"document_text": {
			"unicode": "1F5B9",
			"unicode_alternates": [],
			"name": "document with text",
			"shortname": ":document_text:",
			"category": "objects_symbols",
			"emoji_order": "2995",
			"aliases": [
				":document_with_text:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"document": {
			"unicode": "1F5CE",
			"unicode_alternates": [],
			"name": "document",
			"shortname": ":document:",
			"category": "objects_symbols",
			"emoji_order": "2990",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"mailbox_with_mail": {
			"unicode": "1F4EC",
			"unicode_alternates": [],
			"name": "open mailbox with raised flag",
			"shortname": ":mailbox_with_mail:",
			"category": "objects_symbols",
			"emoji_order": "2985",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"email",
				"inbox"
			]
		},
		"mailbox_with_no_mail": {
			"unicode": "1F4ED",
			"unicode_alternates": [],
			"name": "open mailbox with lowered flag",
			"shortname": ":mailbox_with_no_mail:",
			"category": "objects_symbols",
			"emoji_order": "2980",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"email",
				"inbox"
			]
		},
		"mailbox": {
			"unicode": "1F4EB",
			"unicode_alternates": [],
			"name": "closed mailbox with raised flag",
			"shortname": ":mailbox:",
			"category": "objects_symbols",
			"emoji_order": "2975",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"email",
				"inbox"
			]
		},
		"mailbox_closed": {
			"unicode": "1F4EA",
			"unicode_alternates": [],
			"name": "closed mailbox with lowered flag",
			"shortname": ":mailbox_closed:",
			"category": "objects_symbols",
			"emoji_order": "2970",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"email",
				"inbox"
			]
		},
		"postbox": {
			"unicode": "1F4EE",
			"unicode_alternates": [],
			"name": "postbox",
			"shortname": ":postbox:",
			"category": "objects_symbols",
			"emoji_order": "2965",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"email",
				"envelope",
				"letter"
			]
		},
		"postal_horn": {
			"unicode": "1F4EF",
			"unicode_alternates": [],
			"name": "postal horn",
			"shortname": ":postal_horn:",
			"category": "objects_symbols",
			"emoji_order": "2960",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"instrument",
				"music"
			]
		},
		"package": {
			"unicode": "1F4E6",
			"unicode_alternates": [],
			"name": "package",
			"shortname": ":package:",
			"category": "objects_symbols",
			"emoji_order": "2955",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"gift",
				"mail"
			]
		},
		"outbox_tray": {
			"unicode": "1F4E4",
			"unicode_alternates": [],
			"name": "outbox tray",
			"shortname": ":outbox_tray:",
			"category": "objects_symbols",
			"emoji_order": "2950",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"email",
				"inbox"
			]
		},
		"inbox_tray": {
			"unicode": "1F4E5",
			"unicode_alternates": [],
			"name": "inbox tray",
			"shortname": ":inbox_tray:",
			"category": "objects_symbols",
			"emoji_order": "2945",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"documents",
				"email"
			]
		},
		"e-mail": {
			"unicode": "1F4E7",
			"unicode_alternates": [],
			"name": "e-mail symbol",
			"shortname": ":e-mail:",
			"category": "objects_symbols",
			"emoji_order": "2940",
			"aliases": [
				":email:"
			],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"inbox"
			]
		},
		"incoming_envelope": {
			"unicode": "1F4E8",
			"unicode_alternates": [],
			"name": "incoming envelope",
			"shortname": ":incoming_envelope:",
			"category": "objects_symbols",
			"emoji_order": "2935",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"email",
				"inbox"
			]
		},
		"envelope_with_arrow": {
			"unicode": "1F4E9",
			"unicode_alternates": [],
			"name": "envelope with downwards arrow above",
			"shortname": ":envelope_with_arrow:",
			"category": "objects_symbols",
			"emoji_order": "2930",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"email"
			]
		},
		"envelope_stamped_pen": {
			"unicode": "1F586",
			"unicode_alternates": [],
			"name": "pen over stamped envelope",
			"shortname": ":envelope_stamped_pen:",
			"category": "objects_symbols",
			"emoji_order": "2925",
			"aliases": [
				":pen_over_stamped_envelope:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"envelope_flying": {
			"unicode": "1F585",
			"unicode_alternates": [],
			"name": "flying envelope",
			"shortname": ":envelope_flying:",
			"category": "objects_symbols",
			"emoji_order": "2920",
			"aliases": [
				":flying_envelope:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"envelope_stamped": {
			"unicode": "1F583",
			"unicode_alternates": [],
			"name": "stamped envelope",
			"shortname": ":envelope_stamped:",
			"category": "objects_symbols",
			"emoji_order": "2915",
			"aliases": [
				":stamped_envelope:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"envelope_back": {
			"unicode": "1F582",
			"unicode_alternates": [],
			"name": "back of envelope",
			"shortname": ":envelope_back:",
			"category": "objects_symbols",
			"emoji_order": "2910",
			"aliases": [
				":back_of_envelope:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"envelope": {
			"unicode": "2709",
			"unicode_alternates": [
				"2709-FE0F"
			],
			"name": "envelope",
			"shortname": ":envelope:",
			"category": "objects_symbols",
			"emoji_order": "2905",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"letter",
				"mail",
				"postal"
			]
		},
		"key2": {
			"unicode": "1F5DD",
			"unicode_alternates": [],
			"name": "old key",
			"shortname": ":key2:",
			"category": "objects_symbols",
			"emoji_order": "2900",
			"aliases": [
				":old_key:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"key": {
			"unicode": "1F511",
			"unicode_alternates": [],
			"name": "key",
			"shortname": ":key:",
			"category": "objects_symbols",
			"emoji_order": "2895",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"door",
				"lock",
				"password"
			]
		},
		"label": {
			"unicode": "1F3F7",
			"unicode_alternates": [],
			"name": "label",
			"shortname": ":label:",
			"category": "objects_symbols",
			"emoji_order": "2890",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"thermometer": {
			"unicode": "1F321",
			"unicode_alternates": [],
			"name": "thermometer",
			"shortname": ":thermometer:",
			"category": "objects_symbols",
			"emoji_order": "2885",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"newspaper2": {
			"unicode": "1F5DE",
			"unicode_alternates": [],
			"name": "rolled-up newspaper",
			"shortname": ":newspaper2:",
			"category": "objects_symbols",
			"emoji_order": "2880",
			"aliases": [
				":rolled_up_newspaper:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"newspaper": {
			"unicode": "1F4F0",
			"unicode_alternates": [],
			"name": "newspaper",
			"shortname": ":newspaper:",
			"category": "objects_symbols",
			"emoji_order": "2875",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"headline",
				"press"
			]
		},
		"bookmark": {
			"unicode": "1F516",
			"unicode_alternates": [],
			"name": "bookmark",
			"shortname": ":bookmark:",
			"category": "objects_symbols",
			"emoji_order": "2870",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"favorite"
			]
		},
		"gun": {
			"unicode": "1F52B",
			"unicode_alternates": [],
			"name": "pistol",
			"shortname": ":gun:",
			"category": "objects_symbols",
			"emoji_order": "2865",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"violence",
				"weapon"
			]
		},
		"crossbones": {
			"unicode": "1F571",
			"unicode_alternates": [],
			"name": "black skull and crossbones",
			"shortname": ":crossbones:",
			"category": "objects_symbols",
			"emoji_order": "2860",
			"aliases": [
				":black_skull_and_crossbones:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"smoking": {
			"unicode": "1F6AC",
			"unicode_alternates": [],
			"name": "smoking symbol",
			"shortname": ":smoking:",
			"category": "objects_symbols",
			"emoji_order": "2855",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cigarette",
				"kills",
				"tobacco",
				"smoking",
				"cigarette",
				"smoke",
				"cancer",
				"lungs",
				"inhale",
				"tar",
				"nicotine"
			]
		},
		"bomb": {
			"unicode": "1F4A3",
			"unicode_alternates": [],
			"name": "bomb",
			"shortname": ":bomb:",
			"category": "objects_symbols",
			"emoji_order": "2850",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"boom",
				"explode"
			]
		},
		"oil": {
			"unicode": "1F6E2",
			"unicode_alternates": [],
			"name": "oil drum",
			"shortname": ":oil:",
			"category": "objects_symbols",
			"emoji_order": "2845",
			"aliases": [
				":oil_drum:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"tools": {
			"unicode": "1F6E0",
			"unicode_alternates": [],
			"name": "hammer and wrench",
			"shortname": ":tools:",
			"category": "objects_symbols",
			"emoji_order": "2840",
			"aliases": [
				":hammer_and_wrench:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"hammer": {
			"unicode": "1F528",
			"unicode_alternates": [],
			"name": "hammer",
			"shortname": ":hammer:",
			"category": "objects_symbols",
			"emoji_order": "2835",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"done",
				"judge",
				"law",
				"ruling",
				"tools",
				"verdict"
			]
		},
		"nut_and_bolt": {
			"unicode": "1F529",
			"unicode_alternates": [],
			"name": "nut and bolt",
			"shortname": ":nut_and_bolt:",
			"category": "objects_symbols",
			"emoji_order": "2830",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"handy",
				"tools"
			]
		},
		"dagger": {
			"unicode": "1F5E1",
			"unicode_alternates": [],
			"name": "dagger knife",
			"shortname": ":dagger:",
			"category": "objects_symbols",
			"emoji_order": "2825",
			"aliases": [
				":dagger_knife:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"knife": {
			"unicode": "1F52A",
			"unicode_alternates": [],
			"name": "hocho",
			"shortname": ":knife:",
			"category": "objects_symbols",
			"emoji_order": "2820",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"wrench": {
			"unicode": "1F527",
			"unicode_alternates": [],
			"name": "wrench",
			"shortname": ":wrench:",
			"category": "objects_symbols",
			"emoji_order": "2815",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"diy",
				"ikea",
				"tools"
			]
		},
		"crystal_ball": {
			"unicode": "1F52E",
			"unicode_alternates": [],
			"name": "crystal ball",
			"shortname": ":crystal_ball:",
			"category": "objects_symbols",
			"emoji_order": "2810",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"disco",
				"party"
			]
		},
		"telescope": {
			"unicode": "1F52D",
			"unicode_alternates": [],
			"name": "telescope",
			"shortname": ":telescope:",
			"category": "objects_symbols",
			"emoji_order": "2805",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"space",
				"stars"
			]
		},
		"microscope": {
			"unicode": "1F52C",
			"unicode_alternates": [],
			"name": "microscope",
			"shortname": ":microscope:",
			"category": "objects_symbols",
			"emoji_order": "2800",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"experiment",
				"laboratory",
				"zoomin"
			]
		},
		"pill": {
			"unicode": "1F48A",
			"unicode_alternates": [],
			"name": "pill",
			"shortname": ":pill:",
			"category": "objects_symbols",
			"emoji_order": "2795",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"health",
				"medicine"
			]
		},
		"syringe": {
			"unicode": "1F489",
			"unicode_alternates": [],
			"name": "syringe",
			"shortname": ":syringe:",
			"category": "objects_symbols",
			"emoji_order": "2790",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blood",
				"drugs",
				"health",
				"hospital",
				"medicine",
				"needle"
			]
		},
		"barber": {
			"unicode": "1F488",
			"unicode_alternates": [],
			"name": "barber pole",
			"shortname": ":barber:",
			"category": "objects_symbols",
			"emoji_order": "2785",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"hair",
				"salon",
				"style"
			]
		},
		"toilet": {
			"unicode": "1F6BD",
			"unicode_alternates": [],
			"name": "toilet",
			"shortname": ":toilet:",
			"category": "objects_symbols",
			"emoji_order": "2780",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"restroom",
				"wc",
				"toilet",
				"bathroom",
				"throne",
				"porcelain",
				"waste",
				"flush",
				"plumbing"
			]
		},
		"bathtub": {
			"unicode": "1F6C1",
			"unicode_alternates": [],
			"name": "bathtub",
			"shortname": ":bathtub:",
			"category": "objects_symbols",
			"emoji_order": "2775",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clean",
				"shower",
				"bath",
				"tub",
				"basin",
				"wash",
				"bubble",
				"soak",
				"bathroom",
				"soap",
				"water",
				"clean",
				"shampoo",
				"lather",
				"water"
			]
		},
		"shower": {
			"unicode": "1F6BF",
			"unicode_alternates": [],
			"name": "shower",
			"shortname": ":shower:",
			"category": "objects_symbols",
			"emoji_order": "2770",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bath",
				"clean",
				"wash",
				"bathroom",
				"shower",
				"soap",
				"water",
				"clean",
				"shampoo",
				"lather"
			]
		},
		"door": {
			"unicode": "1F6AA",
			"unicode_alternates": [],
			"name": "door",
			"shortname": ":door:",
			"category": "objects_symbols",
			"emoji_order": "2765",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"entry",
				"exit",
				"house",
				"door",
				"doorway",
				"entrance",
				"enter",
				"exit",
				"entry"
			]
		},
		"jeans": {
			"unicode": "1F456",
			"unicode_alternates": [],
			"name": "jeans",
			"shortname": ":jeans:",
			"category": "objects_symbols",
			"emoji_order": "2760",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"shopping",
				"jeans",
				"pants",
				"blue",
				"denim",
				"levi&#039;s",
				"levi",
				"designer",
				"work",
				"skinny"
			]
		},
		"necktie": {
			"unicode": "1F454",
			"unicode_alternates": [],
			"name": "necktie",
			"shortname": ":necktie:",
			"category": "objects_symbols",
			"emoji_order": "2755",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cloth",
				"fashion",
				"formal",
				"shirt",
				"suitup"
			]
		},
		"shirt": {
			"unicode": "1F455",
			"unicode_alternates": [],
			"name": "t-shirt",
			"shortname": ":shirt:",
			"category": "objects_symbols",
			"emoji_order": "2750",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cloth",
				"fashion"
			]
		},
		"womans_clothes": {
			"unicode": "1F45A",
			"unicode_alternates": [],
			"name": "womans clothes",
			"shortname": ":womans_clothes:",
			"category": "objects_symbols",
			"emoji_order": "2745",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"woman",
				"clothing",
				"clothes",
				"blouse",
				"shirt",
				"wardrobe",
				"breasts",
				"cleavage",
				"shopping",
				"shop",
				"dressing",
				"dressed"
			]
		},
		"kimono": {
			"unicode": "1F458",
			"unicode_alternates": [],
			"name": "kimono",
			"shortname": ":kimono:",
			"category": "objects_symbols",
			"emoji_order": "2740",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"dress",
				"fashion",
				"female",
				"japanese",
				"women"
			]
		},
		"dress": {
			"unicode": "1F457",
			"unicode_alternates": [],
			"name": "dress",
			"shortname": ":dress:",
			"category": "objects_symbols",
			"emoji_order": "2735",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clothes",
				"fashion"
			]
		},
		"bikini": {
			"unicode": "1F459",
			"unicode_alternates": [],
			"name": "bikini",
			"shortname": ":bikini:",
			"category": "objects_symbols",
			"emoji_order": "2730",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beach",
				"fashion",
				"female",
				"girl",
				"swimming",
				"woman"
			]
		},
		"athletic_shoe": {
			"unicode": "1F45F",
			"unicode_alternates": [],
			"name": "athletic shoe",
			"shortname": ":athletic_shoe:",
			"category": "objects_symbols",
			"emoji_order": "2725",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shoes",
				"sports"
			]
		},
		"mans_shoe": {
			"unicode": "1F45E",
			"unicode_alternates": [],
			"name": "mans shoe",
			"shortname": ":mans_shoe:",
			"category": "objects_symbols",
			"emoji_order": "2720",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"male"
			]
		},
		"boot": {
			"unicode": "1F462",
			"unicode_alternates": [],
			"name": "womans boots",
			"shortname": ":boot:",
			"category": "objects_symbols",
			"emoji_order": "2715",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"shoes"
			]
		},
		"high_heel": {
			"unicode": "1F460",
			"unicode_alternates": [],
			"name": "high-heeled shoe",
			"shortname": ":high_heel:",
			"category": "objects_symbols",
			"emoji_order": "2710",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"female",
				"shoes"
			]
		},
		"sandal": {
			"unicode": "1F461",
			"unicode_alternates": [],
			"name": "womans sandal",
			"shortname": ":sandal:",
			"category": "objects_symbols",
			"emoji_order": "2705",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"shoes"
			]
		},
		"womans_hat": {
			"unicode": "1F452",
			"unicode_alternates": [],
			"name": "womans hat",
			"shortname": ":womans_hat:",
			"category": "objects_symbols",
			"emoji_order": "2700",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accessories",
				"fashion",
				"female"
			]
		},
		"dark_sunglasses": {
			"unicode": "1F576",
			"unicode_alternates": [],
			"name": "dark sunglasses",
			"shortname": ":dark_sunglasses:",
			"category": "objects_symbols",
			"emoji_order": "2695",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"eyeglasses": {
			"unicode": "1F453",
			"unicode_alternates": [],
			"name": "eyeglasses",
			"shortname": ":eyeglasses:",
			"category": "objects_symbols",
			"emoji_order": "2690",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accessories",
				"eyesight",
				"fashion",
				"eyeglasses",
				"spectacles",
				"eye",
				"sight",
				"nearsightedness",
				"myopia",
				"farsightedness",
				"hyperopia",
				"frames",
				"vision",
				"see",
				"blurry",
				"contacts"
			]
		},
		"lipstick": {
			"unicode": "1F484",
			"unicode_alternates": [],
			"name": "lipstick",
			"shortname": ":lipstick:",
			"category": "objects_symbols",
			"emoji_order": "2685",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fashion",
				"female",
				"girl"
			]
		},
		"school_satchel": {
			"unicode": "1F392",
			"unicode_alternates": [],
			"name": "school satchel",
			"shortname": ":school_satchel:",
			"category": "objects_symbols",
			"emoji_order": "2680",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bag",
				"education",
				"student",
				"school",
				"satchel",
				"backpack",
				"bag",
				"packing",
				"pack",
				"hike",
				"education",
				"adventure",
				"travel",
				"sightsee"
			]
		},
		"briefcase": {
			"unicode": "1F4BC",
			"unicode_alternates": [],
			"name": "briefcase",
			"shortname": ":briefcase:",
			"category": "objects_symbols",
			"emoji_order": "2675",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"business",
				"documents",
				"work"
			]
		},
		"handbag": {
			"unicode": "1F45C",
			"unicode_alternates": [],
			"name": "handbag",
			"shortname": ":handbag:",
			"category": "objects_symbols",
			"emoji_order": "2670",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accessories",
				"accessory",
				"bag",
				"fashion"
			]
		},
		"purse": {
			"unicode": "1F45B",
			"unicode_alternates": [],
			"name": "purse",
			"shortname": ":purse:",
			"category": "objects_symbols",
			"emoji_order": "2665",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accessories",
				"fashion",
				"money",
				"purse",
				"clutch",
				"bag",
				"handbag",
				"coin bag",
				"accessory",
				"money",
				"ladies",
				"shopping"
			]
		},
		"pouch": {
			"unicode": "1F45D",
			"unicode_alternates": [],
			"name": "pouch",
			"shortname": ":pouch:",
			"category": "objects_symbols",
			"emoji_order": "2660",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accessories",
				"bag",
				"pouch",
				"bag",
				"cosmetic",
				"packing",
				"grandma",
				"makeup"
			]
		},
		"closed_umbrella": {
			"unicode": "1F302",
			"unicode_alternates": [],
			"name": "closed umbrella",
			"shortname": ":closed_umbrella:",
			"category": "objects_symbols",
			"emoji_order": "2655",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"drizzle",
				"rain",
				"weather",
				"umbrella",
				"closed",
				"rain",
				"moisture",
				"protection",
				"sun",
				"ultraviolet",
				"uv"
			]
		},
		"gem": {
			"unicode": "1F48E",
			"unicode_alternates": [],
			"name": "gem stone",
			"shortname": ":gem:",
			"category": "objects_symbols",
			"emoji_order": "2650",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blue",
				"ruby"
			]
		},
		"moneybag": {
			"unicode": "1F4B0",
			"unicode_alternates": [],
			"name": "money bag",
			"shortname": ":moneybag:",
			"category": "objects_symbols",
			"emoji_order": "2645",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"coins",
				"dollar",
				"payment"
			]
		},
		"money_with_wings": {
			"unicode": "1F4B8",
			"unicode_alternates": [],
			"name": "money with wings",
			"shortname": ":money_with_wings:",
			"category": "objects_symbols",
			"emoji_order": "2640",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bills",
				"dollar",
				"payment",
				"money",
				"wings",
				"easy",
				"spend",
				"work",
				"lost",
				"blown",
				"burned",
				"gift",
				"cash",
				"dollar"
			]
		},
		"credit_card": {
			"unicode": "1F4B3",
			"unicode_alternates": [],
			"name": "credit card",
			"shortname": ":credit_card:",
			"category": "objects_symbols",
			"emoji_order": "2635",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bill",
				"dollar",
				"money",
				"pay",
				"payment",
				"credit",
				"card",
				"loan",
				"purchase",
				"shopping",
				"mastercard",
				"visa",
				"american express",
				"wallet",
				"signature"
			]
		},
		"satellite_orbital": {
			"unicode": "1F6F0",
			"unicode_alternates": [],
			"name": "satellite",
			"shortname": ":satellite_orbital:",
			"category": "objects_symbols",
			"emoji_order": "2630",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"satellite": {
			"unicode": "1F4E1",
			"unicode_alternates": [],
			"name": "satellite antenna",
			"shortname": ":satellite:",
			"category": "objects_symbols",
			"emoji_order": "2625",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication"
			]
		},
		"candle": {
			"unicode": "1F56F",
			"unicode_alternates": [],
			"name": "candle",
			"shortname": ":candle:",
			"category": "objects_symbols",
			"emoji_order": "2620",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"flashlight": {
			"unicode": "1F526",
			"unicode_alternates": [],
			"name": "electric torch",
			"shortname": ":flashlight:",
			"category": "objects_symbols",
			"emoji_order": "2615",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"dark"
			]
		},
		"bulb": {
			"unicode": "1F4A1",
			"unicode_alternates": [],
			"name": "electric light bulb",
			"shortname": ":bulb:",
			"category": "objects_symbols",
			"emoji_order": "2610",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"electricity",
				"light",
				"idea",
				"bulb",
				"light"
			]
		},
		"electric_plug": {
			"unicode": "1F50C",
			"unicode_alternates": [],
			"name": "electric plug",
			"shortname": ":electric_plug:",
			"category": "objects_symbols",
			"emoji_order": "2605",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"charger",
				"power"
			]
		},
		"battery": {
			"unicode": "1F50B",
			"unicode_alternates": [],
			"name": "battery",
			"shortname": ":battery:",
			"category": "objects_symbols",
			"emoji_order": "2600",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"energy",
				"power",
				"sustain"
			]
		},
		"vhs": {
			"unicode": "1F4FC",
			"unicode_alternates": [],
			"name": "videocassette",
			"shortname": ":vhs:",
			"category": "objects_symbols",
			"emoji_order": "2595",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"oldschool",
				"record",
				"video"
			]
		},
		"optical_disk": {
			"unicode": "1F5B8",
			"unicode_alternates": [],
			"name": "optical disc icon",
			"shortname": ":optical_disk:",
			"category": "objects_symbols",
			"emoji_order": "2590",
			"aliases": [
				":optical_disc_icon:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"dvd": {
			"unicode": "1F4C0",
			"unicode_alternates": [],
			"name": "dvd",
			"shortname": ":dvd:",
			"category": "objects_symbols",
			"emoji_order": "2585",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cd",
				"disc",
				"disk"
			]
		},
		"cd": {
			"unicode": "1F4BF",
			"unicode_alternates": [],
			"name": "optical disc",
			"shortname": ":cd:",
			"category": "objects_symbols",
			"emoji_order": "2580",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"disc",
				"disk",
				"dvd",
				"technology"
			]
		},
		"hard_disk": {
			"unicode": "1F5B4",
			"unicode_alternates": [],
			"name": "hard disk",
			"shortname": ":hard_disk:",
			"category": "objects_symbols",
			"emoji_order": "2575",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"cartridge": {
			"unicode": "1F5AD",
			"unicode_alternates": [],
			"name": "tape cartridge",
			"shortname": ":cartridge:",
			"category": "objects_symbols",
			"emoji_order": "2570",
			"aliases": [
				":tape_cartridge:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"floppy_white": {
			"unicode": "1F5AB",
			"unicode_alternates": [],
			"name": "white hard shell floppy disk",
			"shortname": ":floppy_white:",
			"category": "objects_symbols",
			"emoji_order": "2565",
			"aliases": [
				":white_hard_shell_floppy_disk:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"floppy_black": {
			"unicode": "1F5AA",
			"unicode_alternates": [],
			"name": "black hard shell floppy disk",
			"shortname": ":floppy_black:",
			"category": "objects_symbols",
			"emoji_order": "2560",
			"aliases": [
				":black_hard_shell_floppy_disk:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"floppy_disk": {
			"unicode": "1F4BE",
			"unicode_alternates": [],
			"name": "floppy disk",
			"shortname": ":floppy_disk:",
			"category": "objects_symbols",
			"emoji_order": "2555",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"oldschool",
				"save",
				"technology",
				"floppy",
				"disk",
				"storage",
				"information",
				"computer",
				"drive",
				"megabyte"
			]
		},
		"minidisc": {
			"unicode": "1F4BD",
			"unicode_alternates": [],
			"name": "minidisc",
			"shortname": ":minidisc:",
			"category": "objects_symbols",
			"emoji_order": "2550",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"data",
				"disc",
				"disk",
				"record",
				"technology"
			]
		},
		"fax": {
			"unicode": "1F4E0",
			"unicode_alternates": [],
			"name": "fax machine",
			"shortname": ":fax:",
			"category": "objects_symbols",
			"emoji_order": "2545",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"technology"
			]
		},
		"flip_phone": {
			"unicode": "1F581",
			"unicode_alternates": [],
			"name": "clamshell mobile phone",
			"shortname": ":flip_phone:",
			"category": "objects_symbols",
			"emoji_order": "2540",
			"aliases": [
				":clamshell_mobile_phone:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"telephone_black": {
			"unicode": "1F57F",
			"unicode_alternates": [],
			"name": "black touchtone telephone",
			"shortname": ":telephone_black:",
			"category": "objects_symbols",
			"emoji_order": "2535",
			"aliases": [
				":black_touchtone_telephone:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"telephone_white": {
			"unicode": "1F57E",
			"unicode_alternates": [],
			"name": "white touchtone telephone",
			"shortname": ":telephone_white:",
			"category": "objects_symbols",
			"emoji_order": "2530",
			"aliases": [
				":white_touchtone_telephone:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"telephone": {
			"unicode": "260E",
			"unicode_alternates": [
				"260E-FE0F"
			],
			"name": "black telephone",
			"shortname": ":telephone:",
			"category": "objects_symbols",
			"emoji_order": "2525",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"dial",
				"technology"
			]
		},
		"left_receiver": {
			"unicode": "1F57B",
			"unicode_alternates": [],
			"name": "left hand telephone receiver",
			"shortname": ":left_receiver:",
			"category": "objects_symbols",
			"emoji_order": "2520",
			"aliases": [
				":left_hand_telephone_receiver:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"telephone_receiver": {
			"unicode": "1F4DE",
			"unicode_alternates": [],
			"name": "telephone receiver",
			"shortname": ":telephone_receiver:",
			"category": "objects_symbols",
			"emoji_order": "2515",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"dial",
				"technology"
			]
		},
		"joystick": {
			"unicode": "1F579",
			"unicode_alternates": [],
			"name": "joystick",
			"shortname": ":joystick:",
			"category": "objects_symbols",
			"emoji_order": "2510",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"pager": {
			"unicode": "1F4DF",
			"unicode_alternates": [],
			"name": "pager",
			"shortname": ":pager:",
			"category": "objects_symbols",
			"emoji_order": "2505",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bbcall",
				"oldschool"
			]
		},
		"stereo": {
			"unicode": "1F4FE",
			"unicode_alternates": [],
			"name": "portable stereo",
			"shortname": ":stereo:",
			"category": "objects_symbols",
			"emoji_order": "2500",
			"aliases": [
				":portable_stereo:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"radio": {
			"unicode": "1F4FB",
			"unicode_alternates": [],
			"name": "radio",
			"shortname": ":radio:",
			"category": "objects_symbols",
			"emoji_order": "2495",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"communication",
				"music",
				"podcast",
				"program"
			]
		},
		"control_knobs": {
			"unicode": "1F39B",
			"unicode_alternates": [],
			"name": "control knobs",
			"shortname": ":control_knobs:",
			"category": "objects_symbols",
			"emoji_order": "2490",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"level_slider": {
			"unicode": "1F39A",
			"unicode_alternates": [],
			"name": "level slider",
			"shortname": ":level_slider:",
			"category": "objects_symbols",
			"emoji_order": "2485",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"microphone2": {
			"unicode": "1F399",
			"unicode_alternates": [],
			"name": "studio microphone",
			"shortname": ":microphone2:",
			"category": "objects_symbols",
			"emoji_order": "2480",
			"aliases": [
				":studio_microphone:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"keyboard_with_jacks": {
			"unicode": "1F398",
			"unicode_alternates": [],
			"name": "musical keyboard with jacks",
			"shortname": ":keyboard_with_jacks:",
			"category": "objects_symbols",
			"emoji_order": "2475",
			"aliases": [
				":musical_keyboard_with_jacks:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"tv": {
			"unicode": "1F4FA",
			"unicode_alternates": [],
			"name": "television",
			"shortname": ":tv:",
			"category": "objects_symbols",
			"emoji_order": "2470",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"oldschool",
				"program",
				"show",
				"technology"
			]
		},
		"projector": {
			"unicode": "1F4FD",
			"unicode_alternates": [],
			"name": "film projector",
			"shortname": ":projector:",
			"category": "objects_symbols",
			"emoji_order": "2465",
			"aliases": [
				":film_projector:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"movie_camera": {
			"unicode": "1F3A5",
			"unicode_alternates": [],
			"name": "movie camera",
			"shortname": ":movie_camera:",
			"category": "objects_symbols",
			"emoji_order": "2460",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"film",
				"record",
				"movie",
				"camera",
				"camcorder",
				"video",
				"motion",
				"picture"
			]
		},
		"video_camera": {
			"unicode": "1F4F9",
			"unicode_alternates": [],
			"name": "video camera",
			"shortname": ":video_camera:",
			"category": "objects_symbols",
			"emoji_order": "2455",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"film",
				"record"
			]
		},
		"camera_with_flash": {
			"unicode": "1F4F8",
			"unicode_alternates": [],
			"name": "camera with flash",
			"shortname": ":camera_with_flash:",
			"category": "objects_symbols",
			"emoji_order": "2450",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"camera": {
			"unicode": "1F4F7",
			"unicode_alternates": [],
			"name": "camera",
			"shortname": ":camera:",
			"category": "objects_symbols",
			"emoji_order": "2445",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"gadgets",
				"photo"
			]
		},
		"hourglass": {
			"unicode": "231B",
			"unicode_alternates": [
				"231B-FE0F"
			],
			"name": "hourglass",
			"shortname": ":hourglass:",
			"category": "objects_symbols",
			"emoji_order": "2440",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clock",
				"oldschool",
				"time"
			]
		},
		"hourglass_flowing_sand": {
			"unicode": "23F3",
			"unicode_alternates": [],
			"name": "hourglass with flowing sand",
			"shortname": ":hourglass_flowing_sand:",
			"category": "objects_symbols",
			"emoji_order": "2435",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"countdown",
				"oldschool",
				"time"
			]
		},
		"clock": {
			"unicode": "1F570",
			"unicode_alternates": [],
			"name": "mantlepiece clock",
			"shortname": ":clock:",
			"category": "objects_symbols",
			"emoji_order": "2430",
			"aliases": [
				":mantlepiece_clock:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"alarm_clock": {
			"unicode": "23F0",
			"unicode_alternates": [],
			"name": "alarm clock",
			"shortname": ":alarm_clock:",
			"category": "objects_symbols",
			"emoji_order": "2425",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"time",
				"wake"
			]
		},
		"calculator": {
			"unicode": "1F5A9",
			"unicode_alternates": [],
			"name": "pocket calculator",
			"shortname": ":calculator:",
			"category": "objects_symbols",
			"emoji_order": "2420",
			"aliases": [
				":pocket calculator:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"desktop_window": {
			"unicode": "1F5D4",
			"unicode_alternates": [],
			"name": "desktop window",
			"shortname": ":desktop_window:",
			"category": "objects_symbols",
			"emoji_order": "2415",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"printer": {
			"unicode": "1F5A8",
			"unicode_alternates": [],
			"name": "printer",
			"shortname": ":printer:",
			"category": "objects_symbols",
			"emoji_order": "2410",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"network": {
			"unicode": "1F5A7",
			"unicode_alternates": [],
			"name": "three networked computers",
			"shortname": ":network:",
			"category": "objects_symbols",
			"emoji_order": "2405",
			"aliases": [
				":three_networked_computers:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"keyboard_mouse": {
			"unicode": "1F5A6",
			"unicode_alternates": [],
			"name": "keyboard and mouse",
			"shortname": ":keyboard_mouse:",
			"category": "objects_symbols",
			"emoji_order": "2400",
			"aliases": [
				":keyboard_and_mouse:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"trackball": {
			"unicode": "1F5B2",
			"unicode_alternates": [],
			"name": "trackball",
			"shortname": ":trackball:",
			"category": "objects_symbols",
			"emoji_order": "2395",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"mouse-one": {
			"unicode": "1F5AF",
			"unicode_alternates": [],
			"name": "one button mouse",
			"shortname": ":mouse-one:",
			"category": "objects_symbols",
			"emoji_order": "2390",
			"aliases": [
				":one_button_mouse:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"keyboard": {
			"unicode": "1F5AE",
			"unicode_alternates": [],
			"name": "wired keyboard",
			"shortname": ":keyboard:",
			"category": "objects_symbols",
			"emoji_order": "2385",
			"aliases": [
				":wired_keyboard:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"computer_old": {
			"unicode": "1F5B3",
			"unicode_alternates": [],
			"name": "old personal computer",
			"shortname": ":computer_old:",
			"category": "objects_symbols",
			"emoji_order": "2380",
			"aliases": [
				":old_personal_computer:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"desktop": {
			"unicode": "1F5A5",
			"unicode_alternates": [],
			"name": "desktop computer",
			"shortname": ":desktop:",
			"category": "objects_symbols",
			"emoji_order": "2375",
			"aliases": [
				":desktop_computer:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"computer": {
			"unicode": "1F4BB",
			"unicode_alternates": [],
			"name": "personal computer",
			"shortname": ":computer:",
			"category": "objects_symbols",
			"emoji_order": "2370",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"laptop",
				"tech"
			]
		},
		"calling": {
			"unicode": "1F4F2",
			"unicode_alternates": [],
			"name": "mobile phone with rightwards arrow at left",
			"shortname": ":calling:",
			"category": "objects_symbols",
			"emoji_order": "2365",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"incoming",
				"iphone"
			]
		},
		"iphone": {
			"unicode": "1F4F1",
			"unicode_alternates": [],
			"name": "mobile phone",
			"shortname": ":iphone:",
			"category": "objects_symbols",
			"emoji_order": "2360",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"apple",
				"dial",
				"gadgets",
				"technology"
			]
		},
		"watch": {
			"unicode": "231A",
			"unicode_alternates": [
				"231A-FE0F"
			],
			"name": "watch",
			"shortname": ":watch:",
			"category": "objects_symbols",
			"emoji_order": "2355",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"accessories",
				"time"
			]
		},
		"baby_bottle": {
			"unicode": "1F37C",
			"unicode_alternates": [],
			"name": "baby bottle",
			"shortname": ":baby_bottle:",
			"category": "food_drink",
			"emoji_order": "2350",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"container",
				"food",
				"baby",
				"bottle",
				"milk",
				"mother",
				"nipple",
				"newborn",
				"formula"
			]
		},
		"beers": {
			"unicode": "1F37B",
			"unicode_alternates": [],
			"name": "clinking beer mugs",
			"shortname": ":beers:",
			"category": "food_drink",
			"emoji_order": "2345",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beverage",
				"drink",
				"drunk",
				"party",
				"pub",
				"relax",
				"beer",
				"beers",
				"cheers",
				"mug",
				"toast",
				"celebrate",
				"pub",
				"bar",
				"jolly",
				"hops",
				"clink"
			]
		},
		"beer": {
			"unicode": "1F37A",
			"unicode_alternates": [],
			"name": "beer mug",
			"shortname": ":beer:",
			"category": "food_drink",
			"emoji_order": "2340",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beverage",
				"drink",
				"drunk",
				"party",
				"pub",
				"relax",
				"beer",
				"hops",
				"mug",
				"barley",
				"malt",
				"yeast",
				"portland",
				"oregon",
				"brewery",
				"micro",
				"pint",
				"boot"
			]
		},
		"tropical_drink": {
			"unicode": "1F379",
			"unicode_alternates": [],
			"name": "tropical drink",
			"shortname": ":tropical_drink:",
			"category": "food_drink",
			"emoji_order": "2335",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beverage",
				"tropical",
				"drink",
				"mixed",
				"pineapple",
				"coconut",
				"pina",
				"fruit",
				"umbrella"
			]
		},
		"cocktail": {
			"unicode": "1F378",
			"unicode_alternates": [],
			"name": "cocktail glass",
			"shortname": ":cocktail:",
			"category": "food_drink",
			"emoji_order": "2330",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alcohol",
				"beverage",
				"drink",
				"drunk",
				"cocktail",
				"mixed",
				"drink",
				"alcohol",
				"glass",
				"martini",
				"bar"
			]
		},
		"wine_glass": {
			"unicode": "1F377",
			"unicode_alternates": [],
			"name": "wine glass",
			"shortname": ":wine_glass:",
			"category": "food_drink",
			"emoji_order": "2325",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"alcohol",
				"beverage",
				"booze",
				"bottle",
				"drink",
				"drunk",
				"fermented",
				"glass",
				"grapes",
				"tasting",
				"wine",
				"winery"
			]
		},
		"sake": {
			"unicode": "1F376",
			"unicode_alternates": [],
			"name": "sake bottle and cup",
			"shortname": ":sake:",
			"category": "food_drink",
			"emoji_order": "2320",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beverage",
				"drink",
				"drunk",
				"wine",
				"sake",
				"wine",
				"rice",
				"ferment",
				"alcohol",
				"japanese",
				"drink"
			]
		},
		"coffee": {
			"unicode": "2615",
			"unicode_alternates": [
				"2615-FE0F"
			],
			"name": "hot beverage",
			"shortname": ":coffee:",
			"category": "food_drink",
			"emoji_order": "2315",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beverage",
				"cafe",
				"drink",
				"espresso"
			]
		},
		"tea": {
			"unicode": "1F375",
			"unicode_alternates": [],
			"name": "teacup without handle",
			"shortname": ":tea:",
			"category": "food_drink",
			"emoji_order": "2310",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bowl",
				"breakfast",
				"british",
				"drink",
				"green",
				"tea",
				"leaf",
				"drink",
				"teacup",
				"hot",
				"beverage"
			]
		},
		"fork_and_knife": {
			"unicode": "1F374",
			"unicode_alternates": [],
			"name": "fork and knife",
			"shortname": ":fork_and_knife:",
			"category": "food_drink",
			"emoji_order": "2305",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cutlery",
				"kitchen",
				"fork",
				"knife",
				"restaurant",
				"meal",
				"food",
				"eat"
			]
		},
		"egg": {
			"unicode": "1F373",
			"unicode_alternates": [],
			"name": "cooking",
			"shortname": ":egg:",
			"category": "food_drink",
			"emoji_order": "2300",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"breakfast",
				"food",
				"egg",
				"fry",
				"pan",
				"flat",
				"cook",
				"frying",
				"cooking",
				"utensil"
			]
		},
		"stew": {
			"unicode": "1F372",
			"unicode_alternates": [],
			"name": "pot of food",
			"shortname": ":stew:",
			"category": "food_drink",
			"emoji_order": "2295",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"meat",
				"stew",
				"hearty",
				"soup",
				"thick",
				"hot",
				"pot"
			]
		},
		"bento": {
			"unicode": "1F371",
			"unicode_alternates": [],
			"name": "bento box",
			"shortname": ":bento:",
			"category": "food_drink",
			"emoji_order": "2290",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"box",
				"food",
				"japanese",
				"bento",
				"japanese",
				"rice",
				"meal",
				"box",
				"obento",
				"convenient",
				"lunchbox"
			]
		},
		"cake": {
			"unicode": "1F370",
			"unicode_alternates": [],
			"name": "shortcake",
			"shortname": ":cake:",
			"category": "food_drink",
			"emoji_order": "2285",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"food",
				"cake",
				"short",
				"dessert",
				"strawberry"
			]
		},
		"honey_pot": {
			"unicode": "1F36F",
			"unicode_alternates": [],
			"name": "honey pot",
			"shortname": ":honey_pot:",
			"category": "food_drink",
			"emoji_order": "2280",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bees",
				"sweet",
				"honey",
				"pot",
				"bees",
				"pooh",
				"bear"
			]
		},
		"custard": {
			"unicode": "1F36E",
			"unicode_alternates": [],
			"name": "custard",
			"shortname": ":custard:",
			"category": "food_drink",
			"emoji_order": "2275",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"food",
				"custard",
				"cream",
				"rich",
				"butter",
				"dessert",
				"crème",
				"brûlée",
				"french"
			]
		},
		"lollipop": {
			"unicode": "1F36D",
			"unicode_alternates": [],
			"name": "lollipop",
			"shortname": ":lollipop:",
			"category": "food_drink",
			"emoji_order": "2270",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"candy",
				"food",
				"snack",
				"sweet",
				"lollipop",
				"stick",
				"lick",
				"sweet",
				"sugar",
				"candy"
			]
		},
		"candy": {
			"unicode": "1F36C",
			"unicode_alternates": [],
			"name": "candy",
			"shortname": ":candy:",
			"category": "food_drink",
			"emoji_order": "2265",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"snack",
				"candy",
				"sugar",
				"sweet",
				"hard"
			]
		},
		"chocolate_bar": {
			"unicode": "1F36B",
			"unicode_alternates": [],
			"name": "chocolate bar",
			"shortname": ":chocolate_bar:",
			"category": "food_drink",
			"emoji_order": "2260",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"food",
				"snack",
				"chocolate",
				"bar",
				"candy",
				"coca",
				"hershey&#039;s"
			]
		},
		"cookie": {
			"unicode": "1F36A",
			"unicode_alternates": [],
			"name": "cookie",
			"shortname": ":cookie:",
			"category": "food_drink",
			"emoji_order": "2255",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chocolate",
				"food",
				"oreo",
				"snack",
				"cookie",
				"dessert",
				"biscuit",
				"sweet",
				"chocolate"
			]
		},
		"doughnut": {
			"unicode": "1F369",
			"unicode_alternates": [],
			"name": "doughnut",
			"shortname": ":doughnut:",
			"category": "food_drink",
			"emoji_order": "2250",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"food",
				"snack",
				"sweet",
				"doughnut",
				"donut",
				"pastry",
				"fried",
				"dessert",
				"breakfast",
				"police",
				"homer",
				"sweet"
			]
		},
		"ice_cream": {
			"unicode": "1F368",
			"unicode_alternates": [],
			"name": "ice cream",
			"shortname": ":ice_cream:",
			"category": "food_drink",
			"emoji_order": "2245",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"food",
				"hot",
				"icecream",
				"ice",
				"cream",
				"dairy",
				"dessert",
				"cold",
				"soft",
				"serve",
				"cone",
				"waffle"
			]
		},
		"shaved_ice": {
			"unicode": "1F367",
			"unicode_alternates": [],
			"name": "shaved ice",
			"shortname": ":shaved_ice:",
			"category": "food_drink",
			"emoji_order": "2240",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"hot",
				"shaved",
				"ice",
				"dessert",
				"treat",
				"syrup",
				"flavoring"
			]
		},
		"icecream": {
			"unicode": "1F366",
			"unicode_alternates": [],
			"name": "soft ice cream",
			"shortname": ":icecream:",
			"category": "food_drink",
			"emoji_order": "2235",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"desert",
				"food",
				"hot",
				"icecream",
				"ice",
				"cream",
				"dairy",
				"dessert",
				"cold",
				"soft",
				"serve",
				"cone",
				"yogurt"
			]
		},
		"fish_cake": {
			"unicode": "1F365",
			"unicode_alternates": [],
			"name": "fish cake with swirl design",
			"shortname": ":fish_cake:",
			"category": "food_drink",
			"emoji_order": "2230",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fish",
				"cake",
				"kamboko",
				"swirl",
				"ramen",
				"noodles",
				"naruto"
			]
		},
		"fried_shrimp": {
			"unicode": "1F364",
			"unicode_alternates": [],
			"name": "fried shrimp",
			"shortname": ":fried_shrimp:",
			"category": "food_drink",
			"emoji_order": "2225",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"food",
				"shrimp",
				"fried",
				"seafood",
				"small",
				"fish"
			]
		},
		"sushi": {
			"unicode": "1F363",
			"unicode_alternates": [],
			"name": "sushi",
			"shortname": ":sushi:",
			"category": "food_drink",
			"emoji_order": "2220",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"japanese",
				"sushi",
				"fish",
				"raw",
				"nigiri",
				"japanese"
			]
		},
		"oden": {
			"unicode": "1F362",
			"unicode_alternates": [],
			"name": "oden",
			"shortname": ":oden:",
			"category": "food_drink",
			"emoji_order": "2215",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"japanese",
				"oden",
				"seafood",
				"casserole",
				"stew"
			]
		},
		"dango": {
			"unicode": "1F361",
			"unicode_alternates": [],
			"name": "dango",
			"shortname": ":dango:",
			"category": "food_drink",
			"emoji_order": "2210",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"dango",
				"japanese",
				"dumpling",
				"mochi",
				"balls",
				"skewer"
			]
		},
		"fries": {
			"unicode": "1F35F",
			"unicode_alternates": [],
			"name": "french fries",
			"shortname": ":fries:",
			"category": "food_drink",
			"emoji_order": "2205",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chips",
				"food",
				"fries",
				"french",
				"potato",
				"fry",
				"russet",
				"idaho"
			]
		},
		"bread": {
			"unicode": "1F35E",
			"unicode_alternates": [],
			"name": "bread",
			"shortname": ":bread:",
			"category": "food_drink",
			"emoji_order": "2200",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"breakfast",
				"food",
				"toast",
				"wheat",
				"bread",
				"loaf",
				"yeast"
			]
		},
		"spaghetti": {
			"unicode": "1F35D",
			"unicode_alternates": [],
			"name": "spaghetti",
			"shortname": ":spaghetti:",
			"category": "food_drink",
			"emoji_order": "2195",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"italian",
				"noodle",
				"spaghetti",
				"noodles",
				"tomato",
				"sauce",
				"italian"
			]
		},
		"ramen": {
			"unicode": "1F35C",
			"unicode_alternates": [],
			"name": "steaming bowl",
			"shortname": ":ramen:",
			"category": "food_drink",
			"emoji_order": "2190",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chipsticks",
				"food",
				"japanese",
				"noodle",
				"ramen",
				"noodles",
				"bowl",
				"steaming",
				"soup"
			]
		},
		"curry": {
			"unicode": "1F35B",
			"unicode_alternates": [],
			"name": "curry and rice",
			"shortname": ":curry:",
			"category": "food_drink",
			"emoji_order": "2185",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"hot",
				"indian",
				"spicy",
				"curry",
				"spice",
				"flavor",
				"food",
				"meal"
			]
		},
		"rice": {
			"unicode": "1F35A",
			"unicode_alternates": [],
			"name": "cooked rice",
			"shortname": ":rice:",
			"category": "food_drink",
			"emoji_order": "2180",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"rice",
				"white",
				"grain",
				"food",
				"bowl"
			]
		},
		"rice_ball": {
			"unicode": "1F359",
			"unicode_alternates": [],
			"name": "rice ball",
			"shortname": ":rice_ball:",
			"category": "food_drink",
			"emoji_order": "2175",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"japanese",
				"rice",
				"ball",
				"white",
				"nori",
				"seaweed",
				"japanese"
			]
		},
		"rice_cracker": {
			"unicode": "1F358",
			"unicode_alternates": [],
			"name": "rice cracker",
			"shortname": ":rice_cracker:",
			"category": "food_drink",
			"emoji_order": "2170",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"japanese",
				"rice",
				"cracker",
				"seaweed",
				"food",
				"japanese"
			]
		},
		"poultry_leg": {
			"unicode": "1F357",
			"unicode_alternates": [],
			"name": "poultry leg",
			"shortname": ":poultry_leg:",
			"category": "food_drink",
			"emoji_order": "2165",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"meat",
				"poultry",
				"leg",
				"chicken",
				"fried"
			]
		},
		"meat_on_bone": {
			"unicode": "1F356",
			"unicode_alternates": [],
			"name": "meat on bone",
			"shortname": ":meat_on_bone:",
			"category": "food_drink",
			"emoji_order": "2160",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"good",
				"meat",
				"bone",
				"animal",
				"cooked"
			]
		},
		"pizza": {
			"unicode": "1F355",
			"unicode_alternates": [],
			"name": "slice of pizza",
			"shortname": ":pizza:",
			"category": "food_drink",
			"emoji_order": "2155",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"party",
				"pizza",
				"pie",
				"new york",
				"italian",
				"italy",
				"slice",
				"peperoni"
			]
		},
		"hamburger": {
			"unicode": "1F354",
			"unicode_alternates": [],
			"name": "hamburger",
			"shortname": ":hamburger:",
			"category": "food_drink",
			"emoji_order": "2150",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"meat",
				"hamburger",
				"burger",
				"meat",
				"cow",
				"beef"
			]
		},
		"strawberry": {
			"unicode": "1F353",
			"unicode_alternates": [],
			"name": "strawberry",
			"shortname": ":strawberry:",
			"category": "food_drink",
			"emoji_order": "2145",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"nature",
				"strawberry",
				"short",
				"cake",
				"berry"
			]
		},
		"cherries": {
			"unicode": "1F352",
			"unicode_alternates": [],
			"name": "cherries",
			"shortname": ":cherries:",
			"category": "food_drink",
			"emoji_order": "2140",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"cherry",
				"cherries",
				"tree",
				"fruit",
				"pit"
			]
		},
		"peach": {
			"unicode": "1F351",
			"unicode_alternates": [],
			"name": "peach",
			"shortname": ":peach:",
			"category": "food_drink",
			"emoji_order": "2135",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"nature",
				"peach",
				"fruit",
				"juicy",
				"pit"
			]
		},
		"pear": {
			"unicode": "1F350",
			"unicode_alternates": [],
			"name": "pear",
			"shortname": ":pear:",
			"category": "food_drink",
			"emoji_order": "2130",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fruit",
				"nature",
				"pear",
				"fruit",
				"shape"
			]
		},
		"green_apple": {
			"unicode": "1F34F",
			"unicode_alternates": [],
			"name": "green apple",
			"shortname": ":green_apple:",
			"category": "food_drink",
			"emoji_order": "2125",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fruit",
				"nature",
				"apple",
				"fruit",
				"green",
				"pie",
				"granny",
				"smith",
				"core"
			]
		},
		"apple": {
			"unicode": "1F34E",
			"unicode_alternates": [],
			"name": "red apple",
			"shortname": ":apple:",
			"category": "food_drink",
			"emoji_order": "2120",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fruit",
				"mac",
				"apple",
				"fruit",
				"electronics",
				"red",
				"doctor",
				"teacher",
				"school",
				"core"
			]
		},
		"pineapple": {
			"unicode": "1F34D",
			"unicode_alternates": [],
			"name": "pineapple",
			"shortname": ":pineapple:",
			"category": "food_drink",
			"emoji_order": "2115",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"nature",
				"pineapple",
				"pina",
				"tropical",
				"flower"
			]
		},
		"banana": {
			"unicode": "1F34C",
			"unicode_alternates": [],
			"name": "banana",
			"shortname": ":banana:",
			"category": "food_drink",
			"emoji_order": "2110",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"banana",
				"peel",
				"bunch"
			]
		},
		"lemon": {
			"unicode": "1F34B",
			"unicode_alternates": [],
			"name": "lemon",
			"shortname": ":lemon:",
			"category": "food_drink",
			"emoji_order": "2105",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fruit",
				"nature",
				"lemon",
				"yellow",
				"citrus"
			]
		},
		"tangerine": {
			"unicode": "1F34A",
			"unicode_alternates": [],
			"name": "tangerine",
			"shortname": ":tangerine:",
			"category": "food_drink",
			"emoji_order": "2100",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"nature",
				"tangerine",
				"citrus",
				"orange"
			]
		},
		"watermelon": {
			"unicode": "1F349",
			"unicode_alternates": [],
			"name": "watermelon",
			"shortname": ":watermelon:",
			"category": "food_drink",
			"emoji_order": "2095",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"melon",
				"watermelon",
				"summer",
				"fruit",
				"large"
			]
		},
		"melon": {
			"unicode": "1F348",
			"unicode_alternates": [],
			"name": "melon",
			"shortname": ":melon:",
			"category": "food_drink",
			"emoji_order": "2090",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"nature",
				"melon",
				"cantaloupe",
				"honeydew"
			]
		},
		"grapes": {
			"unicode": "1F347",
			"unicode_alternates": [],
			"name": "grapes",
			"shortname": ":grapes:",
			"category": "food_drink",
			"emoji_order": "2085",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"grapes",
				"wine",
				"vinegar",
				"fruit",
				"cluster",
				"vine"
			]
		},
		"hot_pepper": {
			"unicode": "1F336",
			"unicode_alternates": [],
			"name": "hot pepper",
			"shortname": ":hot_pepper:",
			"category": "food_drink",
			"emoji_order": "2080",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"sweet_potato": {
			"unicode": "1F360",
			"unicode_alternates": [],
			"name": "roasted sweet potato",
			"shortname": ":sweet_potato:",
			"category": "food_drink",
			"emoji_order": "2075",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"nature",
				"sweet",
				"potato",
				"potassium",
				"roasted",
				"roast"
			]
		},
		"corn": {
			"unicode": "1F33D",
			"unicode_alternates": [],
			"name": "ear of maize",
			"shortname": ":corn:",
			"category": "food_drink",
			"emoji_order": "2070",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"plant",
				"vegetable",
				"corn",
				"maize",
				"food",
				"iowa",
				"kernel",
				"popcorn",
				"husk",
				"yellow",
				"stalk",
				"cob",
				"ear"
			]
		},
		"eggplant": {
			"unicode": "1F346",
			"unicode_alternates": [],
			"name": "aubergine",
			"shortname": ":eggplant:",
			"category": "food_drink",
			"emoji_order": "2065",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"aubergine",
				"food",
				"nature",
				"vegetable",
				"eggplant",
				"aubergine",
				"fruit",
				"purple",
				"penis"
			]
		},
		"tomato": {
			"unicode": "1F345",
			"unicode_alternates": [],
			"name": "tomato",
			"shortname": ":tomato:",
			"category": "food_drink",
			"emoji_order": "2060",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"fruit",
				"nature",
				"vegetable",
				"tomato",
				"fruit",
				"sauce",
				"italian"
			]
		},
		"roller_coaster": {
			"unicode": "1F3A2",
			"unicode_alternates": [],
			"name": "roller coaster",
			"shortname": ":roller_coaster:",
			"category": "activity",
			"emoji_order": "2055",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"carnival",
				"fun",
				"photo",
				"play",
				"playground",
				"roller",
				"coaster",
				"amusement",
				"park",
				"fair",
				"ride",
				"entertainment"
			]
		},
		"ferris_wheel": {
			"unicode": "1F3A1",
			"unicode_alternates": [],
			"name": "ferris wheel",
			"shortname": ":ferris_wheel:",
			"category": "activity",
			"emoji_order": "2050",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"carnival",
				"londoneye",
				"photo",
				"farris",
				"wheel",
				"amusement",
				"park",
				"fair",
				"ride",
				"entertainment"
			]
		},
		"carousel_horse": {
			"unicode": "1F3A0",
			"unicode_alternates": [],
			"name": "carousel horse",
			"shortname": ":carousel_horse:",
			"category": "activity",
			"emoji_order": "2045",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"carnival",
				"horse",
				"photo",
				"carousel",
				"horse",
				"amusement",
				"park",
				"ride",
				"entertainment",
				"park",
				"fair"
			]
		},
		"mahjong": {
			"unicode": "1F004",
			"unicode_alternates": [
				"1F004-FE0F"
			],
			"name": "mahjong tile red dragon",
			"shortname": ":mahjong:",
			"category": "activity",
			"emoji_order": "2040",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"chinese",
				"game",
				"kanji"
			]
		},
		"black_joker": {
			"unicode": "1F0CF",
			"unicode_alternates": [],
			"name": "playing card black joker",
			"shortname": ":black_joker:",
			"category": "activity",
			"emoji_order": "2035",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cards",
				"game",
				"poker"
			]
		},
		"flower_playing_cards": {
			"unicode": "1F3B4",
			"unicode_alternates": [],
			"name": "flower playing cards",
			"shortname": ":flower_playing_cards:",
			"category": "activity",
			"emoji_order": "2030",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"playing",
				"card",
				"flower",
				"game",
				"august",
				"moon",
				"special"
			]
		},
		"video_game": {
			"unicode": "1F3AE",
			"unicode_alternates": [],
			"name": "video game",
			"shortname": ":video_game:",
			"category": "activity",
			"emoji_order": "2025",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"PS4",
				"console",
				"controller",
				"play",
				"video",
				"game",
				"console",
				"controller",
				"nintendo",
				"xbox",
				"playstation"
			]
		},
		"game_die": {
			"unicode": "1F3B2",
			"unicode_alternates": [],
			"name": "game die",
			"shortname": ":game_die:",
			"category": "activity",
			"emoji_order": "2020",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"dice",
				"game",
				"die",
				"dice",
				"craps",
				"gamble",
				"play"
			]
		},
		"slot_machine": {
			"unicode": "1F3B0",
			"unicode_alternates": [],
			"name": "slot machine",
			"shortname": ":slot_machine:",
			"category": "activity",
			"emoji_order": "2015",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bet",
				"gamble",
				"vegas",
				"slot",
				"machine",
				"gamble",
				"one-armed bandit",
				"slots",
				"luck"
			]
		},
		"bowling": {
			"unicode": "1F3B3",
			"unicode_alternates": [],
			"name": "bowling",
			"shortname": ":bowling:",
			"category": "activity",
			"emoji_order": "2010",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fun",
				"play",
				"sports",
				"bowl",
				"bowling",
				"ball",
				"pin",
				"strike",
				"spare",
				"game"
			]
		},
		"8ball": {
			"unicode": "1F3B1",
			"unicode_alternates": [],
			"name": "billiards",
			"shortname": ":8ball:",
			"category": "activity",
			"emoji_order": "2005",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"pool",
				"billiards",
				"eight ball",
				"pool",
				"pocket ball",
				"cue"
			]
		},
		"dart": {
			"unicode": "1F3AF",
			"unicode_alternates": [],
			"name": "direct hit",
			"shortname": ":dart:",
			"category": "activity",
			"emoji_order": "2000",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bar",
				"game",
				"direct",
				"hit",
				"bullseye",
				"dart",
				"archery",
				"game",
				"fletching",
				"arrow",
				"sport"
			]
		},
		"art": {
			"unicode": "1F3A8",
			"unicode_alternates": [],
			"name": "artist palette",
			"shortname": ":art:",
			"category": "activity",
			"emoji_order": "1995",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"design",
				"draw",
				"paint",
				"artist",
				"palette",
				"art",
				"colors",
				"paint",
				"draw",
				"brush",
				"pastels",
				"oils"
			]
		},
		"tickets": {
			"unicode": "1F39F",
			"unicode_alternates": [],
			"name": "admission tickets",
			"shortname": ":tickets:",
			"category": "activity",
			"emoji_order": "1990",
			"aliases": [
				":admission_tickets:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"film_frames": {
			"unicode": "1F39E",
			"unicode_alternates": [],
			"name": "film frames",
			"shortname": ":film_frames:",
			"category": "activity",
			"emoji_order": "1985",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"clapper": {
			"unicode": "1F3AC",
			"unicode_alternates": [],
			"name": "clapper board",
			"shortname": ":clapper:",
			"category": "activity",
			"emoji_order": "1980",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"film",
				"movie",
				"record",
				"clapper",
				"board",
				"clapboard",
				"movie",
				"film",
				"take"
			]
		},
		"circus_tent": {
			"unicode": "1F3AA",
			"unicode_alternates": [],
			"name": "circus tent",
			"shortname": ":circus_tent:",
			"category": "activity",
			"emoji_order": "1975",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"carnival",
				"festival",
				"party",
				"circus",
				"tent",
				"event",
				"carnival",
				"big",
				"top",
				"canvas"
			]
		},
		"tophat": {
			"unicode": "1F3A9",
			"unicode_alternates": [],
			"name": "top hat",
			"shortname": ":tophat:",
			"category": "activity",
			"emoji_order": "1970",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"classy",
				"gentleman",
				"magic",
				"top",
				"hat",
				"cap",
				"beaver",
				"high",
				"tall",
				"stove",
				"pipe",
				"chimney",
				"topper",
				"london",
				"period piece",
				"magic",
				"magician"
			]
		},
		"ticket": {
			"unicode": "1F3AB",
			"unicode_alternates": [],
			"name": "ticket",
			"shortname": ":ticket:",
			"category": "activity",
			"emoji_order": "1965",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"concert",
				"event",
				"pass",
				"ticket",
				"show",
				"entertainment",
				"stub",
				"admission",
				"proof",
				"purchase"
			]
		},
		"performing_arts": {
			"unicode": "1F3AD",
			"unicode_alternates": [],
			"name": "performing arts",
			"shortname": ":performing_arts:",
			"category": "activity",
			"emoji_order": "1960",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"acting",
				"drama",
				"theater",
				"performing",
				"arts",
				"performance",
				"entertainment",
				"acting",
				"story",
				"mask",
				"masks"
			]
		},
		"microphone": {
			"unicode": "1F3A4",
			"unicode_alternates": [],
			"name": "microphone",
			"shortname": ":microphone:",
			"category": "activity",
			"emoji_order": "1955",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"PA",
				"music",
				"sound",
				"microphone",
				"mic",
				"audio",
				"sound",
				"voice",
				"karaoke"
			]
		},
		"headphones": {
			"unicode": "1F3A7",
			"unicode_alternates": [],
			"name": "headphone",
			"shortname": ":headphones:",
			"category": "activity",
			"emoji_order": "1950",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"gadgets",
				"music",
				"score",
				"headphone",
				"sound",
				"music",
				"ears",
				"beats",
				"buds",
				"audio",
				"listen"
			]
		},
		"musical_score": {
			"unicode": "1F3BC",
			"unicode_alternates": [],
			"name": "musical score",
			"shortname": ":musical_score:",
			"category": "activity",
			"emoji_order": "1945",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clef",
				"treble",
				"music",
				"musical",
				"score",
				"clef",
				"g-clef",
				"stave",
				"staff"
			]
		},
		"notes": {
			"unicode": "1F3B6",
			"unicode_alternates": [],
			"name": "multiple musical notes",
			"shortname": ":notes:",
			"category": "activity",
			"emoji_order": "1940",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"music",
				"score",
				"musical",
				"music",
				"notes",
				"music",
				"sound",
				"melody"
			]
		},
		"musical_note": {
			"unicode": "1F3B5",
			"unicode_alternates": [],
			"name": "musical note",
			"shortname": ":musical_note:",
			"category": "activity",
			"emoji_order": "1935",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"score",
				"musical",
				"music",
				"note",
				"music",
				"sound"
			]
		},
		"trumpet": {
			"unicode": "1F3BA",
			"unicode_alternates": [],
			"name": "trumpet",
			"shortname": ":trumpet:",
			"category": "activity",
			"emoji_order": "1930",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"brass",
				"music",
				"trumpet",
				"brass",
				"music",
				"instrument"
			]
		},
		"saxophone": {
			"unicode": "1F3B7",
			"unicode_alternates": [],
			"name": "saxophone",
			"shortname": ":saxophone:",
			"category": "activity",
			"emoji_order": "1925",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"instrument",
				"music",
				"saxophone",
				"sax",
				"music",
				"instrument",
				"woodwind"
			]
		},
		"violin": {
			"unicode": "1F3BB",
			"unicode_alternates": [],
			"name": "violin",
			"shortname": ":violin:",
			"category": "activity",
			"emoji_order": "1920",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"instrument",
				"music",
				"violin",
				"fiddle",
				"music",
				"instrument"
			]
		},
		"guitar": {
			"unicode": "1F3B8",
			"unicode_alternates": [],
			"name": "guitar",
			"shortname": ":guitar:",
			"category": "activity",
			"emoji_order": "1915",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"instrument",
				"music",
				"guitar",
				"string",
				"music",
				"instrument",
				"jam",
				"rock",
				"acoustic",
				"electric"
			]
		},
		"musical_keyboard": {
			"unicode": "1F3B9",
			"unicode_alternates": [],
			"name": "musical keyboard",
			"shortname": ":musical_keyboard:",
			"category": "activity",
			"emoji_order": "1910",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"instrument",
				"piano",
				"music",
				"keyboard",
				"piano",
				"organ",
				"instrument",
				"electric"
			]
		},
		"checkered_flag": {
			"unicode": "1F3C1",
			"unicode_alternates": [],
			"name": "chequered flag",
			"shortname": ":checkered_flag:",
			"category": "activity",
			"emoji_order": "1905",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"contest",
				"finishline",
				"gokart",
				"rase",
				"checkered",
				"chequred",
				"race",
				"flag",
				"finish",
				"complete",
				"end"
			]
		},
		"running_shirt_with_sash": {
			"unicode": "1F3BD",
			"unicode_alternates": [],
			"name": "running shirt with sash",
			"shortname": ":running_shirt_with_sash:",
			"category": "activity",
			"emoji_order": "1900",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"pageant",
				"play",
				"running",
				"run",
				"shirt",
				"cloths",
				"compete",
				"sports"
			]
		},
		"medal": {
			"unicode": "1F3C5",
			"unicode_alternates": [],
			"name": "sports medal",
			"shortname": ":medal:",
			"category": "activity",
			"emoji_order": "1895",
			"aliases": [
				":sports_medal:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"trophy": {
			"unicode": "1F3C6",
			"unicode_alternates": [],
			"name": "trophy",
			"shortname": ":trophy:",
			"category": "activity",
			"emoji_order": "1890",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"award",
				"ceremony",
				"contest",
				"ftw",
				"place",
				"win",
				"trophy",
				"first",
				"show",
				"place",
				"win",
				"reward",
				"achievement",
				"medal"
			]
		},
		"golf": {
			"unicode": "26F3",
			"unicode_alternates": [
				"26F3-FE0F"
			],
			"name": "flag in hole",
			"shortname": ":golf:",
			"category": "activity",
			"emoji_order": "1885",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"business",
				"sports"
			]
		},
		"rugby_football": {
			"unicode": "1F3C9",
			"unicode_alternates": [],
			"name": "rugby football",
			"shortname": ":rugby_football:",
			"category": "activity",
			"emoji_order": "1880",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sports",
				"rugby",
				"football",
				"ball",
				"sport",
				"team",
				"england"
			]
		},
		"tennis": {
			"unicode": "1F3BE",
			"unicode_alternates": [],
			"name": "tennis racquet and ball",
			"shortname": ":tennis:",
			"category": "activity",
			"emoji_order": "1875",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"balls",
				"green",
				"sports",
				"tennis",
				"racket",
				"racquet",
				"ball",
				"game",
				"net",
				"court",
				"love"
			]
		},
		"baseball": {
			"unicode": "26BE",
			"unicode_alternates": [
				"26BE-FE0F"
			],
			"name": "baseball",
			"shortname": ":baseball:",
			"category": "activity",
			"emoji_order": "1870",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"MLB",
				"balls",
				"sports"
			]
		},
		"football": {
			"unicode": "1F3C8",
			"unicode_alternates": [],
			"name": "american football",
			"shortname": ":football:",
			"category": "activity",
			"emoji_order": "1865",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"NFL",
				"balls",
				"sports",
				"football",
				"ball",
				"sport",
				"america",
				"american"
			]
		},
		"basketball": {
			"unicode": "1F3C0",
			"unicode_alternates": [],
			"name": "basketball and hoop",
			"shortname": ":basketball:",
			"category": "activity",
			"emoji_order": "1860",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"NBA",
				"balls",
				"sports",
				"basketball",
				"bball",
				"dribble",
				"hoop",
				"net",
				"swish",
				"rip city"
			]
		},
		"soccer": {
			"unicode": "26BD",
			"unicode_alternates": [
				"26BD-FE0F"
			],
			"name": "soccer ball",
			"shortname": ":soccer:",
			"category": "activity",
			"emoji_order": "1855",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"balls",
				"fifa",
				"football",
				"sports",
				"european",
				"football"
			]
		},
		"fishing_pole_and_fish": {
			"unicode": "1F3A3",
			"unicode_alternates": [],
			"name": "fishing pole and fish",
			"shortname": ":fishing_pole_and_fish:",
			"category": "activity",
			"emoji_order": "1850",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"hobby",
				"fish",
				"fishing",
				"pole"
			]
		},
		"tent": {
			"unicode": "26FA",
			"unicode_alternates": [
				"26FA-FE0F"
			],
			"name": "tent",
			"shortname": ":tent:",
			"category": "activity",
			"emoji_order": "1845",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"camp",
				"outdoors",
				"photo"
			]
		},
		"horse_racing": {
			"unicode": "1F3C7",
			"unicode_alternates": [],
			"name": "horse racing",
			"shortname": ":horse_racing:",
			"category": "activity",
			"emoji_order": "1840",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"betting",
				"competition",
				"horse",
				"race",
				"racing",
				"jockey",
				"triple crown"
			]
		},
		"race_car": {
			"unicode": "1F3CE",
			"unicode_alternates": [],
			"name": "racing car",
			"shortname": ":race_car:",
			"category": "activity",
			"emoji_order": "1835",
			"aliases": [
				":racing_car:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"motorcycle": {
			"unicode": "1F3CD",
			"unicode_alternates": [],
			"name": "racing motorcycle",
			"shortname": ":motorcycle:",
			"category": "activity",
			"emoji_order": "1830",
			"aliases": [
				":racing_motorcycle:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"mountain_bicyclist": {
			"unicode": "1F6B5",
			"unicode_alternates": [],
			"name": "mountain bicyclist",
			"shortname": ":mountain_bicyclist:",
			"category": "activity",
			"emoji_order": "1825",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"human",
				"sports",
				"transportation",
				"bicyclist",
				"mountain",
				"bike",
				"pedal",
				"bicycle",
				"transportation"
			]
		},
		"bicyclist": {
			"unicode": "1F6B4",
			"unicode_alternates": [],
			"name": "bicyclist",
			"shortname": ":bicyclist:",
			"category": "activity",
			"emoji_order": "1820",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bike",
				"exercise",
				"hipster",
				"sports",
				"bicyclist",
				"road",
				"bike",
				"pedal",
				"bicycle",
				"transportation"
			]
		},
		"snowman": {
			"unicode": "26C4",
			"unicode_alternates": [
				"26C4-FE0F"
			],
			"name": "snowman without snow",
			"shortname": ":snowman:",
			"category": "activity",
			"emoji_order": "1815",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"christmas",
				"cold",
				"season",
				"weather",
				"winter",
				"xmas"
			]
		},
		"ski": {
			"unicode": "1F3BF",
			"unicode_alternates": [],
			"name": "ski and ski boot",
			"shortname": ":ski:",
			"category": "activity",
			"emoji_order": "1810",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cold",
				"sports",
				"winter",
				"ski",
				"downhill",
				"cross-country",
				"poles",
				"snow",
				"winter",
				"mountain",
				"alpine",
				"powder",
				"slalom",
				"freestyle"
			]
		},
		"snowboarder": {
			"unicode": "1F3C2",
			"unicode_alternates": [],
			"name": "snowboarder",
			"shortname": ":snowboarder:",
			"category": "activity",
			"emoji_order": "1805",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sports",
				"winter",
				"snow",
				"boarding",
				"sports",
				"freestyle",
				"halfpipe",
				"board",
				"mountain",
				"alpine",
				"winter"
			]
		},
		"bath": {
			"unicode": "1F6C0",
			"unicode_alternates": [],
			"name": "bath",
			"shortname": ":bath:",
			"category": "activity",
			"emoji_order": "1800",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"clean",
				"shower",
				"bath",
				"tub",
				"basin",
				"wash",
				"bubble",
				"soak",
				"bathroom",
				"soap",
				"water",
				"clean",
				"shampoo",
				"lather",
				"water"
			]
		},
		"surfer": {
			"unicode": "1F3C4",
			"unicode_alternates": [],
			"name": "surfer",
			"shortname": ":surfer:",
			"category": "activity",
			"emoji_order": "1795",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ocean",
				"sea",
				"sports",
				"surfer",
				"surf",
				"wave",
				"ocean",
				"ride",
				"swell"
			]
		},
		"swimmer": {
			"unicode": "1F3CA",
			"unicode_alternates": [],
			"name": "swimmer",
			"shortname": ":swimmer:",
			"category": "activity",
			"emoji_order": "1790",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sports",
				"swimmer",
				"swim",
				"water",
				"pool",
				"laps",
				"freestyle",
				"butterfly",
				"breaststroke",
				"backstroke"
			]
		},
		"rowboat": {
			"unicode": "1F6A3",
			"unicode_alternates": [],
			"name": "rowboat",
			"shortname": ":rowboat:",
			"category": "activity",
			"emoji_order": "1785",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"hobby",
				"ship",
				"sports",
				"water",
				"boat",
				"row",
				"oar",
				"paddle"
			]
		},
		"golfer": {
			"unicode": "1F3CC",
			"unicode_alternates": [],
			"name": "golfer",
			"shortname": ":golfer:",
			"category": "activity",
			"emoji_order": "1780",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"lifter": {
			"unicode": "1F3CB",
			"unicode_alternates": [],
			"name": "weight lifter",
			"shortname": ":lifter:",
			"category": "activity",
			"emoji_order": "1775",
			"aliases": [
				":weight_lifter:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"dancer": {
			"unicode": "1F483",
			"unicode_alternates": [],
			"name": "dancer",
			"shortname": ":dancer:",
			"category": "activity",
			"emoji_order": "1770",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"fun",
				"girl",
				"woman",
				"dance",
				"dancer",
				"dress",
				"fancy",
				"boogy",
				"party",
				"celebrate",
				"ballet",
				"tango",
				"cha cha",
				"music"
			]
		},
		"walking": {
			"unicode": "1F6B6",
			"unicode_alternates": [],
			"name": "pedestrian",
			"shortname": ":walking:",
			"category": "activity",
			"emoji_order": "1765",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"human",
				"man",
				"walk",
				"pedestrian",
				"stroll",
				"stride",
				"foot",
				"feet"
			]
		},
		"runner": {
			"unicode": "1F3C3",
			"unicode_alternates": [],
			"name": "runner",
			"shortname": ":runner:",
			"category": "activity",
			"emoji_order": "1760",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"exercise",
				"man",
				"walking",
				"run",
				"runner",
				"jog",
				"exercise",
				"sprint",
				"race",
				"dash"
			]
		},
		"blue_heart": {
			"unicode": "1F499",
			"unicode_alternates": [],
			"name": "blue heart",
			"shortname": ":blue_heart:",
			"category": "celebration",
			"emoji_order": "1755",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines",
				"blue",
				"heart",
				"love",
				"stability",
				"truth",
				"loyalty",
				"trust"
			]
		},
		"green_heart": {
			"unicode": "1F49A",
			"unicode_alternates": [],
			"name": "green heart",
			"shortname": ":green_heart:",
			"category": "celebration",
			"emoji_order": "1750",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines",
				"green",
				"heart",
				"love",
				"nature",
				"rebirth",
				"reborn",
				"jealous",
				"clingy",
				"envious",
				"possessive"
			]
		},
		"yellow_heart": {
			"unicode": "1F49B",
			"unicode_alternates": [],
			"name": "yellow heart",
			"shortname": ":yellow_heart:",
			"category": "celebration",
			"emoji_order": "1745",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines",
				"yellow",
				"gold",
				"heart",
				"love",
				"friendship",
				"happy",
				"happiness",
				"trust",
				"compassionate",
				"respectful",
				"honest",
				"caring",
				"selfless"
			]
		},
		"purple_heart": {
			"unicode": "1F49C",
			"unicode_alternates": [],
			"name": "purple heart",
			"shortname": ":purple_heart:",
			"category": "celebration",
			"emoji_order": "1740",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines",
				"purple",
				"violet",
				"heart",
				"love",
				"sensitive",
				"understanding",
				"compassionate",
				"compassion",
				"duty",
				"honor",
				"royalty",
				"veteran",
				"sacrifice"
			]
		},
		"heart_decoration": {
			"unicode": "1F49F",
			"unicode_alternates": [],
			"name": "heart decoration",
			"shortname": ":heart_decoration:",
			"category": "celebration",
			"emoji_order": "1735",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"like",
				"love",
				"purple-square"
			]
		},
		"heart_tip": {
			"unicode": "1F394",
			"unicode_alternates": [],
			"name": "heart with tip on the left",
			"shortname": ":heart_tip:",
			"category": "celebration",
			"emoji_order": "1730",
			"aliases": [
				":heart_with_tip_on_the_left:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"gift_heart": {
			"unicode": "1F49D",
			"unicode_alternates": [],
			"name": "heart with ribbon",
			"shortname": ":gift_heart:",
			"category": "celebration",
			"emoji_order": "1725",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"love",
				"valentines"
			]
		},
		"cupid": {
			"unicode": "1F498",
			"unicode_alternates": [],
			"name": "heart with arrow",
			"shortname": ":cupid:",
			"category": "celebration",
			"emoji_order": "1720",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"heart",
				"like",
				"love",
				"valentines"
			]
		},
		"sparkling_heart": {
			"unicode": "1F496",
			"unicode_alternates": [],
			"name": "sparkling heart",
			"shortname": ":sparkling_heart:",
			"category": "celebration",
			"emoji_order": "1715",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines"
			]
		},
		"heartpulse": {
			"unicode": "1F497",
			"unicode_alternates": [],
			"name": "growing heart",
			"shortname": ":heartpulse:",
			"category": "celebration",
			"emoji_order": "1710",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines"
			]
		},
		"heartbeat": {
			"unicode": "1F493",
			"unicode_alternates": [],
			"name": "beating heart",
			"shortname": ":heartbeat:",
			"category": "celebration",
			"emoji_order": "1705",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines"
			]
		},
		"revolving_hearts": {
			"unicode": "1F49E",
			"unicode_alternates": [],
			"name": "revolving hearts",
			"shortname": ":revolving_hearts:",
			"category": "celebration",
			"emoji_order": "1700",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines",
				"heart",
				"hearts",
				"revolving",
				"moving",
				"circle",
				"multiple",
				"lovers"
			]
		},
		"two_hearts": {
			"unicode": "1F495",
			"unicode_alternates": [],
			"name": "two hearts",
			"shortname": ":two_hearts:",
			"category": "celebration",
			"emoji_order": "1695",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"like",
				"love",
				"valentines",
				"heart",
				"hearts",
				"two",
				"love",
				"emotion"
			]
		},
		"love_letter": {
			"unicode": "1F48C",
			"unicode_alternates": [],
			"name": "love letter",
			"shortname": ":love_letter:",
			"category": "celebration",
			"emoji_order": "1690",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"email",
				"envelope",
				"like",
				"valentines",
				"love",
				"letter",
				"kiss",
				"heart"
			]
		},
		"broken_heart": {
			"unicode": "1F494",
			"unicode_alternates": [],
			"name": "broken heart",
			"shortname": ":broken_heart:",
			"category": "celebration",
			"emoji_order": "1685",
			"aliases": [],
			"aliases_ascii": [
				"</3"
			],
			"keywords": [
				"sad",
				"sorry"
			]
		},
		"heart": {
			"unicode": "2764",
			"unicode_alternates": [
				"2764-FE0F"
			],
			"name": "heavy black heart",
			"shortname": ":heart:",
			"category": "celebration",
			"emoji_order": "1680",
			"aliases": [],
			"aliases_ascii": [
				"<3"
			],
			"keywords": [
				"like",
				"love",
				"red",
				"pink",
				"black",
				"heart",
				"love",
				"passion",
				"romance",
				"intense",
				"desire",
				"death",
				"evil",
				"cold",
				"valentines"
			]
		},
		"bouquet2": {
			"unicode": "1F395",
			"unicode_alternates": [],
			"name": "bouquet of flowers",
			"shortname": ":bouquet2:",
			"category": "celebration",
			"emoji_order": "1675",
			"aliases": [
				":bouquet_of_flowers:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"ring": {
			"unicode": "1F48D",
			"unicode_alternates": [],
			"name": "ring",
			"shortname": ":ring:",
			"category": "celebration",
			"emoji_order": "1670",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"marriage",
				"propose",
				"valentines",
				"wedding"
			]
		},
		"izakaya_lantern": {
			"unicode": "1F3EE",
			"unicode_alternates": [],
			"name": "izakaya lantern",
			"shortname": ":izakaya_lantern:",
			"category": "celebration",
			"emoji_order": "1665",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"light",
				"izakaya",
				"lantern",
				"stay",
				"drink",
				"alcohol",
				"bar",
				"sake",
				"restaurant"
			]
		},
		"crossed_flags": {
			"unicode": "1F38C",
			"unicode_alternates": [],
			"name": "crossed flags",
			"shortname": ":crossed_flags:",
			"category": "celebration",
			"emoji_order": "1660",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"japan"
			]
		},
		"wind_chime": {
			"unicode": "1F390",
			"unicode_alternates": [],
			"name": "wind chime",
			"shortname": ":wind_chime:",
			"category": "celebration",
			"emoji_order": "1655",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"ding",
				"nature",
				"wind",
				"chime",
				"bell",
				"fūrin",
				"instrument",
				"music",
				"spirits",
				"soothing",
				"protective",
				"spiritual",
				"sound"
			]
		},
		"flags": {
			"unicode": "1F38F",
			"unicode_alternates": [],
			"name": "carp streamer",
			"shortname": ":flags:",
			"category": "celebration",
			"emoji_order": "1650",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"banner",
				"carp",
				"fish",
				"japanese",
				"koinobori",
				"children",
				"kids",
				"boys",
				"celebration",
				"happiness",
				"carp",
				"streamers",
				"japanese",
				"holiday",
				"flags"
			]
		},
		"dolls": {
			"unicode": "1F38E",
			"unicode_alternates": [],
			"name": "japanese dolls",
			"shortname": ":dolls:",
			"category": "celebration",
			"emoji_order": "1645",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"japanese",
				"kimono",
				"toy",
				"dolls",
				"japan",
				"japanese",
				"day",
				"girls",
				"emperor",
				"empress",
				"pray",
				"blessing",
				"imperial",
				"family",
				"royal"
			]
		},
		"military_medal": {
			"unicode": "1F396",
			"unicode_alternates": [],
			"name": "military medal",
			"shortname": ":military_medal:",
			"category": "celebration",
			"emoji_order": "1640",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"reminder_ribbon": {
			"unicode": "1F397",
			"unicode_alternates": [],
			"name": "reminder ribbon",
			"shortname": ":reminder_ribbon:",
			"category": "celebration",
			"emoji_order": "1635",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"crown": {
			"unicode": "1F451",
			"unicode_alternates": [],
			"name": "crown",
			"shortname": ":crown:",
			"category": "celebration",
			"emoji_order": "1630",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"king",
				"kod",
				"leader",
				"royalty"
			]
		},
		"mortar_board": {
			"unicode": "1F393",
			"unicode_alternates": [],
			"name": "graduation cap",
			"shortname": ":mortar_board:",
			"category": "celebration",
			"emoji_order": "1625",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cap",
				"college",
				"degree",
				"graduation",
				"hat",
				"school",
				"university",
				"graduation",
				"cap",
				"mortarboard",
				"academic",
				"education",
				"ceremony",
				"square",
				"tassel"
			]
		},
		"boom": {
			"unicode": "1F4A5",
			"unicode_alternates": [],
			"name": "collision symbol",
			"shortname": ":boom:",
			"category": "celebration",
			"emoji_order": "1620",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bomb",
				"explode",
				"explosion",
				"boom",
				"bang",
				"collision",
				"fire",
				"emphasis",
				"wow",
				"bam"
			]
		},
		"sparkles": {
			"unicode": "2728",
			"unicode_alternates": [],
			"name": "sparkles",
			"shortname": ":sparkles:",
			"category": "celebration",
			"emoji_order": "1615",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cool",
				"shine",
				"shiny",
				"stars"
			]
		},
		"dizzy": {
			"unicode": "1F4AB",
			"unicode_alternates": [],
			"name": "dizzy symbol",
			"shortname": ":dizzy:",
			"category": "celebration",
			"emoji_order": "1610",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"shoot",
				"sparkle",
				"star",
				"dizzy",
				"drunk",
				"sick",
				"intoxicated",
				"squeans",
				"starburst",
				"star"
			]
		},
		"balloon": {
			"unicode": "1F388",
			"unicode_alternates": [],
			"name": "balloon",
			"shortname": ":balloon:",
			"category": "celebration",
			"emoji_order": "1605",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"celebration",
				"party",
				"balloon",
				"birthday",
				"celebration",
				"helium",
				"gas",
				"children",
				"float"
			]
		},
		"confetti_ball": {
			"unicode": "1F38A",
			"unicode_alternates": [],
			"name": "confetti ball",
			"shortname": ":confetti_ball:",
			"category": "celebration",
			"emoji_order": "1600",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"festival",
				"party",
				"party",
				"congratulations",
				"confetti",
				"ball",
				"celebrate",
				"win",
				"birthday",
				"new years",
				"wedding"
			]
		},
		"tada": {
			"unicode": "1F389",
			"unicode_alternates": [],
			"name": "party popper",
			"shortname": ":tada:",
			"category": "celebration",
			"emoji_order": "1595",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"contulations",
				"party",
				"party",
				"popper",
				"tada",
				"celebration",
				"victory",
				"announcement",
				"climax",
				"congratulations"
			]
		},
		"sparkler": {
			"unicode": "1F387",
			"unicode_alternates": [],
			"name": "firework sparkler",
			"shortname": ":sparkler:",
			"category": "celebration",
			"emoji_order": "1590",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"shine",
				"stars"
			]
		},
		"fireworks": {
			"unicode": "1F386",
			"unicode_alternates": [],
			"name": "fireworks",
			"shortname": ":fireworks:",
			"category": "celebration",
			"emoji_order": "1585",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"carnival",
				"congratulations",
				"festival",
				"photo",
				"fireworks",
				"independence",
				"celebration",
				"explosion",
				"july",
				"4th",
				"rocket",
				"sky",
				"idea",
				"excitement"
			]
		},
		"rice_scene": {
			"unicode": "1F391",
			"unicode_alternates": [],
			"name": "moon viewing ceremony",
			"shortname": ":rice_scene:",
			"category": "celebration",
			"emoji_order": "1580",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"photo",
				"moon",
				"viewing",
				"observing",
				"otsukimi",
				"tsukimi",
				"rice",
				"scene",
				"festival",
				"autumn"
			]
		},
		"bamboo": {
			"unicode": "1F38D",
			"unicode_alternates": [],
			"name": "pine decoration",
			"shortname": ":bamboo:",
			"category": "celebration",
			"emoji_order": "1575",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"vegetable",
				"pine",
				"bamboo",
				"decoration",
				"new",
				"years",
				"spirits",
				"harvest",
				"prosperity",
				"longevity",
				"fortune",
				"luck",
				"welcome",
				"farming",
				"agriculture"
			]
		},
		"tanabata_tree": {
			"unicode": "1F38B",
			"unicode_alternates": [],
			"name": "tanabata tree",
			"shortname": ":tanabata_tree:",
			"category": "celebration",
			"emoji_order": "1570",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"tanabata",
				"tree",
				"festival",
				"star",
				"wish",
				"holiday"
			]
		},
		"christmas_tree": {
			"unicode": "1F384",
			"unicode_alternates": [],
			"name": "christmas tree",
			"shortname": ":christmas_tree:",
			"category": "celebration",
			"emoji_order": "1565",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"celebration",
				"december",
				"festival",
				"vacation",
				"xmas",
				"christmas",
				"xmas",
				"santa",
				"holiday",
				"winter",
				"december",
				"santa",
				"evergreen",
				"ornaments",
				"jesus",
				"gifts",
				"presents"
			]
		},
		"jack_o_lantern": {
			"unicode": "1F383",
			"unicode_alternates": [],
			"name": "jack-o-lantern",
			"shortname": ":jack_o_lantern:",
			"category": "celebration",
			"emoji_order": "1560",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"halloween",
				"jack-o-lantern",
				"pumpkin",
				"halloween",
				"holiday",
				"carve",
				"autumn",
				"fall",
				"october",
				"saints",
				"costume",
				"spooky",
				"horror",
				"scary",
				"scared",
				"dead"
			]
		},
		"birthday": {
			"unicode": "1F382",
			"unicode_alternates": [],
			"name": "birthday cake",
			"shortname": ":birthday:",
			"category": "celebration",
			"emoji_order": "1555",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cake",
				"party",
				"birthday",
				"birth",
				"cake",
				"dessert",
				"wish",
				"celebrate"
			]
		},
		"gift": {
			"unicode": "1F381",
			"unicode_alternates": [],
			"name": "wrapped present",
			"shortname": ":gift:",
			"category": "celebration",
			"emoji_order": "1550",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"birthday",
				"christmas",
				"present",
				"xmas",
				"gift",
				"present",
				"wrap",
				"package",
				"birthday",
				"wedding"
			]
		},
		"ribbon": {
			"unicode": "1F380",
			"unicode_alternates": [],
			"name": "ribbon",
			"shortname": ":ribbon:",
			"category": "celebration",
			"emoji_order": "1545",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bowtie",
				"decoration",
				"girl",
				"pink",
				"ribbon",
				"lace",
				"wrap",
				"decorate"
			]
		},
		"wind_blowing_face": {
			"unicode": "1F32C",
			"unicode_alternates": [],
			"name": "wind blowing face",
			"shortname": ":wind_blowing_face:",
			"category": "nature",
			"emoji_order": "1540",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"sun_with_face": {
			"unicode": "1F31E",
			"unicode_alternates": [],
			"name": "sun with face",
			"shortname": ":sun_with_face:",
			"category": "nature",
			"emoji_order": "1535",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"morning",
				"sun",
				"anthropomorphic",
				"face",
				"sky"
			]
		},
		"last_quarter_moon_with_face": {
			"unicode": "1F31C",
			"unicode_alternates": [],
			"name": "last quarter moon with face",
			"shortname": ":last_quarter_moon_with_face:",
			"category": "nature",
			"emoji_order": "1530",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"last",
				"quarter",
				"anthropomorphic",
				"face",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"first_quarter_moon_with_face": {
			"unicode": "1F31B",
			"unicode_alternates": [],
			"name": "first quarter moon with face",
			"shortname": ":first_quarter_moon_with_face:",
			"category": "nature",
			"emoji_order": "1525",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"first",
				"quarter",
				"anthropomorphic",
				"face",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"full_moon_with_face": {
			"unicode": "1F31D",
			"unicode_alternates": [],
			"name": "full moon with face",
			"shortname": ":full_moon_with_face:",
			"category": "nature",
			"emoji_order": "1520",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"moon",
				"full",
				"anthropomorphic",
				"face",
				"sky",
				"night",
				"cheese",
				"phase",
				"spooky",
				"werewolves",
				"monsters"
			]
		},
		"new_moon_with_face": {
			"unicode": "1F31A",
			"unicode_alternates": [],
			"name": "new moon with face",
			"shortname": ":new_moon_with_face:",
			"category": "nature",
			"emoji_order": "1515",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"new",
				"anthropomorphic",
				"face",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"waning_crescent_moon": {
			"unicode": "1F318",
			"unicode_alternates": [],
			"name": "waning crescent moon symbol",
			"shortname": ":waning_crescent_moon:",
			"category": "nature",
			"emoji_order": "1510",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"crescent",
				"waning",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"last_quarter_moon": {
			"unicode": "1F317",
			"unicode_alternates": [],
			"name": "last quarter moon symbol",
			"shortname": ":last_quarter_moon:",
			"category": "nature",
			"emoji_order": "1505",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"last",
				"quarter",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"waning_gibbous_moon": {
			"unicode": "1F316",
			"unicode_alternates": [],
			"name": "waning gibbous moon symbol",
			"shortname": ":waning_gibbous_moon:",
			"category": "nature",
			"emoji_order": "1500",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"waning",
				"gibbous",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"full_moon": {
			"unicode": "1F315",
			"unicode_alternates": [],
			"name": "full moon symbol",
			"shortname": ":full_moon:",
			"category": "nature",
			"emoji_order": "1495",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"yellow",
				"moon",
				"full",
				"sky",
				"night",
				"cheese",
				"phase",
				"monster",
				"spooky",
				"werewolves",
				"twilight"
			]
		},
		"waxing_gibbous_moon": {
			"unicode": "1F314",
			"unicode_alternates": [],
			"name": "waxing gibbous moon symbol",
			"shortname": ":waxing_gibbous_moon:",
			"category": "nature",
			"emoji_order": "1490",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature"
			]
		},
		"first_quarter_moon": {
			"unicode": "1F313",
			"unicode_alternates": [],
			"name": "first quarter moon symbol",
			"shortname": ":first_quarter_moon:",
			"category": "nature",
			"emoji_order": "1485",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"quarter",
				"first",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"waxing_crescent_moon": {
			"unicode": "1F312",
			"unicode_alternates": [],
			"name": "waxing crescent moon symbol",
			"shortname": ":waxing_crescent_moon:",
			"category": "nature",
			"emoji_order": "1480",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"waxing",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"new_moon": {
			"unicode": "1F311",
			"unicode_alternates": [],
			"name": "new moon symbol",
			"shortname": ":new_moon:",
			"category": "nature",
			"emoji_order": "1475",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"moon",
				"new",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"earth_asia": {
			"unicode": "1F30F",
			"unicode_alternates": [],
			"name": "earth globe asia-australia",
			"shortname": ":earth_asia:",
			"category": "nature",
			"emoji_order": "1470",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"east",
				"globe",
				"international",
				"world",
				"earth",
				"globe",
				"space",
				"planet",
				"asia",
				"australia",
				"home"
			]
		},
		"earth_americas": {
			"unicode": "1F30E",
			"unicode_alternates": [],
			"name": "earth globe americas",
			"shortname": ":earth_americas:",
			"category": "nature",
			"emoji_order": "1465",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"USA",
				"globe",
				"international",
				"world",
				"earth",
				"globe",
				"space",
				"planet",
				"north",
				"south",
				"america",
				"americas",
				"home"
			]
		},
		"earth_africa": {
			"unicode": "1F30D",
			"unicode_alternates": [],
			"name": "earth globe europe-africa",
			"shortname": ":earth_africa:",
			"category": "nature",
			"emoji_order": "1460",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"globe",
				"international",
				"world",
				"earth",
				"globe",
				"space",
				"planet",
				"africa",
				"europe",
				"home"
			]
		},
		"globe_with_meridians": {
			"unicode": "1F310",
			"unicode_alternates": [],
			"name": "globe with meridians",
			"shortname": ":globe_with_meridians:",
			"category": "nature",
			"emoji_order": "1455",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"earth",
				"international",
				"world",
				"earth",
				"meridian",
				"globe",
				"space",
				"planet",
				"home"
			]
		},
		"japan": {
			"unicode": "1F5FE",
			"unicode_alternates": [],
			"name": "silhouette of japan",
			"shortname": ":japan:",
			"category": "nature",
			"emoji_order": "1450",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nation"
			]
		},
		"mount_fuji": {
			"unicode": "1F5FB",
			"unicode_alternates": [],
			"name": "mount fuji",
			"shortname": ":mount_fuji:",
			"category": "nature",
			"emoji_order": "1445",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"japan",
				"mountain",
				"nature",
				"photo"
			]
		},
		"milky_way": {
			"unicode": "1F30C",
			"unicode_alternates": [],
			"name": "milky way",
			"shortname": ":milky_way:",
			"category": "nature",
			"emoji_order": "1440",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"photo",
				"space",
				"milky",
				"galaxy",
				"star",
				"stars",
				"planets",
				"space",
				"sky"
			]
		},
		"volcano": {
			"unicode": "1F30B",
			"unicode_alternates": [],
			"name": "volcano",
			"shortname": ":volcano:",
			"category": "nature",
			"emoji_order": "1435",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"photo",
				"volcano",
				"lava",
				"magma",
				"hot",
				"explode"
			]
		},
		"ocean": {
			"unicode": "1F30A",
			"unicode_alternates": [],
			"name": "water wave",
			"shortname": ":ocean:",
			"category": "nature",
			"emoji_order": "1430",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sea",
				"water",
				"wave",
				"ocean",
				"wave",
				"surf",
				"beach",
				"tide"
			]
		},
		"rainbow": {
			"unicode": "1F308",
			"unicode_alternates": [],
			"name": "rainbow",
			"shortname": ":rainbow:",
			"category": "nature",
			"emoji_order": "1425",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"happy",
				"nature",
				"photo",
				"sky",
				"unicorn",
				"rainbow",
				"color",
				"pride",
				"diversity",
				"spectrum",
				"refract",
				"leprechaun",
				"gold"
			]
		},
		"sunrise": {
			"unicode": "1F305",
			"unicode_alternates": [],
			"name": "sunrise",
			"shortname": ":sunrise:",
			"category": "nature",
			"emoji_order": "1420",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"morning",
				"photo",
				"vacation",
				"view",
				"sunrise",
				"sun",
				"morning",
				"color",
				"sky"
			]
		},
		"sunrise_over_mountains": {
			"unicode": "1F304",
			"unicode_alternates": [],
			"name": "sunrise over mountains",
			"shortname": ":sunrise_over_mountains:",
			"category": "nature",
			"emoji_order": "1415",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"photo",
				"vacation",
				"view",
				"sunrise",
				"sun",
				"morning",
				"mountain",
				"rural",
				"color",
				"sky"
			]
		},
		"stars": {
			"unicode": "1F320",
			"unicode_alternates": [],
			"name": "shooting star",
			"shortname": ":stars:",
			"category": "nature",
			"emoji_order": "1410",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"photo",
				"shooting",
				"shoot",
				"star",
				"sky",
				"night",
				"comet",
				"meteoroid"
			]
		},
		"star": {
			"unicode": "2B50",
			"unicode_alternates": [
				"2B50-FE0F"
			],
			"name": "white medium star",
			"shortname": ":star:",
			"category": "nature",
			"emoji_order": "1405",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"yellow"
			]
		},
		"star2": {
			"unicode": "1F31F",
			"unicode_alternates": [],
			"name": "glowing star",
			"shortname": ":star2:",
			"category": "nature",
			"emoji_order": "1400",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"sparkle",
				"glow",
				"glowing",
				"star",
				"five",
				"points",
				"classic"
			]
		},
		"snowflake": {
			"unicode": "2744",
			"unicode_alternates": [
				"2744-FE0F"
			],
			"name": "snowflake",
			"shortname": ":snowflake:",
			"category": "nature",
			"emoji_order": "1395",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"christmas",
				"cold",
				"season",
				"weather",
				"winter",
				"xmas",
				"snowflake",
				"snow",
				"frozen",
				"droplet",
				"ice",
				"crystal",
				"cold",
				"chilly",
				"winter",
				"unique",
				"special",
				"below zero",
				"elsa"
			]
		},
		"dash": {
			"unicode": "1F4A8",
			"unicode_alternates": [],
			"name": "dash symbol",
			"shortname": ":dash:",
			"category": "nature",
			"emoji_order": "1390",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"air",
				"fast",
				"shoo",
				"wind"
			]
		},
		"fog": {
			"unicode": "1F32B",
			"unicode_alternates": [],
			"name": "fog",
			"shortname": ":fog:",
			"category": "nature",
			"emoji_order": "1385",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"umbrella": {
			"unicode": "2614",
			"unicode_alternates": [
				"2614-FE0F"
			],
			"name": "umbrella with rain drops",
			"shortname": ":umbrella:",
			"category": "nature",
			"emoji_order": "1380",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"rain",
				"weather"
			]
		},
		"sweat_drops": {
			"unicode": "1F4A6",
			"unicode_alternates": [],
			"name": "splashing sweat symbol",
			"shortname": ":sweat_drops:",
			"category": "nature",
			"emoji_order": "1375",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"water"
			]
		},
		"droplet": {
			"unicode": "1F4A7",
			"unicode_alternates": [],
			"name": "droplet",
			"shortname": ":droplet:",
			"category": "nature",
			"emoji_order": "1370",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"drip",
				"faucet",
				"water",
				"drop",
				"droplet",
				"h20",
				"water",
				"aqua",
				"tear",
				"sweat",
				"rain",
				"moisture",
				"wet",
				"moist",
				"spit"
			]
		},
		"cloud_tornado": {
			"unicode": "1F32A",
			"unicode_alternates": [],
			"name": "cloud with tornado",
			"shortname": ":cloud_tornado:",
			"category": "nature",
			"emoji_order": "1365",
			"aliases": [
				":cloud_with_tornado:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"cloud_lightning": {
			"unicode": "1F329",
			"unicode_alternates": [],
			"name": "cloud with lightning",
			"shortname": ":cloud_lightning:",
			"category": "nature",
			"emoji_order": "1360",
			"aliases": [
				":cloud_with_lightning:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"cloud_snow": {
			"unicode": "1F328",
			"unicode_alternates": [],
			"name": "cloud with snow",
			"shortname": ":cloud_snow:",
			"category": "nature",
			"emoji_order": "1355",
			"aliases": [
				":cloud_with_snow:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"cloud_rain": {
			"unicode": "1F327",
			"unicode_alternates": [],
			"name": "cloud with rain",
			"shortname": ":cloud_rain:",
			"category": "nature",
			"emoji_order": "1350",
			"aliases": [
				":cloud_with_rain:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"cloud": {
			"unicode": "2601",
			"unicode_alternates": [
				"2601-FE0F"
			],
			"name": "cloud",
			"shortname": ":cloud:",
			"category": "nature",
			"emoji_order": "1345",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"sky",
				"weather"
			]
		},
		"partly_sunny": {
			"unicode": "26C5",
			"unicode_alternates": [
				"26C5-FE0F"
			],
			"name": "sun behind cloud",
			"shortname": ":partly_sunny:",
			"category": "nature",
			"emoji_order": "1340",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cloud",
				"morning",
				"nature",
				"weather"
			]
		},
		"sunny": {
			"unicode": "2600",
			"unicode_alternates": [
				"2600-FE0F"
			],
			"name": "black sun with rays",
			"shortname": ":sunny:",
			"category": "nature",
			"emoji_order": "1335",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"brightness",
				"weather"
			]
		},
		"crescent_moon": {
			"unicode": "1F319",
			"unicode_alternates": [],
			"name": "crescent moon",
			"shortname": ":crescent_moon:",
			"category": "nature",
			"emoji_order": "1330",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"night",
				"moon",
				"crescent",
				"waxing",
				"sky",
				"night",
				"cheese",
				"phase"
			]
		},
		"fire": {
			"unicode": "1F525",
			"unicode_alternates": [],
			"name": "fire",
			"shortname": ":fire:",
			"category": "nature",
			"emoji_order": "1325",
			"aliases": [
				":flame:"
			],
			"aliases_ascii": [],
			"keywords": [
				"cook",
				"hot",
				"flame"
			]
		},
		"zap": {
			"unicode": "26A1",
			"unicode_alternates": [
				"26A1-FE0F"
			],
			"name": "high voltage sign",
			"shortname": ":zap:",
			"category": "nature",
			"emoji_order": "1320",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"lightning bolt",
				"thunder",
				"weather"
			]
		},
		"feet": {
			"unicode": "1F43E",
			"unicode_alternates": [],
			"name": "paw prints",
			"shortname": ":feet:",
			"category": "nature",
			"emoji_order": "1315",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cat",
				"dog",
				"footprints",
				"paw",
				"pet",
				"tracking",
				"paw",
				"prints",
				"mark",
				"imprints",
				"footsteps",
				"animal",
				"lion",
				"bear",
				"dog",
				"cat",
				"raccoon",
				"critter",
				"feet",
				"pawsteps"
			]
		},
		"spider_web": {
			"unicode": "1F578",
			"unicode_alternates": [],
			"name": "spider_web",
			"shortname": ":spider_web:",
			"category": "nature",
			"emoji_order": "1310",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"spider": {
			"unicode": "1F577",
			"unicode_alternates": [],
			"name": "spider",
			"shortname": ":spider:",
			"category": "nature",
			"emoji_order": "1305",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"beetle": {
			"unicode": "1F41E",
			"unicode_alternates": [],
			"name": "lady beetle",
			"shortname": ":beetle:",
			"category": "nature",
			"emoji_order": "1300",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"insect",
				"nature",
				"lady",
				"bug",
				"ladybug",
				"ladybird",
				"beetle",
				"cow",
				"lady cow",
				"insect",
				"endearment"
			]
		},
		"bee": {
			"unicode": "1F41D",
			"unicode_alternates": [],
			"name": "honeybee",
			"shortname": ":bee:",
			"category": "nature",
			"emoji_order": "1295",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"insect",
				"bee",
				"queen",
				"buzz",
				"flower",
				"pollen",
				"sting",
				"honey",
				"hive",
				"bumble",
				"pollination"
			]
		},
		"ant": {
			"unicode": "1F41C",
			"unicode_alternates": [],
			"name": "ant",
			"shortname": ":ant:",
			"category": "nature",
			"emoji_order": "1290",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"insect",
				"ant",
				"queen",
				"insect",
				"team"
			]
		},
		"bug": {
			"unicode": "1F41B",
			"unicode_alternates": [],
			"name": "bug",
			"shortname": ":bug:",
			"category": "nature",
			"emoji_order": "1285",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"insect",
				"nature",
				"bug",
				"insect",
				"virus",
				"error"
			]
		},
		"snail": {
			"unicode": "1F40C",
			"unicode_alternates": [],
			"name": "snail",
			"shortname": ":snail:",
			"category": "nature",
			"emoji_order": "1280",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"shell",
				"slow",
				"snail",
				"slow",
				"escargot",
				"french",
				"appetizer"
			]
		},
		"shell": {
			"unicode": "1F41A",
			"unicode_alternates": [],
			"name": "spiral shell",
			"shortname": ":shell:",
			"category": "nature",
			"emoji_order": "1275",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beach",
				"nature",
				"sea",
				"shell",
				"spiral",
				"beach",
				"sand",
				"crab",
				"nautilus"
			]
		},
		"blowfish": {
			"unicode": "1F421",
			"unicode_alternates": [],
			"name": "blowfish",
			"shortname": ":blowfish:",
			"category": "nature",
			"emoji_order": "1270",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"nature",
				"ocean",
				"sea",
				"blowfish",
				"pufferfish",
				"puffer",
				"ballonfish",
				"toadfish",
				"fugu fish",
				"sushi"
			]
		},
		"tropical_fish": {
			"unicode": "1F420",
			"unicode_alternates": [],
			"name": "tropical fish",
			"shortname": ":tropical_fish:",
			"category": "nature",
			"emoji_order": "1265",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"swim"
			]
		},
		"fish": {
			"unicode": "1F41F",
			"unicode_alternates": [],
			"name": "fish",
			"shortname": ":fish:",
			"category": "nature",
			"emoji_order": "1260",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"food",
				"nature"
			]
		},
		"octopus": {
			"unicode": "1F419",
			"unicode_alternates": [],
			"name": "octopus",
			"shortname": ":octopus:",
			"category": "nature",
			"emoji_order": "1255",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"creature",
				"ocean",
				"sea"
			]
		},
		"dolphin": {
			"unicode": "1F42C",
			"unicode_alternates": [],
			"name": "dolphin",
			"shortname": ":dolphin:",
			"category": "nature",
			"emoji_order": "1250",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"fins",
				"fish",
				"flipper",
				"nature",
				"ocean",
				"sea"
			]
		},
		"whale": {
			"unicode": "1F433",
			"unicode_alternates": [],
			"name": "spouting whale",
			"shortname": ":whale:",
			"category": "nature",
			"emoji_order": "1245",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"ocean",
				"sea"
			]
		},
		"whale2": {
			"unicode": "1F40B",
			"unicode_alternates": [],
			"name": "whale",
			"shortname": ":whale2:",
			"category": "nature",
			"emoji_order": "1240",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"ocean",
				"sea",
				"whale",
				"blubber",
				"bloated",
				"fat",
				"large",
				"massive"
			]
		},
		"frog": {
			"unicode": "1F438",
			"unicode_alternates": [],
			"name": "frog face",
			"shortname": ":frog:",
			"category": "nature",
			"emoji_order": "1235",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"turtle": {
			"unicode": "1F422",
			"unicode_alternates": [],
			"name": "turtle",
			"shortname": ":turtle:",
			"category": "nature",
			"emoji_order": "1230",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"slow",
				"turtle",
				"shell",
				"tortoise",
				"chelonian",
				"reptile",
				"slow",
				"snap",
				"steady"
			]
		},
		"snake": {
			"unicode": "1F40D",
			"unicode_alternates": [],
			"name": "snake",
			"shortname": ":snake:",
			"category": "nature",
			"emoji_order": "1225",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"evil"
			]
		},
		"crocodile": {
			"unicode": "1F40A",
			"unicode_alternates": [],
			"name": "crocodile",
			"shortname": ":crocodile:",
			"category": "nature",
			"emoji_order": "1220",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"crocodile",
				"croc",
				"alligator",
				"gator",
				"cranky"
			]
		},
		"dragon_face": {
			"unicode": "1F432",
			"unicode_alternates": [],
			"name": "dragon face",
			"shortname": ":dragon_face:",
			"category": "nature",
			"emoji_order": "1215",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"chinese",
				"green",
				"myth",
				"nature",
				"dragon",
				"head",
				"fire",
				"legendary",
				"myth"
			]
		},
		"dragon": {
			"unicode": "1F409",
			"unicode_alternates": [],
			"name": "dragon",
			"shortname": ":dragon:",
			"category": "nature",
			"emoji_order": "1210",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"chinese",
				"green",
				"myth",
				"nature",
				"dragon",
				"fire",
				"legendary",
				"myth"
			]
		},
		"monkey": {
			"unicode": "1F412",
			"unicode_alternates": [],
			"name": "monkey",
			"shortname": ":monkey:",
			"category": "nature",
			"emoji_order": "1205",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"monkey",
				"primate",
				"banana",
				"silly"
			]
		},
		"speak_no_evil": {
			"unicode": "1F64A",
			"unicode_alternates": [],
			"name": "speak-no-evil monkey",
			"shortname": ":speak_no_evil:",
			"category": "nature",
			"emoji_order": "1200",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"monkey",
				"monkey",
				"mouth",
				"talk",
				"say",
				"words",
				"verbal",
				"verbalize",
				"oral",
				"iwazaru"
			]
		},
		"hear_no_evil": {
			"unicode": "1F649",
			"unicode_alternates": [],
			"name": "hear-no-evil monkey",
			"shortname": ":hear_no_evil:",
			"category": "nature",
			"emoji_order": "1195",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"monkey",
				"monkey",
				"ears",
				"hear",
				"sound",
				"kikazaru"
			]
		},
		"see_no_evil": {
			"unicode": "1F648",
			"unicode_alternates": [],
			"name": "see-no-evil monkey",
			"shortname": ":see_no_evil:",
			"category": "nature",
			"emoji_order": "1190",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"monkey",
				"nature",
				"monkey",
				"see",
				"eyes",
				"vision",
				"sight",
				"mizaru"
			]
		},
		"monkey_face": {
			"unicode": "1F435",
			"unicode_alternates": [],
			"name": "monkey face",
			"shortname": ":monkey_face:",
			"category": "nature",
			"emoji_order": "1185",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"panda_face": {
			"unicode": "1F43C",
			"unicode_alternates": [],
			"name": "panda face",
			"shortname": ":panda_face:",
			"category": "nature",
			"emoji_order": "1180",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"panda",
				"bear",
				"face",
				"cub",
				"cute",
				"endearment",
				"friendship",
				"love",
				"bamboo",
				"china",
				"black",
				"white"
			]
		},
		"koala": {
			"unicode": "1F428",
			"unicode_alternates": [],
			"name": "koala",
			"shortname": ":koala:",
			"category": "nature",
			"emoji_order": "1175",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"bear": {
			"unicode": "1F43B",
			"unicode_alternates": [],
			"name": "bear face",
			"shortname": ":bear:",
			"category": "nature",
			"emoji_order": "1170",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"wolf": {
			"unicode": "1F43A",
			"unicode_alternates": [],
			"name": "wolf face",
			"shortname": ":wolf:",
			"category": "nature",
			"emoji_order": "1165",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"dog": {
			"unicode": "1F436",
			"unicode_alternates": [],
			"name": "dog face",
			"shortname": ":dog:",
			"category": "nature",
			"emoji_order": "1160",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"friend",
				"nature",
				"woof"
			]
		},
		"poodle": {
			"unicode": "1F429",
			"unicode_alternates": [],
			"name": "poodle",
			"shortname": ":poodle:",
			"category": "nature",
			"emoji_order": "1155",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"101",
				"animal",
				"dog",
				"nature",
				"poodle",
				"dog",
				"clip",
				"showy",
				"sophisticated",
				"vain"
			]
		},
		"dog2": {
			"unicode": "1F415",
			"unicode_alternates": [],
			"name": "dog",
			"shortname": ":dog2:",
			"category": "nature",
			"emoji_order": "1150",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"doge",
				"friend",
				"nature",
				"pet",
				"dog",
				"puppy",
				"pet",
				"friend",
				"woof",
				"bark",
				"fido"
			]
		},
		"pig_nose": {
			"unicode": "1F43D",
			"unicode_alternates": [],
			"name": "pig nose",
			"shortname": ":pig_nose:",
			"category": "nature",
			"emoji_order": "1145",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"oink",
				"pig",
				"nose",
				"snout",
				"food",
				"eat",
				"cute",
				"oink",
				"pink",
				"smell",
				"truffle"
			]
		},
		"pig": {
			"unicode": "1F437",
			"unicode_alternates": [],
			"name": "pig face",
			"shortname": ":pig:",
			"category": "nature",
			"emoji_order": "1140",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"oink"
			]
		},
		"pig2": {
			"unicode": "1F416",
			"unicode_alternates": [],
			"name": "pig",
			"shortname": ":pig2:",
			"category": "nature",
			"emoji_order": "1135",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"pig",
				"piggy",
				"pork",
				"ham",
				"hog",
				"bacon",
				"oink",
				"slop",
				"livestock",
				"greed",
				"greedy"
			]
		},
		"boar": {
			"unicode": "1F417",
			"unicode_alternates": [],
			"name": "boar",
			"shortname": ":boar:",
			"category": "nature",
			"emoji_order": "1130",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"camel": {
			"unicode": "1F42B",
			"unicode_alternates": [],
			"name": "bactrian camel",
			"shortname": ":camel:",
			"category": "nature",
			"emoji_order": "1125",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"hot",
				"nature",
				"bactrian",
				"camel",
				"hump",
				"desert",
				"central asia",
				"heat",
				"hot",
				"water",
				"hump day",
				"wednesday",
				"sex"
			]
		},
		"dromedary_camel": {
			"unicode": "1F42A",
			"unicode_alternates": [],
			"name": "dromedary camel",
			"shortname": ":dromedary_camel:",
			"category": "nature",
			"emoji_order": "1120",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"desert",
				"hot",
				"dromedary",
				"camel",
				"hump",
				"desert",
				"middle east",
				"heat",
				"hot",
				"water",
				"hump day",
				"wednesday",
				"sex"
			]
		},
		"elephant": {
			"unicode": "1F418",
			"unicode_alternates": [],
			"name": "elephant",
			"shortname": ":elephant:",
			"category": "nature",
			"emoji_order": "1115",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"nose",
				"thailand"
			]
		},
		"penguin": {
			"unicode": "1F427",
			"unicode_alternates": [],
			"name": "penguin",
			"shortname": ":penguin:",
			"category": "nature",
			"emoji_order": "1110",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"bird": {
			"unicode": "1F426",
			"unicode_alternates": [],
			"name": "bird",
			"shortname": ":bird:",
			"category": "nature",
			"emoji_order": "1105",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"fly",
				"nature",
				"tweet"
			]
		},
		"hatched_chick": {
			"unicode": "1F425",
			"unicode_alternates": [],
			"name": "front-facing baby chick",
			"shortname": ":hatched_chick:",
			"category": "nature",
			"emoji_order": "1100",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"baby",
				"chicken",
				"chick",
				"baby",
				"bird",
				"chicken",
				"young",
				"woman",
				"cute"
			]
		},
		"hatching_chick": {
			"unicode": "1F423",
			"unicode_alternates": [],
			"name": "hatching chick",
			"shortname": ":hatching_chick:",
			"category": "nature",
			"emoji_order": "1095",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"born",
				"chicken",
				"egg",
				"chick",
				"egg",
				"baby",
				"bird",
				"chicken",
				"young",
				"woman",
				"cute"
			]
		},
		"baby_chick": {
			"unicode": "1F424",
			"unicode_alternates": [],
			"name": "baby chick",
			"shortname": ":baby_chick:",
			"category": "nature",
			"emoji_order": "1090",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"chicken",
				"chick",
				"baby",
				"bird",
				"chicken",
				"young",
				"woman",
				"cute"
			]
		},
		"chicken": {
			"unicode": "1F414",
			"unicode_alternates": [],
			"name": "chicken",
			"shortname": ":chicken:",
			"category": "nature",
			"emoji_order": "1085",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cluck",
				"chicken",
				"hen",
				"poultry",
				"livestock"
			]
		},
		"rooster": {
			"unicode": "1F413",
			"unicode_alternates": [],
			"name": "rooster",
			"shortname": ":rooster:",
			"category": "nature",
			"emoji_order": "1080",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"chicken",
				"nature",
				"rooster",
				"cockerel",
				"cock",
				"male",
				"cock-a-doodle-doo",
				"crowing"
			]
		},
		"goat": {
			"unicode": "1F410",
			"unicode_alternates": [],
			"name": "goat",
			"shortname": ":goat:",
			"category": "nature",
			"emoji_order": "1075",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"goat",
				"sheep",
				"kid",
				"billy",
				"livestock"
			]
		},
		"sheep": {
			"unicode": "1F411",
			"unicode_alternates": [],
			"name": "sheep",
			"shortname": ":sheep:",
			"category": "nature",
			"emoji_order": "1070",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"sheep",
				"wool",
				"flock",
				"follower",
				"ewe",
				"female",
				"lamb"
			]
		},
		"ram": {
			"unicode": "1F40F",
			"unicode_alternates": [],
			"name": "ram",
			"shortname": ":ram:",
			"category": "nature",
			"emoji_order": "1065",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"sheep",
				"ram",
				"sheep",
				"male",
				"horn",
				"horns"
			]
		},
		"horse": {
			"unicode": "1F434",
			"unicode_alternates": [],
			"name": "horse face",
			"shortname": ":horse:",
			"category": "nature",
			"emoji_order": "1060",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"brown"
			]
		},
		"racehorse": {
			"unicode": "1F40E",
			"unicode_alternates": [],
			"name": "horse",
			"shortname": ":racehorse:",
			"category": "nature",
			"emoji_order": "1055",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"gamble",
				"horse",
				"powerful",
				"draft",
				"calvary",
				"cowboy",
				"cowgirl",
				"mounted",
				"race",
				"ride",
				"gallop",
				"trot",
				"colt",
				"filly",
				"mare",
				"stallion",
				"gelding",
				"yearling",
				"thoroughbred",
				"pony"
			]
		},
		"cat": {
			"unicode": "1F431",
			"unicode_alternates": [],
			"name": "cat face",
			"shortname": ":cat:",
			"category": "nature",
			"emoji_order": "1050",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"meow"
			]
		},
		"cat2": {
			"unicode": "1F408",
			"unicode_alternates": [],
			"name": "cat",
			"shortname": ":cat2:",
			"category": "nature",
			"emoji_order": "1045",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"meow",
				"pet",
				"cat",
				"kitten",
				"meow"
			]
		},
		"rabbit": {
			"unicode": "1F430",
			"unicode_alternates": [],
			"name": "rabbit face",
			"shortname": ":rabbit:",
			"category": "nature",
			"emoji_order": "1040",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"rabbit2": {
			"unicode": "1F407",
			"unicode_alternates": [],
			"name": "rabbit",
			"shortname": ":rabbit2:",
			"category": "nature",
			"emoji_order": "1035",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"rabbit",
				"bunny",
				"easter",
				"reproduction",
				"prolific"
			]
		},
		"chipmunk": {
			"unicode": "1F43F",
			"unicode_alternates": [],
			"name": "chipmunk",
			"shortname": ":chipmunk:",
			"category": "nature",
			"emoji_order": "1030",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"tiger": {
			"unicode": "1F42F",
			"unicode_alternates": [],
			"name": "tiger face",
			"shortname": ":tiger:",
			"category": "nature",
			"emoji_order": "1025",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal"
			]
		},
		"leopard": {
			"unicode": "1F406",
			"unicode_alternates": [],
			"name": "leopard",
			"shortname": ":leopard:",
			"category": "nature",
			"emoji_order": "1020",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"leopard",
				"cat",
				"spot",
				"spotted",
				"sexy"
			]
		},
		"tiger2": {
			"unicode": "1F405",
			"unicode_alternates": [],
			"name": "tiger",
			"shortname": ":tiger2:",
			"category": "nature",
			"emoji_order": "1015",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"tiger",
				"cat",
				"striped",
				"tony",
				"tigger",
				"hobs"
			]
		},
		"cow": {
			"unicode": "1F42E",
			"unicode_alternates": [],
			"name": "cow face",
			"shortname": ":cow:",
			"category": "nature",
			"emoji_order": "1010",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"beef",
				"ox"
			]
		},
		"cow2": {
			"unicode": "1F404",
			"unicode_alternates": [],
			"name": "cow",
			"shortname": ":cow2:",
			"category": "nature",
			"emoji_order": "1005",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"beef",
				"nature",
				"ox",
				"cow",
				"milk",
				"dairy",
				"beef",
				"bessie",
				"moo"
			]
		},
		"water_buffalo": {
			"unicode": "1F403",
			"unicode_alternates": [],
			"name": "water buffalo",
			"shortname": ":water_buffalo:",
			"category": "nature",
			"emoji_order": "1000",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cow",
				"nature",
				"ox",
				"water",
				"buffalo",
				"asia",
				"bovine",
				"milk",
				"dairy"
			]
		},
		"ox": {
			"unicode": "1F402",
			"unicode_alternates": [],
			"name": "ox",
			"shortname": ":ox:",
			"category": "nature",
			"emoji_order": "995",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"beef",
				"cow",
				"bull"
			]
		},
		"hamster": {
			"unicode": "1F439",
			"unicode_alternates": [],
			"name": "hamster face",
			"shortname": ":hamster:",
			"category": "nature",
			"emoji_order": "990",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"mouse": {
			"unicode": "1F42D",
			"unicode_alternates": [],
			"name": "mouse face",
			"shortname": ":mouse:",
			"category": "nature",
			"emoji_order": "985",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature"
			]
		},
		"mouse2": {
			"unicode": "1F401",
			"unicode_alternates": [],
			"name": "mouse",
			"shortname": ":mouse2:",
			"category": "nature",
			"emoji_order": "980",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"nature",
				"mouse",
				"mice",
				"rodent"
			]
		},
		"rat": {
			"unicode": "1F400",
			"unicode_alternates": [],
			"name": "rat",
			"shortname": ":rat:",
			"category": "nature",
			"emoji_order": "975",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"mouse",
				"rat",
				"rodent",
				"crooked",
				"snitch"
			]
		},
		"chestnut": {
			"unicode": "1F330",
			"unicode_alternates": [],
			"name": "chestnut",
			"shortname": ":chestnut:",
			"category": "nature",
			"emoji_order": "970",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"food",
				"squirrel",
				"chestnut",
				"roasted",
				"food",
				"tree"
			]
		},
		"mushroom": {
			"unicode": "1F344",
			"unicode_alternates": [],
			"name": "mushroom",
			"shortname": ":mushroom:",
			"category": "nature",
			"emoji_order": "965",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"plant",
				"vegetable",
				"mushroom",
				"fungi",
				"food",
				"fungus"
			]
		},
		"leaves": {
			"unicode": "1F343",
			"unicode_alternates": [],
			"name": "leaf fluttering in wind",
			"shortname": ":leaves:",
			"category": "nature",
			"emoji_order": "960",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"grass",
				"lawn",
				"nature",
				"plant",
				"tree",
				"vegetable",
				"leaves",
				"leaf",
				"wind",
				"float",
				"fluttering"
			]
		},
		"fallen_leaf": {
			"unicode": "1F342",
			"unicode_alternates": [],
			"name": "fallen leaf",
			"shortname": ":fallen_leaf:",
			"category": "nature",
			"emoji_order": "955",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"leaves",
				"nature",
				"plant",
				"vegetable",
				"leaf",
				"fall",
				"color",
				"deciduous",
				"autumn"
			]
		},
		"maple_leaf": {
			"unicode": "1F341",
			"unicode_alternates": [],
			"name": "maple leaf",
			"shortname": ":maple_leaf:",
			"category": "nature",
			"emoji_order": "950",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"canada",
				"nature",
				"plant",
				"vegetable",
				"maple",
				"leaf",
				"syrup",
				"canada",
				"tree"
			]
		},
		"four_leaf_clover": {
			"unicode": "1F340",
			"unicode_alternates": [],
			"name": "four leaf clover",
			"shortname": ":four_leaf_clover:",
			"category": "nature",
			"emoji_order": "945",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"lucky",
				"nature",
				"plant",
				"vegetable",
				"clover",
				"four",
				"leaf",
				"luck",
				"irish",
				"saint",
				"patrick",
				"green"
			]
		},
		"herb": {
			"unicode": "1F33F",
			"unicode_alternates": [],
			"name": "herb",
			"shortname": ":herb:",
			"category": "nature",
			"emoji_order": "940",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"grass",
				"lawn",
				"medicine",
				"plant",
				"vegetable",
				"weed",
				"herb",
				"spice",
				"plant",
				"cook",
				"cooking"
			]
		},
		"ear_of_rice": {
			"unicode": "1F33E",
			"unicode_alternates": [],
			"name": "ear of rice",
			"shortname": ":ear_of_rice:",
			"category": "nature",
			"emoji_order": "935",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"ear",
				"rice",
				"food",
				"plant",
				"seed"
			]
		},
		"bouquet": {
			"unicode": "1F490",
			"unicode_alternates": [],
			"name": "bouquet",
			"shortname": ":bouquet:",
			"category": "nature",
			"emoji_order": "930",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flowers",
				"nature"
			]
		},
		"blossom": {
			"unicode": "1F33C",
			"unicode_alternates": [],
			"name": "blossom",
			"shortname": ":blossom:",
			"category": "nature",
			"emoji_order": "925",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flowers",
				"nature",
				"yellow",
				"blossom",
				"daisy",
				"flower"
			]
		},
		"sunflower": {
			"unicode": "1F33B",
			"unicode_alternates": [],
			"name": "sunflower",
			"shortname": ":sunflower:",
			"category": "nature",
			"emoji_order": "920",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"sunflower",
				"sun",
				"flower",
				"seeds",
				"yellow"
			]
		},
		"hibiscus": {
			"unicode": "1F33A",
			"unicode_alternates": [],
			"name": "hibiscus",
			"shortname": ":hibiscus:",
			"category": "nature",
			"emoji_order": "915",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flowers",
				"plant",
				"vegetable",
				"hibiscus",
				"flower",
				"warm"
			]
		},
		"rose": {
			"unicode": "1F339",
			"unicode_alternates": [],
			"name": "rose",
			"shortname": ":rose:",
			"category": "nature",
			"emoji_order": "910",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flowers",
				"love",
				"valentines",
				"rose",
				"fragrant",
				"flower",
				"thorns",
				"love",
				"petals",
				"romance"
			]
		},
		"cherry_blossom": {
			"unicode": "1F338",
			"unicode_alternates": [],
			"name": "cherry blossom",
			"shortname": ":cherry_blossom:",
			"category": "nature",
			"emoji_order": "905",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flower",
				"nature",
				"plant",
				"cherry",
				"blossom",
				"tree",
				"flower"
			]
		},
		"tulip": {
			"unicode": "1F337",
			"unicode_alternates": [],
			"name": "tulip",
			"shortname": ":tulip:",
			"category": "nature",
			"emoji_order": "900",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"flowers",
				"nature",
				"plant",
				"tulip",
				"flower",
				"bulb",
				"spring",
				"easter"
			]
		},
		"cactus": {
			"unicode": "1F335",
			"unicode_alternates": [],
			"name": "cactus",
			"shortname": ":cactus:",
			"category": "nature",
			"emoji_order": "895",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"vegetable",
				"cactus",
				"desert",
				"drought",
				"spike",
				"poke"
			]
		},
		"palm_tree": {
			"unicode": "1F334",
			"unicode_alternates": [],
			"name": "palm tree",
			"shortname": ":palm_tree:",
			"category": "nature",
			"emoji_order": "890",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"vegetable",
				"palm",
				"tree",
				"coconuts",
				"fronds",
				"warm",
				"tropical"
			]
		},
		"deciduous_tree": {
			"unicode": "1F333",
			"unicode_alternates": [],
			"name": "deciduous tree",
			"shortname": ":deciduous_tree:",
			"category": "nature",
			"emoji_order": "885",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"deciduous",
				"tree",
				"leaves",
				"fall",
				"color"
			]
		},
		"evergreen_tree": {
			"unicode": "1F332",
			"unicode_alternates": [],
			"name": "evergreen tree",
			"shortname": ":evergreen_tree:",
			"category": "nature",
			"emoji_order": "880",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"nature",
				"plant",
				"evergreen",
				"tree",
				"needles",
				"christmas"
			]
		},
		"seedling": {
			"unicode": "1F331",
			"unicode_alternates": [],
			"name": "seedling",
			"shortname": ":seedling:",
			"category": "nature",
			"emoji_order": "875",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"grass",
				"lawn",
				"nature",
				"plant",
				"seedling",
				"plant",
				"new",
				"start",
				"grow"
			]
		},
		"pray": {
			"unicode": "1F64F",
			"unicode_alternates": [],
			"name": "person with folded hands",
			"shortname": ":pray:",
			"category": "people",
			"emoji_order": "870",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"highfive",
				"hope",
				"namaste",
				"please",
				"wish",
				"pray",
				"high five",
				"hands",
				"sorrow",
				"regret",
				"sorry"
			]
		},
		"finger_pointing_down2": {
			"unicode": "1F59F",
			"unicode_alternates": [],
			"name": "sideways white down pointing index",
			"shortname": ":finger_pointing_down2:",
			"category": "people",
			"emoji_order": "865",
			"aliases": [
				":sideways_white_down_pointing_index:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"finger_pointing_up": {
			"unicode": "1F59E",
			"unicode_alternates": [],
			"name": "sideways white up pointing index",
			"shortname": ":finger_pointing_up:",
			"category": "people",
			"emoji_order": "860",
			"aliases": [
				":sideways_white_up_pointing_index:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"finger_pointing_right": {
			"unicode": "1F599",
			"unicode_alternates": [],
			"name": "sideways white right pointing index",
			"shortname": ":finger_pointing_right:",
			"category": "people",
			"emoji_order": "855",
			"aliases": [
				":sideways_white_right_pointing_index:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"finger_pointing_left": {
			"unicode": "1F598",
			"unicode_alternates": [],
			"name": "sideways white left pointing index",
			"shortname": ":finger_pointing_left:",
			"category": "people",
			"emoji_order": "850",
			"aliases": [
				":sideways_white_left_pointing_index:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"finger_pointing_down": {
			"unicode": "1F597",
			"unicode_alternates": [],
			"name": "white down pointing left hand index",
			"shortname": ":finger_pointing_down:",
			"category": "people",
			"emoji_order": "845",
			"aliases": [
				":white_down_pointing_left_hand_index:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"vulcan": {
			"unicode": "1F596",
			"unicode_alternates": [],
			"name": "raised hand with part between middle and ring fingers",
			"shortname": ":vulcan:",
			"category": "people",
			"emoji_order": "840",
			"aliases": [
				":raised_hand_with_part_between_middle_and_ring_fingers:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"middle_finger": {
			"unicode": "1F595",
			"unicode_alternates": [],
			"name": "reversed hand with middle finger extended",
			"shortname": ":middle_finger:",
			"category": "people",
			"emoji_order": "835",
			"aliases": [
				":reversed_hand_with_middle_finger_extended:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"hand_victory": {
			"unicode": "1F594",
			"unicode_alternates": [],
			"name": "reversed victory hand",
			"shortname": ":hand_victory:",
			"category": "people",
			"emoji_order": "830",
			"aliases": [
				":reversed_victory_hand:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"thumbs_down_reverse": {
			"unicode": "1F593",
			"unicode_alternates": [],
			"name": "reversed thumbs down sign",
			"shortname": ":thumbs_down_reverse:",
			"category": "people",
			"emoji_order": "825",
			"aliases": [
				":reversed_thumbs_down_sign:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"thumbs_up_reverse": {
			"unicode": "1F592",
			"unicode_alternates": [],
			"name": "reversed thumbs up sign",
			"shortname": ":thumbs_up_reverse:",
			"category": "people",
			"emoji_order": "820",
			"aliases": [
				":reversed_thumbs_up_sign:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"hand_splayed_reverse": {
			"unicode": "1F591",
			"unicode_alternates": [],
			"name": "reversed raised hand with fingers splayed",
			"shortname": ":hand_splayed_reverse:",
			"category": "people",
			"emoji_order": "815",
			"aliases": [
				":reversed_raised_hand_with_fingers_splayed:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"hand_splayed": {
			"unicode": "1F590",
			"unicode_alternates": [],
			"name": "raised hand with fingers splayed",
			"shortname": ":hand_splayed:",
			"category": "people",
			"emoji_order": "810",
			"aliases": [
				":raised_hand_with_fingers_splayed:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"turned_ok_hand": {
			"unicode": "1F58F",
			"unicode_alternates": [],
			"name": "turned ok hand sign",
			"shortname": ":turned_ok_hand:",
			"category": "people",
			"emoji_order": "805",
			"aliases": [
				":turned_ok_hand_sign:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"writing_hand": {
			"unicode": "1F58E",
			"unicode_alternates": [],
			"name": "left writing hand",
			"shortname": ":writing_hand:",
			"category": "people",
			"emoji_order": "800",
			"aliases": [
				":left_writing_hand:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"open_hands": {
			"unicode": "1F450",
			"unicode_alternates": [],
			"name": "open hands sign",
			"shortname": ":open_hands:",
			"category": "people",
			"emoji_order": "795",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"butterfly",
				"fingers"
			]
		},
		"muscle": {
			"unicode": "1F4AA",
			"unicode_alternates": [],
			"name": "flexed biceps",
			"shortname": ":muscle:",
			"category": "people",
			"emoji_order": "790",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arm",
				"flex",
				"hand",
				"strong",
				"muscle",
				"bicep"
			]
		},
		"raised_hand": {
			"unicode": "270B",
			"unicode_alternates": [],
			"name": "raised hand",
			"shortname": ":raised_hand:",
			"category": "people",
			"emoji_order": "785",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman"
			]
		},
		"fist": {
			"unicode": "270A",
			"unicode_alternates": [],
			"name": "raised fist",
			"shortname": ":fist:",
			"category": "people",
			"emoji_order": "780",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fingers",
				"grasp",
				"hand"
			]
		},
		"punch": {
			"unicode": "1F44A",
			"unicode_alternates": [],
			"name": "fisted hand sign",
			"shortname": ":punch:",
			"category": "people",
			"emoji_order": "775",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fist",
				"hand"
			]
		},
		"v": {
			"unicode": "270C",
			"unicode_alternates": [
				"270C-FE0F"
			],
			"name": "victory hand",
			"shortname": ":v:",
			"category": "people",
			"emoji_order": "770",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fingers",
				"hand",
				"ohyeah",
				"peace",
				"two",
				"victory"
			]
		},
		"ok_hand": {
			"unicode": "1F44C",
			"unicode_alternates": [],
			"name": "ok hand sign",
			"shortname": ":ok_hand:",
			"category": "people",
			"emoji_order": "765",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"fingers",
				"limbs",
				"perfect",
				"okay",
				"ok",
				"smoke",
				"smoking",
				"marijuana",
				"joint",
				"pot",
				"420"
			]
		},
		"point_right": {
			"unicode": "1F449",
			"unicode_alternates": [],
			"name": "white right pointing backhand index",
			"shortname": ":point_right:",
			"category": "people",
			"emoji_order": "760",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"direction",
				"fingers",
				"hand"
			]
		},
		"point_left": {
			"unicode": "1F448",
			"unicode_alternates": [],
			"name": "white left pointing backhand index",
			"shortname": ":point_left:",
			"category": "people",
			"emoji_order": "755",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"direction",
				"fingers",
				"hand"
			]
		},
		"point_down": {
			"unicode": "1F447",
			"unicode_alternates": [],
			"name": "white down pointing backhand index",
			"shortname": ":point_down:",
			"category": "people",
			"emoji_order": "750",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"direction",
				"fingers",
				"hand"
			]
		},
		"point_up_2": {
			"unicode": "1F446",
			"unicode_alternates": [],
			"name": "white up pointing backhand index",
			"shortname": ":point_up_2:",
			"category": "people",
			"emoji_order": "745",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"direction",
				"fingers",
				"hand"
			]
		},
		"point_up": {
			"unicode": "261D",
			"unicode_alternates": [
				"261D-FE0F"
			],
			"name": "white up pointing index",
			"shortname": ":point_up:",
			"category": "people",
			"emoji_order": "740",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"direction",
				"fingers",
				"hand"
			]
		},
		"thumbsdown": {
			"unicode": "1F44E",
			"unicode_alternates": [],
			"name": "thumbs down sign",
			"shortname": ":thumbsdown:",
			"category": "people",
			"emoji_order": "735",
			"aliases": [
				":-1:"
			],
			"aliases_ascii": [],
			"keywords": [
				"hand",
				"no"
			]
		},
		"thumbsup": {
			"unicode": "1F44D",
			"unicode_alternates": [],
			"name": "thumbs up sign",
			"shortname": ":thumbsup:",
			"category": "people",
			"emoji_order": "730",
			"aliases": [
				":+1:"
			],
			"aliases_ascii": [],
			"keywords": [
				"cool",
				"hand",
				"like",
				"yes"
			]
		},
		"wave": {
			"unicode": "1F44B",
			"unicode_alternates": [],
			"name": "waving hand sign",
			"shortname": ":wave:",
			"category": "people",
			"emoji_order": "725",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"farewell",
				"gesture",
				"goodbye",
				"hands",
				"solong"
			]
		},
		"nail_care": {
			"unicode": "1F485",
			"unicode_alternates": [],
			"name": "nail polish",
			"shortname": ":nail_care:",
			"category": "people",
			"emoji_order": "720",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"beauty",
				"manicure"
			]
		},
		"tongue": {
			"unicode": "1F445",
			"unicode_alternates": [],
			"name": "tongue",
			"shortname": ":tongue:",
			"category": "people",
			"emoji_order": "715",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"mouth",
				"playful",
				"tongue",
				"mouth",
				"taste",
				"buds",
				"food",
				"silly",
				"playful",
				"tease",
				"kiss",
				"french kiss",
				"lick",
				"tasty",
				"playfulness",
				"silliness",
				"intimacy"
			]
		},
		"kiss": {
			"unicode": "1F48B",
			"unicode_alternates": [],
			"name": "kiss mark",
			"shortname": ":kiss:",
			"category": "people",
			"emoji_order": "710",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"face",
				"like",
				"lips",
				"love",
				"valentines"
			]
		},
		"lips2": {
			"unicode": "1F5E2",
			"unicode_alternates": [],
			"name": "lips",
			"shortname": ":lips2:",
			"category": "people",
			"emoji_order": "705",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"lips": {
			"unicode": "1F444",
			"unicode_alternates": [],
			"name": "mouth",
			"shortname": ":lips:",
			"category": "people",
			"emoji_order": "700",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"kiss",
				"mouth"
			]
		},
		"nose": {
			"unicode": "1F443",
			"unicode_alternates": [],
			"name": "nose",
			"shortname": ":nose:",
			"category": "people",
			"emoji_order": "695",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"smell",
				"sniff"
			]
		},
		"eyes": {
			"unicode": "1F440",
			"unicode_alternates": [],
			"name": "eyes",
			"shortname": ":eyes:",
			"category": "people",
			"emoji_order": "690",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"look",
				"peek",
				"stalk",
				"watch"
			]
		},
		"eye": {
			"unicode": "1F441",
			"unicode_alternates": [],
			"name": "eye",
			"shortname": ":eye:",
			"category": "people",
			"emoji_order": "685",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"ear": {
			"unicode": "1F442",
			"unicode_alternates": [],
			"name": "ear",
			"shortname": ":ear:",
			"category": "people",
			"emoji_order": "680",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"hear",
				"listen",
				"sound"
			]
		},
		"clap": {
			"unicode": "1F44F",
			"unicode_alternates": [],
			"name": "clapping hands sign",
			"shortname": ":clap:",
			"category": "people",
			"emoji_order": "675",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"applause",
				"congrats",
				"hands",
				"praise",
				"clapping",
				"appreciation",
				"approval",
				"sound",
				"encouragement",
				"enthusiasm"
			]
		},
		"raised_hands": {
			"unicode": "1F64C",
			"unicode_alternates": [],
			"name": "person raising both hands in celebration",
			"shortname": ":raised_hands:",
			"category": "people",
			"emoji_order": "670",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"gesture",
				"hooray",
				"winning",
				"woot",
				"yay",
				"banzai"
			]
		},
		"kiss_mm": {
			"unicode": "1F468-2764-1F48B-1F468",
			"unicode_alternates": [
				"1F468-200D-2764-FE0F-200D-1F48B-200D-1F468"
			],
			"name": "kiss(man,man)",
			"shortname": ":kiss_mm:",
			"category": "people",
			"emoji_order": "665",
			"aliases": [
				":couplekiss_mm:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"kiss_ww": {
			"unicode": "1F469-2764-1F48B-1F469",
			"unicode_alternates": [
				"1F469-200D-2764-FE0F-200D-1F48B-200D-1F469"
			],
			"name": "kiss(woman,woman)",
			"shortname": ":kiss_ww:",
			"category": "people",
			"emoji_order": "660",
			"aliases": [
				":couplekiss_ww:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"couplekiss": {
			"unicode": "1F48F",
			"unicode_alternates": [],
			"name": "kiss",
			"shortname": ":couplekiss:",
			"category": "people",
			"emoji_order": "655",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"dating",
				"like",
				"love",
				"marriage",
				"valentines"
			]
		},
		"couple_mm": {
			"unicode": "1F468-2764-1F468",
			"unicode_alternates": [
				"1F468-200D-2764-FE0F-200D-1F468"
			],
			"name": "couple(man,man)",
			"shortname": ":couple_mm:",
			"category": "people",
			"emoji_order": "650",
			"aliases": [
				":couple_with_heart_mm:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"couple_ww": {
			"unicode": "1F469-2764-1F469",
			"unicode_alternates": [
				"1F469-200D-2764-FE0F-200D-1F469"
			],
			"name": "couple(woman,woman)",
			"shortname": ":couple_ww:",
			"category": "people",
			"emoji_order": "645",
			"aliases": [
				":couple_with_heart_ww:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"couple_with_heart": {
			"unicode": "1F491",
			"unicode_alternates": [],
			"name": "couple with heart",
			"shortname": ":couple_with_heart:",
			"category": "people",
			"emoji_order": "640",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"dating",
				"human",
				"like",
				"love",
				"marriage",
				"valentines"
			]
		},
		"haircut": {
			"unicode": "1F487",
			"unicode_alternates": [],
			"name": "haircut",
			"shortname": ":haircut:",
			"category": "people",
			"emoji_order": "635",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman"
			]
		},
		"massage": {
			"unicode": "1F486",
			"unicode_alternates": [],
			"name": "face massage",
			"shortname": ":massage:",
			"category": "people",
			"emoji_order": "630",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman"
			]
		},
		"person_frowning": {
			"unicode": "1F64D",
			"unicode_alternates": [],
			"name": "person frowning",
			"shortname": ":person_frowning:",
			"category": "people",
			"emoji_order": "625",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman",
				"dejected",
				"rejected",
				"sad",
				"frown"
			]
		},
		"person_with_pouting_face": {
			"unicode": "1F64E",
			"unicode_alternates": [],
			"name": "person with pouting face",
			"shortname": ":person_with_pouting_face:",
			"category": "people",
			"emoji_order": "620",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman",
				"pout",
				"sexy",
				"cute",
				"annoyed"
			]
		},
		"raising_hand": {
			"unicode": "1F64B",
			"unicode_alternates": [],
			"name": "happy person raising one hand",
			"shortname": ":raising_hand:",
			"category": "people",
			"emoji_order": "615",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman",
				"hand",
				"raise",
				"notice",
				"attention",
				"answer"
			]
		},
		"ok_woman": {
			"unicode": "1F646",
			"unicode_alternates": [],
			"name": "face with ok gesture",
			"shortname": ":ok_woman:",
			"category": "people",
			"emoji_order": "610",
			"aliases": [],
			"aliases_ascii": [
				"*\\0/*",
				"\\0/",
				"*\\O/*",
				"\\O/"
			],
			"keywords": [
				"female",
				"girl",
				"human",
				"pink",
				"women",
				"yes",
				"ok",
				"okay",
				"accept"
			]
		},
		"no_good": {
			"unicode": "1F645",
			"unicode_alternates": [],
			"name": "face with no good gesture",
			"shortname": ":no_good:",
			"category": "people",
			"emoji_order": "605",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"woman",
				"no",
				"stop",
				"nope",
				"don&#039;t",
				"not"
			]
		},
		"information_desk_person": {
			"unicode": "1F481",
			"unicode_alternates": [],
			"name": "information desk person",
			"shortname": ":information_desk_person:",
			"category": "people",
			"emoji_order": "600",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"human",
				"woman",
				"information",
				"help",
				"question",
				"answer",
				"sassy",
				"unimpressed",
				"attitude",
				"snarky"
			]
		},
		"bow": {
			"unicode": "1F647",
			"unicode_alternates": [],
			"name": "person bowing deeply",
			"shortname": ":bow:",
			"category": "people",
			"emoji_order": "595",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"boy",
				"male",
				"man",
				"sorry",
				"bow",
				"respect",
				"curtsy",
				"bend"
			]
		},
		"space_invader": {
			"unicode": "1F47E",
			"unicode_alternates": [],
			"name": "alien monster",
			"shortname": ":space_invader:",
			"category": "people",
			"emoji_order": "590",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arcade",
				"game"
			]
		},
		"alien": {
			"unicode": "1F47D",
			"unicode_alternates": [],
			"name": "extraterrestrial alien",
			"shortname": ":alien:",
			"category": "people",
			"emoji_order": "585",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"UFO",
				"paul",
				"alien",
				"ufo"
			]
		},
		"skull": {
			"unicode": "1F480",
			"unicode_alternates": [],
			"name": "skull",
			"shortname": ":skull:",
			"category": "people",
			"emoji_order": "580",
			"aliases": [
				":skeleton:"
			],
			"aliases_ascii": [],
			"keywords": [
				"dead",
				"skeleton",
				"dying"
			]
		},
		"poop": {
			"unicode": "1F4A9",
			"unicode_alternates": [],
			"name": "pile of poo",
			"shortname": ":poop:",
			"category": "people",
			"emoji_order": "575",
			"aliases": [
				":shit:",
				":hankey:",
				":poo:"
			],
			"aliases_ascii": [],
			"keywords": [
				"poop",
				"shit",
				"shitface",
				"turd",
				"poo"
			]
		},
		"japanese_goblin": {
			"unicode": "1F47A",
			"unicode_alternates": [],
			"name": "japanese goblin",
			"shortname": ":japanese_goblin:",
			"category": "people",
			"emoji_order": "570",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"evil",
				"mask",
				"red",
				"japanese",
				"tengu",
				"supernatural",
				"avian",
				"demon",
				"goblin",
				"mask",
				"theater",
				"nose",
				"frown",
				"mustache",
				"anger",
				"frustration"
			]
		},
		"japanese_ogre": {
			"unicode": "1F479",
			"unicode_alternates": [],
			"name": "japanese ogre",
			"shortname": ":japanese_ogre:",
			"category": "people",
			"emoji_order": "565",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"monster",
				"japanese",
				"oni",
				"demon",
				"troll",
				"ogre",
				"folklore",
				"monster",
				"devil",
				"mask",
				"theater",
				"horns",
				"teeth"
			]
		},
		"ghost": {
			"unicode": "1F47B",
			"unicode_alternates": [],
			"name": "ghost",
			"shortname": ":ghost:",
			"category": "people",
			"emoji_order": "560",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"halloween"
			]
		},
		"santa": {
			"unicode": "1F385",
			"unicode_alternates": [],
			"name": "father christmas",
			"shortname": ":santa:",
			"category": "people",
			"emoji_order": "555",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"christmas",
				"father christmas",
				"festival",
				"male",
				"man",
				"xmas",
				"santa",
				"saint nick",
				"jolly",
				"ho ho ho",
				"north pole",
				"presents",
				"gifts",
				"naughty",
				"nice",
				"sleigh",
				"father",
				"christmas",
				"holiday"
			]
		},
		"angel": {
			"unicode": "1F47C",
			"unicode_alternates": [],
			"name": "baby angel",
			"shortname": ":angel:",
			"category": "people",
			"emoji_order": "550",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"baby",
				"angel",
				"halo",
				"cupid",
				"wings",
				"halo",
				"heaven",
				"wings",
				"jesus"
			]
		},
		"guardsman": {
			"unicode": "1F482",
			"unicode_alternates": [],
			"name": "guardsman",
			"shortname": ":guardsman:",
			"category": "people",
			"emoji_order": "545",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"british",
				"gb",
				"male",
				"man",
				"uk",
				"guardsman",
				"guard",
				"bearskin",
				"hat",
				"british",
				"queen",
				"ceremonial",
				"military"
			]
		},
		"princess": {
			"unicode": "1F478",
			"unicode_alternates": [],
			"name": "princess",
			"shortname": ":princess:",
			"category": "people",
			"emoji_order": "540",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blond",
				"crown",
				"female",
				"girl",
				"woman",
				"princess",
				"royal",
				"royalty",
				"king",
				"queen",
				"daughter",
				"disney",
				"high-maintenance"
			]
		},
		"construction_worker": {
			"unicode": "1F477",
			"unicode_alternates": [],
			"name": "construction worker",
			"shortname": ":construction_worker:",
			"category": "people",
			"emoji_order": "535",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"human",
				"male",
				"man",
				"wip"
			]
		},
		"cop": {
			"unicode": "1F46E",
			"unicode_alternates": [],
			"name": "police officer",
			"shortname": ":cop:",
			"category": "people",
			"emoji_order": "530",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"arrest",
				"enforcement",
				"law",
				"man",
				"police"
			]
		},
		"older_woman": {
			"unicode": "1F475",
			"unicode_alternates": [],
			"name": "older woman",
			"shortname": ":older_woman:",
			"category": "people",
			"emoji_order": "525",
			"aliases": [
				":grandma:"
			],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girl",
				"women",
				"grandma",
				"grandmother"
			]
		},
		"older_man": {
			"unicode": "1F474",
			"unicode_alternates": [],
			"name": "older man",
			"shortname": ":older_man:",
			"category": "people",
			"emoji_order": "520",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"human",
				"male",
				"men"
			]
		},
		"man_with_turban": {
			"unicode": "1F473",
			"unicode_alternates": [],
			"name": "man with turban",
			"shortname": ":man_with_turban:",
			"category": "people",
			"emoji_order": "515",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"male",
				"turban",
				"headdress",
				"headwear",
				"pagri",
				"india",
				"indian",
				"mummy",
				"wisdom",
				"peace"
			]
		},
		"man_with_gua_pi_mao": {
			"unicode": "1F472",
			"unicode_alternates": [],
			"name": "man with gua pi mao",
			"shortname": ":man_with_gua_pi_mao:",
			"category": "people",
			"emoji_order": "510",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"boy",
				"male",
				"skullcap",
				"chinese",
				"asian",
				"qing"
			]
		},
		"person_with_blond_hair": {
			"unicode": "1F471",
			"unicode_alternates": [],
			"name": "person with blond hair",
			"shortname": ":person_with_blond_hair:",
			"category": "people",
			"emoji_order": "505",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"male",
				"man",
				"blonde",
				"young",
				"western",
				"westerner",
				"occidental"
			]
		},
		"bride_with_veil": {
			"unicode": "1F470",
			"unicode_alternates": [],
			"name": "bride with veil",
			"shortname": ":bride_with_veil:",
			"category": "people",
			"emoji_order": "500",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"couple",
				"marriage",
				"wedding",
				"bride",
				"wedding",
				"planning",
				"veil",
				"gown",
				"dress",
				"engagement",
				"white"
			]
		},
		"dancers": {
			"unicode": "1F46F",
			"unicode_alternates": [],
			"name": "woman with bunny ears",
			"shortname": ":dancers:",
			"category": "people",
			"emoji_order": "495",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bunny",
				"female",
				"girls",
				"women",
				"dancing",
				"dancers",
				"showgirl",
				"playboy",
				"costume",
				"bunny",
				"cancan"
			]
		},
		"two_women_holding_hands": {
			"unicode": "1F46D",
			"unicode_alternates": [],
			"name": "two women holding hands",
			"shortname": ":two_women_holding_hands:",
			"category": "people",
			"emoji_order": "490",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"couple",
				"female",
				"friends",
				"like",
				"love",
				"women",
				"hands",
				"girlfriends",
				"friends",
				"sisters",
				"mother",
				"daughter",
				"gay",
				"homosexual",
				"couple",
				"unity"
			]
		},
		"two_men_holding_hands": {
			"unicode": "1F46C",
			"unicode_alternates": [],
			"name": "two men holding hands",
			"shortname": ":two_men_holding_hands:",
			"category": "people",
			"emoji_order": "485",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bromance",
				"couple",
				"friends",
				"like",
				"love",
				"men",
				"gay",
				"homosexual",
				"friends",
				"hands",
				"holding",
				"team",
				"unity"
			]
		},
		"couple": {
			"unicode": "1F46B",
			"unicode_alternates": [],
			"name": "man and woman holding hands",
			"shortname": ":couple:",
			"category": "people",
			"emoji_order": "480",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"date",
				"dating",
				"human",
				"like",
				"love",
				"marriage",
				"people",
				"valentines"
			]
		},
		"family_mmgg": {
			"unicode": "1F468-1F468-1F467-1F467",
			"unicode_alternates": [
				"1F468-200D-1F468-200D-1F467-200D-1F467"
			],
			"name": "family(man,man,girl,girl)",
			"shortname": ":family_mmgg:",
			"category": "people",
			"emoji_order": "475",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mmbb": {
			"unicode": "1F468-1F468-1F466-1F466",
			"unicode_alternates": [
				"1F468-200D-1F468-200D-1F466-200D-1F466"
			],
			"name": "family(man,man,boy,boy)",
			"shortname": ":family_mmbb:",
			"category": "people",
			"emoji_order": "470",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mmgb": {
			"unicode": "1F468-1F468-1F467-1F466",
			"unicode_alternates": [
				"1F468-200D-1F468-200D-1F467"
			],
			"name": "family(man,man,girl,boy)",
			"shortname": ":family_mmgb:",
			"category": "people",
			"emoji_order": "465",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mmg": {
			"unicode": "1F468-1F468-1F467",
			"unicode_alternates": [
				"1F468-200D-1F468-200D-1F467"
			],
			"name": "family(man,man,girl)",
			"shortname": ":family_mmg:",
			"category": "people",
			"emoji_order": "460",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mmb": {
			"unicode": "1F468-1F468-1F466",
			"unicode_alternates": [
				"1F468-200D-1F468-200D-1F466"
			],
			"name": "family(man,man,boy)",
			"shortname": ":family_mmb:",
			"category": "people",
			"emoji_order": "455",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_wwgg": {
			"unicode": "1F469-1F469-1F467-1F467",
			"unicode_alternates": [
				"1F469-200D-1F469-200D-1F467-200D-1F467"
			],
			"name": "family(woman,woman,girl,girl)",
			"shortname": ":family_wwgg:",
			"category": "people",
			"emoji_order": "450",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_wwbb": {
			"unicode": "1F469-1F469-1F466-1F466",
			"unicode_alternates": [
				"1F469-200D-1F469-200D-1F466-200D-1F466"
			],
			"name": "family(woman,woman,boy,boy)",
			"shortname": ":family_wwbb:",
			"category": "people",
			"emoji_order": "445",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_wwgb": {
			"unicode": "1F469-1F469-1F467-1F466",
			"unicode_alternates": [
				"1F469-200D-1F469-200D-1F467-200D-1F466"
			],
			"name": "family(woman,woman,girl,boy)",
			"shortname": ":family_wwgb:",
			"category": "people",
			"emoji_order": "440",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_wwg": {
			"unicode": "1F469-1F469-1F467",
			"unicode_alternates": [
				"1F469-200D-1F469-200D-1F467"
			],
			"name": "family(woman,woman,girl)",
			"shortname": ":family_wwg:",
			"category": "people",
			"emoji_order": "435",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_wwb": {
			"unicode": "1F469-1F469-1F466",
			"unicode_alternates": [
				"1F469-200D-1F469-200D-1F466"
			],
			"name": "family(woman,woman,boy)",
			"shortname": ":family_wwb:",
			"category": "people",
			"emoji_order": "430",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mwgg": {
			"unicode": "1F468-1F469-1F467-1F467",
			"unicode_alternates": [
				"1F468-200D-1F469-200D-1F467-200D-1F467"
			],
			"name": "family(man,woman,girl,girl)",
			"shortname": ":family_mwgg:",
			"category": "people",
			"emoji_order": "425",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mwbb": {
			"unicode": "1F468-1F469-1F466-1F466",
			"unicode_alternates": [
				"1F468-200D-1F469-200D-1F466-200D-1F466"
			],
			"name": "family(man,woman,boy,boy)",
			"shortname": ":family_mwbb:",
			"category": "people",
			"emoji_order": "420",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mwgb": {
			"unicode": "1F468-1F469-1F467-1F466",
			"unicode_alternates": [
				"1F468-200D-1F469-200D-1F467-200D-1F466"
			],
			"name": "family(man,woman,girl,boy)",
			"shortname": ":family_mwgb:",
			"category": "people",
			"emoji_order": "415",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family_mwg": {
			"unicode": "1F468-1F469-1F467",
			"unicode_alternates": [
				"1F468-200D-1F469-200D-1F467"
			],
			"name": "family(man,woman,girl)",
			"shortname": ":family_mwg:",
			"category": "people",
			"emoji_order": "410",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": []
		},
		"family": {
			"unicode": "1F46A",
			"unicode_alternates": [],
			"name": "family",
			"shortname": ":family:",
			"category": "people",
			"emoji_order": "405",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"child",
				"dad",
				"father",
				"home",
				"mom",
				"mother",
				"parents",
				"family",
				"mother",
				"father",
				"child",
				"girl",
				"boy",
				"group",
				"unit"
			]
		},
		"woman": {
			"unicode": "1F469",
			"unicode_alternates": [],
			"name": "woman",
			"shortname": ":woman:",
			"category": "people",
			"emoji_order": "400",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"girls"
			]
		},
		"man": {
			"unicode": "1F468",
			"unicode_alternates": [],
			"name": "man",
			"shortname": ":man:",
			"category": "people",
			"emoji_order": "395",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"classy",
				"dad",
				"father",
				"guy",
				"mustashe"
			]
		},
		"girl": {
			"unicode": "1F467",
			"unicode_alternates": [],
			"name": "girl",
			"shortname": ":girl:",
			"category": "people",
			"emoji_order": "390",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"female",
				"woman"
			]
		},
		"boy": {
			"unicode": "1F466",
			"unicode_alternates": [],
			"name": "boy",
			"shortname": ":boy:",
			"category": "people",
			"emoji_order": "385",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"guy",
				"male",
				"man"
			]
		},
		"baby": {
			"unicode": "1F476",
			"unicode_alternates": [],
			"name": "baby",
			"shortname": ":baby:",
			"category": "people",
			"emoji_order": "380",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"boy",
				"child",
				"infant"
			]
		},
		"spy": {
			"unicode": "1F575",
			"unicode_alternates": [],
			"name": "sleuth or spy",
			"shortname": ":spy:",
			"category": "people",
			"emoji_order": "375",
			"aliases": [
				":sleuth_or_spy:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"levitate": {
			"unicode": "1F574",
			"unicode_alternates": [],
			"name": "man in business suit levitating",
			"shortname": ":levitate:",
			"category": "people",
			"emoji_order": "370",
			"aliases": [
				":man_in_business_suit_levitating:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"busts_in_silhouette": {
			"unicode": "1F465",
			"unicode_alternates": [],
			"name": "busts in silhouette",
			"shortname": ":busts_in_silhouette:",
			"category": "people",
			"emoji_order": "365",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"group",
				"human",
				"man",
				"person",
				"team",
				"user",
				"silhouette",
				"silhouettes",
				"people",
				"user",
				"members",
				"accounts",
				"relationship",
				"shadow"
			]
		},
		"bust_in_silhouette": {
			"unicode": "1F464",
			"unicode_alternates": [],
			"name": "bust in silhouette",
			"shortname": ":bust_in_silhouette:",
			"category": "people",
			"emoji_order": "360",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"human",
				"man",
				"person",
				"user",
				"silhouette",
				"person",
				"user",
				"member",
				"account",
				"guest",
				"icon",
				"avatar",
				"profile",
				"me",
				"myself",
				"i"
			]
		},
		"footprints": {
			"unicode": "1F463",
			"unicode_alternates": [],
			"name": "footprints",
			"shortname": ":footprints:",
			"category": "people",
			"emoji_order": "355",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"feet"
			]
		},
		"scream_cat": {
			"unicode": "1F640",
			"unicode_alternates": [],
			"name": "weary cat face",
			"shortname": ":scream_cat:",
			"category": "people",
			"emoji_order": "350",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"munch",
				"weary",
				"sleepy",
				"tired",
				"tiredness",
				"study",
				"finals",
				"school",
				"exhausted",
				"scream",
				"painting",
				"artist"
			]
		},
		"crying_cat_face": {
			"unicode": "1F63F",
			"unicode_alternates": [],
			"name": "crying cat face",
			"shortname": ":crying_cat_face:",
			"category": "people",
			"emoji_order": "345",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"sad",
				"tears",
				"weep",
				"cry",
				"cat",
				"sob",
				"tears",
				"sad",
				"melancholy",
				"morn",
				"somber",
				"hurt"
			]
		},
		"pouting_cat": {
			"unicode": "1F63E",
			"unicode_alternates": [],
			"name": "pouting cat face",
			"shortname": ":pouting_cat:",
			"category": "people",
			"emoji_order": "340",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"pout",
				"annoyed",
				"miffed",
				"glower",
				"frown"
			]
		},
		"kissing_cat": {
			"unicode": "1F63D",
			"unicode_alternates": [],
			"name": "kissing cat face with closed eyes",
			"shortname": ":kissing_cat:",
			"category": "people",
			"emoji_order": "335",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"passion",
				"kiss",
				"puckered",
				"heart",
				"love"
			]
		},
		"smirk_cat": {
			"unicode": "1F63C",
			"unicode_alternates": [],
			"name": "cat face with wry smile",
			"shortname": ":smirk_cat:",
			"category": "people",
			"emoji_order": "330",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"smirk",
				"smirking",
				"wry",
				"confident",
				"confidence"
			]
		},
		"heart_eyes_cat": {
			"unicode": "1F63B",
			"unicode_alternates": [],
			"name": "smiling cat face with heart-shaped eyes",
			"shortname": ":heart_eyes_cat:",
			"category": "people",
			"emoji_order": "325",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"animal",
				"cats",
				"like",
				"love",
				"valentines",
				"lovestruck",
				"love",
				"heart"
			]
		},
		"smiley_cat": {
			"unicode": "1F63A",
			"unicode_alternates": [],
			"name": "smiling cat face with open mouth",
			"shortname": ":smiley_cat:",
			"category": "people",
			"emoji_order": "320",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"happy",
				"smile",
				"smiley",
				"cat",
				"happy"
			]
		},
		"joy_cat": {
			"unicode": "1F639",
			"unicode_alternates": [],
			"name": "cat face with tears of joy",
			"shortname": ":joy_cat:",
			"category": "people",
			"emoji_order": "315",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"haha",
				"happy",
				"tears",
				"happy",
				"tears",
				"cry",
				"joy"
			]
		},
		"smile_cat": {
			"unicode": "1F638",
			"unicode_alternates": [],
			"name": "grinning cat face with smiling eyes",
			"shortname": ":smile_cat:",
			"category": "people",
			"emoji_order": "310",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"animal",
				"cats",
				"cat",
				"smile",
				"grin",
				"grinning"
			]
		},
		"slight_smile": {
			"unicode": "1F642",
			"unicode_alternates": [],
			"name": "slightly smiling face",
			"shortname": ":slight_smile:",
			"category": "people",
			"emoji_order": "305",
			"aliases": [
				":slightly_smiling_face:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"slight_frown": {
			"unicode": "1F641",
			"unicode_alternates": [],
			"name": "slightly frowning face",
			"shortname": ":slight_frown:",
			"category": "people",
			"emoji_order": "300",
			"aliases": [
				":slightly_frowning_face:"
			],
			"aliases_ascii": [],
			"keywords": []
		},
		"mask": {
			"unicode": "1F637",
			"unicode_alternates": [],
			"name": "face with medical mask",
			"shortname": ":mask:",
			"category": "people",
			"emoji_order": "295",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"ill",
				"sick",
				"sick",
				"virus",
				"flu",
				"medical",
				"mask"
			]
		},
		"no_mouth": {
			"unicode": "1F636",
			"unicode_alternates": [],
			"name": "face without mouth",
			"shortname": ":no_mouth:",
			"category": "people",
			"emoji_order": "290",
			"aliases": [],
			"aliases_ascii": [
				":-X",
				":X",
				":-#",
				":#",
				"=X",
				"=x",
				":x",
				":-x",
				"=#"
			],
			"keywords": [
				"face",
				"hellokitty",
				"mouth",
				"silent",
				"vapid"
			]
		},
		"dizzy_face": {
			"unicode": "1F635",
			"unicode_alternates": [],
			"name": "dizzy face",
			"shortname": ":dizzy_face:",
			"category": "people",
			"emoji_order": "285",
			"aliases": [],
			"aliases_ascii": [
				"#-)",
				"#)",
				"%-)",
				"%)",
				"X)",
				"X-)"
			],
			"keywords": [
				"dizzy",
				"drunk",
				"inebriated",
				"face",
				"spent",
				"unconscious",
				"xox"
			]
		},
		"sleeping": {
			"unicode": "1F634",
			"unicode_alternates": [],
			"name": "sleeping face",
			"shortname": ":sleeping:",
			"category": "people",
			"emoji_order": "280",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"sleepy",
				"tired",
				"sleep",
				"sleepy",
				"sleeping",
				"snore"
			]
		},
		"flushed": {
			"unicode": "1F633",
			"unicode_alternates": [],
			"name": "flushed face",
			"shortname": ":flushed:",
			"category": "people",
			"emoji_order": "275",
			"aliases": [],
			"aliases_ascii": [
				":$",
				"=$"
			],
			"keywords": [
				"blush",
				"face",
				"flattered",
				"flush",
				"blush",
				"red",
				"pink",
				"cheeks",
				"shy"
			]
		},
		"astonished": {
			"unicode": "1F632",
			"unicode_alternates": [],
			"name": "astonished face",
			"shortname": ":astonished:",
			"category": "people",
			"emoji_order": "270",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"xox",
				"shocked",
				"surprise",
				"astonished"
			]
		},
		"scream": {
			"unicode": "1F631",
			"unicode_alternates": [],
			"name": "face screaming in fear",
			"shortname": ":scream:",
			"category": "people",
			"emoji_order": "265",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"munch",
				"scream",
				"painting",
				"artist",
				"alien"
			]
		},
		"cold_sweat": {
			"unicode": "1F630",
			"unicode_alternates": [],
			"name": "face with open mouth and cold sweat",
			"shortname": ":cold_sweat:",
			"category": "people",
			"emoji_order": "260",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"nervous",
				"sweat",
				"exasperated",
				"frustrated"
			]
		},
		"hushed": {
			"unicode": "1F62F",
			"unicode_alternates": [],
			"name": "hushed face",
			"shortname": ":hushed:",
			"category": "people",
			"emoji_order": "255",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"woo",
				"quiet",
				"hush",
				"whisper",
				"silent"
			]
		},
		"open_mouth": {
			"unicode": "1F62E",
			"unicode_alternates": [],
			"name": "face with open mouth",
			"shortname": ":open_mouth:",
			"category": "people",
			"emoji_order": "250",
			"aliases": [],
			"aliases_ascii": [
				":-O",
				":O",
				":-o",
				":o",
				"O_O",
				">:O"
			],
			"keywords": [
				"face",
				"impressed",
				"mouth",
				"open",
				"jaw",
				"gapping",
				"surprise",
				"wow"
			]
		},
		"sob": {
			"unicode": "1F62D",
			"unicode_alternates": [],
			"name": "loudly crying face",
			"shortname": ":sob:",
			"category": "people",
			"emoji_order": "245",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"cry",
				"face",
				"sad",
				"tears",
				"upset",
				"cry",
				"sob",
				"tears",
				"sad",
				"melancholy",
				"morn",
				"somber",
				"hurt"
			]
		},
		"grimacing": {
			"unicode": "1F62C",
			"unicode_alternates": [],
			"name": "grimacing face",
			"shortname": ":grimacing:",
			"category": "people",
			"emoji_order": "240",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"grimace",
				"teeth",
				"grimace",
				"disapprove",
				"pain"
			]
		},
		"tired_face": {
			"unicode": "1F62B",
			"unicode_alternates": [],
			"name": "tired face",
			"shortname": ":tired_face:",
			"category": "people",
			"emoji_order": "235",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"frustrated",
				"sick",
				"upset",
				"whine",
				"exhausted",
				"sleepy",
				"tired"
			]
		},
		"sleepy": {
			"unicode": "1F62A",
			"unicode_alternates": [],
			"name": "sleepy face",
			"shortname": ":sleepy:",
			"category": "people",
			"emoji_order": "230",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"rest",
				"tired",
				"sleepy",
				"tired",
				"exhausted"
			]
		},
		"weary": {
			"unicode": "1F629",
			"unicode_alternates": [],
			"name": "weary face",
			"shortname": ":weary:",
			"category": "people",
			"emoji_order": "225",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"frustrated",
				"sad",
				"sleepy",
				"tired",
				"weary",
				"sleepy",
				"tired",
				"tiredness",
				"study",
				"finals",
				"school",
				"exhausted"
			]
		},
		"fearful": {
			"unicode": "1F628",
			"unicode_alternates": [],
			"name": "fearful face",
			"shortname": ":fearful:",
			"category": "people",
			"emoji_order": "220",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"nervous",
				"oops",
				"scared",
				"terrified",
				"fear",
				"fearful",
				"scared",
				"frightened"
			]
		},
		"anguished": {
			"unicode": "1F627",
			"unicode_alternates": [],
			"name": "anguished face",
			"shortname": ":anguished:",
			"category": "people",
			"emoji_order": "215",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"nervous",
				"stunned",
				"pain",
				"anguish",
				"ouch",
				"misery",
				"distress",
				"grief"
			]
		},
		"frowning": {
			"unicode": "1F626",
			"unicode_alternates": [],
			"name": "frowning face with open mouth",
			"shortname": ":frowning:",
			"category": "people",
			"emoji_order": "210",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"aw",
				"face",
				"frown",
				"sad",
				"pout",
				"sulk",
				"glower"
			]
		},
		"disappointed_relieved": {
			"unicode": "1F625",
			"unicode_alternates": [],
			"name": "disappointed but relieved face",
			"shortname": ":disappointed_relieved:",
			"category": "people",
			"emoji_order": "205",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"nervous",
				"phew",
				"sweat",
				"disappoint",
				"relief"
			]
		},
		"triumph": {
			"unicode": "1F624",
			"unicode_alternates": [],
			"name": "face with look of triumph",
			"shortname": ":triumph:",
			"category": "people",
			"emoji_order": "200",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"gas",
				"phew",
				"triumph",
				"steam",
				"breath"
			]
		},
		"persevere": {
			"unicode": "1F623",
			"unicode_alternates": [],
			"name": "persevering face",
			"shortname": ":persevere:",
			"category": "people",
			"emoji_order": "195",
			"aliases": [],
			"aliases_ascii": [
				">.<"
			],
			"keywords": [
				"endure",
				"persevere",
				"face",
				"no",
				"sick",
				"upset"
			]
		},
		"cry": {
			"unicode": "1F622",
			"unicode_alternates": [],
			"name": "crying face",
			"shortname": ":cry:",
			"category": "people",
			"emoji_order": "190",
			"aliases": [],
			"aliases_ascii": [
				":'(",
				":'-(",
				";(",
				";-("
			],
			"keywords": [
				"face",
				"sad",
				"sad",
				"cry",
				"tear",
				"weep",
				"tears"
			]
		},
		"rage": {
			"unicode": "1F621",
			"unicode_alternates": [],
			"name": "pouting face",
			"shortname": ":rage:",
			"category": "people",
			"emoji_order": "185",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"angry",
				"despise",
				"hate",
				"mad",
				"pout",
				"anger",
				"rage",
				"irate"
			]
		},
		"angry": {
			"unicode": "1F620",
			"unicode_alternates": [],
			"name": "angry face",
			"shortname": ":angry:",
			"category": "people",
			"emoji_order": "180",
			"aliases": [],
			"aliases_ascii": [
				">:(",
				">:-(",
				":@"
			],
			"keywords": [
				"angry",
				"livid",
				"mad",
				"vexed",
				"irritated",
				"annoyed",
				"face",
				"frustrated",
				"mad"
			]
		},
		"worried": {
			"unicode": "1F61F",
			"unicode_alternates": [],
			"name": "worried face",
			"shortname": ":worried:",
			"category": "people",
			"emoji_order": "175",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"concern",
				"face",
				"nervous",
				"worried",
				"anxious",
				"distressed",
				"nervous",
				"tense"
			]
		},
		"disappointed": {
			"unicode": "1F61E",
			"unicode_alternates": [],
			"name": "disappointed face",
			"shortname": ":disappointed:",
			"category": "people",
			"emoji_order": "170",
			"aliases": [],
			"aliases_ascii": [
				">:[",
				":-(",
				":(",
				":-[",
				":[",
				"=("
			],
			"keywords": [
				"disappointed",
				"disappoint",
				"frown",
				"depressed",
				"discouraged",
				"face",
				"sad",
				"upset"
			]
		},
		"stuck_out_tongue_closed_eyes": {
			"unicode": "1F61D",
			"unicode_alternates": [],
			"name": "face with stuck-out tongue and tightly-closed eyes",
			"shortname": ":stuck_out_tongue_closed_eyes:",
			"category": "people",
			"emoji_order": "165",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"mischievous",
				"playful",
				"prank",
				"tongue",
				"kidding",
				"silly",
				"playful",
				"ecstatic"
			]
		},
		"stuck_out_tongue_winking_eye": {
			"unicode": "1F61C",
			"unicode_alternates": [],
			"name": "face with stuck-out tongue and winking eye",
			"shortname": ":stuck_out_tongue_winking_eye:",
			"category": "people",
			"emoji_order": "160",
			"aliases": [],
			"aliases_ascii": [
				">:P",
				"X-P",
				"x-p"
			],
			"keywords": [
				"childish",
				"face",
				"mischievous",
				"playful",
				"prank",
				"tongue",
				"wink",
				"winking",
				"kidding",
				"silly",
				"playful",
				"crazy"
			]
		},
		"stuck_out_tongue": {
			"unicode": "1F61B",
			"unicode_alternates": [],
			"name": "face with stuck-out tongue",
			"shortname": ":stuck_out_tongue:",
			"category": "people",
			"emoji_order": "155",
			"aliases": [],
			"aliases_ascii": [
				":P",
				":-P",
				"=P",
				":-p",
				":p",
				"=p",
				":-Þ",
				":Þ",
				":þ",
				":-þ",
				":-b",
				":b",
				"d:"
			],
			"keywords": [
				"childish",
				"face",
				"mischievous",
				"playful",
				"prank",
				"tongue",
				"silly",
				"playful",
				"cheeky"
			]
		},
		"kissing_closed_eyes": {
			"unicode": "1F61A",
			"unicode_alternates": [],
			"name": "kissing face with closed eyes",
			"shortname": ":kissing_closed_eyes:",
			"category": "people",
			"emoji_order": "150",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"face",
				"infatuation",
				"like",
				"love",
				"valentines",
				"kissing",
				"kiss",
				"passion",
				"puckered",
				"heart",
				"love",
				"smooch"
			]
		},
		"kissing_smiling_eyes": {
			"unicode": "1F619",
			"unicode_alternates": [],
			"name": "kissing face with smiling eyes",
			"shortname": ":kissing_smiling_eyes:",
			"category": "people",
			"emoji_order": "145",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"face",
				"infatuation",
				"valentines",
				"kissing",
				"kiss",
				"smile",
				"pucker",
				"lips",
				"smooch"
			]
		},
		"kissing_heart": {
			"unicode": "1F618",
			"unicode_alternates": [],
			"name": "face throwing a kiss",
			"shortname": ":kissing_heart:",
			"category": "people",
			"emoji_order": "140",
			"aliases": [],
			"aliases_ascii": [
				":*",
				":-*",
				"=*",
				":^*"
			],
			"keywords": [
				"affection",
				"face",
				"infatuation",
				"kiss",
				"blowing kiss",
				"heart",
				"love",
				"lips",
				"like",
				"love",
				"valentines"
			]
		},
		"kissing": {
			"unicode": "1F617",
			"unicode_alternates": [],
			"name": "kissing face",
			"shortname": ":kissing:",
			"category": "people",
			"emoji_order": "135",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"3",
				"face",
				"infatuation",
				"like",
				"love",
				"valentines",
				"kissing",
				"kiss",
				"pucker",
				"lips",
				"smooch"
			]
		},
		"confounded": {
			"unicode": "1F616",
			"unicode_alternates": [],
			"name": "confounded face",
			"shortname": ":confounded:",
			"category": "people",
			"emoji_order": "130",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"confused",
				"face",
				"sick",
				"unwell",
				"confound",
				"amaze",
				"perplex",
				"puzzle",
				"mystify"
			]
		},
		"confused": {
			"unicode": "1F615",
			"unicode_alternates": [],
			"name": "confused face",
			"shortname": ":confused:",
			"category": "people",
			"emoji_order": "125",
			"aliases": [],
			"aliases_ascii": [
				">:\\",
				">:/",
				":-/",
				":-.",
				":/",
				":\\",
				"=/",
				"=\\",
				":L",
				"=L"
			],
			"keywords": [
				"confused",
				"confuse",
				"daze",
				"perplex",
				"puzzle",
				"indifference",
				"skeptical",
				"undecided",
				"uneasy",
				"hesitant"
			]
		},
		"pensive": {
			"unicode": "1F614",
			"unicode_alternates": [],
			"name": "pensive face",
			"shortname": ":pensive:",
			"category": "people",
			"emoji_order": "120",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"okay",
				"sad",
				"pensive",
				"thoughtful",
				"think",
				"reflective",
				"wistful",
				"meditate",
				"serious"
			]
		},
		"sweat": {
			"unicode": "1F613",
			"unicode_alternates": [],
			"name": "face with cold sweat",
			"shortname": ":sweat:",
			"category": "people",
			"emoji_order": "115",
			"aliases": [],
			"aliases_ascii": [
				"':(",
				"':-(",
				"'=("
			],
			"keywords": [
				"cold",
				"sweat",
				"sick",
				"anxious",
				"worried",
				"clammy",
				"diaphoresis",
				"face",
				"hot"
			]
		},
		"unamused": {
			"unicode": "1F612",
			"unicode_alternates": [],
			"name": "unamused face",
			"shortname": ":unamused:",
			"category": "people",
			"emoji_order": "110",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"bored",
				"face",
				"indifference",
				"serious",
				"straight face",
				"unamused",
				"not amused",
				"depressed",
				"unhappy",
				"disapprove",
				"lame"
			]
		},
		"expressionless": {
			"unicode": "1F611",
			"unicode_alternates": [],
			"name": "expressionless face",
			"shortname": ":expressionless:",
			"category": "people",
			"emoji_order": "105",
			"aliases": [],
			"aliases_ascii": [
				"-_-",
				"-__-",
				"-___-"
			],
			"keywords": [
				"expressionless",
				"blank",
				"void",
				"vapid",
				"without expression",
				"face",
				"indifferent"
			]
		},
		"neutral_face": {
			"unicode": "1F610",
			"unicode_alternates": [],
			"name": "neutral face",
			"shortname": ":neutral_face:",
			"category": "people",
			"emoji_order": "100",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"indifference",
				"neutral",
				"objective",
				"impartial",
				"blank"
			]
		},
		"smirk": {
			"unicode": "1F60F",
			"unicode_alternates": [],
			"name": "smirking face",
			"shortname": ":smirk:",
			"category": "people",
			"emoji_order": "95",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"mean",
				"prank",
				"smile",
				"smug",
				"smirking",
				"smirk",
				"smug",
				"smile",
				"half-smile",
				"conceited"
			]
		},
		"sunglasses": {
			"unicode": "1F60E",
			"unicode_alternates": [],
			"name": "smiling face with sunglasses",
			"shortname": ":sunglasses:",
			"category": "people",
			"emoji_order": "90",
			"aliases": [],
			"aliases_ascii": [
				"B-)",
				"B)",
				"8)",
				"8-)",
				"B-D",
				"8-D"
			],
			"keywords": [
				"cool",
				"face",
				"smiling",
				"sunglasses",
				"sun",
				"glasses",
				"sunny",
				"cool",
				"smooth"
			]
		},
		"heart_eyes": {
			"unicode": "1F60D",
			"unicode_alternates": [],
			"name": "smiling face with heart-shaped eyes",
			"shortname": ":heart_eyes:",
			"category": "people",
			"emoji_order": "85",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"affection",
				"crush",
				"face",
				"infatuation",
				"like",
				"love",
				"valentines",
				"smiling",
				"heart",
				"lovestruck",
				"love",
				"flirt",
				"smile",
				"heart-shaped"
			]
		},
		"relieved": {
			"unicode": "1F60C",
			"unicode_alternates": [],
			"name": "relieved face",
			"shortname": ":relieved:",
			"category": "people",
			"emoji_order": "80",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"happiness",
				"massage",
				"phew",
				"relaxed",
				"relieved",
				"satisfied",
				"phew",
				"relief"
			]
		},
		"yum": {
			"unicode": "1F60B",
			"unicode_alternates": [],
			"name": "face savouring delicious food",
			"shortname": ":yum:",
			"category": "people",
			"emoji_order": "75",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"happy",
				"joy",
				"smile",
				"tongue",
				"delicious",
				"savoring",
				"food",
				"eat",
				"yummy",
				"yum",
				"tasty",
				"savory"
			]
		},
		"relaxed": {
			"unicode": "263A",
			"unicode_alternates": [
				"263A-FE0F"
			],
			"name": "white smiling face",
			"shortname": ":relaxed:",
			"category": "people",
			"emoji_order": "70",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"blush",
				"face",
				"happiness",
				"massage",
				"smile"
			]
		},
		"blush": {
			"unicode": "1F60A",
			"unicode_alternates": [],
			"name": "smiling face with smiling eyes",
			"shortname": ":blush:",
			"category": "people",
			"emoji_order": "65",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"crush",
				"embarrassed",
				"face",
				"flushed",
				"happy",
				"shy",
				"smile",
				"smiling",
				"smile",
				"smiley"
			]
		},
		"wink": {
			"unicode": "1F609",
			"unicode_alternates": [],
			"name": "winking face",
			"shortname": ":wink:",
			"category": "people",
			"emoji_order": "60",
			"aliases": [],
			"aliases_ascii": [
				";)",
				";-)",
				"*-)",
				"*)",
				";-]",
				";]",
				";D",
				";^)"
			],
			"keywords": [
				"face",
				"happy",
				"mischievous",
				"secret",
				"wink",
				"winking",
				"friendly",
				"joke"
			]
		},
		"imp": {
			"unicode": "1F47F",
			"unicode_alternates": [],
			"name": "imp",
			"shortname": ":imp:",
			"category": "people",
			"emoji_order": "55",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"angry",
				"devil",
				"evil",
				"horns",
				"cute",
				"devil"
			]
		},
		"smiling_imp": {
			"unicode": "1F608",
			"unicode_alternates": [],
			"name": "smiling face with horns",
			"shortname": ":smiling_imp:",
			"category": "people",
			"emoji_order": "50",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"devil",
				"horns",
				"horns",
				"devil",
				"impish",
				"trouble"
			]
		},
		"innocent": {
			"unicode": "1F607",
			"unicode_alternates": [],
			"name": "smiling face with halo",
			"shortname": ":innocent:",
			"category": "people",
			"emoji_order": "45",
			"aliases": [],
			"aliases_ascii": [
				"O:-)",
				"0:-3",
				"0:3",
				"0:-)",
				"0:)",
				"0;^)",
				"O:)",
				"O;-)",
				"O=)",
				"0;-)",
				"O:-3",
				"O:3"
			],
			"keywords": [
				"angel",
				"face",
				"halo",
				"halo",
				"angel",
				"innocent",
				"ring",
				"circle",
				"heaven"
			]
		},
		"laughing": {
			"unicode": "1F606",
			"unicode_alternates": [],
			"name": "smiling face with open mouth and tightly-closed ey",
			"shortname": ":laughing:",
			"category": "people",
			"emoji_order": "40",
			"aliases": [
				":satisfied:"
			],
			"aliases_ascii": [
				">:)",
				">;)",
				">:-)",
				">=)"
			],
			"keywords": [
				"happy",
				"joy",
				"lol",
				"smiling",
				"laughing",
				"laugh"
			]
		},
		"sweat_smile": {
			"unicode": "1F605",
			"unicode_alternates": [],
			"name": "smiling face with open mouth and cold sweat",
			"shortname": ":sweat_smile:",
			"category": "people",
			"emoji_order": "35",
			"aliases": [],
			"aliases_ascii": [
				"':)",
				"':-)",
				"'=)",
				"':D",
				"':-D",
				"'=D"
			],
			"keywords": [
				"face",
				"happy",
				"hot",
				"smiling",
				"cold",
				"sweat",
				"perspiration"
			]
		},
		"smile": {
			"unicode": "1F604",
			"unicode_alternates": [],
			"name": "smiling face with open mouth and smiling eyes",
			"shortname": ":smile:",
			"category": "people",
			"emoji_order": "30",
			"aliases": [],
			"aliases_ascii": [
				":)",
				":-)",
				"=]",
				"=)",
				":]"
			],
			"keywords": [
				"face",
				"funny",
				"haha",
				"happy",
				"joy",
				"laugh",
				"smile",
				"smiley",
				"smiling"
			]
		},
		"smiley": {
			"unicode": "1F603",
			"unicode_alternates": [],
			"name": "smiling face with open mouth",
			"shortname": ":smiley:",
			"category": "people",
			"emoji_order": "25",
			"aliases": [],
			"aliases_ascii": [
				":D",
				":-D",
				"=D"
			],
			"keywords": [
				"face",
				"haha",
				"happy",
				"joy",
				"smiling",
				"smile",
				"smiley"
			]
		},
		"joy": {
			"unicode": "1F602",
			"unicode_alternates": [],
			"name": "face with tears of joy",
			"shortname": ":joy:",
			"category": "people",
			"emoji_order": "20",
			"aliases": [],
			"aliases_ascii": [
				":')",
				":'-)"
			],
			"keywords": [
				"cry",
				"face",
				"haha",
				"happy",
				"tears",
				"tears",
				"cry",
				"joy",
				"happy",
				"weep"
			]
		},
		"grin": {
			"unicode": "1F601",
			"unicode_alternates": [],
			"name": "grinning face with smiling eyes",
			"shortname": ":grin:",
			"category": "people",
			"emoji_order": "15",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"happy",
				"joy",
				"smile",
				"grin",
				"grinning",
				"smiling",
				"smile",
				"smiley"
			]
		},
		"grinning": {
			"unicode": "1F600",
			"unicode_alternates": [],
			"name": "grinning face",
			"shortname": ":grinning:",
			"category": "people",
			"emoji_order": "10",
			"aliases": [],
			"aliases_ascii": [],
			"keywords": [
				"face",
				"happy",
				"joy",
				"smile",
				"grin",
				"grinning",
				"smiling",
				"smile",
				"smiley"
			]
		}
	}

/***/ },
/* 332 */
/***/ function(module, exports) {

	module.exports = require('emojione');

/***/ },
/* 333 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _events = __webpack_require__(8);

	var _events2 = _interopRequireDefault(_events);

	var _ipc = __webpack_require__(176);

	var _ipc2 = _interopRequireDefault(_ipc);

	var _Dispatcher = __webpack_require__(177);

	var _Dispatcher2 = _interopRequireDefault(_Dispatcher);

	exports['default'] = new ((function (_EventEmitter) {
	  _inherits(MarkdownStore, _EventEmitter);

	  function MarkdownStore() {
	    _classCallCheck(this, MarkdownStore);

	    _get(Object.getPrototypeOf(MarkdownStore.prototype), 'constructor', this).call(this);

	    _ipc2['default'].on('render', this.onRender.bind(this));
	    _Dispatcher2['default'].on('searching', this.onSearching.bind(this));
	  }

	  _createClass(MarkdownStore, [{
	    key: 'onRender',
	    value: function onRender(md, dirname) {
	      this.emit('updating', md, dirname);
	    }
	  }, {
	    key: 'onSearching',
	    value: function onSearching(word) {
	      this.emit('searching', word);
	    }
	  }]);

	  return MarkdownStore;
	})(_events2['default']))();
	module.exports = exports['default'];

/***/ },
/* 334 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _react = __webpack_require__(18);

	var _react2 = _interopRequireDefault(_react);

	var _RailStore = __webpack_require__(335);

	var _RailStore2 = _interopRequireDefault(_RailStore);

	var RailComponent = (function (_React$Component) {
	  _inherits(RailComponent, _React$Component);

	  function RailComponent(props) {
	    _classCallCheck(this, RailComponent);

	    _get(Object.getPrototypeOf(RailComponent.prototype), 'constructor', this).call(this, props);
	    this.state = {
	      marks: [],
	      scrollTop: 0
	    };

	    window.addEventListener('resize', this.onResized.bind(this), false);
	    _RailStore2['default'].on('searched', this.onSearched.bind(this));
	    _RailStore2['default'].on('scrolled', this.onScrolled.bind(this));

	    this.action = new ActionCreator();
	  }

	  _createClass(RailComponent, [{
	    key: 'onResized',
	    value: function onResized() {
	      this.forceUpdate();
	    }
	  }, {
	    key: 'onSearched',
	    value: function onSearched(marks) {
	      this.setState({ marks: marks });
	    }
	  }, {
	    key: 'onScrolled',
	    value: function onScrolled(scrollTop) {
	      this.setState({ scrollTop: scrollTop });
	    }
	  }, {
	    key: 'render',
	    value: function render() {
	      var _this = this;

	      return _react2['default'].createElement(
	        'div',
	        { className: 'rail' },
	        this.state.marks.map(function (mark) {
	          var rect = mark.getBoundingClientRect();
	          var style = { top: Math.round(_this.state.scrollTop + rect.top + rect.height / 2 - 1.5) };
	          return _react2['default'].createElement('div', { className: 'mark', style: style });
	        })
	      );
	    }
	  }]);

	  return RailComponent;
	})(_react2['default'].Component);

	exports['default'] = RailComponent;

	var ActionCreator = function ActionCreator() {
	  _classCallCheck(this, ActionCreator);
	};

	module.exports = exports['default'];

/***/ },
/* 335 */
/***/ function(module, exports, __webpack_require__) {

	'use strict';

	Object.defineProperty(exports, '__esModule', {
	  value: true
	});

	var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();

	var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; desc = parent = getter = undefined; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };

	function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }

	function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }

	function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

	var _events = __webpack_require__(8);

	var _events2 = _interopRequireDefault(_events);

	var _Dispatcher = __webpack_require__(177);

	var _Dispatcher2 = _interopRequireDefault(_Dispatcher);

	exports['default'] = new ((function (_EventEmitter) {
	  _inherits(RailStore, _EventEmitter);

	  function RailStore() {
	    _classCallCheck(this, RailStore);

	    _get(Object.getPrototypeOf(RailStore.prototype), 'constructor', this).call(this);

	    _Dispatcher2['default'].on('searched', this.onSearched.bind(this));
	    _Dispatcher2['default'].on('scrolled', this.onScrolled.bind(this));
	  }

	  _createClass(RailStore, [{
	    key: 'onSearched',
	    value: function onSearched(marks) {
	      this.emit('searched', marks);
	    }
	  }, {
	    key: 'onScrolled',
	    value: function onScrolled(scrollTop) {
	      this.emit('scrolled', scrollTop);
	    }
	  }]);

	  return RailStore;
	})(_events2['default']))();
	module.exports = exports['default'];

/***/ }
/******/ ]);